(本试卷考试时间 120 分钟)
一、单选题 ( 本大题 15 道小题 ,每小题 1 分,共 15 分),从下面题目给出的A、B、C、D四个可供选择的答案中选择一个正确答案。 1. 以下C程序中预处理命令写法正确的是:
答案: D
A. #include (stdio.h) B. #include [stdio.h] C. #include {stdio.h} D. #include 2. 设有变量定义语句char a; 则下面的赋值语句中 ( ) 是正确的。 答案: A A. a='&'; B. a=\"&\"; C. a=' ' '; D. a='16' ; 3. 设有char ch; 与语句“ch=getchar();”等价的语句是: 答案:A. printf(\"%c\B. printf(\"%c\C. scanf(\"%c\D. scanf(\"%c\ 4. int a=2, b=5;则表达式21%9/(float)a+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 页 D 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 t[3][2];则 t数组最后一个元素是: 答案: D A. 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的表达式是: 答案: A A. *(p+2) 第 2 页 共 12 页 B. *(p+3) C. *p+2 D. *p+3 11. char a[10];不能将字符串\"abc\"存储在数组a中的是( )。 答案: C A. 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; 答案: B A. func( a, n ) = x; B. x = func( a, n ); C. x = func( a[], n ); D. x = func( a[10], n ); 13. 若有以下定义,输出字母M的语句是: struct person { char name[9]; int age; }; struct person st[10] = {{\"john\ 答案: D A. printf(\"%c\B. printf(\"%c\C. printf(\"%c\D. printf(\"%c\ 14. 需要以写模式打开当前目录下一个名为myfile.txt的文本文件,下列打开文件正确的选项是: 答案: B A. fopen(\"myfile.txt\B. fopen(\"myfile.txt\C. fopen(\"myfile.txt\ 第 3 页 共 12 页 D. fopen(\"myfile.txt\ 15. 假定建立了以下链表结构:struct node{ char id ; 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 for(i=1;i<=4;i++) { k=1; for(j=1;jputchar(' '); /* 输出空格 */ for(j=9-2*i;j>0;j--) { 第 4 页 共 12 页 printf(\"%d\ ____2____; } putchar(____3____); } } 1): 【int k】 2): 【k++】【k=k+1】 3): 【'\\n'】 2. 输入一行字符串,分别统计字符串中各元音字母(AEIOU)的个数(不分大小写)。 源程序: #include { 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\输出各元音字母个数 */ } 1): 【int i】 2): 【i=0】 3): 【a[i]】 4): 【n[i]】 第 5 页 共 12 页 3. 程序功能:函数f的功能是从字符串中删除所有的数字字符,并返回删除的个数;主程序调用函数f删除字符串str中的数字字符,并输出删除的字符数。 源程序: #include 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\} 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个错误,请按题中的功能要求,调试并 第 6 页 共 12 页 修改该程序(在所修改语句后加/*modified*/字样的注释),使其运行能得到正确的结果。将结果(包括X_2_1.C文件和X_2_1.EXE文件)保存到目录C:\\KS\\中。 功能说明:计算半径为1~n的圆的面积,仅打印超过 50 的圆面积。 如输入:6 则输出: r=4,square=50.265488 r=5,square=78.539825 r=6,square=113.097351 带错误原程序(见C:\\KS\\X_2_1.C): #include int r,n; float area; scanf(\"%d\ for (r=1,r<=n;r++) { area=3.141593*r*r; if (area<50.0) continue; printf(\"r=%d,square=%d\\n\ } getch(); } 2. 程序调试题2(X_2_2.C) 调试要求:下列程序不能得到正确的结果,它包含3个错误,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*modified*/字样的注释),使其运行能得到正确的结果。将结果(包括X_2_2.C文件和X_2_2.EXE文件)保存到目录C:\\KS\\中。 功能说明:将输入的十进制整数n通过函数DtoH转换为十六进制数,并将转换结果以字符串形式输出。 如输入:79 则输出:4F 又输入:1234 则输出:4D2 带错误原程序(见C:\\KS\\X_2_2.C): #include int DtoH(int n,char *str) { int i,d; for (i=0;n!=0,i++) { d=n%16; if (d>=10) str[i]='0'+d; else 第 7 页 共 12 页 str[i]='A'+d-10; n/=16; } return i; } main() { int i,k,n; char str[80]; scanf(\"%d\ k=DtoH(n,str); for (i=k-1;i>=0;i--) printf(\"%c\ getch(); } 3. 程序调试题3(X_2_3.C) 调试要求:下列程序不能得到正确的结果,它包含3个错误,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*modified*/字样的注释),使其运行能得到正确的结果。将结果(包括X_2_3.C文件和X_2_3.EXE文件)保存到目录C:\\KS\\中。 功能说明:函数fun分别统计字符串中大写字母和小写字母的个数,main()函数完成字符串的输入和统计数的输出。 如输入:AAaaBBb123CCccccd 则输出:upper=6,lower=8 带错误原程序(见C:\\KS\\X_2_3.C): #include void fun(char *s, int *a, int *b) { while (*s=='\\0') { if(*s>='A' && *s<='Z') (*a)++; if (*s>='a' || *s<='z') (*b)++; s++; } } main() { char s[100]; int upper=0, lower=0; gets(s); fun(s,&upper,&lower); 第 8 页 共 12 页 printf(\"\\nupper=%d,lower=%d\\n\ getch(); } 四、编程题(2小题,共35分) 1.编程题1(X_4_1.C) 编程要求: 请按题中的功能要求,编写程序并能得到正确的结果。将结果(包括X_4_1.C文件和X_4_1.EXE文件)保存到目录C:\\KS\\中。 功能说明:编写程序,通过以下步骤验证一个正整数对是否符合特定的编码规则: (1)输入正整数a与b; (2)计算a的所有不同的质因子(包括1)之积,记为s; (3)如果s等于b,则通过验证,输出“OK”,否则输出“Err”。 输出格式参见以下示例。 运行示例1: 输入:588 42 输出:588: 1*2*3*7=42, OK 说明:输入数为588(对应a)和42(对应b),588的质因子为1、2、3和7,其累乘结果为42(对应s),由s等于b(均为42),输出OK。 运行示例2: 输入:17 55 输出:17: 1*17=17, Err(17!=55) 说明:质因子为1和17,乘积仍为17,不等于b(55),输出Err,及不通过原因“(17!=55)”。 参考答案 #include void input(int *p,int *q) { printf(\"请输入a\\n\");scanf(\"%d\ printf(\"请输入b\\n\");scanf(\"%d\} int zs(int a) { int i=2,s=1,j=0; printf(\"1\"); while(a>=i) { if(a%i==0) { if(j!=i) {printf(\"*%d\ s=s*i;} a/=i; j=i;} else ++i; 第 9 页 共 12 页 } return s; } void output(int a,int s) { if(a==s) printf(\ else printf(\} main() { int a,b; input(&a,&b); output(b,zs(a)); } 2.编程题2(X_4_2.C) 编程要求: 请按题中的功能要求,编写程序并能得到正确的结果。将结果(包括X_4_2.C文件和X_4_2.EXE文件)保存到目录C:\\KS\\中。 功能说明:编写程序,实现以下成绩处理功能(输出格式参见示例): (1)输入n和n个成绩(成绩为浮点数类型,数组名记为a,假设1≤n≤50); (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 input(float a[],int n) 第 10 页 共 12 页 { int i; for(i=0;i float sum(float a[],int n) { float sum=0;int i; for(i=0;i return sum; } float ave(float s,int n) { float ave; return s/n; } int cout(float a[],int n,float s,float b[],float c[]) { int i,cout=0,j=0,k=0; for(i=0;i c[k++]=a[i]; return cout; } float max(float a[],int n) { float max;int i;max=a[0]; for(i=1;i float min(float a[],int n) { int i;float min;min=a[0]; 第 11 页 共 12 页 for(i=1;i char ch1='%';int c0,c1; float s,ave1,cb,cb1; FILE *fp; fp=fopen(\"c:\\\\KS\\\\x42.txt\ s=sum(a,n); ave1=ave(s,n); c0=cout(a,n,ave1,b,c);c1=n-c0; cb=((float)c0/n)*100;cb1=((float)c1/n)*100; printf(\"Sum=%.1f, Ave=%.1f\\n\ printf(\"A: %d,%.2f %c B: %d,%.2f%c\\n\ printf(\"MinA: %.2f,%+.1f MaxB: %.2f,%.1f\\n\; fprintf(fp,\"Sum=%.1f, Ave=%.1f\\n\ fprintf(fp,\"A: %d,%.2f %c B: %d,%.2f%c\\n\ fprintf(fp,\"MinA: %.2f,%+.1f MaxB: %.2f,%.1f\\n\; fclose(fp); } main() { float a[50],b[50],c[50];int n; printf(\"输入学生人数\\n\"); scanf(\"%d\ input(a,n); output(a,b,c,n); } 第 12 页 共 12 页 因篇幅问题不能全部显示,请点此查看更多更全内容