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程序中,用于提前结束本次循环、进行下一次循环的语句是( )。
答案: BA. breakB. continueC. returnD. exit9. 若有数组定义语句:int t[3][2];则 t数组最后一个元素是:答案: DA. t[3][2]B. t[2][3]C. t[2]D. t[2][1]10. 设有定义int a[]={1,3,5,7,9},*p=a; while(*p!=3) p++; 结果为7的表达式是:答案: AA. *(p+2)B. *(p+3)C. *p+2D. *p+311. char a[10];不能将字符串"abc"存储在数组a中的是( )。
答案: CA. strcpy(a,"abc");B. a[0]=0;strcat(a,"abc");C. a="abc";D. int i; for(i=0;i<3;i++)a[i]=i+97;a[i]=0;12. 设有下列函数原型和变量定义语句,则合法的函数调用语句是:int func( int a[], int n );int a[10], n, x;答案: BA. func( a, n ) = x;B. x = func( a, n );C. x = func( a[], n );D. x = func( a[10], n );13. 若有以下定义,输出字母M的语句是:struct personchar name[9];int age;struct person st[10] ={{"john",17},{"paul",19},{"Mary",18}};答案: DA. printf("%c",st[2].name);B. printf("%c",st[3].name[1]);C. printf("%c",st[2].name[1]);D. printf("%c",st[2].name[0]);14. 需要以写模式打开当前目录下一个名为myfile.txt的文本文件,下列打开文件正确的选项是:答案: BA. fopen("myfile.txt","r");B. fopen("myfile.txt","w");C. fopen("myfile.txt","rb");D. fopen("myfile.txt","wb");15. 假定建立了以下链表结构:struct node{char id ;struct node *next;} *head,*p;如下图所示:指针p指向一个新结点,将新结点插入到链表成为头结点的两条C语言语句是【】答案: DA. head=p->next; p=head;B. p->data=head; head=p;C. head=p->data; p=head;D. p->next=head; head=p;二、程序填空题 ( 本大题 3 道小题,每空 2.5 分,共 30 分)。
1. 程序运行时输出如图所示的数字倒三角形1234567123451231源程序:#include <stdio.h>void main(){ int i,j;____1____;for(i=1;i<=4;i++){ k=1;for(j=1;j<i;j++)putchar(' '); /* 输出空格 */for(j=9-2*i;j>0;j--)printf("%d", k );____2____;putchar(____3____);1):【int k】2):【k++】【k=k+1】3):【'\n'】2. 输入一行字符串,分别统计字符串中各元音字母(AEIOU)的个数(不分大小写)。
源程序:#include <stdio.h>void main(){ char a[80];int n[5]={0,0,0,0,0}; /* 数组n存放各元音字母个数 */____1____;gets(a);for(____2____; a[i]!='\0'; i++)switch(____3____)case 'A':case 'a': n[0]++; break;case 'E':case 'e': n[1]++; break;case 'I':case 'i': n[2]++; break;case 'O':case 'o': n[3]++; break;case 'U':case 'u': n[4]++; break;for(i=0;i<5;i++)printf("%d\n",____4____); /* 输出各元音字母个数 */1):【int i】2):【i=0】3):【a[i]】4):【n[i]】3. 程序功能:函数f的功能是从字符串中删除所有的数字字符,并返回删除的个数;主程序调用函数f删除字符串str中的数字字符,并输出删除的字符数。
源程序:#include <stdio.h>#include <string.h>int f(char s[]){ int i=0;____1____;while(s[i]!='\0')if(s[i]>='0'&&s[i]<='9')strcpy(s+i,s+i+1);count=count+1; /* count表示删除的数字字符数 */else____2____;return ____3____;void main(){ char str[80];int m;printf("输入字符串:");gets(str);m=____4____;printf("删除数字后的字符串:");puts(str);printf("删除的数字字符个数:%d",____5____);1):【int count=0】2):【i++】【i=i+1】3):【count】4):【f(str)】5):【m】三、操作题二、程序调试题(3小题,共20分)1. 程序调试题1(X_2_1.C)调试要求:下列程序不能得到正确的结果,它包含2个错误,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*modified*/字样的注释),使其运行能得到正确的结果。
将结果(包括X_2_1.C文件和X_2_1.EXE文件)保存到目录C:\KS\中。
功能说明:计算半径为1~n的圆的面积,仅打印超过50 的圆面积。
如输入:6则输出:r=4,square=50.265488r=5,square=78.539825r=6,square=113.097351带错误原程序(见C:\KS\X_2_1.C):#include <stdio.h>main()int r,n;float area;scanf("%d",&n);for (r=1,r<=n;r++)area=3.141593*r*r;if (area<50.0) continue;printf("r=%d,square=%d\n",r,area);getch();2. 程序调试题2(X_2_2.C)调试要求:下列程序不能得到正确的结果,它包含3个错误,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*modified*/字样的注释),使其运行能得到正确的结果。