2022年上海市高等学校计算机等级考试试卷二级C语言程序设计.docx
名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -20XX年上海市高等学校运算机等级考试试卷二级 C 语言程序设计一、单项题 (本试卷考试时间 120 分钟)A、B、C、本大题 15 道小题,每道题 1 分,共 15 分),从下面题目给出的D四个可供挑选的答案中挑选一个正确答案;1. 以下 C程序中预处理命令写法正确选项:答案: D A. #include stdio.h B. #include stdio.h C. #include stdio.h D. #include <stdio.h> 2. 设有变量定义语句char a; 就下面的赋值语句中 是正确的;答案: A A. 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/floata+4/b*b的运算结果为 ;答案: C A. 2 B. 1 C. 1.5 D. 0 5. 能正确表示规律关系"a>=10 或 a<=0" 的 C语言表达式是 ;答案: C A. a>=10 or a<=0 B. a<=0|a>=10 C. a<=0|a>=10 D. a>=10 && a<=0 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 1 页,共 12 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -6. 设有 int n=60;写出以下语句的运行结果 switch n/10 case 6: printf""break; case 5: printf"#" default: printf"$" 答案: D A. #$ B. #$ C. $ D. 7. 设有 int i; 以下语句中,循环次数为100 次的语句是:答案: D A. 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程序中,用于提前终止本次循环、进行下一次循环的语句是 ;答案: B A. break B. continue C. return D. exit 9. 如有数组定义语句:int t32;就 t数组最终一个元素是:答案: D A. t32 B. t23 C. t2 D. t21 10. 设有定义 int a=1,3,5,7,9,*p=a; while*p.=3 p+; 结果为 7 的表达式是:答案: A A. *p+2 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 2 页,共 12 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -B. *p+3 C. *p+2 D. *p+3 11. char a10;不能将字符串 "abc" 储备在数组a 中的是 ;答案: C A. strcpya,"abc" B. a0=0;strcata,"abc" C. a="abc" D. int i; fori=0;i<3;i+ai=i+97;ai=0; 12. 设有以下函数原型和变量定义语句,就合法的函数调用语句是: int func int a, int n ; int a10, n, x; 答案: B A. func a, n = x; B. x = func a, n ; C. x = func a, n ; D. x = func a10, n ; 13. 如有以下定义,输出字母M的语句是: struct person char name9; int age; ; struct person st10 = "john",17,"paul",19,"Mary",18; 答案: D A. printf"%c",st2.name; B. printf"%c",st3.name1; C. printf"%c",st2.name1; D. printf"%c",st2.name0; 14. 需要以写模式打开当前目录下一个名为myfile.txt的文本文件, 以下打开文件正确的选项是:答案: B A. fopen"myfile.txt","r" B. fopen"myfile.txt","w" C. fopen"myfile.txt","rb" 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 3 页,共 12 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -D. fopen"myfile.txt","wb" 15. 假定建立了以下链表结构:struct node id ; char struct node *next; *head , *p; 如下图所示: 指针 p指向一个新结点, 将新结点插入到链表成为头结点的两条C语言语句是 【】答案: D A. 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. 程序运行时输出如下列图的数字倒三角形 1234567 12345 123 1 源程序:#include <stdio.h> void main int i,j; _1_; fori=1;i<=4;i+ k=1; forj=1;j<i;j+ putchar' ' /* 输出空格 */ forj=9-2*i;j>0;j- 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 4 页,共 12 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -printf"%d", k ; _2_; putchar_3_; 1):【int k】2):【k+】【k=k+1】AEIOU)的个数(不分大小写);3):【'n'】2. 输入一行字符串,分别统计字符串中各元音字母(源程序:#include <stdio.h> void main char a80; int n5=0,0,0,0,0; /* 数组 n 存放各元音字母个数 */ _1_; getsa; for_2_; ai.='0' i+ switch_3_ case 'A': case 'a': n0+; break; case 'E': case 'e': n1+; break; case 'I': case 'i': n2+; break; case 'O': case 'o': n3+; break; case 'U': case 'u': n4+; break; fori=0;i<5;i+ printf"%dn",_4_; /* 输出各元音字母个数 */ 1):【int i】 第 5 页,共 12 页 2):【i=0 】3):【ai】4):【ni】细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -3. 程序功能: 函数 f 的功能是从字符串中删除全部的数字字符,并返回删除的个数;主程序调用函数f 删除字符串str中的数字字符,并输出删除的字符数;源程序:#include <stdio.h> #include <string.h> int fchar s int i=0; _1_; whilesi.='0' ifsi>='0'&&si<='9' strcpys+i,s+i+1; count=count+1; /* count表示删除的数字字符数 */ else _2_; return _3_; void main char str80; int m; printf" 输入字符串: " getsstr; m=_4_; printf"删除数字后的字符串:" putsstr; printf"删除的数字字符个数:%d",_5_; 1):【int count=0】2):【i+ 】【i=i+1 】3):【count 】4):【fstr】5):【m】三、操作题二、程序调试题( 3小题,共 20分)1. 程序调试题 1(X_2_1.C)调试要求: 以下程序不能得到正确的结果,它包含2个错误 ,请按题中的功能要求,调试并细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 6 页,共 12 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -修改该程序 在所修改语句后加/*modified*/ 字样的注释 ,使其运行能得到正确的结果;将结果(包括 X_2_1.C 文件和 X_2_1.EXE 文件)储存到目录 中;功能说明: 运算半径为 1n的圆的面积,仅打印超过 50 的圆面积;如输入: 6 就输出:r=4,square=50.265488 r=5,square=78.539825 r=6,square=113.097351 带错误原程序(见 C:KSX_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=%dn",r,area; getch; 2. 程序调试题 2(X_2_2.C)调试要求: 以下程序不能得到正确的结果,它包含3个错误 ,请按题中的功能要求,调试并修改该程序 在所修改语句后加 /*modified*/ 字样的注释 ,使其运行能得到正确的结果;将结果(包括 X_2_2.C 文件和 X_2_2.EXE 文件)储存到目录 中;功能说明: 将输入的十进制整数 形式输出;n通过函数 DtoH 转换为十六进制数,并将转换结果以字符串如输入: 79 就输出: 4F 又输入: 1234 就输出: 4D2 带错误原程序(见 C:KSX_2_2.C ):#include <stdio.h> int DtoHint n,char *str int i,d; for i=0;n.=0,i+ d=n%16; if d>=10 stri='0'+d; else 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 7 页,共 12 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -stri='A'+d-10; n/=16; return i; main int i,k,n; char str80; scanf"%d",&n; k=DtoHn,str; for i=k-1;i>=0;i- printf"%c",stri; getch; 3. 程序调试题 3(X_2_3.C)调试要求: 以下程序不能得到正确的结果,它包含3个错误 ,请按题中的功能要求,调试并修改该程序 在所修改语句后加 /*modified*/ 字样的注释 ,使其运行能得到正确的结果;将结 果(包括 X_2_3.C 文件和 X_2_3.EXE 文件)储存到目录 中;功能说明: 函数 fun 分别统计字符串中大写字母和小写字母的个数,main 函数完成字符串 的输入和统计数的输出;如输入: AAaaBBb123CCccccd 就输出: upper=6,lower=8 带错误原程序(见 C:KSX_2_3.C ):#include <stdio.h> void funchar *s, int *a, int *b while *s='0' if*s>='A' && *s<='Z' *a+; if *s>='a' | *s<='z' *b+; s+; main char s100; int upper=0, lower=0; getss; funs,&upper,&lower; 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 8 页,共 12 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -printf"nupper=%d,lower=%dn",upper,&lower; getch; 四、编程题( 2小题,共 35分)1编程题 1(X_4_1.C)编程要求:请按题中的功能要求,编写程序并能得到正确的结果;将结果(包括 X_4_1.C 文件和X_4_1.EXE 文件)储存到目录 中;功能说明: 编写程序,通过以下步骤验证一个正整数对是否符合特定的编码规章:(1)输入正整数 a与b;(2)运算 a的全部不同的质因子(包括 1)之积,记为 s;(3)假如 s等于 b,就通过验证,输出 输出格式参见以下示例;运行示例 1:输入: 588 42 输出: 588: 1*2*3*7=42, OK“ OK”,否就输出 “ Err ” ;说明: 输入数为 588(对应 a)和 42(对应 b),588的质因子为 1、 2、3和7,其累乘结果为 42(对应 s),由 s等于 b(均为 42),输出 OK;运行示例 2:输入: 17 55 输出: 17: 1*17=17, Err17.=55 说明: 质因子为 1和17,乘积仍为 17,不等于 b(55),输出 Err ,及不通过缘由“ 17.=55 ”;参考答案#include <stdio.h> void inputint *p,int *q printf" 请输入 an"scanf"%d",p; printf" 请输入 bn"scanf"%d",q; int zsint a int i=2,s=1,j=0; printf"1" whilea>=i ifa%i=0 ifj.=i printf"*%d",i; s=s*i; a/=i; j=i; else +i; 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 9 页,共 12 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - - return s; void outputint a,int s ifa=s printf", OKn" else printf", ERR%d.=%dn",s,a; main int a,b; input&a,&b; outputb,zsa; 2编程题 2(X_4_2.C)编程要求:请按题中的功能要求,编写程序并能得到正确的结果;将结果(包括:X_4_2.C 文件和X_4_2.EXE 文件)储存到目录中;功能说明: 编写程序,实现以下成果处理功能(输出格式参见示例)(1)输入 n和n个成果(成果为浮点数类型,数组名记为a,假设 1n50);(2)运算并输出成果的累加和(记为sum)与平均成果(记为ave),将 ave的成果归为 A档,将 ave的成果归为 B档;(3)分别统计 A、 B两档的人数,运算在总人数中的比率;(4)求出 A档同学的最低分和B档同学的最高分,它们与平均成果的差值;(5)将上述结果输出到文本文件“X42.TXT”中;运行示例:输入: 9 55.5 99.5 50.0 90.0 88 59.5 48 60 78.0 输出:Sum=628.5, Ave=69.8 A: 4,44.4% B: 5,55.6% MinA: 78.0,+8.2 MaxB: 60.0,-9.8 运行后文件内容:Sum=628.5, Ave=69.8 A: 4,44.4% B: 5,55.6% MinA: 78.0,+8.2 MaxB: 60.0,-9.8说明: 输入的第 1个数表示同学人数(n=9),接着输入的 9个成果中,累加和为 628.5 (全部小数均保留一位小数输出),平均分为 69.8 分;平均分以上(A档)有 4人,占 44.4%,平均分以下( B档)有 5人,占 55.6%;A档的最低分为 78分,超出平均分 8.2 分, B档的最高分为 60分,距离平均分仍有 9.8 分的差距;参考答案#include "stdio.h" void inputfloat a,int n 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 10 页,共 12 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - - int i; fori=0;i<n;i+ printf" 输入第 %d个同学的成果 n",i+1; scanf"%f",&ai; float sumfloat a,int n float sum=0;int i; fori=0;i<n;i+ sum=sum+ai; return sum; float avefloat s,int n float ave; return s/n; int coutfloat a,int n,float s,float b,float c int i,cout=0,j=0,k=0; fori=0;i<n;i+ ifai>=s bj+=ai; cout+; else ck+=ai; return cout; float maxfloat a,int n float max;int i;max=a0; fori=1;i<n;i+ ifai>=max max=ai; return max; float minfloat a,int n int i;float min;min=a0; 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 11 页,共 12 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - - fori=1;i<n;i+ ifai<=min min=ai; return min; void outputfloat a,float b,float c,int n char ch1='%'int c0,c1; float s,ave1,cb,cb1; FILE *fp; fp=fopen"c:KSx42.txt","w" s=suma,n; ave1=aves,n; c0=couta,n,ave1,b,c;c1=n-c0; cb=floatc0/n*100;cb1=floatc1/n*100; printf"Sum=%.1f, Ave=%.1fn",s,ave1; printf"A: %d,%.2f %c B: %d,%.2f%cn",c0,cb,ch1,c1,cb1,ch1; printf"MinA: %.2f,%+.1f MaxB: %.2f,%.1fn",maxb,c0,maxb,c0-ave1,minc,c1,minc,c1-ave1 ; fprintffp,"Sum=%.1f, Ave=%.1fn",s,ave1; fprintffp,"A: %d,%.2f %c B: %d,%.2f%cn",c0,cb,ch1,c1,cb1,ch1; fprintffp,"MinA: %.2f,%+.1f MaxB: %.2f,%.1fn",maxb,c0,maxb,c0-ave1,minc,c1,minc,c1-ave1 ; fclosefp; main float a50,b50,c50;int n; printf" 输入同学人数 n" scanf"%d",&n; inputa,n; outputa,b,c,n; 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 12 页,共 12 页 - - - - - - - - -