上海市高等学校计算机等级考试试卷二级C语言程序设计( B 卷)
2019年上海市高等学校计算机等级考试试卷二级C语言程序设计10页word

2019年上海市高等学校计算机等级考试试卷二级 C语言程序设计(本试卷考试时间 120 分钟)一、单选题 ( 本大题 15 道小题,每小题 1 分,共 15 分),从下面题目给出的A、B、C、D四个可供选择的答案中选择一个正确答案。
1. 以下C程序中预处理命令写法正确的是:答案: DA. #include (stdio.h)B. #include [stdio.h]C. #include {stdio.h}D. #include <stdio.h>2. 设有变量定义语句char a; 则下面的赋值语句中 ( ) 是正确的。
答案: AA. a='&';B. a="&";C. a=' ' ';D. a='16' ;3. 设有char ch; 与语句“ch=getchar();”等价的语句是:答案: DA. printf("%c",ch);B. printf("%c",&ch);C. scanf("%c",ch);D. scanf("%c",&ch);4. int a=2, b=5;则表达式21%9/(float)a+4/b*b的运算结果为( )。
答案: CA. 2B. 1C. 1.5D. 05. 能正确表示逻辑关系"a>=10 或 a<=0"的C语言表达式是( )。
答案: CA. a>=10 or a<=0B. a<=0|a>=10C. a<=0||a>=10D. a>=10 && a<=06. 设有int n=60;写出下列语句的运行结果switch (n/10)case 6: printf("@");break;case 5: printf("#");default: printf("$");答案: DA. @#$B. #$C. $D. @7. 设有int i; 以下语句中,循环次数为100次的语句是:答案: DA. for ( i=0; i<=100; i++ )B. for ( i=0; i<99; i++ )C. for ( i=1; i<99; i++ )D. for ( i=0; i<100; i++ )8. C程序中,用于提前结束本次循环、进行下一次循环的语句是( )。
2021年上海计算机等级考试二级CB卷

二级C( B卷) 一、单项选取题(答案在最后)二、填空题(答案在最后)程序功能:输入一种正整数,将其各位上为偶数数字去除,剩余数按本来从高位到低位顺序构成一种新数,并将其输出到文献out1.txt中。
例如,输入:,输出到文献:135779。
代码:#include <stdio.h>int main(void){long n;int k,i=1;int _____(1)_____;FILE *fp;fp=fopen("out1.txt","w");scanf("%ld",&n);while ( _____(2)_____ ){k = _____(3)_____;n = n/10;if (k%2 == 1){z = z+k*i;i = 10*i;}}fprintf(fp,"%d\n",z);_____(4)_____; /* 关闭文献 */ return 0;}程序功能:从键盘输入一种字符串和一种字符,记录字符串中该字符浮现次数,并输出成果。
例如,输入字符串:aBEddfghDdd,输入字符:d,输出成果:4。
代码:#include <stdio.h>int num(char str[]){char ch;int i=0,count=0;printf("输入字符:");scanf("%c",&ch);while( _____(1)_____ ){if( _____(2)_____ )count++;i++;}return count;}int main(void){char str[80];int n;printf("输入字符串:");gets( _____(3)_____ );n = _____(4)_____;printf("输出成果:%d\n",n);return 0;}三、操作题(一)程序调试题(3小题,第1、2小题各3处错,第3小题4处错,每错误点3分,共30分)1. 程序调试题1调试规定:下列程序(C:\KS\B_2_1.c)包括3个错误,请按题中功能规定,调试并修改该程序(在所修改语句后加/*******/字样注释),使其运营能得到对的成果。
计算机等级考试二级c语言程序设计

【答案】
A
【解析】
fgets函数功能是从f所指文件中读入n-1个字符放入s为起始地址的空间内,并在尾端自动加一个结束标志“\0”。同时将读/写位 置指针向前移动字符串长度个字节。在读出n-1个字符之前,如遇到了换行符或EO F,则读出结束,A 项正确。B项中“读取长 度为n”错误。C项与D项中“读取n/n-1个字符串”错误,读取的是n-1个字符。答案选择A 选项。
C. 可以取一个表达式的地址赋值给同类型的指针变量
D. 可以取一个指针变量的地址赋值给基类型相同的指针变量
【答案】
A
【解析】 常数的地址存储在内存的常量区,常量区存储的都是常量,值都是不可修改的,所以直接取常量的地址赋给指针变量没有任
何意义,C语言也不允许这样做,编译会出错,B项错误;表达式的值存储在临时变量中,内存中存在专门用来存储临时变量 的区域,对这块地址进行操作也是没有意义的,C语言不允许这样做,编译会出错,C项错误;可以取一个指针变量的地址, 但是指针变量的地址属于指针,只能赋值给指针类型的指针变量,D项错误。答案选择A 选项。
程序运行后的输出结果是( )。
A. 4,5,3,4 B. 4,3,2,1 C. 4,5,3,3 D. 4,5,1,3
【答案】
A
【解析】
对于字符数组a,含有4个元素,所以strlen为4,而sizeof包括最后隐藏的\0,故sizeof有5个。对于字符串b,strlen为3大家都 能理解,关键是sizeof,这里的sizeof不再是指数组的长度,因为b是一个地址值,整型数据,所以占用了4个字节,这个题目 是一个难点,请大家谨记。答案选择A 选项。
上海市高等学校计算机等级考试试题「有答案」

