收藏 分销(赏)

上海市高等学校计算机等级考试试卷二级C语言程序设计B卷.docx

上传人:精**** 文档编号:9867888 上传时间:2025-04-11 格式:DOCX 页数:14 大小:31.66KB 下载积分:8 金币
下载 相关 举报
上海市高等学校计算机等级考试试卷二级C语言程序设计B卷.docx_第1页
第1页 / 共14页
上海市高等学校计算机等级考试试卷二级C语言程序设计B卷.docx_第2页
第2页 / 共14页


点击查看更多>>
资源描述
上海市高等学校计算机等级考试试卷二级C语言程序设计B卷 资料仅供参考 上海市高等学校计算机等级考试试卷 二级 C语言程序设计 ( B 卷) 一、单选题 1. 下列C语言的标识符中,不合法的标识符为____________ A. star B. 1234 C. _a100 D. circuit9 2. 若已定义: int x=10; 则表示式 x=(4*5,x*5,x+25) 的值是 ______ 。 A. 20 B. 45 C. 125 D. 35 3. 若x是int类型变量,y是float类型变量,则为了将数据55和55.5分别赋给x和y,则执行语句: scanf(“%d, %f”,&x,&y,); 时,正确的键盘输入是 ______ 。 A. 55,55.5↙ B. x=55, y=55.5↙ C. 55↙55.5↙ D. x=55↙y=55.5↙ 4. 若有说明语句:int x=25,y=20,z=30; 则执行语句:if(x>y) {y=z; z=x;} x=y; printf(“%d,%d,%d”,x,y,z); 后,输出是____________ A. 25,20,30 B. 30,30,25 C. 25,30,30 D. 25,30,25 5. 程序段:int num=2; while(num) printf(“%d ,”,num--); 的运行结果是_______________ A. 2,1, B. 2,1 C. 2,1,0 D. 2,1,0, 6. 若有说明:int a[3][4],s;则对数组a的元素引用正确的是____________ A. s=0; for(i=0;i<=3;i++) for(j=0;j<4;j++) s+=a[i][j]; B. s=0; for(j=0;j<=4;j++) for(i=0;i<3;i++) s+=a[i][j]; C. s=0; for(i=0;i<4;i++) for(j=0;j<=3;j++) s+=a[j][i]; D. s=0; for(i=0;i<3;i++) for(j=0;j<4;j++) s+=a[i][j]; 7. 如果形参获取实参的地址,则____________作为函数调用时的实参。 A. 数组名 B. 全局量 C. 数组中全部元素的值 D. 数组中的元素个数 8. 若有定义:int i,j,*pi=&i; 则与i==j等价的比较表示式是____________ A. i==*pi B. *pi ==*&j C. i==&j D. i==**pi 9. 若有定义:struct person{ int id ; char name[20]; } per,*s=&per; 则以下对结构体成员的引用中正确的____________ A. per.name[0] B. s->name[0] C. per.name[8] D. per.id 10. 若有以下语句:char x=5,y=9,z; z=(y|x)<<2; 则z的二进制值是________________ A. 00011011 B. 00001010 C. 00110100 D. 00001100 二、填空题 1. 设有说明语句:int a=15, b=6; 则a/b的十进制数值为________ 2. 设有说明语句: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 (a[i]<=10) { printf(“%d ”, a[i]); i++; } } main() { int a[]={8,4,10,11,9,20}; f(a); } 6. 下列程序的输出结果是______________ long fib(int g) { switch(g){ case 0: return(0); case 1: case 2: return(2); } return ( fib(g-1) + fib(g-2) ); } main() { long k; k = fib(5); printf("k=%ld\n", k); } 7. 假定建立了以下链表结构:struct node{ int id ; struct node *next; } *head,*p; 如图6-11所示:指针p指向一个新结点,将新结点插入到链表中的两条C语言语句是【 】 插入P后的链表 p head 7 2 9 2 图6-11 新结点插入到链表 三、程序填空题 ( 本大题 3 道小题 ,每空 3 分,共 30 分)。 1. 下列程序的功能是:计算机给出10个不大于31的正整数让人猜,并根据猜中的情况统计总得分后输出。具体规则如下: (1) 计算机每给出一个要猜的数最多允许中5次,第一次猜对得10分,第二次猜对得8分,第三次猜对得6分,第四次猜对得4分,最后一次猜对得2分,否则不得分。 (2) 若人猜的数太小,计算机给出提示“too small !”;若人猜的数太大,计算机给出提示“too large !”;若人猜对这个数,计算机给出提示“right !”, 并给出下一个数继续让人猜;若一个数已经猜了5次都猜错,计算机给出提示“out of time !”,也给出下一个数继续让人猜。直至猜完10个数。 下面是人猜一个数的过程,有下划线的部分是人猜的数:(假设机器产生的随机数为9) 请输入你猜测的数y= 16 too large ! 请输入你猜测的数y= 4 too small ! 请输入你猜测的数y= 9 right ! (本题是第三次猜对,得6分) #include <stdio.h> #include <stdlib.h> 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==x); /* 猜对时right为1,否则为0 */ if (right==1) printf(" 2 "); else printf("%s\n", ( 3 )? "too small !" :"too large !"); }while(right==0&& 4 ); if (right) score+= ( 5 ); /* 统计成绩 */ else printf("out of time !\n"); } printf("\nTotal score:%d\n", score); } 2. 以下程序输入10行字符串,要求按字典顺序从小到大排序。 #include <stdio.h> #define N 10 int biggerthan( char *str1, 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 ls[N][100]; char *ps[N], *t; int i, j; for ( i = 0; i < N; i++ ) { gets( ls[i] ); ps[i] = ls[i]; } for ( i = 0; i < N-1; i++ ) /* 冒泡法排序 */ for ( j = 0; j < N-i-1; j++ ) if ( biggerthan( 3 ) ) { t = ps[j]; 4 ; 5 ; } for ( i = 0; i < N; i++ ) printf( " %s \n",ps[i] ); } 3. 将两个文本文件中字符'$'之后的内容合并到一个文件中去,其中函数void sub(FILE*all, FILE*f1 ,FILE *f2 )的功能是将文件指针f1,f2所指向的文件中的内容写到文件指针all所指向的文件中; main函数完成如下功能:先打开目标文件,再依次打开源文件,调用sub函数完成文件内容的拷贝。 例如三个源文件 f1.txt ,f2.txt, 每个文件的内容分别如下 文件名 内容 f1 aaa$aa f2 bbb$bb 则产生一个新的目标文件fall.txt,包括f1,f2三个文件字符'$'之前的内容,fall的内容为aabb。 #include <stdio.h> #include <stdlib.h> 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 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文件)保存到指定目录中。 功能说明:统计一字符串中各个字母出现的次数,该字符串从键盘输入,统计时不区分大小写。对数字、空格及其它字符都不予统计。最后在屏幕上显示统计结果。 例如字符串:“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 <stdio.h> #include <string.h> void main( ) { int i, a[26]; char ch,str[80],*p=str; gets(&str); /* 获取字符串 */ for(i=0;i<26;i++) a[i]=0; /* 初始化字符个数*/ while(*p) { ch=(*p)++; /* 移动指针统计不同字符出现的次数 */ ch=ch>=’A’&&ch<=’Z’ ?ch+’a’-‘A’:ch; /* 大小写字符转换*/ if(’a’<=ch<=’z’) a[ch-‘a’]++; } for(i=0;i<26;i++) printf(“%2c”, ’a’+i); /* 输出26个字母 */ printf(“出现的次数为:\n”); for(i=0;i<26;i++) printf(“%2d”,a[i]); /* 输出各字母出现次数 */ printf(“\n”); } 2. 程序调试题2(E_3_2.C) 调试要求:下列程序不能得到正确的结果,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*modified*/字样的注释),使其运行能得到正确的结果。将结果(包括E_3_1.c文件和E_3_1.exe文件)保存到指定目录中。 功能说明:递归算法求xn,即xn=x*xn-1,其中x为实数,n≥0。原程序(见\E_3_2.c) void main(){ float x, y; int n; scanf("%f%d",&x,&n); y=xn(x,n); printf("x^n=%f\n",y); } float xn(float x, int n){ fload z; if(n<0) { printf("n is a wrong number!\n"); exit(0); } if(n!=0) z=1; else z=xn(x,n); return z; } 五. 编程题 1.编程题1(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班:编号 成绩; 编号 成绩; …
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服