1、上海C二级考题32009年C语言测试题3一、 选择题二、 填空题1、在C语言中,char类型的数据所占存储空间的字节数为_,能够测试数据所占存储空间字节数的运算符是_2、设有定义char x; 写出判定x是否为大写字母的表达式_3、变量value已被定义为float型,对其小数部分进行四舍五入的C表达式为_4、设有以下程序段,则执行完该程序段后,变量 i 的值是_int i;char s=Hello!, *p=s;for( i=0; *(p+i)!=0; i+ );5、阅读以下程序并写出运行结果_ #include main() int k,n=0; for ( k=1; k=1000; k+
2、 ) if ( k%3=0 & k%5=0 ) printf( %d , k ); n+; if ( n=3 ) break; 6、一个C程序总是从_函数开始执行的7、假定建立了如下图所示的链表结构,指针p、q分别指向相邻的2个结点,则将r所指结点插入p、q所指结点之间的C语句是_;和_;三、 程序填空1、以下程序输入n和n个大于1的正整数,输出其中素数。如输入:5 19 93 11 37 15则输出:19 11 37例示说明:先输入n为5,再输入5个正整数,输出5个整数中的素数#include void main() int n, a, i, j, ct; scanf( %d, &n );
3、for ( i=0; _(1)_; i+ ) _(2)_; scanf( %d, &a ); for( j=2; ja; j+ ) if ( _(3)_ ) ct+; if ( ct=0 ) printf( %d , a ); printf( n );2、以下程序输入一个10进制整数,转换为16进制,计算16进制的各个位数,并从高位到低位依次输出。如输入:687则输出:2 A F例示说明:10进制687等于16进制2AF,输出时2、A、F中间包含空格源程序:#include void main() int a10, i, n; scanf( %d, &n ); for ( i=0; n0; i
4、+ ) ai = _(1)_; n /= 16; for ( i-; _(2)_; _(3)_ ) printf( %X , ai );3、以下程序从文件“student.txt”读取学生的学号、姓名、平时成绩和考试成绩,再从键盘上输入一个成绩,将所有考试成绩达到或超过该成绩的学生数据写到新的文本文件“studentD.txt”。文件的最后一行为0表示学生数据结束。设文件student.txt的内容为101 Zhao 95 58103 Qian 75 81105 Sun 99 91107 Li 80 670运行时键盘输入:80则生成新文件studentD.txt的内容为:103 Qian 75
5、 81105 Sun 99 910例示说明:student.txt中考试成绩在80分以上的Qian与Sun信息写到studentD.txt源程序:#include void select( FILE *fp1, FILE *fp2, int x ) int num, score1, score2; char name20; while ( 1 ) num = 0; fscanf( fp1, %d%s%d%d, &num, name, &score1, &score2 ); if ( num = 0 ) _(1)_; if ( _(2)_ ) fprintf( fp2, %3d %-7s %3d
6、 %3dn, num, name, score1, score2 ); fprintf( fp2, 0 );void main() FILE *fp1, *fp2; int x; fp1 = fopen( student.txt, r ); fp2 = fopen( studentD.txt, _(3)_ ); if ( fp1=NULL | fp2=NULL ) /* 文件打开失败 */ printf( File Open Error!n ); return; scanf( %d, &x ); select( _(4)_ ); fclose( fp1 ); fclose( fp2 );四、程
7、序调试题(本大题2小题,第1题4分,第2题6分,共10分)1. 程序调试题1(D_3_1.C)调试要求:下列程序不能得到正确的结果,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*/字样的注释),使其运行能得到正确的结果。将结果(包括D_3_1.c文件和D_3_1.exe文件)保存到目录C:KS中。功能说明:以下程序计算并输出等差数列的累加和,数列的首项为a0,公差为d,项数为n。如输入:-3 5 4则输出:sumx=18例示说明:-3为首项,5为公差,4为项数,前4项之和为18原程序(见C:KSD_3_1.C):#include int sumx( int a0, d, n ) i
8、nt i, k, s=0; k = a0; for ( i=0; in; i+ ) s += k; k += d; return s;void main() int a0, d, n; scanf( %d%d%d, &a0, &d, &n ); printf( sumx=%dn, sumx(a0,d,n) );2. 程序调试题2(D_3_2.C)调试要求:下列程序有3处错误,请按题中的功能要求,在不改变程序结构(不增加、删除语句,不调整语句顺序)的情况下调试并修改该程序(在所修改语句后加/*/字样的注释),使其运行能得到正确的结果。将结果(包括D_3_2.c文件和D_3_2.exe文件)保存到
9、目录C:KS中。功能说明:以下函数length返回字符串中字母A到字母Z所包含字符的长度。主程序输入一行字符串,调用length函数输出该字符串中大写字母A到Z的子串长度。如输入:Z2009-AShanghaiZ则输出:Length=8例示说明:从A到Z的子串为Shanghai,其长度为8原程序(见C:KSD_3_2.C):#include int length( char *p ) char *q, *r; for ( q=p; *q!=0 | *q!=A; q+ ) ; for ( r=q; *r!=0 & *r!=Z; r+ ) ; return r-q;void main() char
10、 str81; int n; gets( str0 ); n = length( str ); printf( Length=%dn, n );五、编程题(本大题2小题,每题18分,共36分)1编程题1(D_5_1.C)编程要求:请按题中的功能要求,编写程序并能得到正确的结果。将结果(包括D_5_1.C文件和D_5_1.exe文件)保存到目录C:KS中。功能说明:键盘输入5个整数,按由小到大的顺序排序后输出。如输入:10 0 20 5 31则输出:5 0 10 20 312编程题2(D_5_2.C)编程要求:请按题中的功能要求,编写程序并能得到正确的结果。将结果(包括D_5_2.C文件和D_5
11、_2.exe文件)保存到目录C:KS中。功能说明:键盘输入正整数n,计算并输出的值,输出结果保留6位小数。如输入:10则输出:0.645635第3套 参考答案单选题1. A 2. A 3. C 4. B 5. A 6. C 7. C 8. B 9. C 10. D填空题1. 1)【1】 2)【sizeof】2. 【x=A&xnext=q】【p-next=r】程序填空题1. 1)【i=0】3)【i-】3. 1)【break】2)【score2=x】3)【w】4)【fp1,fp2,x】三、程序调试题 第1题(D_3_1.C)参考答案#include int sumx( int a0, int d,
12、 int n ) /*modified*/ int i, k, s=0; k = a0; for ( i=0; in; i+ ) /*modified*/ s += k; k += d; /*modified*/ return s;void main() int a0, d, n; scanf( %d%d%d, &a0, &d, &n ); printf( sumx=%dn, sumx(a0,d,n) );第2题(D_3_2.C)参考答案#include int length( char *p ) char *q, *r; for ( q=p; *q!=0 & *q!=A; q+ ) ; fo
13、r ( r=q; *r!=0 & *r!=Z; r+ ) ; return r-q-1; /*modified*/void main() char str81; int n; gets( str ); /*modified*/ n = length( str ); printf( Length=%cn, n );五、编程题第1题(D_5_1.C),参考程序#include main() int a5, i, j, t; for ( i=0; i5; i+ ) scanf( %d, &ai ); for ( i=0; i5-1; i+ ) for ( j=0; jaj+1 ) t = aj; aj = aj+1; aj+1 = t; for ( i=0; i5; i+ ) printf( %d , ai ); printf( n );第2题(D_5_2.C),参考程序#include main() int n, i, k; float s; scanf( %d, &n ); s = 0; k = 1; for ( i=1; i=n; i+ ) s += (float)k/i; k *= -1; printf( %fn, s );
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1