C习题及答案.pdf_第1页
C习题及答案.pdf_第2页
C习题及答案.pdf_第3页
C习题及答案.pdf_第4页
C习题及答案.pdf_第5页
已阅读5页,还剩5页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第 1 页 共 10 页 单项选择题(在每小题的四个备选答案中,选出一个正确答案,并将正确答案的序号填在题 目的括号内。每小题 2 分,共 36 分) 1 计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确的是(A) A. C 语言程序仅可以编译执行B. C 语言程序仅可以解释执行 C. C 语言程序既可以编译执行又可以解释执行D. 以上说法都不对 解:编译执行和解释执行是计算机语言的一种执行方式。所谓编译执行就是编译解:编译执行和解释执行是计算机语言的一种执行方式。所谓编译执行就是编译连接,生成连接,生成*.exe 文件后,执行文件后,执行*.exe。大部分语言都是这种方式。比如。大部分语言都是这种方式。比如 C、Fortran,Pascal 等语言等语言;而届时执行则不能脱而届时执行则不能脱 离语言的系统环境,如离语言的系统环境,如 QBasic 语言,它由解释器现场解释执行,不生成目标程序。解释执行效率较低语言,它由解释器现场解释执行,不生成目标程序。解释执行效率较低, 低于编译执行。低于编译执行。 A、解释程序 所谓解释程序是高级语言翻译程序的一种, 它将源语言(如 BASIC)书写的源程序作为输入, 解释一句 后就提交计算机执行一句,并不形成目标程序。就像外语翻译中的“口译”一样,说一句翻一句,不产 生全文的翻译文本。这种工作方式非常适合于人通过终端设备与计算机会话,如在终端上打一条命令或 语句,解释程序就立即将此语句解释成一条或几条指令并提交硬件立即执行且将执行结果反映到终端, 从终端把命令打入后,就能立即得到计算结果。这的确是很方便的,很适合于一些小型机的计算问题。 但解释程序执行速度很慢,例如源程序中出现循环,则解释程序也重复地解释并提交执行这一组语句, 这就造成很大浪费。 B、编译程序 这是一类很重要的语言处理程序,它把高级语言(如 FORTRAN、COBOL、Pascal、C 等)源程序作为 输入,进行翻译转换,产生出机器语言的目标程序,然后再让计算机去执行这个目标程序,得到计算结 果。 编译程序工作时,先分析,后综合,从而得到目标程序。所谓分析,是指词法分析和语法分析;所 谓综合是指代码优化,存储分配和代码生成。为了完成这些分析综合任务,编译程序采用对源程序进行 多次扫描的办法,每次扫描集中完成一项或几项任务,也有一项任务分散到几次扫描去完成的。下面举 一个四遍扫描的例子:第一遍扫描做词法分析;第二遍扫描做语法分析;第三遍扫描做代码优化和存储 分配;第四遍扫描做代码生成。 值得一提的是,大多数的编译程序直接产生机器语言的目标代码,形成可执行的目标文件,但也有 的编译程序则先产生汇编语言一级的符号代码文件,然后再调用汇编程序进行翻译加工处理,最后产生 可执行的机器语言目标文件。 在实际应用中,对于需要经常使用的有大量计算的大型题目,采用招待速度较快的编译型的高级语 言较好,虽然编译过程本身较为复杂,但一旦形成目标文件,以后可多次使用。相反,对于小型题目或 计算简单不太费机时的题目,则多选用解释型的会话式高级语言,如 BASIC,这样可以大大缩短编程及 调试的时间。 2.以下叙述中错误的是(D) A.C 语言的可执行程序是由一系列机器指令构成的 B. 用 C 语言编写的源程序不能直接在计算机上运行 C. 通过编译得到的二进制目标程序需要连接才可以运行 D. 在没有安装 C 语言集成开发环境的机器上不能运行 C 源程序生成的.exe 文件 解: 由第 1 题可知,C 语言的执行方式是编译执行,即 C 语言源程序(*.cpp 或*.c)需要经过编译产生二进 制目标程序 (*.obj) , 再经过连接( 组建)成可执行程序(*.exe)才能运行。 生成的可执行程序就可单独运行, 独立于 C 语言系统。 3.以下选项中不能用作 C 程序合法常量的是(A) A.1,234B.123C.123D.“x7G“ 解:考点:常量 首先要理解何谓常量,A 中 1,234 在日常表示可以或部分语言可以识别,而 C 语言中表示整数不能 使用逗号分隔形式, C 是正确。D“x7G“为字符串常量,其中x7为控制字符表示 BEL 即响铃,所以该 第 2 页 共 10 页 字符串常量有两个字符响铃x7和G。而 B123很多人认识是错误的,实际上是正确的,书本上很少有 介绍。请看下列示例: #include void main() char x=123; char y=ab; printf(“%cn“,x); printf(“%cn“,y); 运行结果为 3 B 也就是说类似123这样表示,系统是由左向右取值,最后一个字符为其值。实际编程很少用到,但确实 允许。 4.以下选项中可用作 C 程序合法实数的是(A) A1e0B.3.0e0.2C.E9D.9.12E 解:考点:浮点数的表示 实数表示:1.01,0.01 或.01 实数的科学表示法:1.2e-4,其中尾数 1.2 和指数(必须是整数)-4 不可少,e 写出 E 也可。 从答案中可知 B 的指数是小数,C 少尾数,D 少指数。 5.若有定义语句:int a=3,b=2,c=1;,以下选项中错误的赋值表达式是(A) A.a=(b=4)=3;B.a=b=c+1;C.a=(b=4)+c;D.a=1+(b=c=4); 解:考点:表达式,赋值语法都对 A 的等效式为 b=4;b=3;a=b;有冗余,给 b 赋值两次。 B 的等效式为 b=c+1;a=b; C 的等效式为 b=4; a=b+c; D 的等效式为 c=4;b=c;a=1+b; 6.有以下程序段 char name20; int num; scanf(“name=%s num=%d“,name; 当执行上述程序段,并从键盘输入:name=Lili num=1001后,name 的值为(A) A.LiliB. name=LiliC. Lili num=D.name=Lili num=1001 解:考点:格式输入 scanf(“name=%s num=%d“,name; 蓝色部分需要用户输入,字符串%s 输入字符串时空格或回车结束,字符串接受了 Lil i,故选 A。 7.if 语句的基本形式是:if(表达式)语句,以下关于“表达式”值的叙述中正确的是(D) A. 必须是逻辑值 B.必须是整数值C. 必须是正数D. 可以是任意合法的数值 解:考点:表达式的值 条件表达式的值或为真 1/true 或为假 0/false。如果非逻辑值 0/1,则非 0 为真,故可以是任意合法的数 值,0 时为假,非 0 为真,故选 D。 8有以下程序 #include main() int x=011; printf(“%dn“,+x); 第 3 页 共 10 页 程序运行后的输出结果是(C) A. 12B.11C.10D. 9 解: 考点:表达式、八进制常量 x 的初值为八进制数 011,对应的十进制数为 9。 显示的值是表达式+x 的值,+x 的值为 10,故选 C。 9. 有以下程序 #include main() int s; scanf(“%d“, while(s0) switch(s) case 1:printf(“%d“,s+5); case 2:printf(“%d“,s+4); break; case 3:printf(“%d“,s+3); default:printf(“%d“,s+1);break; scanf(“%d“, 运行时,若输入 1 2 3 4 5 0,则输出结果是() A.6566456B.66656C.66666D.6666656 解: 考点:多分支结构,格式化输入 输入的数据之间均有空格,所以变量 s 接受的值依次为 1、2、3、4、5、0。 1 时,执行 case 1 和 case 2,显示 65 2 时,执行 case 2,显示 6 3 时,执行 case 3 和 default,显示 64 4 时,执行 default,显示 5 5 时,执行 default,显示 6 0 时循环结束,故最后显示结果为 6566456,选 A。 10. 有以下程序 #include main() char s=“012xy08s34f4w2“; int i,n=0; for(i=0;si!=0;i+) if(si=0 inti; b=a; c=A; for(i=0;i main() while( getchar()!=n); 以下叙述中正确的是(C) A. 此 while 语句将无限循环B.getchar()不可以出现在 while 语句的条件表达式中 C. 当执行此 while 语句时,只有按回车键程序才能继续执行 D. 当执行此 while 语句时,按任意键程序就能继续执行 解:考点:while 循环而和 getchar()函数 条件表达式 getchar()!=n表示从键盘输入的字符如果不是回车就为真,所以只有输入的是回车,该 循环才会结束,继续后续语句的执行。 14. 有以下程序 #include 第 5 页 共 10 页 main() int x=1,y=0; if(!x) y+; else if(x=0) if (x) y+=2; else y+=3; printf(“%dn“,y); 程序运行后的输出结果是(D) A. 3B.2C. 1D. 0 解:考点:if()else ifelse 是最简单的分支语句,为二选一, 通过嵌套可以组成多分支,嵌套时 else 总是与它前面最 近的 if 配对。将上面的 if 进行划分就非常清楚了。 if(!x) y+; else if(x=0) if (x) y+=2; else y+=3; 判断前初值 x=1,y=0,由上面语句可以看出 x=0,y 的值才会变化,故 y=0,显示结果为 0。 15.有以下程序 #include main() char a30,b30; scanf(“%s“,a); gets(b); printf(“%sn %sn“,a,b); 程序运行时若输入: how are you? I am fine 则输出结果是(B) A.how are you?B.how I am fineare you? I am fine C.how are you? I am fineD.row are you? 解:考点:字符串输入 scanf(“%s”,a)接受用户从键盘输入字符串直到空格或回车。 gets(b)接受用户输入直到回车结束,故 a 接受的是”How”,剩下的有 b 接受。 16. 设有如下函数定义 int fun(int k) if (k #define S(x) 4*(x)*x+1 main() int k=5,j=2; printf(“%dn“,S(k+j); 程序运行后的输出结果是(B) A. 197B. 143C. 33D. 28 解:考点:宏 宏是预处理的一种,分宏定义,宏调用和宏展开。定义好宏后,在编程时进行调用,用宏定义的功 能代替要编写的功能,减少编程量。编译时系统会按宏定义格式原样替换,即所谓的宏展开: S(s+j)=4*(k+j)*k+j+1=4*(5+2)*5+2+1=143 故选 B 18. 有以下程序 #include main() unsigned char a=8,c; c=a3; printf(“%dn“,c); 程序运行后的输出结果是(C) A. 32B. 16C.1D. 0 解:考点:数的表示和位运算,表达式 无符号字符表示 a=8,为单字节数据,二进制表示为 0000 1000,运算符表示右移,a3 表示将 a 右移 3 位,即 0000 100000000001,结果为 1,故选 C。 填空题(每空 2 分,共 20 分) 1.C 语言的预处理语句以_#_开头。 解:所有预处理均用#开头,如#include 包含头文件,系统在这些头文件中定义了一些函数,用 户可以调用;宏#define S(x) 4*(x)*x+1 2.表达式 7=!= , 都是二目运算符,即运算符两边都有操作数,如: xyx!=y 等,通常用作条件表达式。本题 7rj+1) temp=rj; rj=rj+1; rj+1=temp; exchange=j; for(i=0;i int fun (int x,int y) if (x!=y) return (x+y)/2); else return (x); main() int a=4,b=5,c=6; printf(“%dn“,fun(2*a,fun(b,c); 程序运行后的输出结果是6。 解:此题主要考函数的递归调用。首先要弄懂函数的功能,从函数体 if (x!=y) return (x+y)/2); else return (x); 可知,如果 x!=y 返回其整除平均值,如果相等返回 x,实际上也是平均值,则: fun(b,c)=fun(5,6)=(5+6)/2=5 fun(2*a,fun(b,c)=fun(8,5)=(8+5)/2=6 3.main() 第 9 页 共 10 页 int a=8, b=2; a=a+b; b=a*b; printf(“a=%d, b=%d” ,a,b); 该程序的运行结果是_a=10, b=20_。 解:本题较为简单,主要考表达式求值和输出函数的显示格式。 a=a+b;/ a=8+2=10 b=a*b;/b=10*2=20 故输出结果为 a=10, b=20 4main() int i,num5; for(i=0;i int fu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论