46.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:按分数的高低排列学生的记录,高分在前。 #include
void fun (STRUC a[]) { int i,j; STRUC t;
for(i=1 ;i for(j=0;j< N-1;j++) if(a[j].s {t=a[j];a[j]=a[j+1];a[j+1]=t;} } main () { FILE *wf; STRUC s[N]={{ \ {\ {\ {\ int i; FILE *out; fun(s); printf(\ for (i=0; i printf(\ } printf(\ out=fopen(\ for(i=0; i {if((i)%4==0&&i) fprintf(out, \ fprintf(out, \ } fprintf(out, \ fclose(out); wf=fopen(\ for (i=0; i -26- {if((i)%4==0&&i) fprintf(wf,\ fprintf(wf,\ } fclose(wf); } 47.请编写—个函数void fun(char *ss),其功能是:将字符串ss中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。 例如,若输入abc4EFg,则应输出aBc4EFg。 #include for(i=0;ss[i]!='\\0';i++) { if(i%2 ==1&&ss[i]>='a' && ss[i]<='z') ss[i]= ss[i] -32;} } main( ) { FILE *wf; char tt[51],*s=\ printf(\ gets(tt); printf(\ fun(tt); printf(\ wf=fopen(\ fun(s); fprintf(wf,\ fclose(wf);} 48.请编写函数fun,其功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的千位和十位上,b数的十位和个位数依次放在c数的百位和个位上。 例如,当a=45,b=12,调用该函数后c=4152。 本题的关键在于如何表示出个、十、百、千位数。对于一个两位的整数,用10对它求余得到个位数上的数,将它除10得到十位数上的数。 #include void fun ( int a, int b , long *c) { *c=(a/10)*1000+(b/10)*100+(a)*10+b ; } main( ) { int a,b; long c; printf(\scanf(\ -27- fun(a,b,&c); printf(\} 49.请编写函数fun,其功能是:将s所指字符串中下标为偶数同时ASCII值为奇数的字符删除,s中剩余的字符形成的新串放在t所指的数组中。 例如,若s所指字符串中的内容为ABCDEFGl2345,其中字符C的ASCII码值为奇数,在数组中的下标为偶数,因此必须删除;而字符1的ASCII码值为奇数,在数组中的下标也为奇数,因此不应当删除,其他依此类推。最后t所指的数组中的内容应是BDFl2345。 #include void fun ( char *s, char t[ ]) { int i, j=0, n=strlen(s); for(i=0; i if (i%2==0&&s[i]%2!=0) ; else { t[j]=s[i] ; j++ ; } t[j]= '\\0' ; } main( ) { char s[100], t[100]; printf(\ scanf(\ fun(s,t); printf(\ 50.已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分)。已给出函数的首部,请完成该函数。 #include { char num[10]; int s;} STU; fun( STU a[], STU *s) { int i; *s=a[0]; for( i=1;i if (a[i].s>(*s).s) *s=a[i]; } main( ) { STU a[N]={ {\ {\int i; -28- printf(\ for(i=0;i fun( a,&m); printf(\ printf(\} 51.请编写函数fun,其功能是:将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k传回。例如,若输入17,则应输出:9和4 6 8 9 10 12 14 15 16。 注:内嵌的for循环用于判断是否是素数,在j #include void fun( int m, int *k, int xx[] ) { int i,j; *k=0; for( i=2; i if( i%j==0) { xx[(*k)++]=i; break;} } main( ) { int m, n,zz[100]; printf(\scanf( \fun(n,&m,zz); printf(\for(n=0; n 52.编写一个函数fun,它的功能是:实现两个字符串的连接(不使用库函数strcat),即把p2所指的字符串连接到p1所指的字符串后。例如,分别输入下面两个字符串:FirstString-- SecondString 则程序输出:FirstString—SecondString 注:第一个for()循环用于让i成为第一个字符串的结束符的下标,要注意在这个for()后要有一个分号否则出错。第二个for()的作用是将第二个字符串一个一个字符依次放到第一个字符串的未尾。此外,还要注意最后一定要有p1[i]='\\0';来给字符串加上结束符。 #include void fun(char p1[],char p2[]) { int i,j; for(i=0;p1[i];i++); for(j=0;p2[j];j++) p1[i++]=p2[j]; -29- p1[i]='\\0'; } main( ) { char s1[80],s2[80]; clrscr(); printf(\scanf(\printf(\printf(\ printf(\fun(s1,s2); printf(\printf(\ 53.请编写函数fun,该函数的功能是:实现B=A+A’,即把矩阵A加上矩阵A的转置,存放在矩阵B中。计算结果在main函数中输出。 例如,输入下面的矩阵: 其转置矩阵为: 则程序输出: 1 2 3 l 4 7 2 6 10 4 5 6 + 2 5 8 = 6 10 14 7 8 9 3 6 9 10 14 18 本题没有先求出A的转置,而是直接利用转置的性质(即第一行作为转置后的第一列,第二行作为转置后的第二列,的行列互换的性质)。而且最后要求出两矩阵的相加后得出的新矩阵,由转置性质可知原a[j][i]转置后位置为a[i][j],在表达式:b[i][j]=a[i][j]+a[j][i]第一个a为A的元素,第二个a为A'的元素。 #include void fun(int a[3][3],int b[3][3]) { int i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) b[i][j]=a[i][j]+a[j][i]; } main( ) {int a[3][3]={{1,2,3},{4,5,6},{7,8,9}},t[3][3]; int i,j; fun(a,t); for(i=0;i<3;i++) {for(j=0;j<3;j++) printf(\printf(\ 54.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把低于平均分的学生数据放在b所指的数组中,低于平均分的学生人数通过形参n传回,平均分通过函数值返回。 #include -30-