习题77.1已有变量定义和函数调用语句:inta=1,b=–5,c;c=fun(a,b);fun函数的作用是计算两个数之差的绝对值,并将差值返回调用函数,请编写fun函数。Fun(intx,inty){}7.1求两数之差绝对值#includemath.hfun(intx,inty){returnabs(x-y);}main(){inta=1,b=-5,c;c=fun(a,b);printf(|%d-%d|=%d\n,a,b,c);}7.2已有变量定义和函数调用语句:intx=57;isprime(x);函数isprime();用来判断一个整型数a是否为素数,若是素数,函数返回1,否则返回0。请编写isprime函数。isprime(inta){}7.3已有变量定义和函数调用语句inta,b;b=sum(a);函数sum()用以求nkk1,和数作为函数值返回。若a的值为10,经函数sum的计算后,b的值是55。请编写sum函数。Sum(intn){}7.3求∑k#includestdio.hsum(intn){intk,s=0;for(k=1;k=n;k++)s=s+k;returns;}main(){inta,b;printf(Inputa:);scanf(%d,&a);b=sum(a);printf(%c(1,%d)=%d\n,228,a,b);}7.4一函数,输入一行字符,将此字符串中最长的单词输出。7.4输出最长的单词,假设只包含字母和空格,单词间以空格分隔,空格个数不限#includestring.hvoidfun(chara[]){intn,i,j,k=0,len[80],p;charc[80][80],max[80];n=strlen(a);for(i=0;in;i++)if(a[i]!=32)/*a[i]不为空格,说明单词开始了*/{j=0;while(a[i]!=32)/*没有遇到下一个空格,说明单词没有结束*/{c[k][j]=a[i];j++;i++;}/*将单词放入字符串c[k]*/c[k][j]='\0';/*人为加串尾标志*/k++;/*k为下一个单词存入c的行号*/}for(i=0;ik;i++)len[i]=strlen(c[i]);/*求每行字符串的长度*/p=0;for(i=1;ik;i++)if(len[p]len[i])p=i;/*找最长字符串的行号*/printf(Thewordis:%s\n,c[p]);}main(){chara[80];printf(Inputalinestring:);gets(a);fun(a);}7.5一函数,输入一个十六进制数,输出相应的十进制数。7.5十六进制数转换成十进制数#includestdio.h#includectype.hintfun(chara[]){inti,n=0,m;for(i=0;a[i];i++){if(isalpha(a[i]))/*如果a[i]是字母,求出相应的十进制数*/switch(a[i]){case'a':case'A':m=10;break;输入一行字符,以空格分隔,单词只包含字母将每个单词存入字符串数组c求c中最长字符串的行号输出case'b':case'B':m=11;break;case'c':case'C':m=12;break;case'd':case'D':m=13;break;case'e':case'E':m=14;break;case'f':case'F':m=15;break;default:printf(Inputerror!\n);exit(0);/*如果输入了不合法的字母,输出相应的信息*/}elseif(isdigit(a[i]))/*如果a[i]是数字*/m=a[i]-'0';else{printf(Inputerror!\n);exit(0);}/*如果输入了不合法的字符,输出相应的信息*/n=n*16+m;/*将十六进制数转换成十进制数*/}returnn;}main(){chara[80];intn;printf(input:);scanf(%s,a);n=fun(a);printf(output:%d\n,n);}7.6给出年、月、日,计算该日是该年的第几天。#includestdio.hintfun(year,month,day){intn=0,i;n=n+day;/*累加当月的天数*/for(i=month-1;i0;i--)/*累加前面月份的天数*/switch(i){case12:n=n+31;case11:n=n+30;case10:n=n+31;case9:n=n+30;case8:n=n+31;case7:n=n+31;case6:n=n+30;case5:n=n+31;case4:n=n+30;case3:n=n+31;case2:if(year%4==0&&year%100!=0||year%400==0)n=n+28;elsen=n+29;/*根据year判断闰年或平年,进行累加*/case1:n=n+31;}returnn;/*返回天数*/}main(){intyear,month,day;printf(Inputyear,month,day:);scanf(%d%d%d,&year,&month,&day);printf(%d.%d.%disNo.%dofayear.\n,year,month,day,fun(year,month,day));}7.7定义一个函数digit(n,k),它回送整数n的从右边开始数第k个数字的值。例如:digit(15327,4)=5digit(289,5)=07.7回送第k个数字#includestdio.hintfun(longn,intk){inti,m;for(i=1;i=k;i++){m=n%10;/*从右边分离出第i个数字*/n=n/10;/*为下一次分离作准备*/}returnm;/*返回第k次分离出的数字*/}main(){longintn;intk;printf(Inputn:);scanf(%ld,&n);printf(Inputk:);scanf(%d,&k);printf(TheNo.%dnumberis%d.\n,k,fun(n,k));}7.8计算s。已知s=10!+7!*8!将n!定义成函数。#includestdio.hdoublefun(intn){doublef=1.0;inti;for(i=1;i=n;i++)f=f*i;/*求n!*/returnf;/*返回阶乘值*/}main(){printf(10!+7!*8!=%g\n,fun(10)+fun(7)*fun(8));}7.9定义一个函数,使给定的二维数组(3×3)转置,即行列转换,并输出。7.9矩阵转置#includestdio.hvoidconvert(inta[][3]){inti,j,t;for(i=0;i3;i++)for(j=0;ji;j++){t=a[i][j];a[i][j]=a[j][i];a[j][i]=t;}}/*矩阵转置*/main(){inta[3][3],i,j;printf(Input3*3array:\n);for(i=0;i3;i++)for(j=0;j3;j++)scanf(%d,&a[i][j]);/*读入数据*/printf(beforeconverted,output:\n);for(i=0;i3;i++){for(j=0;j3;j++)printf(%4d,a[i][j]);printf(\n);}/*输出原始数据*/convert(a);/*调用函数进行处理*/printf(afterconverted,output:\n);for(i=0;i3;i++){for(j=0;j3;j++)printf(%4d,a[i][j]);printf(\n);}/*输出转置后的数据*/}7.10写几个函数:①输入10个职工的性名和职工号;②按职工号由小到大的顺序排序,姓名顺序也随之调整;③要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工的姓名。7.10编写几个函数,分别实现输入、排序、查找#includestdio.h#includestring.h#defineN10voidinput(charname[N][8],charno[N][8]){inti;printf(Input%dnameandNo.\n,N);for(i=0;iN;i++)scanf(%s%s,name[i],no[i]);}/*输入每个人的姓名和学号*/voidsort(charname[N][8],charno[N][8]){chart[8];inti,j,p;for(i=0;iN-1;i++){p=i;for(j=p;jN;j++)if(strcmp(name[p],name[j])0)p=j;if(p!=i){strcpy(t,name[p]);strcpy(name[p],name[i]);strcpy(name[i],t);strcpy(t,no[p]);strcpy(no[p],no[i]);strcpy(no[i],t);}}}/*按姓名进行从小到大的排序,姓名进行交换的时候,职工号也进行交换,以保证职工号跟着姓名走,以免打乱对应的关系*/voidfind(charname[N][8],charno[N][8],charNo[8],charmessge[8]){intlow=0,high=N-1,mid;while(low=high){mid=(low+high)/2;if(strcmp(No,no[mid])0)low=mid+1;/*向下找*/elseif(strcmp(No,no[mid])0)high=mid-1;/*向上找*/else{strcpy(message,name[mid]);return;}/*找到了,就将对应的姓名存入find字符串*/}strcpy(message,nofind);/*找不到,find字符串存入nofind*/}main(){charname1[N][8],no1[N][8],No1[8],message1[8];inti;clrscr();input(name1,no1);/*调用输入函数*/printf(%dalerksare:\n,N);printf(%10s%20s\n,name,No.);for(i=0;iN;i++)printf(%10s%20s\n,name1[i],no1[i]);/*输出每个人的姓名和职工号*/sort(name1,no1);/*调用排序函数*/printf(aftersorted:\n);printf(%10s%20s\n,name,No.);for(i=0;iN;i++)printf(%10s%20s\n,name1[i],no1[i]);/*输出排序后的姓名和职工号*/printf(InputfindedNo.:);scanf(%s,No1);/*输入要查找的职工号*/find(name1,no1,No1,message1);/*调用查找函数,将找到的姓名放入find字符串*/if(strcmp(message1,nofind)==0)printf(Nofind.\n);elseprintf(Thefindedalerkis:%s\n,message1);/*根据find的内容输出相应的信息*/}7.11定义一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。7.11反序存放字符串#includestring.hvoidfun(chars[80]){inti,j,n;charc;n=strlen(s);/求字符串长度,n也对应串尾标志*/for(i=0,j=n-1