上海市高等学校计算机等级考试试题「有答案」一、单选题1、在OSI七层结构模型中,最低层是____B___。
A、表示层B、物理层C、网络层D、会话层2、计算机硬件能直接识别和执行的程序设计语言是__D_____。
A、汇编语言B、符号语言C、高级语言D、机器语言3、一般说来,__C_________则声音的质量越高。
A、量化级数越低和采样频率越低B、量化级数越高和采样频率越低C、量化级数越高和采样频率越高D、量化级数越低和采样频率越高4、电子信箱地址的格式是_____D___。
A、用户名.主机域名B、主机域名,用户名C、主机名@用户名D、用户名@主机域名5、IP协议是____C________协议。
A、传输层B、物理层C、网络层D、数据链路层6、在以太网中,采用CSMA/CD方法,能有效解决__A____。
A、多站点在共享传输介质访问中的争用信道问题B、单站点在共享传输介质访问中的争用信道问题C、单站点在共享传输介质访问中的共用信道问题D、多站点在独享传输介质访问中的争用信道问题7、色彩位数用8位二进制来表示每个像素的颜色时,能表示___C________种不同颜色A、64B、16C、256D、88、A/D转换器的功能是将_____B_____。
A、声音转换为模拟量B、模拟量转换为数字量C、数字量和模拟量混合处理D、数字量转换为模拟量9、十进制数7777转换为二进制数是____A______。
A、1111001100001B、1110001100001C、1100111100111D、111101110001110、网络、调制解调器的传输速率往往用bps作为单位,它是指_A________。
A、每秒钟通过的二进制码位数B、每秒钟通过的二进制码字节数C、每秒钟通过的波形数D、每分钟通过的二进制码字节数11、在Windows的图形界面中,按_____C_____可以打开开始菜单。
A、CTL+TABB、ALT+TABC、CTRL+ESCD、ALT+ESC12、以下叙述中,正确的是BA、图像经数字压缩处理后可得到图形B、经扫描仪输入到计算机后,可以得到由像素组成的图像C、图形属于图像的一种,是计算机绘制的画面D、经摄像机输入到计算机后,可转换成由像素组成的图形13、下面不属于局域网网络拓扑的是___A_______。
上海计算机二级C语言考试真题

1单选设有定义int a[10]; 则合法数组元素的下标范围为_0~9_____设有定义:int x=10,y=20,z=30; 则执行下列语句后的结果是___20,30,30_____ if ( x>y ) z=x;x=y; y=z;printf("%d,%d,%d",x, y, z );执行下列语句序列后,不可能出现的运行结果是________ int n;scanf( "%d", &n);switch ( n ){case 1:case 2: putchar('X');case 3:case 4: putchar('Y'); break;default: putchar('Z');}2填空设有以下程序段,则执行完该程序段后,变量 i 的值是________ int i;char s[]="Hello!", *p=s;for( i=0; *(p+i)!='\0';i++ );阅读以下程序并写出运行结果___________ #include <stdio.h>main(){int k,n=0;for ( k=1; k<=1000; k++ )if ( k%3==0 && k%5==0 ){printf( "%d ", k );n++;if ( n==3 ) break;}}3程序填空以下程序输入n和n个大于1的正整数,输出其中素数。
如输入:5 19 93 11 37 15则输出:19 11 37例示说明:先输入n为5,再输入5个正整数,输出5个整数中的素数#include <stdio.h>void main(){int n, a, i, j, ct;scanf( "%d", &n );for ( i=0; ____(1)____; i++ ){______(2)______;scanf( "%d", &a );for( j=2; j<a; j++ )if ( ____(3)____ )ct++;if ( ct==0 )printf( "%d ", a );}printf( "\n" );}以下程序从文件“student.txt”读取学生的学号、姓名、平时成绩和考试成绩,再从键盘上输入一个成绩,将所有考试成绩达到或超过该成绩的学生数据写到新的文本文件“studentD.txt”。
《全国计算机等级考试二级教程——C语言程序设计》课后习题详细答案

