2010/2011一学期C程序设计试卷
说明:考生应将所有答案填写在答卷上,否则无效。
一、填空题(每小题2分,共20分)
⑴ int类型变量a、b当前值分别为4、3,执行“a=++a-b--;”后a、b当前值分别为、。
⑵执行“s=0;n=5;while(n) s+=--n;”后,变量s、n的当前值分别为、。
⑶声明“float a[3][4];”,a数组第二行第三列的元素可以表示为或。
⑷声明“char s1[20]="Visual ",s2[]="C++6.0";”,调用函数strcat(s1,s2);后,执行语句
“puts(s1);”的显示结果为。
⑸自定义函数f5将n个元素的float类型数组按值从小到大排序,函数原型为。
⑹自定义函数f6,计算并返回一元n-1次代数多项式的值,函数原型为。
⑺对下列递归函数,函数调用f7(123)的返回值为。
int f7(int n) { return n==0? 0: n%10+f7(n/10); }
⑻ int类型变量a的当前值分别为-5,表达式 ~a 的值为。
⑼ int类型变量a的当前值为-11,执行语句“a=a^27^27;”后,a的当前值为。
⑽打开二进制文件e:\aaa.dat用于写的函数为。
二、程序阅读题(每小题8分,共24分)
阅读下列程序,将运行时的输出结果写在答卷纸相应题号下。
1. #include
void main()
{ int a[6]={2,5,-3,7,9,4},b[6]={2,5,4,7,3,6},i,j;
for(i=0;i<6;i++) {
for(j=0;j<6;j++) if(a[i]==b[j])break;
if(j<6) printf("%d\n",a[i]);
}
}
2. #include
void main()
{ int a[4][4]={{2,4,6,8},{8,2,4,6},{6,4,2,8},{4,6,8,2}},i,j;
for(i=0;i<4;i++) for(j=0;j<4;j++) a[i][j]/=a[i][i];
for(i=0;i<4;i++) {
for(j=0;j<4;j++) printf("%d ",a[i][j]); putchar('\n');
}
}
3. #include
struct complex { double x,y;};
complex mul(complex a,complex b)
{ complex c; c.x=a.x*b.x-a.y*b.y; c.y=a.x*b.y+a.y*b.x;
return c;
}
complex div(complex a,complex b)
{ complex c; double d=b.x*b.x+b.y*b.y;
c.x=(a.x*b.x+a.y*b.y)/d; c.y=(-a.x*b.y+a.y*b.x)/d;
return c;
}
void main()
{ complex a={1,2},b={3,4},c;
printf("%.2f %.2f\n",a.x,a.y);
printf("%.2f %.2f\n",b.x,b.y);
c=mul(a,b); printf("%.2f %.2f\n",c.x,c.y);
c=div(a,b); printf("%.2f %.2f\n",c.x,c.y);
}
三、程序填空题(每空2分,共24分)
阅读下列程序说明和程序,将答案填写在答卷纸相应题号下。
1.【程序说明】下列程序输入整数m(必须大于2),判断其是否为2个大于1的整数的乘积。
#include
⑴
void main()
{ int m,i;
while( ⑵ ,m<3);
for(i=2;i<=sqrt(m);i++)
if( ⑶ ) { printf("可分解为%d、%d的乘积\n",i,m/i,);break; }
if( ⑷ ) printf("不可分解\n");
}
2.【函数说明】函数f2计算并返回n个float类型数据的平均值。
float f2( ⑴ )
{ int i; float y;
⑵ ;
for(i=0;i ⑶ ; ⑷ ; } 3.【函数说明】函数find_max在float类型的二维数组中查找值最大的元素之行、列号,下列程序可用于测试函数find_max的正确与否。 #include void find_max( ⑴ ) { int i,j; ⑵ ; for(i=0;i if(x[i][j] } void main() { float a[3][3]={{1,3,5},{6,-2,3},{4,2,1}};int i,j; float *c[3]={a[0],a[1],a[2]}; ⑷ ; printf("%d %d\n",i,j); } 四、程序设计题(第1小题10分,第2小题10分,第3小题12分,共32分) 1. 编程,输入n后再输入n个数,计算并输出这n个数的和。 2. 自定义函数,可将字符串的的空格符删除。 3. 文本文件e:\a.txt 存放着期末考试信息,每行包含学号(8位字符)和3门考试课的成绩(各3位整数)。编程,将每个学生信息中再增加总分并写入到文件e:\b.txt。 2010/2011一学期C程序设计答卷 选课班级任课教师班级学号考生姓名 一、填空题(每小题2分,共20分) ⑴、⑵、⑶、⑷ ⑸⑹ ⑺⑻⑼⑽ 二、程序阅读题(每小题8分,共24分) 1. 2. 3. 三、程序填空题(每空2分,共24分) 1. ⑴⑵⑶⑷ 2.⑴⑵⑶⑷ 3. ⑴⑵ ⑶⑷ 四、程序设计题(第1小题10分,第2小题10分,第3小题12分,共32分) 1. 编程,输入n后再输入n个数,计算并输出这n个数的和。 2. 自定义函数,可将字符串的的空格符删除。 3. 文本文件e:\a.txt 存放着期末考试信息,每行包含学号(8位字符)和3门考试课的成绩(各3位整数)。编程,将每个学生信息中再增加总分并写入到文件e:\b.txt。 2010/2011一学期C程序设计参考答案 一、填空题(每小题2分,共20分) ⑴ 2、2 ⑵ 10、0 ⑶ a[1][2]、*(*(a+1)+2) ⑷ Visual C++6.0 ⑸ void f5(float*,int) ⑹ float f6(float*,float,int) 或double ⑺ 6 ⑻ 4 ⑼ -11 ⑽ fopen("e:\\aaa.dat","wb"); 二、程序阅读题(每小题8分,共24分) 1. 2 2. 1 4 6 8 3. 1.00 2.00 5 4 1 4 6 3.00 4.00 7 3 2 1 8 -5.00 10.00 4 2 3 4 1 0.44 0.08 三、程序填空题(每空2分,共24分) 1. ⑴ #include 2.⑴ float* a,int n ⑵ y=0 ⑶ y=y/n ⑷ return y 3. ⑴ float **x,int m,int n,int *ii,int *jj ⑵ *ii=*jj=0; ⑶ *ii=i,*jj=j; ⑷ find_max(c,3,3,&i,&j) 四、程序设计题(第1小题10分,第2小题10分,第3小题12分,共32分) 1. 编程,输入n后再输入n个数,计算并输出这n个数的和。 #include void main() { int n,i; float y=0,a; '2分 scanf("%d",&n); '2分 for(i=1;i<=n;i++) { scanf("%f",&a);y=y+a;} '4分 printf("%f\n",y); '2分 } 2. 自定义函数,可将字符串的的空格符删除。 void f(char* s) '2分 { int i; for(i=0;s[i]!='\0';) '4分 if(s[i]==' ') strcpy(s+i,s+i+1); '4分 else i++; } 3. 文本文件e:\a.txt 存放着期末考试信息,每行包含学号(8位字符)和3门考试课的成绩(各3位整数)。编程,将每个学生信息中再增加总分并写入到文件e:\b.txt。 #include void main() { FILE *p1,*p2; char xh[9]; int c1,c2,c3; '2分 p1=fopen("e:\\a.txt","r"); '2分 p2=fopen("e:\\b.txt","w"); while(fscanf(p1,"%s%d%d%d",xh,&c1,&c2,&c2)!=EOF) '6分 fprintf(p2,"%s %d %d %d %d\n",xh,c1,c2,c3,c1+c2+c3); fclose(p1); '2分 fclose(p2); }