




已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.C语言程序设计综合练习题一、单选题1. C语言中基本数据类型有 。CA) 整型、实型、逻辑型B)整型、字符型、逻辑型 C) 整型、实型、字符型D)整型、实型、字符型、逻辑型2. 在C语言中,数字O29是一个 。AA) 八进制数 B) 十进制数 C) 十六进制数 D) 非法数3. 在以下关于C语言的不严格的叙述中,错误的说法是 。AA) 在标识符中,大写字母和小些字母的意义相同 B) 有些不同类型的变量可以在一个表达式中运算 C) 在赋值表达式中等号“=”左边的变量和右边的值可以是不同类型 D) 同一个运算符号在不同的场合可以有不同的含义4. 下列关于C语言用户标识符的叙述中正确的是 。BA)用户标识符中可以出现下划线和中划线(减号)B)用户标识符中不可以出现中划线,但可以出现下划线C)用户标识符中可以出现下划线,但不可以放在用户标识符的开头D)用户标识符中可以出现下划线和数字,它们都可以放在用户标识符的开头【解析】考查C语言中的用户标识符规则,在C语言程序设计中,用户标识符是由字母、数字和下划线组成的,并且第一个字符必须是字母或下划线。5. 结构化程序设计方法中有三种基本控制结构,以下不正确的是 。DA) 顺序结构B) 选择结构C) 循环结构 D) 数组结构6. C语言提供的合法关键字是 。DA) swicthB) cha C) Case D) default7以下非法的赋值语句是 CA) n=(i=2,+i); B)j+; C) +(i+1); D)x=j0;【解析】对表达式不能进行自加自减运算。8.在以下一组运算符中,优先级最高的运算符是 。A) 算术运算符关系运算符逻辑与“&”逻辑或“|”赋值运算符逗号运算符。由于C选项为求余运算符,所以本题正确答案为C选项。9. 以下四个选项中不能看作一条语句的是 。DA) ; B) a=0,b=0,c=0; C) if(a0) D) if(b=0)m=1;n=2;【解析】C语言的基本语句包含控制语句、表达式语句、空语句、复合语句、函数调用语句。控制语句:完成一定的控制功能,C语言有9种控制语句,分别是if-else、while、continue、switch、return、for、do-while、break、goto;表达式语句:由各类表达式构成,后面加上一个分号,就可以单独作为一条语句出现在一行,多数情况下含赋值运算符。复合语句:由一对大括号将一组语句序列括起来形成一个程序段,经常出现在选择或循环语句中。空语句:只有一个分号,表示什么也不做。函数调用语句:由函数名、圆括号内加实参表和分号组成。本题中D选项为三条语句,一条控制语句,链条表达式语句。正确答案为D选项。10. 能将高级语言编写的源程序转换为目标程序的软件是 。DA) 汇编程序B) 编辑程序C) 解释程序D) 编译程序11.以下选项中合法的实型常数是 。CA) 5E2.0B) E-3C) .2E0D) 1.3E【解析】以指数形式表示实数时,字母e或E之前必须有数字,且e后面指数必须为整数。12.依据C语言的语法规则,下列合法标识符是 A A)Else B)else C)user$2 D)5_examp【解析】标识符的定义有明确的规则:(1)标识符只能由字母、数字、下划线三者构成;(2)标识符的首字符必须是字母或者下划线;(3)标识符命名对字母大小写敏感;(4)标识符定义不能和C语言关键字(Key Words)相同。C语言中标识符对大小写敏感,sum和SUM是不同的标识符。13.以下选项中合法的用户标识是 。A) longB) _2TestC) 3DmaxD) A.dat【解析】选项中A为保留字;选项C没有以字母或者“_”开头;选项D中不能有“.”14.在C语言中,字符型数据在内存中的存储形式是 。DA) 原码B) 补码C) 反码D) ASCII码【解析】数据在内存中是以二进制形式存放的。数值是以补码表示的。c的char数据属于基本类型,在内存中字符的存储实际上是把字符相对应的ASCII代码放到存储单元中的。而这些ASCII代码值在计算机中也是以二进制形式存放的。这个与整型的存储很相似。因此这两类之间的转换也比较方便!整型:一个正数的补码和其原码的形式相同。而负数的补码方式是将其绝对值的二进制形式“按位求反再加1”; 实型:在内存中占4个字节,是按照指数形式存储的,实型数据分为小数部分和指数部分,分别存放!计算机用二进制表示小数部分,用2的幂次来表示指数部分!15.以下非法的赋值语句是 。CA) n=(i=2,+i);B) j+;C) +(i+1);D) x=j0;【解析】对表达式不能进行自加自减运算。16.已定义c为字符型变量,则下列正确的赋值语句是 。DA) c=66;B) c=66;C) c=B;D) c=66;17.已知小写字母的ASCII码为97,对于int a=99, b=b; printf(“%c,%d”, a , b);的结果是 。BA) 99, bB) c, 98C) 99, 98D) c, b【解析】字符类型变量用char来定义,特别要注意字符数据在内存中的存储方式:字符数据在内存中是用字符对应的ASCII码存储,其存储形式实质是采用整数形式,由于ASCII码集合中有256个字符,因此用0255这个范围内的256个整数分别与每个字符对应。因此字符型数据和整型数据在一定范围(0255)内,形式上可以相互引用。表现在这两种类型的变量能够以对方形式常量来赋值,以对方的形式来输出,还可以同时出现在算数表达式中参与运算int n=a; /*相当于n=97*/char c=65; /*相当于c=A,A的ASCII码是65*/printf(n=%d,n=%c,n,n); /*输出:c=97,n=a*/printf(c=%d,c=%c,c,c); /*输出:n=65,n=A*/虽然字符型数据和整型数据在一定范围内可以通用,但其外在表现形式并不影响各自的数据类型,上例中n本质上还是整型变量,c本质上还是字符型变量。18.若变量a和i已正确定义,且i已正确赋值,合法的语句是 。BA) a=1B) +i;C) a=a+=5D) a=int(i)【解析】C语言的语句必须以分号结束,选项A是错误的。赋值表达式等号的左边只能是变量,而不能是表达式,选项C中含有a+=5,是错误的。选项D中的强制转换类型必须用圆括号将int括起来,也是不正确的。19.假定x和y为double型,则表达式x=2,y=x+3/2的值是 。DA) 3.500000B) 3C) 2.000000D) 3.000000【解析】算出来结果为3,排除A和C选项;又因为是double型,所以D选项为正确答案。20.以下程序的输出结果是 。Cmain() int a=5,b=4,c=6,d; printf(“%dn”,d=ab?(ac?a:c):(b);) 5) 4) 6) 不确定【解析】本题考察条件表达式。简单的条件表达式(条件表达式?表达式1:表达式2)可以用来代替if语句进行赋值。详见教材102页。21.设a=3,b=4,c=-5,则逻辑表达式:a | b+c & b=c 的值是 。BA) 1B) 0C) 非0D) 语法错【解析】运算符优先级由高到底为算术运算符-关系运算符-&和|-赋值运算符。其中&和|的结合方向为从左到右22.表示关系x=y=z的c语言表达式为 。AA) (x=y)&(y=z)B) (x=y)AND(y=z)C) x=y=zD) (x=y)&(yz-后,x,y,z的值分别是 。D) 1,1,1) 1,2,0) 0,1,1) 0,2,0【解析】注:前缀是先增值后引用,后缀是先引用再增值24.已知 int a=4,b=5; ,执行表达式 a=ab 后,变量a的值为 。AA)0 B)1 C)4 D)5【解析】C语言常用的积累运算符的优先级关系是:逻辑非“!”算术运算符关系运算符逻辑与“&”逻辑或“|”赋值运算符逗号运算符。由于关系运算符优先级别高于赋值运算符,所以先执行ab,得到结果为假,即0,所以变量a的值为0。25.能正确表示逻辑关系“a10或a0”的C语言表达式是 。BA) a=10 or a=10 | a=10 & a=10 | a=026.设有定义 int a=3,b=4,c=5; ,则以下表达式中,值为0的表达式是 。D A) a&b B) a=b C) a|b+c&b-c D) !(a=A & ch=A & ch0; k-=3) putchar(*); 输出是 。B A)* B)* C)* D)无限循环【解析】在k分别为16,13,10,7,4,1的时候,分别输出一个*。putchar()函数(字符输出函数)的作用是向终端输出一个字符。用putchar()函数可以输出能在屏幕上显示的字符,也可以输出控制字符,如putchar(n)的作用是输出一个换行符,使输出的当前位置移到下一行的开头。35.已知int i=1;执行语句while(i+4)后,变量i的值为 。CA) 3 B) 4 C) 5 D) 6【解析】i+是先进行其他运算,运算终了后再将i加1。所以循环中过程如下:i=0判断i4:成立i=i+1,于是i=1继续循环:判断i4:成立i=i+1,于是i=2继续循环:判断i4:成立i=i+1,于是i=3继续循环:判断i4:成立i=i+1,于是i=4继续循环:判断i0前1个大,7) m-;printf(“%dn”,m);C)9876B)10987A)9 8 7D)1098【解析】复习一下while循环的执行过程:(1)计算while一对圆括号中表达式的值。当值为非零时,执行步骤(2);当值为零时,执行步骤(4)。(2)执行循环体中语句。(3)转去执行步骤(1)。(4)退出while循环。由以上while循环的一般过程来看,只有当while后面的括号中表达式的值为零时才停止循环。本题中,当m=7是循环停止,也就是说最后一个输出的应是7.开始m被赋予10,进入循环体,由于m-;所以m自减1为9,所以第一个输出的应是9.44.若有如下程序段,其中s、a、b、c均已定义为整型变量,且a、c均已赋值(c大于0)s=a; for(b=1;b=c;b+) s=s+1;则与上述程序段功能等价的赋值语句是 。BA) s=a+b;B) s=a+c;C) s=s+c;D) s=b+c;【解析】掌握两点:一、a赋给了s;二、s执行c次自加;所以最终相当于将a+c赋给了s。45.以下程序中,while循环的循环次数是 。Dmain() int i=0;while(i10) if(i1)continue; if(i=5)break; i+; A) 1B) 10C) 6D) 死循环,不能确定次数【解析】在循环中,如果执行continue,将直接开始下一次循环,不继续执行continue下面的语句。进入循环时,i=0,当执行到if(i1)continue;一句时,将执行continue命令,直接开始下一次循环,i的值始终没有变,循环条件(i10)将一直满足下去。所以,程序将一直无法退出循环,即死循环。46.当对两个字符串进行比较时,应该使用的函数是 。BA) strcatB) strcmpC) strcpyD) strlen47若有定义“int k,*q;”,则下列各选项中赋值表达式正确的是 。BA) q=(&k+1)B) q=&kC) q=kD) *q=&k【解析】(1)本题的定义语句中,在q前面有一个*号说明符,表示q是一个指针变量,而C语言规定,在指针变量中只能存放存储单元(即变量)的地址。(2)因为在定义中,q的基类型为int,所以q中只能存放int类型变量的地址。(3)在C程序中&号是求地址符,表达式&k的值是变量k在内存中的地址,而*号的作用是求地址指向单元的值。(4)现在来看看选项C和D。C中,是把整型变量直接赋给指针变量q,由于赋值不兼容性,这是错误的。D中,企图把k的地址赋给一个整型变量(*p在此可代表一整型变量),这也是不允许的,地址值不可能转换为一个整数。(5)关于A,还得声明一点,地址符&只能应用于变量和以后将要介绍的数组元素,不可以用于表达式,常量或者被说明为register的常量。因此A也不正确。(6)那答案只能是B,因为此处q中只能存放int类型的地址,而k是int型,&k又是k的地址,B当然是正确的。48.若有以下定义:char s20= “programming”,*ps=s;则不能代表字符g的表达式是 。AA) ps+3B) s3C) ps3D) ps+=3,*ps【解析】1、C语言对字符串常量是按字符数组处理的,在内存中开辟了一个字符数组用来存放该字符串常量。2、指向数组的指针变量也可以带下标,如pi与*(p+i)等价。详见教材231页。49.以下能正确定义数组并正确赋初值的语句是 。CA) int N=5,bNN;B) int a12=1,3;C) int c2= 1,2,3,4;D) int d32=1,2,34;【解析】如果对全部元素都赋初值 (即提供全部初始数据),则定义数组时对第一维的长度可以不指定,但第二维的长度不能省!系统会根据总个数和第二维的长度算出第一维的长度。 详见教材p13850.假设已定义 char c8= test;int i; 则下面的输出函数调用中错误的是 。DA) printf(%s,c);B) for(i=0;i8;i+) printf(%c,ci);C) puts(c)D) for(i=0;i8;i+) puts(ci);【解析】首先A、B两个选项是没有问题的,puts函数一般形式为puts(字符数组),其作用是输出字符串,所以D选项是错误的。51.下程序段:char s20 =xyz, *sp=s; strcat(sp,12345); puts(sp);的输出结果是 。AA) xyz12345B) 12345xyzC) 12345D) xyz 【解析】strcat(字符数组1,字符数组2)-(字符串连接)其作用是连接两个字符数组中的字符串,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值-字符数组1的地址。 52. 在执行int a 3=1,2,3,4; 语句后a12的值是 。CA. B. C. D. 【解析】考查知识点:二维数组的初始化int a 3=1,2,3,4;初始化的数组元素如下:53已知:int a 3=1,2,3,4,5,6,7,8,9,0; 则数组a的第一维的大小是 。CA. 2 B. 3 C. 4 D. 无法确定;【解析】此数组共3列。应该是在C语言中如果对全部元素都赋初值(即提供全部初始数据),则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。系统会根据总个数和第二维的长度算出第一维的长度。本题中一共有10个元素,每行3列,显然可以确定行数为4.见教材138.54.设有定义语句:char str20=Hello,Beijing,*p=str; 则printf(%dn,strlen(p+20);输出结果是 。CA)0 B) 5 C)7 D)20【解析】数组char str20实际上是一个2行20列的字符数组。*p正好指向H,一个英文字母占一个字节,这样p+20就指向第二行的第一列,也就是Beijing的B,所以输出结果是7。注意:虽然第一行,第二行都没有排满,但Hello其后是0,而不是空格。55.用数组名作为函数调用时的实参,则实际传递给形参的是 。CA) 数组的第一个元素值B) 数组中全部元素值C) 数组的首地址D) 数组的元素个数二、读程序,写出程序执行结果1. void main() int a=5, b=8; printf(“a=%d b=%dn”, a,b) ; a=a+b; b=a-b; a=a-b; printf(“a=%d b=%dn”, a,b) ; 运行结果:a=5 b=8a=8,b=52. #include void main() int k=4,n=0;for( ; nk ; ) n+;if(n%3!=0) continue;k- -; printf(%d,%dn,k,n);运行结果:3,33.#include void main() int x=1,a=0,b=0; switch(x) case 0:b+;case 1:a+; case 2:a+;b+; printf(“a=%d,b=%dn”,a,b);运行结果:a=2,b=14.#include void main() int a33=1,2,3,4,5,6,i,j,s=0;for(i=0;i3;i+)for(j=0;j=i;j+)s+=aij;printf(“%dn”,s);运行结果:195#include void main() int i,j;for(i=0; i3;i+)for(j=0; j=i;j+)printf(*);printf(n);运行结果:*6#include void main() int i; for (i=0; i3; i+) switch (i) case 1: printf(%d , i); case 2: printf(%d , i); default : printf(%d , i); 运行结果:0111227#include void main()int i,n=1,2,3,4,5;for(i=0;i2;i+)ni=n4-i+1;printf(%d ,ni);for(i=0;i5;i+)printf(%d ,ni);运行结果:65653458#include char fun(char *s)if( *s = a & *s = z ) *s=*s-32;return *s;void main()char a20=Welcome,*p,ch;for(p=a;*p!=0;p+)ch=fun(p);putchar(ch);运行结果:WELCOME9main() int a44=1,2,-3,-4,0,-12,-13,14,-21,23,0,-24,-31,32,-33,0; int i, j, s=0; for (i=0; i4; i+) for (j=0; j4; j+) if (aij 0) continue; if (aij = 0) break; s += aij; printf(%dn, s); 运行结果:5810main() int k=4,n=0;for( ; nk ; ) n+;if(n%3!=0) continue;k-; printf(%d,%dn,k,n);运行结果:3,3三、编程题1. 设有分段函数:-1 (x0) 编一程序,输入一个 x值,输出 y 的值。具体程序详见教材100页。2求下列分段函数的值。已验证 #include void main() int x;float y; printf(“输入x:”);scanf(“%dn”,&x); if(xb y= ab a=b a*b具体程序请参照上述两题。4编写程序,用公式求的近似值,直到某一项的绝对值小于10-6为止。具体程序详见教材124页。5任意输入100个整数,分别统计其中的正数、负数和零的个数。#include main() int j=0,k=0,l=0;/j,k,l分别为正整数,0,负整数的个数。 int *p; int a100;/容纳这100个整数的数组 for(p=a;p(a+100);p+) scanf(“%d”,p); for(p=a;p0) j+; elseif(*p=0) k+;else l+; printf(“正数的个数为%dn0的个数为%dn负数的个数为%dn”,j,k,l);6计算:s=1+1/1+1/2+1/n,其中n由键盘输入。已验证错误的程序:#include main()int n;float s; scanf(“%f”,&n);for(n=1,s=1.0;n=100;n+) s=s+1.0/n; printf(“%fn”,s);请同学们自己体会错误程序的原因。正确的程序:#include main()int n;float s,k; scanf(“%d”,&n); s=1.0;for(k=1;k=n;k+) s=s+1.0/k; printf(“%fn”,s);7任意输入aNN个数,找出并输出其中的最大数和最小数,以及它们的下标。(本题涉及到二维动态数组的输入)#include main()int N,i,j,row=0,colum=0,max,min; int aNN;max=a00;min=a00;for(i=0;iN;i+) for(j=0;jN;j+)scanf(“%d”,&aij);for(i=0;iN;i+) for(j=0;jmax) max=aij; row=i; colum=j; printf(“max=%d,row=%d,colum=%dn”,max,row,colum);for(i=0;iN;i+) for(j=0;jN
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 白酒联合招商协议书
- 离异孩子改名协议书
- 火车租赁解除协议书
- 电缆路径测试协议书
- 环保职业健康协议书
- 直播孵化基地协议书
- 瓦工施工合同协议书
- 秸秆堆放租赁协议书
- 研发经理聘用协议书
- 汽车赛事免责协议书
- 人教版数学《认识钟表》公开课课件1
- 产科10个临床路径
- 小学少先队活动课说课稿
- 古埃及圣书手册古代语言文字研究
- T∕CACM 1078-2018 中医治未病技术操作规范 拔罐
- 儿科入院安全宣教
- 2024年湖州市城市投资发展集团有限公司招聘笔试参考题库附带答案详解
- 上海大学继续教育市场营销网课答案更新版
- 电气工程及其自动化新能源发电方向
- 改革开放与新时代智慧树知到期末考试答案2024年
- 卵圆孔未闭课件
评论
0/150
提交评论