《全国计算机等级考试二级教程——C语言程序设计》习题分析与详细解答第一章程序设计基本概念习题分析与解答1.1 【参考答案】EXE1.2 【参考答案】[1].C [2].OBJ [3].EXE1.3 【参考答案】[1]顺序结构[2]选择结构[3]循环结构第二章C程序设计的初步知识习题分析与解答一、选择题2.1 【参考答案】B)2.2 【参考答案】D)2.3 【参考答案】B)2.4 【参考答案】A)2.5 【参考答案】C)2.6 【参考答案】A)2.7 【参考答案】B)2.8 【参考答案】B)2.9 【参考答案】D)2.10 【参考答案】C)2.11 【参考答案】B)2.12 【参考答案】B)2.13 【参考答案】A)二、填空题2.14 【参考答案】[1]11 [2]122.15 【参考答案】[1]4.2 [2]4.22.16 【参考答案】[1]{ [2]} [3]定义[4]执行2.17 【参考答案】[1]关键字[2]用户标识符2.18 【参考答案】[1]int [2]float [3]double2.19 【参考答案】float a1=1.0, a2=1.0;或float a1=1, a2=1;(系统将自动把1转换为1.0)2.20 【参考答案】存储单元2.21 【参考答案】 3.52.22 【参考答案】[1]a*b/c [2]a/c*b [3]b/c*a2.23 【参考答案】把10赋给变量s2.24 【参考答案】[1]位[2]1位二进制数据(0或1)2.25 【参考答案】[1]8 [2]127 [3]01111111 [4]-128 [ 5 ] 10000000 2.26 【参考答案】[1]32767 [2]-32768 [3]100002.27 【参考答案】[1]十[2]八[3]十六三、上机改错题2.28 【分析与解答】第1行的错误:(1) include是一个程序行,因此在此行的最后不应当有分号(;)。
上海市高等学校计算机等级考试试卷二级C语言程序设计(B卷)

上海市⾼等学校计算机等级考试试卷⼆级C语⾔程序设计(B卷)上海市⾼等学校计算机等级考试试卷⼆级 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.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,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,06. 若有说明: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. 如果形参获取实参的地址,则____________作为函数调⽤时的实参。
上海市高等学校计算机等级考试试卷二级C语言程序设计

20XX年上海市高等学校计算机等级考试试卷二级 C语言程序设计(本试卷考试时间 120 分钟)一、单选题 ( 本大题 15 道小题,每小题 1 分,共 15 分),从下面题目给出的A、B、C、D四个可供选择的答案中选择一个正确答案。
1. 以下C程序中预处理命令写法正确的是:答案: DA. #include (stdio.h)B. #include [stdio.h]C. #include {stdio.h}D. #include <stdio.h>2. 设有变量定义语句char a; 则下面的赋值语句中 ( ) 是正确的。
答案: AA. a='&';B. a="&";C. a=' ' ';D. a='16' ;3. 设有char ch; 与语句“ch=getchar();”等价的语句是:答案: DA. printf("%c",ch);B. printf("%c",&ch);C. scanf("%c",ch);D. scanf("%c",&ch);4. int a=2, b=5;则表达式21%9/(float)a+4/b*b的运算结果为( )。
答案: CA. 2B. 1C. 1.5D. 05. 能正确表示逻辑关系"a>=10 或 a<=0"的C语言表达式是( )。
答案: CA. a>=10 or a<=0B. a<=0|a>=10C. a<=0||a>=10D. a>=10 && a<=06. 设有int n=60;写出下列语句的运行结果switch (n/10){case 6: printf("@");break;case 5: printf("#");default: printf("$");}答案: DA. @#$B. #$C. $D. @7. 设有int i; 以下语句中,循环次数为100次的语句是:答案: DA. for ( i=0; i<=100; i++ )B. for ( i=0; i<99; i++ )C. for ( i=1; i<99; i++ )D. for ( i=0; i<100; i++ )8. C程序中,用于提前结束本次循环、进行下一次循环的语句是( )。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上海市高等学校计算机等级考试试卷二级 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.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,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 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==*piB. *pi ==*&jC. i==&jD. i==**pi9. 若有定义:struct person{int id ;char name[20];} per,*s=&per;则以下对结构体成员的引用中正确的____________A. [0]B. s->name[0]C. [8]D. 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. 设有说明语句: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语言语句是【】图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= 16too large !请输入你猜测的数y= 4too small !请输入你猜测的数y= 9right ! (本题是第三次猜对,得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 ");elseprintf("%s\n", ( 3 )? "too small !" :"too large !");}while(right==0&& 4 );if (right)score+= ( 5 ); /* 统计成绩 */elseprintf("out of time !\n");}printf("\nTotal score:%d\n", score);}2. 以下程序输入10行字符串,要求按字典顺序从小到大排序。
#include <stdio.h>#define N 10int 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. 将两个文本文件中字符'$'之后的内容合并到一个文件中去,其中函数voidsub(FILE*all, FILE*f1 ,FILE *f2 )的功能是将文件指针f1,f2所指向的文件中的内容写到文件指针all所指向的文件中; main函数完成如下功能:先打开目标文件,再依次打开源文件,调用sub函数完成文件内容的拷贝。
例如三个源文件 f1.txt ,f2.txt, 每个文件的内容分别如下文件名内容f1 aaa$aaf2 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*/字样的注释),使其运行能得到正确的结果。