东大23年9月《C语言及程序设计》复习题及答案
发布时间:2023-09-15 18:09:15浏览次数:51 1/ 15东 北 大 学 继 续 教 育 学 院C 语言及程序设计 复习题 第一部分(填空题):1. 按照 C 语言规定的用户标识符命名规则,不能出现在标识符中的是()。 A.大写字母 B.连接符 C.数字字符 D.下划线答案:B2. 下面关于计算机正确的是( )。 A.计算机由硬件系统和软件系统两部分构成 B.只要有硬件系统,计算机就能工作 C.计算机只能处理文本信息 D.计算机只能处理计算问题答案:A3. ( )是 c 语言提供的合法的数据类型关键字。 A.Int B.long C.Char D.integer答案:B4. 面向过程的高级语言包括( )。 A.C,JAVA B.C,BASIC C.C++.NET,ASP D.C,VB答案:B5. 软件按功能可以分为: 应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是( )。 A.编译程序 B. 操作系统 C.教务管理系统 D.汇编程序答案:C课程名称: C 语言及程序设计
10/sum+=1.0*a/b;c=b;b=a;a=a+c; }printf("%.2lf\n",sum);returnG0;}4.从键盘上输入一个百分制成绩 S,按下列原则输出其等级:若成绩大于或等于 90,则等级为 A;若成绩大于等于 80,小于 90,则等级为 B;若成绩大于等于 70,小于 80,则等级为 C;若成绩大于等于 60,小于 70,则等级为 D;若成绩小于 60,则等级为 E。答:#include <stdio.h>void main(){int data;char grade; printf("Please enter the score:");scanf("%d”, &data);switch(data/10) { case 10:case 9 : grade=’A’; break; 课程名称: C 语言及程序设计
11/case 8: grade=’B’; break; case 7: grade=’C’; break; case 6: grade=’D’; break; default: grade=’E’;}printf("the grade is %c”,grade); }第三部分(简答题):1. 说明算法可以采用哪几种控制结构组合。答:算法的控制结构给出了算法的基本框架,不仅决定了算法中各操作的执行顺序,也直接反映了算法的设计是否符合结构化原则。一个算法一般可以用顺序、选择、循环三种基本控制结构,通过顺序或嵌套组合而成。2. c 语言程序的基本单位是什么?它的结构又如何?答:函数是 c 语言程序的基本模块单元。任何函数(包括主函数 main())都是由函数说明和函数体两部分组成。其一般结构如下:[函数类型] 函数名(函数参数表) { 说明语句部分; 执行语句部分;}3. 分析下面程序的执行过程,给出输出结果。main( )课程名称: C 语言及程序设计
12/{ int x=2,y=3,z=4,a=0; a = x<z?y:z; printf("%d",a); }答:3。a = x<z?y:z 判断方式为: 若 x 小于 z 则将 a 赋值 y;否则,则将 a 赋值z,题目中 x 的值为 2,z 的值为 4,x 小于 z,因此将 a 赋值 3。4. 分析下面程序的执行过程,给出输入 55 时的输出结果。main( ){ int a; int b=33;scanf("%d",&a);if(a>50)printf("%d",b);if(a>40)printf("%d",a);if(a>30)printf("%d",a);}答:335555a=55,a 大于 50 于是执行 printf("%d",b),输出 b 的值,b 的值为 33,;接着 a 大于 40,输出 a 的值,a 的值为 55; 最后 a 大于 30,输出 a 的值,a 的值为 55;故输出为 335555课程名称: C 语言及程序设计
13/5. 分析下面程序的执行过程,若键盘输入为 5,给出输出结果。main( ){ int x=1,a=0,b=0; switch(x){case 0:b++;case 1:a++;case 2:a++;b++; } printf("a=%d, b=%d",a,b); }答:a=2, b=16. 分析下面程序的执行过程,给出结果说明 break 和 continue 的区别。main( ){ int a=1,b;for(b=l;b<10;b++){ if(b < 7) { a = 1;continue;}if(b == 8) a++;if(b > 8) break;课程名称: C 语言及程序设计
14/a++;}printf("%d\n",a);}答:47. 分析下面程序的执行过程,给出输出结果。main( ){ int a=10 ; if(a++>10) print("%d\n",++a); else print("%d\n",a--); }答:108. 分析下面程序的执行过程,给出输出结果。main( ){ int i=0,s=0; do{ if(i%2)课程名称: C 语言及程序设计
15/ {i++; continue;} i++; s+=i}while(i<7) print("%d\n",s);};答:16课程名称: C 语言及程序设计
2/ 156. 以下选项中关于 C 语言常量的叙述错误的是()。A.所谓常量,是指在程序运行过程中,其值不能被改变的量B.常量分为整型常量、实型常量、字符常量和字符串常量C.常量可分为数值型常量和非数值型常量D.经常被使用的变量可以定义成常量答案:D7. 下面描述中正确的是()。 A.C 语言提供了专门的输入/输出语句 B.C 语言调用输入/输出函数时需要使用 include 命令包含头文件 C.C 语言可以直接使用输入/输出函数 D.输入/输出函数所在的头文件是 stdlib.h答案:B8. 假设有 char 型变量 c1,c2,执行下面程序段: c1=gatchar(); c2=gatchar(); printf(“c1=%c,c2=%c\n”,c1,c2); 如果 c1 和 c2 的值分别为字符 a 和 b,则从键盘正确的输入方式是()。A. ab<回车> B.a<回车>b<回车>B. C.a<空格>b<回车> D.a<tab>b<回车>答案:A9. 下面描述中正确的是()。A.printf()函数的输出列表项只允许是变量B.printf()函数的输出列表项可以是常量、变量以及表达式课程名称: C 语言及程序设计
3/ 15C.printf()函数输出列表项也可以是另一个 printf()函数D.printf()函数的输出列表项之间用空格分隔答案:B10. 假设有:int a,b; scanf("%d,%d",&a,&b); 为了得到 a 和 b 分别为 10 和 20,从键盘正确输入数据的是()。 A.10<空格>20<回车> B.10<回车>20<回车> C.10,20<回车> D.10,20,<回车>答案:C11. 下面说法正确的是()。A.表达式计算时要考虑运算符的优先级和结合性B.表达式计算需要考虑运算符的优先级C.表达式计算时需要考虑运算符的结合性D.括号()可以改变运算符的优先级答案:A12. 下面说法正确的是()。A.负数参与“/”和“%”运算时,其结果与 C89 或 C99 的标准有关B.C 语言的“/”和“%”运算可以写成 5/0 或 5%0 的形式C.赋值运算要求他的左操作数可以是变量、常量或另一个表达式D.表达式(x=a>b)&&(y=c>d)是错误的写法答案:A13. 假设有下面程序段:int a;float b; b=a=4.5;下面错误的描述是()。A.变量 a 的值是 4 B.变量 b 的是 4.0课程名称: C 语言及程序设计
4/ 15C. 赋值表达式 a=4.5 的结果值是 4 D.变量 b 的值是 4.5答案:D14. 假设 a,b,c,x,y 均为 int 型,下面说法正确的是()。A.表达式“a+=2”等价于表达式“a=a+2”B.表达式“a*=b+c”等价于表达式“a=a*b+c”C.表达式“y=x++”等价于表达式“x++,y=x”D.表达式“y=x++”等价于表达式“y=x,x++”答案:D15. 逻辑运算符两侧运算对象的数据( )。A.只能是 0 或 1 B.只能是 0 或非 0 正数C.只能是整型或字符型数据 D.可以是任何类型的数据答案:D16. sizeof(float)是()。A.一个双精度型表达式 B. 一个整型表达式C.一个函数调用 D.一个不合法的表达式答案:B17. 结构化程序的实现由( )组成程序逻辑。A. 顺序结构 B. 分支结构 C. 循环结构 D. 顺序结构、分支结构和循环结构答案:D18. 假设变量 a 为整型量,语句 if (a!=0);和语句 if(a);相比较,正确答案( )。A. 两者作用不同 B. 两者作用等价C. 两者作用相反 D. if(a)语法错课程名称: C 语言及程序设计
5/ 15答案:B19. 为了避免在嵌套的条件语句 if-else 中产生二义性,C 语言规定:else 子句总是与( )。A.缩排位置相同的 if 配对 B. 其之前最近且不带 else 的 if 配对C. 其之前最近的 if 配对D.第一个 if 配对答案:B20. 阅读下面程序:该程序( )。 #include "stdio.h" main() { int x=-10, y=5, z=0; if (x=y+z) printf("***\n" ); else printf("$$$\n"); }A. 有语法错不能通过编译B. 输出***C. 可以通过编译但不能通过连接D. 输出$$$答案:B21. 下面说法错误的是()。A. 当条件满足时重复执行某一段程序(代码)就是循环B.循环体只有一条语句时,可以不写成复合语句形式C.while 语句、for 语句可以相互转换D.do...while 语句可以实现前判断结构答案:D22. 下面说法错误的是()。课程名称: C 语言及程序设计
6/ 15A.break 语句可退出循环体而执行该循环语句后面的语句B.break 语句可以出现在 switch 语句和循环语句中 C.continue 语句只能出现在循环结构中D.goto 语句即可以从函数体跳出,也可以跳入函数体中答案:D23. 以下不是无限循环的是( )。A. for(y=6,x=1;x<y;x+=2,y-=2) ; B. for( ; ; ) ;C. while(-5) x++; D. for(i=20; ; i--) sum+=i;答案:A24. 对以下说明语句的正确理解是( )。GGGG int a[10]={6,7,8,9,10};A. 将 5 个初值依次赋给 a[1]至 a[5]GGGG B. B. 将 5 个初值依次赋给 a[0]至 a[4]C. 将 5 个初值依次赋给 a[6]至 a[10]GGG D. 因为数组与初值的个数不相同,所以此语句不正确答案:B25. 判断字符串 a 和 b 是否相等,应当使用( )。GGG A. a==bGGG B. a=bGGG C. strcpy(a,b)GGG D. strcmp(a,b)答案:D26.在 c 语言的函数调用过程中,如果函数 funA 调用了函数 funB,函数 funB 有调用了函数 funA,则( )。 A. 称为函数的直接递归 B. 称为函数的间接递归C. 称为函数的递归定义 D. c 语言不允许这样的递归形式课程名称: C 语言及程序设计
7/ 15答案:B27.若有说明:int a=2, *p=&a, *q=p;,则以下非法的赋值语句是()。A. p=q;GGGGGGGGGG B. *p=*q;GGGGGGGGC. a=*q;GGGGGGGGGD. q=a;答案:D27.若有定义:int a[2][3];,则以下对 a 数组元素地址的正确表示为( )。A. *(a+1) B. *(a[1]+2)C. a[1]+3 D. a[0][0]答案:A29.以下对 C 语言中共用体类型数据的叙述正确的是( )。A. 可以对共用体变量名直接赋值 B. 共用体类型定义中不能出现结构体类型的成员C. 一个共用体变量中不能同时存放其所有成员D. 一个共用体变量中可以同时存放其所有成员答案:A30.若用 fopen 打开一个新的二进制文件,要求文件既能读又能写,则应选用的文件方式字符串是( )。A."wb+"GGGGGGGGGGB."r+"GGGGGGGGGC."rb+"GGGGGGGGGD."ab+"答案:A第二部分(编程题):1.判断一个 4 位数是否为回文数(正读反读都一样的数)?答案:#include<stdio.h>课程名称: C 语言及程序设计
8/ 15int main(){ int i; int a,b,c,d; printf("....\n"); for(i=1000;i<=9999;i++) { a=i/1000; b=i%10; c=(i/100)%10; d=(i%100)/10; if(a==b&&c==d) printf("%6d",i); }}2.输入正整数 n,输出 n 行 n 列的空心四边形图案。以下是 n=4 的图案* * * ** ** ** * * *答:#include <stdio.h>int main(){int i,j,n;课程名称: C 语言及程序设计
9/ 15printf("请输入 n");scanf("%d",&n);for(i=1; i<=n; i++){for(j=1; j<=n; j++)if(i==1 || j==1 || i==n || j==n)printf("*");elseprintf(" "); printf("\n");}return 0;}3.有一个分数序列:2/1,3/2,5/3,8/5,13/8,…..编程求此序列的前 20 项之和。答:#include <stdio.h>intGmain(){intGa,b,c,i;doubleGsum=0;a=2,b=1;for(i=0;i<20;i++){课程名称: C 语言及程序设计