《上海2009年C二级-考题1.doc》由会员分享,可在线阅读,更多相关《上海2009年C二级-考题1.doc(42页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-date上海2009年C二级-考题12009年C语言测试题12009年C语言测试题1一、 选择题二、 填空题1、 表达式 sizeof(“C2009”) 的值是_2、 在C语言中,标识符只能由字母、数字和下划线字符组成,并且第一个字符不能是_ 字符。3、定义 int b=7; float a=5.2, c=6.9; 则表达式 b*(int)(a+c)/2 的值为_4、设x、y
2、均为整型变量,完成以下语句,以实现不借助任何其它变量将x、y的值进行交换:x = x + y; y = x - _ ; x = x - _ ;5、设有如下定义,并且结构体数组student中的元素都已有值,若要将这些元素写到 fp 指向的文件中,请将函数调用语句 fwrite( student, sizeof(struct st), 50, _ ); 补充完整。struct st char name8; int num; float s3; student50; 6、写出下列程序的输出结果_ #include long fac( int n ) if ( n=1 ) return 1; ret
3、urn n*fac(n-1);main() printf( 5!=%ldn, fac(5) );7、假定建立了以下链表结构,如图所示。指针p与q指向2个不同的结点,t为与data同类型的数据变量,则交换2结点数据的语句为:t=p-data; _;和_;三、 程序填空题1、以下程序按每行5个数的格式输出1至n范围内能被7或17 整除的整数,并求出其和。如输入:50则输出:7 14 17 21 2834 35 42 49Sum=247源程序:#include void main()int i, n, ct=0, sum=0;scanf( %d, &n );for ( i=1; i=n; i+ )i
4、f ( _(1)_ )printf( %dt, i );_(2)_;ct+;if ( _(3)_ )printf( n );printf( nSum=%dn, sum );2、以下程序输入10个整数到a数组,找到并输出其中最大的整数及其下标。如输入:80 290 150 520 330 -160 -99 0 200 9则输出:a3=520源程序:#include #define N 10int get_max_index( int a, int n )int i, k=0;for ( i=1; in; i+ )if ( _(1)_ )k = i;return _(2)_;void main()
5、int i, k, aN;for ( i=0; iN; i+ )scanf( %d, &ai );k = _(3)_;printf( a%d=%dn, k, ak );3、以下程序从文件“student.txt”读取学生的学号、姓名、平时成绩和考试成绩,从键盘上输入平时成绩在总成绩中所占比重,计算每个学生的总成绩(四舍五入为整数)后输出到屏幕上。文件的最后一行为0表示学生数据结束。设文件student.txt的内容为101 Zhao9558103 Qian7581105 Sun9991107 Li 80670运行时键盘输入:0.1则屏幕输出:101 Zhao 95 58 62103 Qian
6、75 81 80105 Sun 99 91 92107 Li 80 67 68源程序:#include void calc( FILE *fp, float x )int num, score1, score2;float score3;char name20;while ( !feof(fp) ) /* 文件还有未读数据时 */num = 0;fscanf( fp, %d%s%d%d, &num, name, &score1, &score2 );if ( num 0 ) /* 学生数据有效时 */score3 = score1 * x + score2 * (1-x);/* 计算总成绩 *
7、/printf( %3d %-7s %3d %3d %3dn, num, name, score1, score2, _(1)_ ); /* 总成绩四舍五入为整数 */void main()FILE *fp;float x;fp = fopen( student.txt, r );if ( _(2)_ )/* 如果文件打开失败 */printf( File Open Error!n );return;scanf( %f, &x );calc( _(3)_ );/* 调用calc函数 */fclose( _(4)_ );/* 关闭文件 */四、 操作题四、程序调试题(本大题2小题,第1题4分,第
8、2题6分,共10分)1. 程序调试题1(B_3_1.C)调试要求:下列程序不能得到正确的结果,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*/字样的注释),使其运行能得到正确的结果。将结果(包括B_3_1.c文件和B_3_1.exe文件)保存到目录C:KS中。功能说明:程序计算并输出1! + 2! + + n!(1至n阶乘的累加和),其中函数fact(n)计算n!的值,返回类型为double。如输入:10则输出:1!+2!+10! = 4037913原程序(见C:KSB_3_1.C):#include double fact( int n ) int i; double resul
9、t = 1; for ( i=1; in; i+ ) result = result * i; return result;void main() int i, n; double sum = 0; scanf( %d, &n ); for ( i=1 ; i=n; i+ ) sum += fact(int i); printf( 1!+2!+.+%d! = %.0lfn, n, sum );2. 程序调试题2(B_3_2.C)调试要求:下列程序有3处错误,请按题中的功能要求,在不改变程序结构(不增加、删除语句,不调整语句顺序)的情况下调试并修改该程序(在所修改语句后加/*/字样的注释),使其
10、运行能得到正确的结果。将结果(包括B_3_2.c文件和B_3_2.exe文件)保存到目录C:KS中。功能说明:程序输入任意一行字符串(设字符数不大于20),提取该字符串中的数字字符并组成一个整数,输出该整数及其两倍的值。如输入:abc12e3fgh4i则输出:1234 2468原程序(见C:KSB_3_2.C):#include void main() int i, n=0; char str80; gets(str80); for ( i=0; stri!=0; i+ ) if ( stri=0 & stridata=q-data】2)【q-data=t】程序填空题1. 1)【i%7=0|i
11、%17=0】2)【sum+=i】3)【ct%5=0】2. 1)【aiak】【ai=ak】2)【k】3)【get_max_index(a,N)】3. 1)【(int)(score3+0.5)】【(int)(10*score3+5)/10】2)【fp=NULL】3)【fp,x】4)【fp】三、程序调试题 第1题(B_3_1.C)参考答案#include double fact( int n ) int i; double result = 1; for ( i=1; i=n; i+ ) /*modified*/ result = result * i; return result;void mai
12、n() int i, n; double sum = 0; scanf( %d, &n ); for ( i=1 ; i=n; i+ ) sum += fact(i); /*modified*/ printf( 1!+2!+.+%d! = %.0lfn, n, sum );第2题(B_3_2.C)参考答案#include void main() int i, n=0; char str80; gets(str); /*modified*/ for ( i=0; stri!=0; i+ ) if (stri=0&stri=9) /*modified*/ n = n*10 + stri - 0;
13、/*modified*/printf(%d %dn, n, 2*n);五、编程题第1题(B_5_1.C),参考程序#include main() int i, x, n, sum; float ave; sum = 0; n = 0; for ( i=0; i0 ) sum += x; n+; ave = (float)sum / n; printf( Sum=%d, Average=%4.1fn, sum, ave );第2题(B_5_2.C),参考程序#include main() int m,n,i,a,b,c; scanf( %d%d, &m, &n ); for ( i=m; i=n; i+ ) a = i%10; b = i/10%10; c = i/100%10; if ( i=c+b*b+a*a*a ) printf( %d , i ); -