编程题1.请编一个函数fun(char*s),函数的功能是把字符串中的内容逆置。例如:字符串中原有的内容为:abcdefg,则调用该函数后,串中的内容为:gfedcba。注意:部分源程序存在文件prog.c中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includestring.h#includeconio.h#includestdio.h#includewindows.h#defineN81/*本题的考核点是C语言中的for循环语句的使用。解题思路:对于本题,我们给出的参考函数采取的算法是:将第一个元素与最后一个元素互换,第二个元素与倒数第二个互换…的方式进行倒排序。因为我们一次互换两个元素,所以for循环语句执行length/2次(length是字符串的长度)就可以把全部元素互换一遍。*/voidfun(char*s){inti,length;chartmp;length=strlen(s);/*统计字符串s中字符的个数*/for(i=0;ilength/2;i++){/*以下三行即将s中的第i个字符与第length-i个字符进行交互*/tmp=s[i];s[i]=s[length-i-1];s[length-i-1]=tmp;}}NONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/inti;chara[N];FILE*rf,*wf;rf=fopen(bc8.in,r);wf=fopen(bc8.out,w);for(i=0;i9;i++){fscanf(rf,%s,a);fun(a);fprintf(wf,%s\n,a);}fclose(rf);fclose(wf);}main(){chara[N];system(cls);printf(Enterastring:);gets(a);printf(Theoriginalstringis:);puts(a);fun(a);printf(\n);printf(Thestringaftermodified:);puts(a);NONO();}2.编写程序,实现矩阵(3行3列)的转置(即行列互换)。例如,输入下面的矩阵:100200300400500600700800900程序输出:100400700200500800300600900注意:部分源程序存在文件prog.c中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includestdio.h#includeconio.h#includewindows.h/*本题的考核点是3行3列矩阵转置算法。解题思路:通过两重循环和一个中间数组完成转置。方法是通过循环将原数组中的i行j列上的数赋值给中间数组的j行i列,最后再将中间数组的值赋给原数组,形成转置后的矩阵。*/voidfun(intarray[3][3]){inti,j;intb[3][3];for(i=0;i3;i++)for(j=0;j3;j++)b[j][i]=array[i][j];/*将矩阵行列互换*/for(i=0;i3;i++)for(j=0;j3;j++)array[i][j]=b[i][j];/*将b数组中的数据原封不动的保存在array数组中*/}NONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/inti,j;FILE*wf;intarray[3][3]={{100,200,300},{400,500,600},{700,800,900}};wf=fopen(a11.out,w);fun(array);for(i=0;i3;i++){for(j=0;j3;j++)fprintf(wf,%7d\n,array[i][j]);}fclose(wf);}main(){inti,j;intarray[3][3]={{100,200,300},{400,500,600},{700,800,900}};system(cls);for(i=0;i3;i++){for(j=0;j3;j++)printf(%7d,array[i][j]);printf(\n);}fun(array);printf(Convertedarray:\n);for(i=0;i3;i++){for(j=0;j3;j++)printf(%7d,array[i][j]);printf(\n);}NONO();}3.编写函数intfun(intlim,intaa[MAX]),该函数的功能是求出小于lim的所有素数并放在aa数组中,该函数返回求出素数的个数。注意:部分源程序存在文件prog.c中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includestdio.h#includeconio.h#includewindows.h#defineMAX200/*本题的考核点是找出小于指定数的所有素数的算法。解题思路:从2到指定数lim,找出所有的素数,素数的判断方法是:只能被1和其自身整除,而不能被其它任何数整除的数。*/intfun(intlim,intaa[MAX]){inti,j=0,k=0;for(i=2;ilim;i++)/*判断i是否小于lim,如果i小于lim执行循环*/{for(j=2;ji;j++)/*判断i是否能被比它小的整数整除*/if(i%j==0)break;/*假如i能被整除,则退出该层循环*/if(j==i)aa[k++]=i;/*假如i不能被比它小的整数整除,则将i存入aa数组中*/}returnk;}NONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/inti,j,limit,sum;intaa[MAX];FILE*rf,*wf;rf=fopen(b14.in,r);wf=fopen(a14.out,w);for(j=0;j4;j++){fscanf(rf,%d,&limit);sum=fun(limit,aa);for(i=0;isum;i++)fprintf(wf,%d\n,aa[i]);}fclose(rf);fclose(wf);}main(){intlimit,i,sum;intaa[MAX];system(cls);printf(输入一个整数:);scanf(%d,&limit);sum=fun(limit,aa);for(i=0;isum;i++){if(i%10==0&&i!=0)printf(\n);printf(%5d,aa[i]);}NONO();}4.请编写函数fun,函数的功能是求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。例如:二维数组中的值为13579299946999813570则函数值为61。注意:部分源程序存在文件prog.c中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includeconio.h#includestdio.h#includewindows.h#defineM4#defineN5/*本题的考核点是c语言中嵌套循环语句和条件判断语句的使用。解题思路:二维数组的周边元素的特点是:它有一个下标为0或为数组上界。所以我们只需判断数组的下标是否为0或数组上界即可。按行、列进行循环可以保证符合条件的元素只被运算一次。*/intfun(inta[M][N]){inti,j,sum=0;for(i=0;iM;i++)for(j=0;jN;j++)if((i==0)||(i==M-1)||(j==0)||(j==N-1))/*判断a[i][j]是否为数组中的第一行或最后一行或第一列或最后一列*/sum+=a[i][j];/*对a数组的周边元素求和*/returnsum;}NONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/inti,j,y,k,aa[M][N];FILE*rf,*wf;rf=fopen(bc4.in,r);wf=fopen(bc4.out,w);for(k=0;k10;k++){for(i=0;iM;i++)for(j=0;jN;j++)fscanf(rf,%d,&aa[i][j]);y=fun(aa);fprintf(wf,%d\n,y);}fclose(rf);fclose(wf);}main(){intaa[M][N]={{1,3,5,7,9},{2,9,9,9,4},{6,9,9,9,8},{1,3,5,7,0}};inti,j,y;system(cls);printf(Theoriginaldatais:\n);for(i=0;iM;i++){for(j=0;jN;j++)printf(%6d,aa[i][j]);printf(\n);}y=fun(aa);printf(\nThesum:%d\n,y);printf(\n);NONO();}5.请编写函数fun,对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按降序排列。例如,原来的字符串为CEAedca,排序输出为CedcEAa。注意:部分源程序存在文件prog.c中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includestdio.h#includectype.h#includeconio.h#includewindows.h/*本题的考核点是对除首、尾字符外的其它字符按降序排列的算法。解题思路:只对除首、尾字符外的字符排序,排序可用多种方法来实现,本题用的是选择法,通过一变量来记录大数的下标,再与前面的数交换,从而实现降序排序。*/intfun(char*s,intnum){inti,j,h,t;for(i=1;inum-1;i++){h=i;for(j=i;jnum-1;j++)if(s[h]s[j])h=j;/*从字符串的第i+1个字符到num-1个字符中找出最大的字符,并将其数组下标赋值给h*/if(h!=i)/*判断找到的最大字符的下标是否为第i个字符*/{t=s[h];s[h]=s[i];s[i]=t;}/*将s[h]与s[i]中的字符进行交换*/}}NONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/chars[10];intj;FILE*rf,*wf;rf=fopen(b15.in,r);wf=fopen(a15.out,w);for(j=0;j4;j++){fscanf(rf,%s,s);fun(s,7);fprintf(wf,%s\n,s);}fclose(rf);fclose(wf);}main(){chars[10];system(cls);printf(输入7个字符的字符串:);gets(s);fun(s,7);printf(\n%s,s);NONO();}6.请编一个函数voidfun(inttt[M][N],intpp[N]),tt指向一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中。二维数组中的数已在主函数中赋予。注意:部分源程序存在文件prog.c中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includeconio.h#includestdio.h#includewindows.h#defineM3#defineN4voidfun(inttt[M][N],intpp[N]){inti,j,min;for(i=0;i4;i++){min=tt[0][i];/*将每列的第一个数赋值给min*/for(