浙工大C语言复习题与参考答案 联系客服

发布时间 : 星期一 文章浙工大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;jfabs(x)) x=*(*(a+i)+j); for(j=0;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*k) { *k=y; *x=*(a+i); } }

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 void main()

{ 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 #include void main()

{ 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 #include void main()

{ 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); }