发布时间 : 星期一 文章浙工大C语言复习题与参考答案更新完毕开始阅读b1eca04b76eeaeaad1f330ac
24 C程序设计习题集 printf(\请输入一个整数:\
while(m!=1) if(m%i==0){ printf(\ printf(\ }
4. 输入20个整数,输出其中能被数组中其它元素整除的那些数组元素。 #include \ #define N 20 void main() { int a[N],i,j;
for(i=0;i if(a[i]%a[j]==0&&i!=j) { printf(\ } 5. 输入两个数组(数组元素个数自定),输出在两个数组中都出现的元素。 #include \ #define NA 6 #define NB 8 void main() { float a[NA],b[NB]; int i,j; for(i=0;i if(a[i]==b[j]) { printf(\ } 6. 编写函数,处理n行n列维数组:将每一行的元素同除以该行上绝对值最大的元素。 #include \ #include \ void div(float** a,int n) { int i,j; float x; for(i=0;i for(j=1;j return; } void main() // 函数引用示例 { float b[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int i,j; float* c[3]; for(i=0;i<3;i++) c[i]=b[i]; div(c,3); for(i=0;i<3;i++) { C程序设计习题集 25 for(j=0;j<3;j++) printf(\ } } 7. 编写函数,求m行、n列的二维数组全体元素中负数的个数。 #include int sum(float **a,int m,int n) { int i,j; int y=0; for(i=0;i void main() // 函数引用示例 { float b[2][3]={{-1,2,-3},{4,-5,-6}}; int i; float* c[2]; for(i=0;i<2;i++) c[i]=b[i]; printf(\ } 8. 编写函数,返回在一个整数组中出现次数最多的数及其出现次数。 #include void fun(float *a,int n,int *k,float *x) { int i,j,y; *k=0; for(i=0;i for(j=0;j return; } void main() // 函数引用示例 { float c[10]={0,4,2,4,3,2,4,-3,1.5,7.6},t; int m; fun(c,10,&m,&t); // 若说明float *t; int *m; printf(\元素%f出现次数为%d\\n\引用为 fun(c,10,m,t) 将 } // 产生悬挂指针的错误,即t、m不只指向确定的存储单元。 9. 编写函数,在n个元素的一维数组中,找出最大值、最小值并传送到调用函数。 #include void num(float *b,int n,float *max,float *min) { *max=*b; *min=*b; for(int i=1;i if(*(b+i)>*max) *max=*(b+i); if(*(b+i)<*min) *min=*(b+i); } return; } void main() // 函数引用示例 { float a[10]={1,3,4,2,6,7,12,5,9,8},x,y; 26 C程序设计习题集 num(a,10,&x,&y); printf(\最大值为%f,最小值为%f。\\n\ } 10. 编写一个函数,统计m行n列二维数组中有多少个正数、多少负数,多少个零,并返回统计结果。 #include void sub(float** a,int m,int n,int *fs,int *lin,int *zs) { int i,j; *fs=*lin=*zs=0; for(i=0;i else if(*(*(a+i)+j)==0) (*lin)++; else (*zs)++; return; } void main() // 函数引用示例 { float b[5][3]={{-1,5,2},{3,0,-2},{0,-3,5},{4,7,-8},{3,4,5}},*c[5]; int i,k1,k2,k3; for(i=0;i<5;i++) c[i]=b[i]; sub(c,5,3,&k1,&k2,&k3); printf(\负数%d个,零%d个,正数%d个。\\n\ } 11. 编写函数print,打印一个学生的成绩数组,该数组中有若干个学生的数据记录,每个记录包括num,name,score[3]。 #include struct student { char num[7],name[9];int score[3]; }; // 尾部分号不得遗漏 void print(struct student* s,int n) { int i; // 运算符'*'、'&'的优先级均低于运算符'.' for(i=0;i printf(\ (*(s+i)).score[0],(*(s+i)).score[1],(*(s+i)).score[2]); return; } void main() { struct student t[4]; int i; for(i=0;i<4;i++) scanf(\ &t[i].score[1],&t[i].score[2]); print(t,4); } 12. 把文本文件d1.dat复制到文本文件d2.dat中,要求仅复制d1.dat中的英文字符。 #include { FILE *fpd1,*fpd2; char ch; C程序设计习题集 27 fpd1=fopen(\ while(fscanf(fpd1,\ if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z') fprintf(fpd2,\ fclose(fpd1); fclose(fpd2); } 13. 求出1至100之间的素数(只能被1和自身整除的数)并顺序写入文件su.dat。 #include { FILE *fp; int i,j,k=2; fp=fopen(\ for(i=5;i<100;i=i+2) { for(j=3;j<=sqrt(i);j=j+2) if(i%j==0) break; if(j>sqrt(i)) { fprintf(fp,\ } fclose(fp); } 14.顺序文件C.DAT每个记录包含学号(8位字符)和成绩(三位整数)两个数据项。从文件读入学生成绩,将大于或等于60分的学生成绩再形成一个新的文件SCORE60.DAT保存在A盘上,并显示出学生总人数、平均成绩和及格人数。 #include { FILE *fp1,*fp2; char s[9]; int x,zrs=0,pjcj=0,jgrs=0; fp1=fopen(\ fscanf(fp1,\ do { zrs++; pjcj+=x; if(x>=60) { jgrs++; fprintf(fp2,\ fscanf(fp1,\ } while(!feof(fp1)); printf(\总人数:%d 平均成绩:%d 及格人数:%d\\n\ fclose(fp1); fclose(fp2); }