50.已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分)。已给出函数的首部,请完成该函数。
♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣
#include <stdio.h>
#include <string.h>
#include <conio.h>
#define N 10
typedef struct ss
{ char num[10]; int s;} STU;
/*只是采用的赋值方式不同。采用的是结构体元素对结构体元素赋值。*/
fun( STU a[], STU *s)
{ int i;
*s=a[0];
for( i=1;i<N; i )
if (a[i].s>(*s).s)
*s=a[i];
}
main()
{ STU a[N]={ {"A01",81},{"A02",89},{"A03",66}
,{"A04",87},{"A05",77},
{"A06",90},{"A07",79},{"A08",61},{"
;A09",80},{"A10",71} }, m;
int i;
printf("**** the original data ****\n");
for(i=0;i<N; i ) printf("N0=%s Mark=%d\n", a[i].num,a[i].s
);
fun( a,&m);
printf("**** the result****\n");
printf(" the top : %s ,%d\n", m.num,m.s);
}
51.请编写函数fun,其功能是:将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k传回。
例如,若输入17,则应输出:9和4 6 8 9 10 12 14 15 16。
♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣
#include <conio.h>
#include <stdio.h>
/* 注:内嵌的for()循环用于判断是否是素数,在j<i的情况下,只要j对i求余,余数为0则表示i不是素数,则将i存入xx数组中。break;语句只是让它提前结束循环。不用亦可。*/
void fun( int m, int *k, int xx[] )
{ int i,j;
*k=0;
for( i=2; i<m; i )
for( j=2; j<i; j )
if( i%j==0)
{ xx[(*k) ]=i; break;}
}
main()
{ int m, n,zz[100];
printf("\n please enter an integer number between 10 and 100: ");
scanf( "%d",&n);
fun(n,&m,zz);
printf("\n\n there are %d non-prime numbers less than %d: ", m,n);
for(n=0; n<m; n )
printf("\n %4d",zz[n]);
}
52.编写一个函数fun,它的功能是:实现两个字符串的连接(不使用库函数strcat),即把p2所指的字符串连接到p1所指的字符串后。
例如,分别输入下面两个字符串:FirstString--
SecondString
则程序输出:FirstString—SecondString
♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣
#include<stdio.h>
#include<conio.h>
/* 注:第一个for()循环用于让i成为第一个字符串的结束符的下标,要注意在这个for()后要有一个分号否则出错。第二个for()的作用是将第二个字符串一个一个字符依次放到第一个字符串的未尾。此外,还要注意最后一定要有p1[i]='\0';来给字符串加上结束符。*/
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];
p1[i]='\0';
}
main()
{ char s1[80],s2[80];
clrscr();
printf("Enter s1 and s2:\n");
scanf("%s%s",s1,s2);
printf("s1=%s\n",s1);
printf("s2=%s\n",s2);
printf("Invoke fun(s1,s2):\n");
fun(s1,s2);
printf("After invoking:\n");
printf("%s\n",s1);
}
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
♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣
#include<conio.h>
#include<stdio.h>
/*本题没有先求出A的转置,而是直接利用转置的性质(即第一行作为转置后的第一列,第二行作为转置后的第二列,的行列互换的性质)。而且最后要求出两矩阵的相加后得出的新矩阵,由转置性质可知原a[j][i]转置后位置为a[i][j],在表达式:b[i][j]=a[i][j] a[j][i]第一个a为A的元素,第二个a为A'的元素。*/
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;
clrscr();
fun(a,t);
for(i=0;i<3;i )
{for(j=0;j<3;j )
printf("%7d",t[i][j]);
printf("\n");
}
}
54.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把低于平均分的学生数据放在b所指的数组中,低于平均分的学生人数通过形参n传回,平均分通过函数值返回。
♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣♣
#include<stdio.h>
#define N 8
typedef struct
{ char num[10];
double s;
} STRUC;
double fun(STRUC *a, STRUC *b, int *n)
{
int i,j=0;
double av=0.0;
for(i=0;i<N;i )
av=av a[i] ;
av= av/N ;
for(i=0;i<N;i )
if(a[i].s<av) b[ j ]=a[i];
*n=j;
return av;
}
main()
{
FILE *wf;
STRUC s[N]={{ "GA05 ",85},{ "GA03 ",76},{ "GA02 ",69},{ "GA04 ",85},
{ "GA01 ",91},{ "GA07 ",72},{ "GA08 ",64},{ "GA06 ",87}};
STRUC h[N],t;
FILE *out;
int i,j,n;
double ave;
ave=fun(s,h,&n);
printf("The %d student data which is lower than %7.3f:\n ", n,ave);
for(i=0;i<n;i )
printf("%s %4.1f\n ",h[i].num,h[i].s);
printf("\n ");
out=fopen("out71.dat ", "w ");
fprintf(out, "%d\n%7.3f\n ",n,ave);
for(i=0;i<n-1;i )
for(j=i 1;j<n;j )
if(h[i].s>h[j].s)
{t=h[i]; h[i]=h[j]; h[j]=t;}
for(i=0;i<n;i )
fprintf(out, "%4.1f\n ",h[i].s);
fclose(out);
wf=fopen("out.dat","w");
fprintf(wf, "%d %7.3f\n",n,ave);
for(i=0;i<n;i )
fprintf(wf, "%s %4.1f ",h[i].num,h[i].s);
fclose(wf);
}