《2009年上海市高等学校计算机等级考试试卷二级C语言程序设计B卷.docx》由会员分享,可在线阅读,更多相关《2009年上海市高等学校计算机等级考试试卷二级C语言程序设计B卷.docx(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2009年上海市高等学校计算机等级考试试卷二级 C语言程序设计 ( B 卷)一、单选题 1. 下列C语言的标识符中,不合法的标识符为_ A. starB. 1234C. _a100D. circuit92. 若已定义: int x=10; 则表达式 x=(4*5,x*5,x+25) 的值是 _ 。A. 20B. 45C. 125D. 353. 若x是int类型变量,y是float类型变量,则为了将数据55和55.5分别赋给x和y,则执行语句: scanf(“%d, %f”,&x,&y,); 时,正确的键盘输入是 _ 。 A. 55,55.5B. x=55, y=55.5C. 5555.5D.
2、x=55y=55.54. 若有说明语句:int x=25,y=20,z=30; 则执行语句:if(xy) y=z; z=x; x=y; printf(“%d,%d,%d”,x,y,z); 后,输出是_ A. 25,20,30B. 30,30,25C. 25,30,30D. 25,30,255. 程序段:int num=2; while(num) printf(“%d ,”,num-);的运行结果是_ A. 2,1,B. 2,1C. 2,1,0D. 2,1,0,6. 若有说明:int a34,s;则对数组a的元素引用正确的是_ A. s=0; for(i=0;i=3;i+) for(j=0;j4
3、;j+) s+=aij;B. s=0; for(j=0;j=4;j+) for(i=0;i3;i+) s+=aij;C. s=0; for(i=0;i4;i+) for(j=0;j=3;j+) s+=aji;D. s=0; for(i=0;i3;i+) for(j=0;jname0C. per.name8D. per.id10. 若有以下语句:char x=5,y=9,z; z=(y|x)2; 则z的二进制值是_ A. 00011011B. 00001010C. 00110100D. 00001100二、填空题 1. 设有说明语句:int a=15, b=6; 则a/b的十进制数值为_ 2.
4、设有说明语句:int x=3, y=2; 则计算表达式(x=0)& (y=6*x) 后变量y的值是_ 3. 设a,b,c,t为整型变量,初值为a=3,b=4,c=5,执行完语句t=!(a+b)+c-1|b+c/2后,t的值是_ 4. 定义函数时,将其类型定义为void 则表示所定义的函数返回值为_. 5. 下列程序的输出结果是_f(int a) int i=0; while (ai=10) printf(“%d ”, ai); i+;main() int a=8,4,10,11,9,20; f(a);6. 下列程序的输出结果是_ long fib(int g) switch(g) case 0
5、: return(0); case 1: case 2: return(2); return ( fib(g-1) + fib(g-2) );main() long k; k = fib(5); printf(k=%ldn, k);7. 假定建立了以下链表结构:struct nodeint id ; struct node *next; *head,*p;如图6-11所示:指针p指向一个新结点,将新结点插入到链表中的两条C语言语句是【 】插入P后的链表 p head 7 2 9 2 图6-11 新结点插入到链表三、程序填空题 ( 本大题 3 道小题 ,每空 3 分,共 30 分)。1. 下列程
6、序的功能是:计算机给出10个不大于31的正整数让人猜,并根据猜中的情况统计总得分后输出。具体规则如下:(1) 计算机每给出一个要猜的数最多允许中5次,第一次猜对得10分,第二次猜对得8分,第三次猜对得6分,第四次猜对得4分,最后一次猜对得2分,否则不得分。(2) 若人猜的数太小,计算机给出提示“too small !”;若人猜的数太大,计算机给出提示“too large !”;若人猜对这个数,计算机给出提示“right !”, 并给出下一个数继续让人猜;若一个数已经猜了5次都猜错,计算机给出提示“out of time !”,也给出下一个数继续让人猜。直至猜完10个数。下面是人猜一个数的过程,
7、有下划线的部分是人猜的数:(假设机器产生的随机数为9)请输入你猜测的数y= 16too large !请输入你猜测的数y= 4too small !请输入你猜测的数y= 9right ! (本题是第三次猜对,得6分)#include #include void main() int i, c, x, y, score, right; 1 ; /* 变量赋初值 */ for (i=1; i=10; i+) x=random(32); /* 随机产生一个不大于31的要猜的数 */ c=0; do c+; printf(n 请输入你猜测的数y= ); scanf(%d, &y); right=(y=
8、x); /* 猜对时right为1,否则为0 */ if (right=1) printf( 2 ); else printf(%sn, ( 3 )? too small ! :too large !); while(right=0& 4 ); if (right) score+= ( 5 ); /* 统计成绩 */ else printf(out of time !n); printf(nTotal score:%dn, score);2. 以下程序输入10行字符串,要求按字典顺序从小到大排序。#include #define N 10int biggerthan( char *str1,
9、char *str2 ) /*若字符串str1大于 str2时,则返回1*/ for ( ; *str1 | *str2; 1 ) if ( *str1 *str2 )return 2 ; else if (*str1*str2)return 0 ;return 0; /* 两个字符串相等 */ void main()char lsN100;char *psN, *t;int i, j;for ( i = 0; i N; i+ )gets( lsi );psi = lsi;for ( i = 0; i N-1; i+ ) /* 冒泡法排序 */ for ( j = 0; j N-i-1; j+
10、 )if ( biggerthan( 3 ) ) t = psj; 4 ; 5 ; for ( i = 0; i N; i+ ) printf( %s n,psi );3. 将两个文本文件中字符$之后的内容合并到一个文件中去,其中函数void sub(, ,FILE *f2 )的功能是将文件指针f1,f2所指向的文件中的内容写到文件指针all所指向的文件中; main函数完成如下功能:先打开目标文件,再依次打开源文件,调用sub函数完成文件内容的拷贝。例如三个源文件 f1.txt ,f2.txt, 每个文件的内容分别如下文件名 内容f1 aaa$aaf2 bbb$bb则产生一个新的目标文件fa
11、ll.txt,包括f1,f2三个文件字符$之前的内容,fall的内容为aabb。#include #include main()FILE *f1, *f2,*fall;void sub(_1_ );if (fall=fopen(_2_ )=NULL) printf(Cannot open file!n);exit(1);if (f1=fopen(f1.txt,r)=NULL | (f2=fopen(f2.txt,r)=NULL) printf(Cannot open file!n);exit(1); else sub(_3_ );_4_ ;fclose (f1);fclose(f2);void
12、 sub(FILE *all, FILE *f1, FILE *f2)char c;while(fgetc(f1)!=$);while(c=fgetc(f1)!=EOF) fputc(c,all);while(fgetc(f2)!=$);while(c=fgetc(f2)!=EOF) fputc(c,all);四、操作题三程序调试题 1. 程序调试题1(E_3_1.c)调试要求:下列程序不能得到正确的结果,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*modified*/字样的注释),使其运行能得到正确的结果。将结果(包括E_3_1.c文件和E_3_1.exe文件)保存到指定目录中
13、。功能说明:统计一字符串中各个字母出现的次数,该字符串从键盘输入,统计时不区分大小写。对数字、空格及其他字符都不予统计。最后在屏幕上显示统计结果。例如字符串:“abcdefgh23 ABCDEF abc”的统计结果与输出格式为: a b c d e f g h i j k l m n o p q r s t u v w x y z 出现的次数为:;3 3 3 2 2 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 #include #include void main( ) int i, a26; char ch,str80,*p=str; gets(&st
14、r); /* 获取字符串 */ for(i=0;i=A&ch=Z ?ch+a-A:ch; /* 大小写字符转换*/ if(a=ch=z) ach-a+; for(i=0;i26;i+) printf(“%2c”, a+i); /* 输出26个字母 */ printf(“出现的次数为:n”); for(i=0;i26;i+) printf(“%2d”,ai); /* 输出各字母出现次数 */ printf(“n”); 2. 程序调试题2(E_3_2.C)调试要求:下列程序不能得到正确的结果,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*modified*/字样的注释),使其运行能得到
15、正确的结果。将结果(包括E_3_1.c文件和E_3_1.exe文件)保存到指定目录中。功能说明:递归算法求xn,即xn=x*xn-1,其中x为实数,n0。原程序(见E_3_2.c) void main() float x, y; int n; scanf(%f%d,&x,&n); y=xn(x,n); printf(xn=%fn,y); float xn(float x, int n) fload z; if(n0) printf(n is a wrong number!n); exit(0); if(n!=0) z=1; else z=xn(x,n); return z;五 编程题1编程题1
16、(E_5_1.c)编程要求:请按题中的功能要求,编写程序并能得到正确结果。将结果(包括E_5_1.c文件和E_5_1.exe文件)保存到指定目录中。功能说明:编写一个函数,将数组a中的n个数每5个相邻的元素为一组分别求和(假设求和结果不溢出),结果放到数组b中,最后一组如果不足5个也进行求和。例如,若数字a的元素为4,8,3,3,0,5,2,9,7,8,4,3,2,1,8,4,3,2,则数组b的元素为18,31,18,9。2编程题2(E_5_2.c)编程要求:请按题中的功能要求,编写程序并能得到正确结果。将结果(包括E_5_2.c文件和E_5_2.exe文件)保存到指定目录中。功能说明:某中学要对新入学的10名学生根据考试成绩分到插入到两个班(class1,class2)中,插入的方法是成绩第1名在class1班,第2名在class2班,第3名在class1班,第4名在class2班,依次类推,原来class1,class2学生是按成绩由高分到低分排列的。请编写程序,输入这10个学生的编号和成绩,输出如下格式的分班情况:Class1班:编号 成绩; 编号 成绩; Class2班:编号 成绩; 编号 成绩; 第 11 页