下列的类声明程序版权声明片段是否有语法错误,请改正

君,已阅读到文档的结尾了呢~~
广告剩余8秒
文档加载中
与《面向对象程序设计基础》配套使用,提供面向对象程序设计基础中习题解答,给出习题难易程度,认知程度,答题时间及答案。
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
《面向对象程序设计基础》题库
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口2007级计算机科学系_程序设计_B卷_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
2007级计算机科学系_程序设计_B卷
&&中山大学计算机程序设计试题及答案
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩3页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢当前位置: >>
C程序设计作业集
第一章 C 语言概述 一.填空题 构成的, 一个 C 程序中至少包含 。 因此, 1. 程序是由 C C 程序的基本单位。 2.C 程序注释是由 和 所界定的文字信息组成的。 3.C 语言是一个用途广泛,功能强大的程序语言,它具有的主要特点是: , (2) , (1) (3) , (4) , (5) , (6) , (7) , (8) 。 4.在 C 程序开发过程中,遵循如下所示
的开发步骤,请填空。 开始是()()()()有错? 有有错? 有有错? 有结束程序代码错误 5.函数体一般包括设计算法错误 和 。二.判断题 1.一个 C 程序的执行总是从该程序的 main 函数开始,在 main 函数最后结束。 【 】 2.main 函数必须写在一个 C 程序的最前面。 【 】 3.一个 C 程序可以包含若干的函数。 【 】 4.C 程序的注释部分可以出现在程序的任何位置,它对程序的编译和运行不起任何作用。 但是可以增加程序的可读性。 【 】 5.C 程序的注释只能是一行。 【 】 6.C 程序的注释不能是中文文字信息。 【 】 7.判断下列各个程序中的程序注释是否正确。 # in/*包含*/clued &stdio.h& # include &stdio.h& main ( ) main/* */(/*主函数*/) { 【 】 { 【 】 } } # include &stdio.h& # include &stdio.h& main ( ) main ( ) { 【 】 { int x=10; 【 】 int x/*初始化*/=10; /*打印 x/*x=10*/的值*/ } } 】 8.可以使用 Turbo C 来编译和连接一个 C 程序。 【 9.可以使用 Turbo C 来运行一个 C 程序。 【 】 10.可以使用 Turbo C 来实时调试(即动态调试)一个 C 程序。 【】三.简答题 1. 写出一个 C 程序的基本结构。 2. 简要叙述使用 Turbo C 2.0 编译和运行一个程序的步骤。四.编程题 1. 提高题:参照课本例 1.1,试编写一个 C 程序,输出如下信息。 (提示:使用键盘上的一 些符号) 。2. 提高题:试编写一个 C 程序,输出如下信息。试试看,可以输出其他组合图案吗?程序的灵魂―― ――算法 第二章 程序的灵魂――算法 一.填空题 1. 是程序设计的灵魂。 2.一个计算机程序应包括 和 3.算法是 4.结构化算法是 5.计算机算法可分为 和 6.计算机算法的特性是 , 和 。 7.计算机算法可以用 , 等方法表示。 8.三种基本程序结构是 , 9.结构化程序设计强调 和 10.结构化程序设计的主要方法是 和 。的内容。 。 。 两大类别。 , ,和和 。 的规范化,提倡 , ,。 二.简答题 1. 用自然语言描述求解下面问题的步骤。 (1)求 ax + bx + c = 0 的根。 (要全面考虑实根和虚根的情形) 。2(2)依次输入 10 个数,要求将其中最大的数打印出来。 (3)有 3 个数 a,b,c,要求按由大到小的顺序把它们打印出来。 (4)有一函数:? x( x & 1) ? y = ?2 x ? 11(1 ≤ x & 10) ?3x ? 11( x ≥ 10) ?输入 x ,输出 y 值。 (5)求两个正整数 m 和 n 的最大公约数和最小公倍数。 2. 分别用 ANSI 流程图和 NS 流程图表示求解下面问题的算法。 (1)依次输入 10 个数,要求将其中最大的数打印出来。 (2)有 3 个数 a,b,c,要求按由大到小的顺序把它们打印出来。 (3)判断一个数 n 能否同时被 3 和 5 整除。 (4)有一个分数数列:2 3 5 8 13 21 , , , , , ,L 求出这个数列前 20 项之和。 1 2 3 5 8 133.提高题:用计算机来解决许多数学问题,其方法常常与人的思维方法不同,但其主要特 点是“计算” (数值化的运算) 。尝试用“计算”的方法给出如下问题的解决方法。 (1)计算定积分 T =∫baf ( x)dx 。(2)产生一个在 0 到 1 之间概率平均分布的随机数。数据类型, 第三章 数据类型,运算符与表达式 一.选择题 1.不合法的常量是 。 A) ‘\2’ B) “” C) ‘’ 2. 是 C 语言提供的合法的数据类型关键字。 A) Float B) signed C) integer 3.在以下各组标识符中,合法的标识符是(1) , (2) (1)A)B01 B) table_1 C) 0_t Int t*.1 W10 (2)A)Fast_ B) void C)pbl Fast+Big abs fabs (3)A)xy_ B)longdouble C)*p 变量 1 signed history 4.属于合法的 C 语言长整型常量的是 。 A)5876273 B)0L C)2E10 。 5.下面选项中,均是合法整型变量的是D) “483” D)Char , (3) 。 D) k% point D)&book& beep D)CHAR Flaut D)(long)5876273 A)160 B)-0xcdf C)-01 D)-0x48a -0xffff 01a 986,012 2e5 0011 0xe .判断 int x = 0xaffbc;x 的结果是 。 A)赋值非法 B)不确定 C)为 affb D)为 ffbc 7.下面选项中,均是合法浮点数的是 。 A)+1e+1 B)-.60 C)123e D)-e3 5e-9.4 12e-4 1.2e-.4 .8e-4 03e2 -8e5 +2e-1 5.e-0 8.在 C 语言中,要求参加运算的数必须时整数的运算符是 。 A)/ B)* C)% D) = 形式存放。 9.在 C 语言中,字符型数据在内存中以 A)原码 B)BCD 码 C)反码 D)ASCII 码 10.下列语句中,符合语法的赋值语句是 。 A)a=7+b+c=a+7; B)a=7+b++=a+7; C)a=7+b,b++,a+7; D)a=7+b,c=a+7; 是非法的 C 语言转义字符。 11. A) ‘\b’ B) ‘\0xf’ C) ‘\037’ D) ’ ‘\’ 12.对于语句:f=(3.0,4.0,5.0),(2.0,1.0,0.0);的判断中, 是正确的。 A)语法错误 B)f 为 5.0 C)f 为 0.0 D)f 为 2.0 13.与代数式x× y 不等价的 C 语言表达式是 u×v。A)x*y/u*v B)x*y/u/v C)x*y/(u*v) D)x/(u*v)*y 。 14.在 C 语言中,数字 029 是一个 A)八进制数 B)十六进制数 C)十进制数 D)非法数 15.C 语言中整数-8 在内存中的存储形式为 。 A)1000 B)000 C)000 D)0111 16.对于 char cx=’ \039’;语句,正确的是 。 A)不合法 B)cx 的值是’\03’ C)cx 的值为四个字符 D)cx 的值为三个字符 17.若 int k=7,x=12;则能使值为 3 的表达式是 。 A)x%=(k%=5) B)x%=(k-k%5) C)x%=k-k%5 D)(x%=k)-(k%=5) 18.为了计算 s=10!(即 10 的阶乘) ,则 s 变量应定义为 。 A)int B)unsigned C)long D)以上三种类型均可 19.以下所列的 C 语言常量中,错误的是 。 A)0xFF B)1.2e0.5 C)2L D)’\72’ 20.假定 x 和 y 为 double 型,则表达式 x=2,y=x+3/2 的值是 。 A)3.500000 B)3 C)2.000000 D)3..设变量 n 为 float 型,m 为 int 类型,则以下能实现将 n 中的数值保留小数点后两位,第 三位进行四舍五入运算的表达式是 。 A)n=(n*100+0.5)/100.0 B)m=n*100+0.5,n=m/100.0 C)n=n*100+0.5/100.0 D)n=(n/100+0.5)*100.0 22.以下合法的赋值语句是 。 A)x=y=100 B)dDD C)x+y D)c=int(a+b) 。 23.以下选项中不属于 C 语言的类型是 A)signed short int B)unsigned long int B)unsigned int D)long short 24.设以下变量均为 int 类型,则值不等于 7 的表达式是 。 A)(x=y=6,x+y,x+1) B)(x=y=6,x+y,y+1) C)(x=6,x+1,y=6,x+y) D)(y=6,y+1,x=y,x+1) 25.在 16 位 C 编译系统上,若定义,则能给 a 赋 40000 的正确语句是 A)a=; B)a=4000*10; C)3; D)a=4000L*10L;。二.填空题 1.在 C 语言中(以 16 位 PC 机为例) ,一个 char 数据在内存中所占字节数为 , 其数值范围为 ;一个 int 数据在内存中所占字节数为 ,其数值范 围为 ;一个 long 数据在内存中所占字节数为 ,其数值范围为 ;一个 float 数据在内存中所占字节数为 ,其数值范围为 。 2.C 语言的标识符只能由大小写字母,数字和下划线三种字符组成,而且第一个字符必须为 。 界定单个字符, 而字符串常量使用一对 来界 3.字符常量使用一对 定若干个字符的序列。 4.在 C 语言中, 不同运算符之间运算次序存在 的区别, 同一运算符之间运算次 序存在 的规则。 5.设 x,i,j,k 都是 int 型变量, 表达式 x=(i=4,j=16,k=32)计算后, 的值为 x 。 。 6.设 x=2.5,a=7,y=4.7, 则 x+a%3*(int)(x+y)%2/4 为 7.设 a=2,b=3,x=3.5,y=2.5,则(float)(a+b)/2+(int)x%(int)y 为 。8.数学式子1? a+x? ? ax + ? 的 C 语言表达式为 2? 4a ?3ae 的 C 语言表达式为 bc。。9.数学式子10.已知:char a=’a’,b=’b’,c=’c’,i;则表达式 i=a+b+c 的值为 11.已知 int a=12,n=5;则: 表达式 a+=a a-=2 a*=2+3 a/=a+a n%=(n%=2) a+=a-=a*=a 12.设则表达式 10+’a’+i*f 值的数据类型是 。 13.若 a 为 int 型变量,则表达式(a=4*5,a*2),a+6 的值为 14.假设所有变量均为整型,则表达式(a=2,b=5,a++,b++,a+b)的值为 表达式运算后 a 的值。。。 15.已知 a,b,c 是一个十进制数的百位,十位,个位,则该数的表达式是 。 ,表达式 y+=x++ 16.定义:double x=3.5,y=3.2;则表达式(int)x*0.5 的值是 的值是 。 17.定义:int m=5,n=3;则表达式 m/=n+4 的值是 ,表达式 m=(m=1,n=2,n-m) 的值是 ,表达式 m+=m-=(m=1)*(n=2)的值是 。 18.表达式 5%(-3)的值是 ,表达式-5%(-3)的值是 。 。 19.若 a 是 int 变量,则执行表达式 a=25/3%3 后,a 的值是 20.数学式子 x ? 2 x + 3 x + 4 x ? 5 x + 6 x + 7 的 C 语言表达式为:6 5 4 3 2。三.判断题 1.在 C 程序中对用到的所有数据都必须指定其数据类型。 【 】 2.一个变量在内存中占据一定的存储单元。 【 】 3.一个实型变量的值肯定是精确的。 【 】 4.对几个变量在定义时赋初值可以写成:int a=b=c=3;【 】 5.自增运算符(++)或自减运算符(--)只能用于变量,不能用于常量或表达式。 】 【 6.在 C 程序的表达式中,为了明确表达式的运算次序,常使用括号“ ”【 ()。 7.%运算符要求运算数必须是整数。 【 】 8.若 a 是实型变量,C 程序中允许赋值 a=10,因此实型变量中允许存放整型数。 【 】 】 9.在 C 程序中,逗号运算符的优先级最低。 【 10.C 语言不允许混合类型数据间进行运算。 【 】】四.简答题 1.为什么 C 语言的字符型可以进行数值运算?2.简述‘a’和“a”的区别。3.程序:int m=12; m=15;为什么整型变量 m 的值在运算后不是当初的 12,而是 15?4.将下面个数用八进制和十六进制数表示: 十进制 八进制 十六进制 5.以下各数分别赋给不同类型的变量, 请画出赋值后数据在内存中存放的存储形式 (十六进 制) 。 变量的类型 int 型(16 位) long 型(32 位) char 型(8 位) unsigned int unsigned long 25 -1 35 0 32 -1 - -128 0 unsigned char6.华氏温度 F 与摄氏温度 c 的转换公式为: c =5 ( F ? 32) ,则 float c,F;c=5/9*(F-32)是 9其对应的 C 语言表达式吗?如果不是,为什么?五.程序阅读题 1.写出以下程序运行的结果。 main ( ) { char c1=’a’,c2=’b’,c3=’c’,c4=’\101’,c5=’116’; printf(“a%c b%c\tc%c\tabc\n”,c1,c2,c3); printf(“\t\b%c %c”,c4,c5); }2.写出以下程序运行的结果。 main ( ) { int i,j,m,n; i=8; j=10; m=++i; n=j++; printf(“%d,%d,%d,%d”,i,j,m,n); }六.编程题 1.假设 m 是一个三位数,则写出将 m 的个位,十位,百位反序而成的三位数(例如:123 反 序为 321)的 C 语言表达式。2.已知 int x=10,y=12;写出将 x 和 y 的值互相交换的表达式。第四章 最简单的 C 程序设计 一.选择题 1.C 语言的程序一行写不下时,可以 A)用逗号换行 C)在任意一空格处换行 2.putchar 函数可以向终端输出一个 A)整型变量表达式值 C)字符串 3.执行下列程序片段时输出结果是 unsigned int a=65535; printf(“%d”,a);。 B)用分号换行 D)用回车符换行 。 B)实型变量值 D)字符或字符型变量值 。 A)65535 B)-1 C)-32767 D)1 。 4.执行下列程序片段时输出结果是 float x=- printf(“\n%8.3f,”,x); printf(“%10.3f”,x); A), - B)-23.012 C)23.012 D)-, -.已有如下定义和输入语句,若要求 a1,a2,c1,c2 的值分别为 10,20,A 和 B,当从第一列 开始输入数据时,正确的数据输入方式是 。 int a1,a2; char c1,c2; scanf(“%d%c%c”,&a1,&a2,&c1,&c2); A)10A 20BL B)10 A 20 BL C)10A20BL C)10A20 BL 6. 对于下述语句, 若将 10 赋给变量 k1 和 k3, 20 赋给变量 k2 和 k4, 将 则应按 方 式输入数据。 int k1,k2,k3,k4; scanf(“%d%d”,&k1,&k2); scanf(“%d,%d”,&k3,&k4); A)1020L B)10 20L C)10,20L D)10 20L L 10,20L 10,20L 。 7.执行下列程序片段时输出结果是 int x=13,y=5; printf(“%d”,x%=(y/=2)); A)3 B)2 C)1 D)0 8.下列程序的输出结果是 。 main ( ) { int x=023; printf(“%d”,--x); } A)17 B)18 C)23 D)24 9.已有如下定义和输入语句,若要求 a1,a2,c1,c2 的值分别为 10,20,A 和 B,当从第一列开 始输入数据时,正确的输入方式是 。 int a1,a2; char c1,c2; scanf(“%d%d”,&a1,&a2); scanf(“%c%c”,&c1,&c2); A)1020ABL B)10 20L ABL C)10 20 ABL D)10 20ABL 10.执行下列程序片段时输出结果是 。 int x=5,y; y=2+(x+=x++,x+8,++x); printf(“%d”,y); A)13 B)14 C)15 D)16 。 11.若定义 x 为 double 型变量,则能正确输入 x 值的语句是 A)scanf(“%f”,x); B)scanf(“%f”,&x); C)scanf(“%lf”,&x); D)scanf(“%5.1f”,&x); 。 12.若运行时输入:L,则下列程序运行结果为 main ( ) { int a,b; scanf(“%2d%2d%3d”,&a,&b); printf(“%d\n”,a+b); } A)46 B)579 C)5690 D)出错 13.已知 i,j,k 为 int 型变量,若从键盘输入:1,2,3&回车&,使 I 的值为 1,j 的值为 2,k 的值为 3,以下选项中正确的输入语句是 。 A)scanf(“%2d%2d%2d”,&i,&j,&k); B)scanf(“%d_%d_%d”,&i,&j,&k); C)scanf(“%d,%d,%d”,&i,&j,&k); D)scanf(“i=%d,j=%d,k=%d”,&i,&j,&k); 14.若 int x,y;以下不合法的 scanf 函数调用语句是 。 A)scanf(“%d%lx,%le”,&x,&y,&z); B)scanf(“%2d*%d%lf”,&x,&y,&z); C)scanf(“%x%*d%o”,&x,&y); D)scanf(“%x%o%6.2f”, &x,&y,&z); 15.有输入语句:scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);为使变量 a 的值为 1,b 的值为 3,c 。 的值为 2,则正确的数据输入方式是 A)132L B)1,3,2L C)a=1 b=3 c=2L D)a=1,b=3,c=2L二.填空题 1.一个 C 程序由若干个 文件组成, 而一个这样的文件可以由若干个 和 以及 部分组成。 2.C 语句可以分为 , , , 和 等 5 种类型。 3.C 控制语句有 种。 4.一个表达式要构成一个 C 语句,必须 。 界定的语句块。 5.复合语句是用一对 6.printf 函数和 scanf 函数的格式说明都使用 字符开始。 7.scanf 处理输入数据时, 遇到下列情况时该数据认为结束: (1) , (2) , (3) 。 8.已有 int i,j;为将-10 赋给 i,12 赋给 j,410.34 赋给 x;则对应以下 scanf 函数调用语句的数据输入形式是 。 9.C 语言本身不提供输入输出语句,其输入输出操作是由 来实现的。 10.一般地,调用标准字符或格式输入输出库函数时,文件开头应有以下预编译命令: 。三.程序阅读题 1.用下面的 scanf 函数输入数据,使 a=3,b=7,x=8.5,y=71.82,c1=’A’,c2=’a’,问在键 盘上如何输入? main ( ) { int a,b; float x,y; char c1,c2; scanf(“a=%d b=%d”,&a,&b); scanf(“ %f %e”,&x,&y); scanf(“ %c %c”,&c1,&c2); } 2.写出以下程序的输出结果。 main ( ) { int y=3,x=3,z=1; printf(“%d %d\n”,(++x,y++),z+2); } 3.写出以下程序的输出结果。 main ( ) { int a=12345; float b=-198.345, c=6.5; printf(“a=%4d,b=%-10.2e,c=%6.2f\n”,a,b,c); } 4.写出以下程序的输出结果。 main ( ) { int x=-2345; float y=-12.3; printf(“%6D,%06.2F”,x,y); } 5. 写出以下程序的输出结果。 main ( ) { int a=252; printf(“a=%o a=%#o\n”,a,a); printf(“a=%x a=%#x\n”,a,a); } 6. 写出以下程序的输出结果。 main ( ) { int x=12; double a=3.1415926; printf(“%6d##,%-6d##\n”,x,x); printf(“%14.101f##\n”,a); } 四.程序填空题 1.下列程序的输出结果是 16.00,请填(1)空使程序完整。 main ( ) { int a=9,b=2; ],y=1.1,z; float x=[1 z=a/2+b*x/y+1/2; printf(“%5.2f\n”,z); }五.编程题 1.已知 a,b 均是整型变量,写出将 a,b 两个变量中的值互换的程序来。2.若 a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n==’a’,c2=’b’。 想得到以 下的输出格式和结果,请写出程序(包括定义变量类型和设计输出) 。 a= 3 b= 4 c= 5 x=1.200000,y=2.400000,z=-3.600000 x+y= 3.60 y+z=-1.20 z+x=-2.40 u= 51274 n= =’a’ or 97(ASCII) c2=’b’ or 98(ASCII)3.设圆半径 r=1.5,圆柱高 h=3,求圆周长,圆面积,圆球表面积,圆球体积,圆柱体积。 用 scanf 输入数据,输出计算结果;输出时要求有文字说明,取小数点后 2 位数字,请编写 程序。4.编程序:用 getchar 函数读入两个字符给 c1,c2,然后分别用 putchar 和 printf 函数输 出这两个字符。 并思考以下问题: (1)变量 c1,c2 应定义为字符型或整型?或两者皆可? (2) 要求输出 C1 和 C2 值的 ASCII 码,应如何处理?用 putchar 函数还是 printf 函数?(3)整 型变量与字符型变量是否在任何情况下都可以互相替代?如: char c1,c2 与 int c1,c2 是否无条件地等价?第五章 选择结构程序设计 一.选择题 。 1.逻辑运算符两侧运算对象的数据类型 A)只能是 0 或 1 B)只能是 0 或非 0 正数 C)只能是整型或字符型数据 D)可以是任何类型的数据 2.下列表达式中, 不满足 “当 x 的值为偶数时值为真, 为奇数时值为假” 的要求。 A)x%2==0 B)!x%2!=0 C)(x/2*2-x)==0 D)!(x%2) 3.以下程序片段 。 int x=2,y=3; printf() A)输出控制格式错误 B)输出为:***x=2 C)输出为:###y=2 D)输出为:###y=3 4.能正确表示“当 x 的取值在[1,10]和[200,210]范围内为真,否则为假”的表达式 是 。 A)(x&=1) && (x&=10) && (x&=200) && (x&=210) B)(x&=1) | | (x&=10) | | (x&=200) | | (x&=210) C)(x&=1) && (x&=10) | | (x&=200) && (x&=210) D)(x&=1) | | (x&=10) && (x&=200) | | (x&=210) 。 5.C 语言对嵌套 if 语句的规定是:else 总是与 A)其之前最近的 if 配对 B)第一个 if 配对 C)缩进位置相同的 if 配对 D)其之前最近的且尚未配对的 if 配对 。 6.设:int a=1,b=2,c=3,d=4,m=2,n=2;执行(m=a&b) && (n=c&d)后 n 的值为 A)1 B)2 C)3 D)4 7.下面 是错误的 if 语句(设 int x,a,b;) A)if (a=b) x++; B)if (a=&b) x++; C)if (a-b) x++; D)if ( x ) x++; 8.以下程序片段 。 main ( ) { int x=0,y=0,z=0; if (x=y+z) printf(“***”); else printf(“###”); } A)有语法错误,不能通过编译 B)输出:*** C)可以编译,但不能通过连接,所以不能运行 D)输出:### 是正确的判断。 9.对下述程序, main ( ) { int x,y; scanf(“%d,%d”,&x,&y); if (x&y) x=y;y=x; else x++;y++; printf(“%d,%d”,x,y); } A)有语法错误,不能通过编译 B)若输入 3 和 4,则输出 4 和 5 C)若输入 4 和 3,则输出 3 和 4 D)若输入 4 和 3,则输出 4 和 5 10.若 w=1,x=2,y=3,z=4,则条件表达式 w&x ? w : y&z ? y : z 的值是 。 A)4 B)3 C)2 D)1 11.下述表达式中, 可以正确表示 x≤0 或 x≥1 的关系。 A)(x&=1) | | (x&=0) B)x&=1 | x&=0 C)x&=1 && x&=0 D)(x&=1) && (x&=0) 12.下述程序的输出结果是 。 main ( ) { int a=0,b=0,c=0; if (++a&0 | | ++b&0) ++c; printf(“%d,%d,%d”,a,b,c); } A)0,0,0 B)1,1,1 C)1,0,1 D)0,1,1 13.下述程序的输出结果是 。 main ( ) { int x=-1,y=4,k; k=x++&=0 && !(y--&=0); printf(“%d,%d,%d”,k,x,y); } A)0,0,3 B)0,1,2 C)1,0,3 D)1,1,2 14.以下程序输出结果是 。 main ( ) { int x=1,y=0,a=0,b=0; switch(x) { case 1:switch (y) { case 0 : a++ ; case 1 : b++ ; } case 2:a++; b++; case 3:a++; b++; } printf(“a=%d,b=%d”,a,b); } A)a=1,b=0 B)a=2,b=1 C)a=1,b=1 D)a=2,b=2 。 15.下述程序的输出结果是 main ( ) { int a,b,c; int x=5,y=10; a=(--y=x++) ? Cy : ++ b=y++ ; c= printf(“%d,%d,%d”,a,b,c); } A)6,9,7 B)6,9,6 C)7,9,6 D )7,9,7 16.当 a=1,b=3,c=5,d=4 时,执行完下面一段程序后 x 的值是 。 if (a&b) if (c&d) x=1; else if (a&c) if (b&d) x=2; else x=3; else x=6; else x=7; A)1 B)2 C)3 D)4 17.在下面的条件语句中 (其中 S1 和 S2 表示 C 语言语句) 只有 , 一个在功能上与 其他三个语句不等价。 A)if (a) S1; else S2; B)if (a==0) S2; else S1; C)if (a!=0) S1; else S2; D)if (a==0) S1; else S2; 18.若 int i=0;执行下列程序后,变量 i 的正确结果是 。 switch (i) { case 9: i+=1 ; case 10: i+=1 ; case 11: i+=1 ; default : i+=1 ; } A)10 B)11 C)12 D)13 19.若有说明语句 int i=5,j=4,k=6;则执行 f=(i&j&&i&k)?i:(j&k)?j:k;语句后,f 的值为 。 A)4.0 B)5.0 C)6.0 D)7.0 20.若有定义:int a=3,b=2,c=1;并有表达式:①a%b,②a&b&c,③b&&c+1,④c+=1,则表达式 值相等的是 。 A)①和② B)②和③ C)①和③ D)③和④二.填空题 1.C 语言提供 6 种关系运算符,按优先级高低它们分别 是 , , , , 2.C 语言提供三种逻辑运算符,按优先级高低它们分别 , , 。 是 3.设 a=3,b=4,c=5,写出下面各逻辑表达式的值。 表达式 a+b&c && b==c !(a&b) && !c || 1 !(a+b) + c C1 && b + c/2 表达式运算后的值,等。?1( x & 0) ? 4.写出数学式子 y = ?0( x = 0) 的 C 语言表达式 ??1( x & 0) ?5.将条件“y 能被 4 整除但不能被 100 整除,或 y 能被 400 整除”写成逻辑表达式 。 6.设 x,y,z 均为 int 型变量;写出描述“x,y 和 z 中有两个为负数”的 C 语言表达式: 。 7.已知 A=7.5,B=2,C=3.6,表达式 A&B && C&A || A&B && !C&B 的值是 。 8.有 int x=3,y=-4,z=5;则表达式(x&&y)==(x||z)的值为 。 9.若有 x=1,y=2,z=3,则表达式(x&y?x:y)==z++的值是 。 10.执行以下程序段后,a= ,b= ,c= 。 int x=10,y=9 ; int a,b, a = (x--=y++) ? x-- : y++ ; b = x++ ; c =。三.判断题 1.if 语句中的表达式不限于逻辑表达式,可以是任意的数值类型。 【 】 2.switch 语句可以用 if 语句完全代替。 【】 3.switch 语句的 case 表达式必须是常量表达式。 【 】 4.if 语句,switch 语句可以嵌套,而且嵌套的层数没有限制。 【 5.条件表达式可以取代 if 语句,或者用 if 语句取代条件表达式。 【 6.switch 语句的各个 case 和 default 的出现次序不影响执行结果。 【 7.多个 case 可以执行相同的程序段。 【 】 8.内层 break 语句可以终止嵌套的 switch,使最外层的 switch 结束。 【 9.switch 语句的 case 分支可以使用{ }复合语句,多个语句序列。 【 10.switch 语句的表达式与 case 表达式的类型必须一致。 【 】】 】 】】 】四.简答题 1.C 语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”?2.请将以下语句改成 switch 语句。 if ((s&0) && (s&=10)) if ((s&=3) && (s&=6)) x=2; else if ((s&1) && (s&8)) x=3; else x=1; else x=0;五.程序阅读题 1.若运行时输入 100L,写出以下程序的运行结果。 main ( ) { scanf(“%d”,&a); printf(“%s”,(a%2!=0)?”No”:”Yes”); } 2.写出以下程序的运行结果。 main ( ) { int a=2,b=7,c=5; switch (a&0) { case 1: switch (b&0) { case 1: printf(“@”); case 2: printf(“!”); } case 0: switch (c==5) { case 1: pritnf(“*”) ; case 2: printf(“#”) ; default : printf(“#”) ; } default : printf(“&”); } printf(“\n”); } 六.程序判断题 1.下面程序将输入的大写字母改写成小写字母输出, 其他字符不变; 请判断下面程序的正误, 如果错误请改正过来。 main ( ) { c = getchar ( ) ; c = (c&=’A’ | | c&=’Z’) ? c-32 : c+32 ; printf(“%c”,c); } 2.下面程序输入两个运算数 x,y 和一个运算符号 op,然后输出该运算结果的值,例如输入 3+5L得到结果 8;请判断下面程序的正误,如果错误请改正过来。 main ( ) { float x,y,r; scanf(“%f%c%f”,&x,&op,&y); switch (op) { case ‘+’ : r=x+ case ‘-’ : r=x+ case ‘*’ : r=x+ case ‘/’ : r=x+ } printf(“%f”,r); }七.程序填空题 1.根据以下函数关系,对输入的每个 x 值,计算出相应的 y 值,请填(3)空使程序完整。 main ( ) { int x,c,m; scanf(“%d”,&x); 】) c=-1; if (【1 else c=【2 】 ; switch (c) { case C1 : y=0 ; case 0 : y= case 1 : y=10 ; case 2 : case 3 : y=-0.5*x+20 ; default : y=-2 ; } if (【3 】) printf (“y=%f”,y); else printf(“error!”); }2.以下程序输出 x,y,z 三个数中的最小值,请填(2)空使程序完整。 main ( ) { int x=4,y=5,z=8 ; int u,v; u = x&y ? 【1 】 ; v = u&z ? 【2 】 ; printf (“%d”,v); }八.编程题 1.有三个整数 a,b,c,由键盘输入,输出其中最大的数。2.编程输入整数 a 和 b,若 a + b 大于 100,则输出 a + b 百位以上的数字,否则输出两2 2 2 2数之和。3.有一函数:? x( x & 1) ? y = ?2 x ? 11(1 ≤ x & 10) ?3x ? 11( x ≥ 10) ?编写一程序,输入 x,输出 y 值。 4.给出一百分制成绩, 要求输出成绩等级’A’,’B’,’C’,’D’,’E’。 分以上为’A’, 90 80-89 分为’B’, 70-79 分为’C’,60-69 分为’D’,60 分以下为’E’。5.提高题:给一个不多于 5 位的正整数,要求:①求出它是几位数;②分别打印出每一位数 字;③按逆序打印出各位数字,例如原数是 321,应输出 123。第六章 循环控制 一.选择题 1.下面程序段 int k=2; while (k=0) {printf(“%d”,k);k--;} 则下面描述中正确的是 。 A)while 循环执行 10 次 B)循环是无限循环 C)循环题语句一次也不执行 D)循环体语句执行一次 2.下述程序段中, 与其他程序段的作用不同。 A) k=1; B) k=1; while (1) { Repeat : s+= k=k+1 ; if (k&100) } printf(“\n%d”,s) ; C) int k,s=0; for (k=1;k&=100;s+=++k); printf(“\n%d”,s) ;s+= if (++k&=100) goto Repeat printf(“\n%d”,s) ; D) k=1; do s+=k; while (++k&=100) ; printf(“\n%d”,s) ;3.以下程序段的循环次数是 。 for (i=2; i==0; ) printf(“%d”,i--) ; A)无限次 B)0 次 C)1 次 D)2 次 4.下面程序的输出结果是 。 main ( ) { char c=’A’; int k=0; do { switch (c++) { case ‘A’ : k++ ; case ‘B’ : k-- ; case ‘C’ : k+=2 ; case ‘D’ : k%=2 ; case ‘E’ : k*=10 ; default : k/=3 ; } k++; } while (c&’G’) ; printf (“k=%d”,k) ; } A)k=3 B)k=4 C)k=2 D)k=0 5.下面程序的输出结果是 。 main ( ) { int x=9; for (; x&0; x--) { if (x%3==0) { printf(“%d”,--x); } } } A)741 B)852 C)963 D).以下不是死循环的程序段是 。 A) int i=100; B)for ( ; ; ) ; while (1) { i=i%100+1 ; if (i&100) } C) int k=0; D)int s=36; do { ++k; } while (k&=0); while (s) ; -- 7.下述程序段的运行结果是 。 int a=1,b=2,c=3,t; while (a&b&c) {t=a; a=b; b=t; c--;} printf(“%d,%d,%d”,a,b,c); A)1,2,0 B)2,1,0 C)1,2,1 D)2,1,1 8.下面程序的功能是从键盘输入一组字符,从中统计大写字母和小写字母的个数,选择 填空。 main ( ) { int m=0,n=0; while ((【 】) ! ’\n’) { if (c&=’A’ && c&=’Z’) m++; if (c&=’a’ && c&=’z’) n++; } } A)c=getchar( ) B)getchar( ) C)c==getchar( ) D)scanf(“%c”,&c) 。 9.下述语句执行后,变量 k 的值是 int k=1; while (k++&10); A)10 B)11 C)9 D)无限循环,值不定 10.下面程序的输出结果是 。 main ( ) { int k=0,m=0,i,j; for (i=0; i&2; i++) { for (j=0; j&3; j++) k++ ; k-= } m = i+ printf(“k=%d,m=%d”,k,m) ; } A)k=0,m=3 B)k=0,m=5 C)k=1,m=3 D)k=1,m=5 11.下面 for 循环语句 。 int i,k; for (i=0, k=-1; k=1; i++, k++) printf(“***”); A)判断循环结束的条件非法 B)是无限循环 C)只循环一次 D)一次也不循环 12.语句 while (!E); 中的表达式!E 等价于 。 A)E==0 B)E!=1 C)E!=0 D)E==1 。 13.以下是死循环的程序段是 A) for (i=1; ; ) { if (i++%2==0) if (i++%3==0) } B) i=32767; do { if (i&0) } while (++i) ; C) for (i=1 ; ;) if (++I&10) D) i=1 ; while (i--); 14.执行语句 for (i=1;i++&4;) ; 后变量 i 的值是 。 A)3 B)4 C)5 D)不定 15.以下程序段 。 x=-1; do { x=x*x; } while (!x); A)是死循环 B)循环执行 2 次 C)循环执行 1 次 D)有语法错误 16.下面程序的功能是在输入的一批正数中求最大者, 输入 0 结束循环, 选择 main ( ) { int a,max=0; scanf(“%d”,&a); while (【 】) { if (max&a) max= scanf (“%d”,&a); } printf(“%d”,max); } A)a==0 B)a C)!a==1 D)!a 17.以下不是死循环的语句是 。 A)for (y=9,x=1;x&++y;x=i++) i= B)for ( ; ; x++=i ) ; C)while (1) { x++ ; } D)for (i=10 ; ; i--) sum+= 18.下面程序段的运行结果是 。 x=y=0; while (x&15) y++,x+=++ printf(“%d,%d”,y,x); A)20,7 B)6,12 C)20,8 D)8,20 19.以下 for 循环的执行次数是 。 for (x=0,y=0; (y=123) && (x&4) ; x++) ; A)无限循环 B)循环次数不定 C)4 次 D)3 次填空。 20.若运行以下程序时,输入 2473L,则程序的运行结果是 main ( ) { while ((c=getchar( )) ! =’\n’) switch (c-‘2’) { case 0 : case 1 : putchar (c+4) ; case 2 : putchar (c+4) ; case 3 : putchar (c+3) ; default : putchar (c+2) ; } printf(“\n”); } A)668977 B)668966 C)。D)6688766二.填空题 1.C 语言三个循环语句分别是 语句, 2.至少执行一次循环体的循环语句是 3.循环功能最强的循环语句是 4.C 语言允许循环嵌套使用 层。 5.程序段 for (a=1,i=-1; -1&i&1; i++) { a++ ; printf(“%2d”,a); } ; printf(“%2d”,i) ; 的运行结果是 。语句和 。 。语句。三.判断题 1.在 while 循环中允许使用嵌套循环,但只能是嵌套 while 循环。 【 2.在实际编程中,do-while 循环完全可以用 for 循环替换。 【 】 3.continue 语句只能用于三个循环语句中。 【 】 4.在不得已的情况下(例如提高程序运行效率) ,才使用 goto 语句。 【 5.语句标号与 C 语言标识符的语法规定是完全一样的。 【 】 6.for 循环的三个表达式可以任意省略,while,do-while 也是如此。 【 7.do-while 允许从外部转到循环体内。 【 】 8.while 的循环控制条件比 do-while 的循环控制条件严格。 【 】 9.do-while 循环中,根据情况可以省略 while。 【 】 10.do-while 循环的 while 后的分号可以省略。 【 】】】】四.简答题 1.设计使用二分法求非线性方程 f(x)=0 在区间[a,b]的实根的算法。 经典算法提示: 从端点 x0 = a 开始,以 h 为步长,逐步往后进行搜索;对于每一个子区间 [ xi , xi +1 ] (其中 xi +1 = xi + h ) 若 f ( xi ) = 0 , xi 为一个实根, : 则 且从 xi +则 xi +1 为一个实根,且从 xi +1 +h 开始再往后搜索; f ( xi +1 ) = 0 , 若 2 f ( xi ) f ( xi +1 ) & 0 ,则说明当前子区h 开始再往后搜索;若 2间内无实根。从 xi +1 开始再往后搜索;若 f ( xi ) f ( xi +1 ) & 0 ,则说明在当前子区间内有实根。 此时,反复将子区间减半,直到发现一个实根或子区间长度小于 ε 为止。在后一种情况下, 子区间的中点即取为方程的一个实根。然后再从 xi +1 开始往后搜索。其中 ε 为预先给定的精 度要求。以上过程一直进行到区间有端点 b 为止。 在使用本方法时,要注意步长 h 的选择。若步长 h 选的过大,可能会导致某些实根的丢失; 若步长 h 选的过小,则会增加计算工作量。 2.设计用变步长梯形求积法计算定积分 T = 经典算法提示: 首先用梯形公式计算:∫baf ( x)dx 的算法h Tn = [ f (a ) + f (b)] 2其中 n=1,h=b-a 然后用下列递推公式计算1 h n ?1 T2 n = Tn + ∑ f ( xi + 0.5h) 2 2 i=02n ? n, 0.5h ? h直至 T2n ? Tn & ε 为止3.设计使用牛顿迭代法求方程 f(x)=0 的一个实根的算法。 经典算法提示: 设 f(x)=0,则满足下列条件: (1) f ( x ) 在闭区间[a,b]上,其 f '( x ) 与 f ''( x ) 均存在,且各自保持固定符号; (2) f ( a ) f (b) & 0 ; (3) f ( x0 ) f ''( x ) & 0 ,且 x, x0 ∈ [ a, b] 。 则方程 f(x)=0 在区间[a,b]上只有一个实根,取初值 x0 ,由牛顿迭代公式:xn +1 = xn ? f ( xn ) / f ''( xn )计算得到的序列 x0 , x1 ,L , xn ,L 收敛于方程 f(x)=0 的根。 结束迭代过程的条件为 f ( xn +1 ) & ε 与 xn +1 ? xn & ε 同时成立, 其中ε为预先给定的精度要 求。五.程序阅读题 1.写出下面程序运行的结果。 main ( ) { int x, for (i=1 ; i&=100 ; i++) { x=i; if (++x%2==0) if (++x%3==0) if(++x%7==0) printf(“%d ”,x) ; } } 2.写出下面程序运行的结果。 main ( ) { int i,b,k=0 ; for (i=1; i&=5 ; i++) { b=i%2; while (b--=0) k++ ; } printf(“%d,%d”,k,b); } 3.写出下面程序运行的结果。 main ( ) { int a,b; for (a=1,b=1 ; a&=100 ; a++) { if (b&=20) if (b%3==1) { b+=3 ; } b-=5; } printf(“%d\n”,a); } 4.写出下面程序运行的结果。 main ( ) { int k=1,n=263 ; do { k*= n%10 ; n/=10 ; } while (n) ; printf(“%d\n”,k); } 5.写出下面程序运行的结果。 main ( ) { int i=5 ; do { switch (i%2) { case 4 : i-- ; case 6 : i-- ; } i-- ; i-- ; printf(“%d”,i); }while (i&0) ; } 6.写出下面程序运行的结果。 main ( ) { int i,j; for (i=0;i&3;i++,i++) { for (j=4 ; j&=0; j--) { if ((j+i)%2) { j-- ; printf(“%d,”,j); } -- j-- ; printf(“%d,”,j) ; } } } 7.写出下面程序运行的结果。 main ( ) { int a=10,y=0 ; do { a+=2 ; y+= if (y&50) } while (a=14) ; printf(“a=%d y=%d\n”,a,y) ; } 8.写出下面程序运行的结果。 main ( ) { int i,j,k=19; while (i=k-1) { k-=3 ; if (k%5==0) { i++ ; } else if (k&5) i++; } printf(“i=%d,k=%d\n”,i,k); } 9.写出下面程序运行的结果。 main ( ) { int y=2,a=1; while (y--!=-1) do { a*= a++ ; } while (y--) ; printf(“%d,%d\n”,a,y); } 10.写出下面程序运行的结果。 main ( ) { int i,k=0; for (i=1; ; i++) { k++ ; while (k&i*i) { k++ ; if (k%3==0) } } loop: printf(“%d,%d\n”,i,k); }六.程序填空题 1.下述程序用“碾转相除法”计算两个整数 m 和 n 的最大公约数。该方法的基本思想是计算 m 和 n 相除的余数,如果余数为 0 则结束,此时的被除数就是最大公约数。否则,将除数作 为新的被除数,余数作为新的除数,继续计算 m 和 n 相除的余数,判断是否为 0,等等,请 填(3)空使程序完整。 main ( ) { int m,n,w; scanf(“%d,%d”,&m,&n); while (n) { 】 ; w=【1 m=【2 】 ; n=【3 】 ; } printf(“%d”,m); } 2.下面程序的功能是输出 1 至 100 之间每位数的乘积大于每位数的和的数,请填(3)空使 程序完整。 main ( ) { int n,k=1,s=0, for (n=1 ; n&=100 ; n++) { k=1 ; s=0 ; 【1 while (【2 k*=m%10; s+=m%10; 【3 } if (k&s) printf(“%dd”,n); } } 3.已知如下公式:】 ; 】) {】 ;π下面程序的功能使根据上述公式输出满足精度要求的 eps 的 π 值, 请填(2)空使程序完整。 main ( ) { double s=0.0,eps,t=1.0; scanf (“%lf”,&eps); 】; n++) { for (n=1 ; 【1 s+= t=【2 】; } 【3 】; } 4.下面程序段的功能是计算 1000!的末尾有多少个零,请填(1)空使程序完整。 main ( ) { int i,k; for (k=0,i=5; i&=1000; i+=5) { m=i; while (【1 】) { k++; m=m/5 ; } } } 5.下面程序接受键盘上的输入,直到按L键为止,这些字符被原样输出,但若有连续的一个 以上的空格时只输出一个空格,请填(3)空使程序完整。 main ( ) { char cx , front=’\0’ ; while (【1 】!=’\n’) { if (cx!=’ ’) putchar(cx) ; if (cx==’ ’) if (【2 】) 】) putchar(【31 12 123 1234 = 1+ + + + +L 2 3 35 357 3579 front= } 6.下面程序按公式50 10 1 k + ∑ k 2 + ∑ 求和并输出结果,请填(3)空使程序完整。 ∑ k =1 k =1 k k =1 100main ( ) { 【1 for (k=1 ; k&=100 ; k++) s+= for (k=1 ; k&=50 ; k++) s+=k* for (k=1 ; k&=10 ; k++) s+=【2 printf(“sum=【3 }】;】; 】”,s);七.编程题 1.输入两个正整数 m 和 n,求其最大公约数和最小公倍数。 2.输入一行字符,分别统计出其中英文字母,空格,数字和其他字符的个数。 。 ∑ n!(即求 1!+2!+3!+…+19!+20!)n =1 203.求4.有一个分数数列:2 3 5 8 13 21 , , , , , ,L 求出这个数列前 20 项之和。 1 2 3 5 8 135.提高题:打印出所有的“水仙花数” ,所谓“水仙花数”是指一个 3 位数,其各位数字立 方之和等于该数本身。6.提高题:在屏幕上打印如下的 SIN 函数曲线。 第七章 数组 一.选择题 。 1.在 C 语言中,引用数组元素时,其数组下标的数据类型允许是 A)整型常量 B)整型表达式 C)整形常量或整形表达式 C)任何类型的表达式 2.以下对一维整型数组 a 的正确说明是 。 A)int a(10) ; B)int n=10,a[n]; C) D)#define SIZE 10 scanf(“%d”,&n); int a[SIZE]; int a[n]; 3.若有定义:int a[10],则对数组 a 元素的正确引用是 。 A)a[10] B)a[3.5] C)a(5) D)a[10-10] 。 4.以下能对一维数组 a 进行正确初始化的语句是 A)int a[10]={0,0,0,0,0}; B)int a[10]={} ; C)int a[ ] = {0} ; D)int a[10]={10*1} ; 5.若有定义:int a[3][4],则对数组 a 元素的正确引用是 。 A)a[2][4] B)a[1,3] C)a(5) D)a[10-10] 。 6.以下能对二维数组 a 进行正确初始化的语句是 A)int a[2][]={{1,0,1},{5,2,3}} ; B)int a[][3]={{1,2,3},{4,5,6}} ; C)int a[2][4]={{1,2,3},{4,5},{6}} ; D)int a[][3]={{1,0,1},{},{1,1}} ; 7.以下不能对二维数组 a 进行正确初始化的语句是 。 A)int a[2][3]={0} ; B)int a[][3]={{1,2},{0}} ; C)int a[2][3]={{1,2},{3,4},{5,6}} ; D)int a[][3]={1,2,3,4,5,6} ; 8.若有说明:int a[3][4]={0};则下面正确的叙述是 。 A)只有元素 a[0][0]可得到初值 0 B)此说明语句不正确 C)数组 a 中各元素都可得到初值,但其值不一定为 0 D)数组 a 中每个元素均可得到初值 0 9.若有说明:int a[][4]={0,0};则下面不正确的叙述是 。 A)数组 a 的每个元素都可得到初值 0 B)二维数组 a 的第一维大小为 1 C)因为二维数组 a 中第二维大小的值除以初值个数的商为 1,故数组 a 的行数为 1 D)只有元素 a[0][0]和 a[0][1]可得到初值 0,其余元素均得不到初值 0 10.若二维数组 a 有 m 列,则计算任一元素 a[i][j]在数组中位置的公式为 。 (设 a[0][0]位于数组的第一个位置上) A)i*m+j B)j*m+i C)i*m+j-1 D)i*m+j+1 11.若有说明:int a[][3]={1,2,3,4,5,6,7};则数组 a 第一维大小是 。 A)2 B)3 C)4 D)无确定值 12.以下不正确的定义语句是 。 A)double x[5]={2.0,4.0,6.0,8.0,10.0}; B)int y[5]={0,1,3,5,7,9} ; C)char c1[ ]={‘1’,’2’,’3’,’4’,’5’} ; D)char c2[ ]={‘\x10’,’\xa’,’\x8’} ; 13.下面程序段的输出结果是 。 int k,a[3][3]={1,2,3,4,5,6,7,8,9}; for (k=0;k&3;k++) printf(“%d”,a[k][2-k]); A)3 5 7 B)3 6 9 C)1 5 9 D)1 4 7 14.下面是对 s 的初始化,其中不正确的是 。 A)char s[5]={“abc”}; B)char s[5]={‘a’,’b’,’c’}; C)char s[5]=” ”; D)char s[5]=”abcdef”; 15.下面程序段的输出结果是 。 char c[5]={‘a’,’b’,’\0’,’c’,’\0’} printf(“%s”,c); A)’a’’b’ B)ab C)ab c D)abc 16.若有程序段: int k,a[3][3]={1,2,3,4,5,6,7,8,9}; for (k=0;k&3;k++) printf(“%d”,a[k][2-k]); 。 则以下叙述正确的是 A)a 与 b 数组完全相同 B)a 与 b 长度相同 C)a 和 b 中都存放字符串 D)a 数组比 b 数组长度长 17.有两个字符数组 a,b,则以下正确的输入语句是 。 A)gets(a,b); B)scanf(“%s%s”,a,b); C)scanf(“%s%s”,&a,&b); D)gets(“a”),gets(“b”); 18.下面程序段的输出结果是 。 char a[7]=”abcdef”; char b[4]=”ABC”; strcpy(a,b); printf(“%c”,a[5]); A) B)\0 C)e D)f 19.下面程序段的输出结果是 。 char c[ ]=”\t\v\\\0will\n”; printf(“%d”,strlen(c)); A)14 B)3 C)9 D)6 20.判断字符串 a 和 b 是否相等,应当使用 。 A)if (a==b) B)if (a=b) C)if (strcpy(a,b)) D) if (strcmp(a,b)) 21.判断字符串 a 是否大于 b,应当使用 。 A)if (a&b) B)if (strcmp(a,b)) C)if (strcmp(b,a)&0) D)if (strcmp(a,b)&0) 22.下面叙述正确的是 。 A)两个字符串所包含的字符个数相同时,才能比较字符串 B)字符个数多的字符串比字符个数少的字符串大 C)字符串”STOP ”与”STOP”相等 D)字符串”That”小于字符串”The” 23.下面有关字符数组的描述中错误的是 。 A)字符数组可以存放字符串 B)字符串可以整体输入,输出 C)可以在赋值语句中通过赋值运算对字符数组整体赋值 D)不可以用关系运算符对字符数组中的字符串进行比较 24.下面程序的输出结果是 。 main ( ) { char ch[7]=”12ab56”; int i,s=0; for (i=0;ch[i]&’0’&&ch[i]&=’9’;i+=2) s=10*s+ch[i]-‘0’; printf(“%d\n”,s); } A)1 B)1256 C)12ab56 25.下面程序的输出结果是 。 main ( ) { char str[ ]=”SSWLIA” , C; for (k=2;(c=str[k])!=’\0’;k++) { switch (c) { case ‘I’ : ++k; case ‘L’: default : putchar(c) ; } putchar(‘*’); } } A)SSW B)SW* C)SW*AD)abD)SW二.填空题 1.在 C 语言中,二维数组的元素在内存中的存放顺序是 2.若有定义:double x[3][5],则 x 数组中行下标的下限为 ,列下标的下限为 3.若有定义:int a[3][4]={{1,2},{0},{4,6,8,10}};则初始化后,a[1][2]的值为 a[2][1]得到的值为 。 4.字符串”ab\n\\012\\”的长度是 。 5.下面程序段的运行结果是 。 char x[ ]=”the teacher”; int i=0; while (x[++i]!=’\0’) if (x[i-1]==’t’) printf(“%c”,x[i]); 6.欲为字符串 S1 输入”Hello World!”,其语句是 7.欲将字符串 S1 复制到字符串 S2 中,其语句是 8.如果在程序中调用了 strcat 函数,则需要预处理命令。 。 ,。 。 。 如果调用了 gets 函数,则需要预处理命令 。 。 9.C 语言数组的下标总是从 开始,不可以为负数;构成数组各个元素具有相同的 10.字符串是以 为结束标志的一维字符数组。有定义:char a[]=””;则 a 数组的 长度是 。三.程序阅读题 1.写出下面程序的运行结果。 main ( ) { int a[6][6],i, for (i=1; i&6 ; i++) for (j=1 ; j&6 ; j++) a[i][j]=(i/j)*(j/i) ; for (i=1;i&6 ; i++) { for (j=1 ; j&6 ; j++) printf(“%2d”,a[i][j]) ; printf(“\n”); } } 2.写出下面程序的运行结果。 main ( ) { int i=0; char a[ ]=”abm”, b[ ]=”aqid”, c[10]; while (a[i]!=’\0’ && b[i]!=’\0’) { if (a[i]&=b[i]) c[i]=a[i]-32 ; else c[i]=b[i]-32 ; i++; } c[i]=’\0’; puts(c); } 3.当运行下面程序时,从键盘上输入 AabDL,则写出下面程序的运行结果。 main ( ) { char s[80]; int i=0; gets(s); while (s[i]!=’\0’) { if (s[i]&=’z’ && s[i]&=’a’) s[i]=’z’+’a’-s[i] ; i++; } puts(s); } 4.写出下面程序的运行结果。 main ( ) {int i,c; char s[2][5]={“8980”,”9198”}; for (i=3; i&=0 ; i--) { c=s[0][i]+s[1][i]-2*’0’; s[0][j] = c % 10 + ‘\0’ ; } for (i=0; i&=1; i++) puts(s[i]);} 5.当运行下面程序时,从键盘上输入 7 4 8 9 1 5L,则写出下面程序的运行结果。 main ( ) { int a[6],i,j,k,m; for (i=0 ; i&6 ; i++) scanf (“%d”,&a[i]); for (i=5 ; i&=0; i--) { k=a[5]; for (j=4; j&=0; j--) a[j+1]=a[j] ; a[0]=k; for (m=0 ; m&6 ; m++) printf(“%d ”,a[m]); printf(“\n”); } }四.程序判断题 1.下面程序为数组输入数据并输出结果;判断下面程序的正误,如果错误请改正过来。 main ( ) { int a[3]={3*0} ; for (i=0; i&4; i++) scanf(“%d”,&a[i]); for (i=0; i&4; i++) printf(“%d”,a[i]); } 2.下面程序为数组输入数据并输出结果;判断下面程序的正误,如果错误请改正过来。 main ( ) { int a[3]={1,2,3} , scanf(“%d%d%d”,&a); for (i=0; i&3; i++) printf(“%d”,a[i]); } 3.下面程序的功能是:先将在字符串 s 中的字符按逆序存放到 t 串中,然后把 s 中的字符按 正序连接到 t 串的后面。例如,当 s 中的字符串为: “ABCDE”时则 t 中的字符串应为: “EDCBAABCDE” ;判断下面程序的正误,如果错误请改正过来。 main ( ) { char s[80],t[200]; int i, gets(s); sl = strlen(s); for (i=0; i& i++) t[i] = s[sl-i]; for (i=0; i& i++) t[sl+i] = s[i]; puts(t); } 4.下面程序的功能是:将 n 各无序整数从小到大排序;判断下面程序的正误,如果错误请改 正过来。 main ( ) { int a[100], i, j, p, t, n=20 ; for (j = 0; j& j++) scanf(“%d”, &a[j]), for (j = 0;j&n-1 ; j++) { p = for ( i=j+1; i&n-1 ; i++ ) if (a[p]&a[i]) t=i; if (p!=j) { t = a[j]; a[j] = a[p]; a[p]=t; } } for ( j = 0; j& j++ ) printf(“%d ”, &a[j]); } 5.下面程序的功能是:统计子字符串 substr 在字符串 str 中出现的次数。例如,若字符串 为 aaas lkaaas,子字符串为 as,则应输出 2;判断下面程序的正误,如果错误请改正过 来。 main ( ) { char substr[80],str[80]; int i,j,k,num=0; gets(substr); gets(str); for (i = 0, str[i], i++) for (j=i,k=0;substr[k]==str[j];k++,j++) if (substr[k+1]!=’\0’) { num++; } printf(“num=%d”, num); } 五.程序填空题 1.下面程序可求出矩阵 a 的主对角线上的元素之和,请填(2)空使程序完整。 main ( ) { int a[3][3]={1,3,5,7,9,11,13,15,17} , sum=0, i, for (i=0 ; i&3 ; i++) for (j=0 ; j&3 ; j++) 】) if (【1 sum=sum+【2 】 ; printf(“sum=%d”,sum); } 2.下面程序将十进制整数 base 转换成 n 进制,请填(3)空使程序完整。 main ( ) { int i,base,n,j,num[20] ; scanf(“%d”,&n); scanf(“%d”,base) ; do { i++; num[i]=【1 】; n=【2 】; } while (n!=0); for (【3 】) ; printf(“%d”,num[j]) ; } 3.下面程序的功能是输入 10 个数,找出最大值和最小值所在的位置,并把两者对调,然后 输出调整后的 10 个数,请填(3)空使程序完整。 main ( ) { int a[10],max,min,i,j, for (i=0; i&10; i++) scanf(“%d”,&a[i]); max=min=a[0]; for (i=0; i&10; i++) { 】; } if (a[i]&min) { min=a[i]; 【1 if (a[i]&max) {max=a[i]; 【2 】; } } 【3 】; for (i=0; i&10; i++) printf(“%d”,a[i]); } 4.下面程序用“插入法”对数组 a 进行由小到大的排序,请填(3)空使程序完整。 经典算法提示: 简单插入排序算法的基本思想使将数组处理 n-1 次, k 次处理是将第 k 个元素插入到目前 第 的位置。第 k 次的元素是这样插入的:在第 k 次处理时,前面的元素 a[0],a[1],…,a[k-1] 必定已排成了升序, a[k]与 a[k-1],a[k-2],…a[0]逐个比较 将 (由后向前)若有 a[j]&a[k], , 则 a[k]插入到 a[j]之后,否则 a[k]维持原位不变。 main ( ) { int a[10]={191,3,6,4,11,7,25,13,89,10} ; int i,j, for (i=1; i&10; i++) { k = a[i] ; j = 【1 】; while (j&=0 && k&a[j] ) { 【2 】; j--; } 】= 【3 } for (i=0; i&10; i++) printf(“%d”,a[i]); } 5.下面程序用“两路合并法”把两个已按升序(由小到大)排列的数组合并成一个新的升序 数组,请填(3)空使程序完整。 main ( ) { int a[3]={5,9,10} ; int b[5]={12,24,26,37,48} ; int c[10],i=0,j=0,k=0 ; while (i&3 && i&5) if (【1 】) { c[k]=b[j] ; k++ ; j++ ; } else { c[k]=a[j] ; k++ ; i++ ; } while (【2 】) { { c[k]=a[j] ; i++ ; k++ ; } 】) { while (【3 { c[k]=b[j] ; j++ ; k++ ; } for (i=0; i&k; i++) printf(“%d ”,c[i]); } 6.下面程序的功能是将二维数组 a 中每个元素向右移一列, 最右一列换到最左一列, 移后的 结果保存到 b 数组中,并按矩阵形式输出 a 和 b,请填(3)空使程序完整。 数组 a 数组 main ( ) { int a[2][3]{{4,5,6},{1,2,3}}, b[2][3], i,j; for (i=0; i&2 ; i++) for (j=0; i&3 ; j++ ) { printf(“%5d”,a[i][j]); 【1 】; } printf(“\n”); } for (【2 】) b[i][0]=a[i][2]; for (i=0; i&2 ; i++) { for (j=0; i&3 ; j++) { printf(“%5d”,b[i][j]); 【3 】; } printf(“\n”); } } 7.下面程序的功能是在一个字符串中查找一个指定的字符, 若字符串中包含该字符则输出该 字符在字符串中第一次出现的位置(下标值) ,否则输出-1,请填(2)空使程序完整。 # include &string.h& main ( ) { char c=’a’ ; /* 需要查找的字符*/ char t[50] ; int i,j,k; gets(t) ; i = 【1 】; for (k=0; k&i; k++) if (【2 】) { j =} else j=-1; printf(“%d”,j); } 8.下面程序用“顺序查找法”查找数组 a 中是否存在某一关键字,请填(2)空使程序完整。 main ( ) { int a[10]={25,57,48,371,123,291,18,22,44}; int i=0, scanf(“%d”,&x); 】; 【1 while (a[i]!=x) i++ ; if (【2 】) printf(“found=%d\n”,i); else printf(“can\’t found!\n”); } 9.以下程序是求矩阵 a,b 的乘积,结果存放在矩阵 C 中并按矩阵形式输出,请填(3)空使程 序完整。 main ( ) { int a[2][3]={2,10,9,4,5,119}, b[2][2]={-1,-2,-3,-4}; int i,j,k,s,c[3][2]; for (i=0; I&3; i++) for (j=0; j&2; j++) { 【1 】 for (k=0; k&2; k++) s+=【2 】; c[i][j]=s; } for (i=0; i&3; i++) for (j=0; j&2; j++) { printf(“%6d”,c[i][j]); 【3 】; } } 10.以下程序是将字符串 b 的内容连接字符数组 a 的内容后面,形成新字符串 a,请填(2)空 使程序完整。 main ( ) { char a[40]=”Great ”, b[ ]=”Wall”; int i=0,j=0 ; while (a[i]!=’\0’) i++ ; while (【1 a[i]=b[j] ; i++ ; j++ ; } 【2 printf(“%s\n”,a); }】) {】;六.编程题 1.用选择法对 10 个整数排序。2.有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入数组中。3.有一篇文章,共有 3 行文字,每行有 80 个字符。要求分别统计出其中英文大写字母,小 写字母,中文字母,中文字符,数字,空格及其他字符的个数。 (提示:中文字符是两个字 节,且数值均大于 128 的字符) 。4.对三人的四门课程分别按人和科目求平均成绩,并输出包括平均成绩的二维成绩表。5.提高题:将一个数组中的值按逆序重新存放。例如:原来顺序为 8,6,5,4,1。要求改 为 1,4,5,6,8。6.提高题:打印出杨辉三角形(要求打印出 10 行,课本 P141 页 7.6)7.提高题:编写程序: (1)求一个字符串 S1 的长度; (2)将一个字符串 S1 的内容复制给另一个字符串 S2; (3)将两个字符串 S1 和 S2 连接起来,结果保存在 S1 字符串中; (4)搜索一个字符在字符串中的位置(例如:’I’在”CHINA”中的位置为 3) 。如果没有搜索 到,则位置为-1。 (5) 比较两个字符串 S1 和 S2, 如果 S1&S2, 输出一个正数; 如果 S1=S2, 输出 0; 如果 S1&S2, 输出一个负数;输出的正,负数值为两个字符串相应位置字符 ASCII 码值的差值,当两 个字符串完全一样时,则认为 S1=S2。 以上程序均使用 gets 或 puts 函数输入,输出字符串。不能使用 string.h 中的系统函数。第八章 函数 一.选择题 。 1.以下正确的说法是 A)用户若需要调用标准库函数,调用前必须重新定义 B)用户可以重新定义标准库函数,如若此,该函数将失去原有定义 C)系统不允许用户重新定义标准库函数 D)用户若需要使用标准库函数,调用前不必使用预处理命令将该函数所在的头文件包含编 译,系统会自动调用。 2.以下正确的函数定义是 。 A)double fun(int x, int y) B)double fun(int x,y) { z=x+ } {} C)fun (x,y) D)double fun (int x, int y) { int x, { z=x+ } } 。 3.以下正确的说法是 A)实参和与其对应的形参各占用独立的存储单元 B)实参和与其对应的形参共占用一个存储单元 C)只有当实参和与其对应的形参同名时才共占用相同的存储单元 D)形参时虚拟的,不占用存储单元 4.以下正确的函数定义是 。 A)double fun(int x , int y) B)double fun( int y) C)double fun(int x , int y) ; B)double fun(int x,y) 5.若调用一个函数,且此函数中没有 return 语句,则正确的说法是 。 A)该函数没有返回值 B)该函数返回若干个系统默认值 C)能返回一个用户所希望的函数值 D)返回一个不确定的值 。 6.以下不正确的说法是 A)实参可以是常量,变量或表达式 B)形参可以是常量,变量或表达式 C)实参可以为任意类型 D)如果形参和实参的类型不一致,以形参类型为准 7.C 语言规定, 简单变量做实参时, 它和对应的形参之间的数据传递方式是 A)地址传递 B)值传递 C)有实参传给形参,再由形参传给实参 D)由用户指定传递方式 8.以下程序由语法错误,有关错误原因的正确说法是 。 A)语句 void prt_char( );有错,它是函数调用语句,不能用 void 说明 B)变量名不能使用大写字母 C)函数说明和函数调用语句之间有矛盾 D)函数名不能使用下划线 9.C 语言规定,函数返回值的类型是由 决定的。 A)return 语句中的表达式类型 B)调用该函数时的主调函数类型 C)调用该函数时由系统临时 D)在定义函数时所指定的函数类型 10.以下正确的描述是 。 A)函数的定义可以嵌套,但函数的调用不可以嵌套 B)函数的定义不可以嵌套,但函数的调用可以嵌套 C)函数的定义和函数的调用均不可以嵌套 D)函数的定义和函数的调用均可以嵌套 11.若用数组名作为函数调用的实参,传递给形参的是 。 A)数组的首地址 B)数组中第一个元素的值。 C)数组中的全部元素的值 D)数组元素的个数 。 12.假设调用函数有以下定义和函数 f 调用,则函数 f 中对形参数组错误定义的是 char c[5]={‘a’,’b’,’\0’,’c’,’\0’}; printf(“%s”,c); A)f(int array[][6]) B)f(int array[3][]) C)f(itn array[][4]) D)f(int array[2][5]) 13.如果在一个函数中的复合语句中定义了一个变量,则该变量 。 A)只在该复合语句中有定义 B)在该函数中有定义 C)在本程序范围内有定义 D)为非法变量 14.以下不正确的说法是 。 A)在不同函数中可以使用相同名字的变量 B)形式参数是局部变量 C)在函数内定义的变量只在本函数范围内有定义 D)在函数内的复合语句中定义的变量在本函数范围内有定义 15.以下不正确的说法是 。 A)形参的存储单元是动态分配的 B)函数中的局部变量都是动态存储 C)全局变量都是静态存储 D)动态分配的变量的存储空间在函数结束调用后就被释放了 。 16.下面程序的输出是 int i=2 ; printf(“%d%d%d”,i*=2,++i,i++) ; A) 8,4,2 B)8,4,3 C)4,4,5 D)4,5,6 17.已知一个函数的定义如下: double fun(int x, double y) { …… } 则该函数正确的函数原型声明为: A)double fun (int x,double y) B)fun (int x,double y) C)double fun (int ,double ); D)fun(x,y) ; 18.关于函数声明,以下不正确的说法是 。 A)如果函数定义出现在函数调用之前,可以不必加函数原型声明 B)如果在所有函数定义之前,在函数外部已做了声明,则各个主调函数不必再做函数原型 声明 C)函数再调用之前,一定要声明函数原型,保证编译系统进行全面的调用检查 D)标准库不需要函数原型声明 。 19.以下不正确的说法是 A)全局变量,静态变量的初值是在编译时指定的 B)静态变量如果没有指定初值,则其初值为 0 C)局部变量如果没有指定初值,则其初值不确定 D)函数中的静态变量在函数每次调用时,都会重新设置初值 20.以下不正确的说法是 。 A)register 变量可以提高变量使用的执行效率 B)register 变量由于使用的是 CPU 的寄存器,其数目是有限制的 C)extern 变量定义的存储空间按变量类型分配 D)全局变量使得函数之间的“耦合性”更加紧密,不利于模块化的要求二.填空题 1.C 语言函数返回类型的默认定义类型是 。 2.函数调用语句:fun((a,b),(c,d,e))实参个数为 。 3.函数的实参传递到形参有两种方式: 和 。 。 在一个函数内部直接或 4.在一个函数内部调用另一个函数的调用方式称为 间接调用该函数成为函数 的调用方式。 5.C 语言变量按其作用域分为 和 。 按其生存期分 为 和 。 6.已知函数定义:void dothat(int n,double x) { …… },其函数声明的两种写法为 和 。 7.C 语言变量的存储类别有 , , 和 。 8.凡在函数中未指定存储类别的局部变量,其默认的存储类别为 。 9.在一个 C 程序中, 若要定义一个只允许本源程序文件中所有函数使用的全局变量, 则该变 量需要定义的存储类别为 。 和 。 10.变量被赋初值可以分为两个阶段:即三.程序阅读题 1.写出下面程序的运行结果。 func (int a,int b) { static int m=0,i=2; i+=m+1; m=i+a+b; return (m); } main ( ) { int k=4,m=1,p1,p2; p1=func(k,m) ; p2=func(k,m) ; printf(“%d,%d\n”,p1,p2) ; } 2.写出下面程序的运行结果。 # define MAX 10 int a[MAX], sub1 ( ) { for (i=0; i&MAX; i++) a[i]=i+ } sub2 ( ) { int a[MAX], i , max=5; for (i=0; i&MAX; i++) a[i]= } sub3 (int a[ ]) { for (i=0; i&MAX; i++) printf(“%d ”,a[i]); printf(“\n”); } main ( ) { sub1( ); sub3(a); sub2( ); sub3(a); } 3.若输入的值是-125,写出下面程序的运行结果。 #include &math.h& fun (int n) { int k, for (k=2; k&=sqrt(n); k++) { r=n%k; while (!r) { printf(“%d”,k); n=n/k; if (n&1) printf(“*”); r=n%k; } } if (n!=1) printf(“%d\n”,n); } main ( ) { scanf(“%d”,&n); printf(“%d=”,n); if (n&0) printf(“-”); n = fabs(n); fun(n); } 4.写出下面程序的运行结果。 int i=0; fun1 (int i) { i = (i%i)*(i*i)/(2*i)+4 ; printf(“i=%d\n”,i); return (i) ; } fun2(int i) { i = i&=2 ? 5 : 0 ; return (i) ; } main ( ) { int i = 5 ; fun2(i/2) ; printf(“i=%d\n”,i) ; fun2(i=i/2) ; printf(“i=%d\n”,i) ; fun2(i/2) ; printf(“i=%d\n”,i) ; fun1(i/2) ; printf(“i=%d\n”,i) ; } 5.写出下面程序的功能。 func (int n) { int i,j,k; i=n/100; j=n/10-i*10 ; k=n%10 ; if (i*100+j*10+k) == i*i*i+j*j*j+k*k*k) return 0; } main ( ) { int n, for (n=100; n&1000 ; n++) if (k=func(n)) printf(“%d”,k) ; }四.程序判断题 1.下面 add 函数求两个参数的和;判断下面程序的正误,如果错误请改正过来。 void add(int a,int b) { c = a + return (c) ; } 2.下面函数 fun 的功能是:将长整型数中偶数位置上的数依次取出,构成一个新数返回,例 如,当 s 中的数为: 时,则返回的数为:8642;判断下面程序的正误,如果错误 请改正过来。 long fun(long s) { long t , sl=1; t=0; while ( s & 0 ) { d = s%10; if (d%2=0) { t=d* sl+ sl *= 10; } s \= 10; } return (t); } 3.下面函数 fun 的功能是:统计字符串 s 中各元音字母(即 A,E,I,O,U)的个数,注意:字 母不分大,小写;判断下面程序的正误,如果错误请改正过来。 fun (char s[ ], int num[5]) { i=5; for (k=0; k&i; k++) num[i]=0; for (k=0; s[k]; k++) { i = -1; switch ( s ) { case ‘a’: case ‘A’: i=0; case ‘e’: case ‘E’: i=1; case ‘i’ : case ‘I’ : i=2; case ‘o’: case ‘O’: i=3; case ‘u’: case ‘U’: i=4; } if (i &= 0) num[i]++; } } 4.函数 fun 的功能是:根据整型形参 m,计算如下公式的值:y=1 1 1 1 + + + LL + 100*100 200* 200 300*300 m*m判断下面程序的正误,如果错误请改正过来。 fun (int m) { double y = 0, for ( i =100, i &= m, i += 100 ) { d = (double) i * (double) I ; y += 1.0 / } return ( y ) ; } 5.下面函数 fun 的功能是:依次取出字符串中所有数字字符,形成新的字符串,并取代原字 符串;判断下面程序的正误,如果错误请改正过来。 void fun (char s[ ]) { int i,j; for (i=0,j=0; s[i]!=’\0’; i++) if (s[i]&=’0’ && s[i]&=’9’) s[j]=s[i]; s[j]=”\0”; }五.程序填空题 1.下面函数用“折半查找法”从有 10 个数的 a 数组中对关键字 m 查找,若找到,返回其下 标值,否则返回-1,请填(2)空使程序完整。 经典算法提示: 折半查找法的思路是先确定待查元素的范围, 将其分成两半, 然后比较位于中间点元素的值。 如果该待查元素的值大于中间点元素的值, 则将范围重新定义为大于中间点元素的范围, 反 之亦反。 int search(int a[10],int m) { int x1=0,x2=0, while (x1&=x2) { mid = (x1+x2)/2; if (m&a[mid]) 【1 】; else if (m&a[mid]) 【2 】; else return (mid) ; } return (-1) ; } 2.del 函数的作用是删除有序数组 a 中的指定元素 x,n 为数组 a 的元素个数,函数返回删 除后的数组 a 元素个数,请填(2)空使程序完整。 int del (int a[10],int n,int x) { int p=0, while (x&=a[p]&&p&n) 【1 】; for (i=p-1; i&n; i++) 【2 】; return (n-1) ; } 3.以下程序的功能是计算函数 F ( x, y, z ) =x+ y z+ y + ,请填(3)空使程序完整。 x? y z? y# include &stdio.h& 【1 】; main ( ) { float x,y,z, scanf(“%f,%f,%f”,&x,&y,&z); f = fun (【2 】); f += fun (【3 】); printf(“f=%d”,f); } float fun(float a,float b) { return (a/b) ; } 4.avg 函数的作用是计算数组 array 的平均值返回,请填(3)空使程序完整。 float avg(float array[10]) { float avgr , sum=0 ; for (i=1; 【1 】; i++) sum+=【2 】; avgr = sum / 10 ; 【3 】; } 5.下面函数的作用是通过递归的方法将字符串倒置,请填(2)空使程序完整。 void fun(char s[ ],int l,int h) 】) { if (【1 else { fun (【2 t = s[l] , s[l]=s[h] , s[h]= } }】);六.编程题 1.写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并 输出结果,且两个整数的输入也在主函数。2.写一个判素数的函数,在主函数输入一个数,输出是否为素数的信息。3.写一个函数,使给定的一个二维数组(N×N)转置,即行列互换。 是不大于 10 的数, (N 由输入决定) 。4.编写一个 fun 函数 void fun(char s1[],char s2[]),将两个字符串 s1 和 s2 连接起来存 放在 s1 中。5.编写一个 fun 函数:long fun(char s[]),将一个数字字符串转换为一个整数(不得调用 标准库函数) 。例如,若输入字符串“-1234” ,则函数把它转换为整数值-1234。6.编写一个 fun 函数:int fun(int a[], int n),删去一维数组中所有相同的数,使之只剩 一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。例如,一 维数组中的数据是:2 2 2 3 4 4 5 6 6 6 7 7 8 9 9 10 10 10,删除后,数组中的内容应 该是:2 3 4 5 6 7 8 9 107.提高题:写一个函数,输入一个 4 位数字,要求输出这 4 个数字字符,但每个字符间空一 个格。8.提高题:用递归法将一个整数 n 转换成字符串。例如:输入 483,应输出字符串“483” 。 n 的位数不确定,可以是任意位数的整数。9.提高题:定义一个函数,可求 3 行 4 列整型数组中最大,最小元素值及它们的位置;要求 在 main 中输入输出数组,并在 main 中输出所要求的数据;该整型数组为全局变量。第九章 预处理命令 一.选择题 。 1.以下叙述不正确的是 A)预处理命令行都必须以#开始 B)在程序中凡是以#开始的语句行都是预处理命令行 C)C 程序在执行过程中对预处理命令行进行处理 D)预处理命令行可以出现在 C 程序中任意一行上 。 2.以下叙述中正确的是 A)在程序的一行上可以出现多个有效的预处理命令行 B)使用带参数的宏时,参数的类型应与宏定义时的一致 C)宏替换不占用运行时间,只占用编译时间 D)C 语言的编译预处理就是对源程序进行初步的语法检查 3.以下有关宏替换的叙述不正确的是 。 A)宏替换不占用运行时间 B)宏名无类型 C)宏替换只是字符替换 D)宏名必须用大写字母表示 4.在“文件包含”预处理命令形式中,当#include 后面的文件名用””(双引号)括起时, 寻找被包含文件的方式是 。 A)直接按系统设定的标准方式搜索目录 B)先在源程序所在目录中搜索,再按系统设定的标准方式搜索 C)仅仅搜索源程序所在目录 D)仅仅搜索当前目录 5.在“文件包含”预处理命令形式中,当#include 后名的文件名用&&(尖括号)括起时, 寻找被包含文件的方式是 。 A)直接按系统设定的标准方式搜索目录 B)先在源程序所在目录中搜索,再按系统设定的标准方式搜索 C)仅仅搜索源程序所在目录 D)仅仅搜索当前目录 。 6.在宏定义#define PI 3.1415926 中,用宏名 PI 代替一个 A)单精度数 B)双精度数 C)常量 D)字符串 7.以下程序的运行结果是 。 #define ADD(x) x+x main ( ) { int m=1,n=2,k=3, sum = ADD(m+n)* printf(“%d\n”,sum) ; A)9 B)10 C)12 D)18 8.以下程序的运行结果是 。 #define MIN(x,y) (x)&(y) ? (x) : (y) main ( ) { int i=10, j=15 , k = 10*MIN(i,j); printf(“%d\n”,k); } A)10 B)15 C)100 D)150 9.以下程序的运行结果是 。 #define X 5 #define Y X+1 #define Z Y*X/2 main ( ) { int a=Y; printf(“%d\n”,Z); printf(“%d\n”,--a); } A)7 B)12 C)12 D)7 6 6 5 5 10.若有定义 #define N 2 #define Y(n) ((N+1)*n) 则执行语句 z=2*(N+Y(5));后,z 的值为 。 A)语句有错误 B)34 C)70 D)无确定值 11.若有定义#define MOD(x,y) x%y,则执行下面语句后的输出为 。 int z,a=15; float b=100; z=MOD(b,a); printf(“%d\n”,z++); A)11 B)10 C)6 D)有语法错误 12.在任何情况下计算平方数都不会引起二义性的宏定义是 。 A)#define POWER(x) x*x B)#define POWER(x) (x)*(x) C)#define POWER(x) (x*x) D)#define POWER(x) ((x)*(x)) 。 13.以下程序的运行结果是 #define DOUBLE(r) r*r main ( ) { int x=1,y=2,t; t = DOUBLE(x+y) ; printf (“%d\n”,t); } A)5 B)6 C)7 D)8 14.以下程序的运行结果为 。 main ( ) { int b=5,y=3; #define b 2 #define f(x) b*(x) printf(“%d\n”,f(y+1)); #undef b printf(“%d\n”,f(y+1)); } A)20 B)20 C)8 D)8 8 20 8 20 15.以下程序的运行结果为 。 #define A 4 #define B(x) A*x/2 main ( ) { float c,a=4.5; c = B(a) ; printf(“%5.1f\n”,c); } A)6.0B)7.0C)8.0D)9.0二.判断题 1.宏替换时先求出实参表达式的值,然后代入形参运算求值。 【 】 2.宏替换不存在类型问题,它的参数也是无类型。 【 】 3.在 C 语言标准库头文件中, 包含了许多系统函数的原型声明, 因此只要程序中使用了这些 】 函数,则应包含这些头文件,以便编译系统能对这些函数调用进行检查。 【 4..H 头文件只能由编译系统提供。 【 】 5.#include 命令可以包含一个含有函数定义的 C 语言源程序文件。 【 】 6.使用#include&文件名&命令的形式比使用#include“文件名”的形式更省编译时间。 【 】 7.#include “C:\\USER\\F1.H”是正确包含命令, 表示文件 F1.H 存放在 C 盘的 USER 目录下。 】 【 8.#include &……&命令中的文件名是不能包括路径的。 【 】 9.可以使用条件编译命令来选择某部分程序是否被编译。 【 】 10.在软件开发中,常用条件编译命令来形成程序的调试版本或正式版本。 【 】三.简答题 1.请分析以下一组宏定义所定义的输出格式: #define NL putchar(‘\n’) #define PR(format,value) printf(“value=%format\t”,(value)) #define PRINT1(f,x1) PR(f,x1) ; NL #define PRINT2(f,x1,x2) PR(f,x1); PRINT1(f,x2) 如果在程序中有以下的宏引用: PR(d,x) PRINT1(d,x) PRINT2(d,x1,x2) 写出宏展开后的情况,并写出应输出的结果,设 x=5, x1=3, x2=8。四.编程题 1.三角形的面积为 area =1 s ( s ? a)( s ? b)( s ? c) ,其中 s = (a + b + c) ,a,b,c 为三角形 2的三边。定义两个带参数的宏,一个用来求 s,另一个用来求 area。写程序,在程序中用带 实参的宏名来求面积 area。2.提高题:尝试编写一个程序,在主程序(文件 MAIN.C)中输入三个数 a,b,menu,然后根据 menu 的值(menu=1,2,3,4) ,选择四个函数调用并打印结果。该四个函数原型为: int add(int a, int b) 计算 a,b 的加法 在 A1.C 中编写 int sub(int a, int b) 计算 a,b 的减法 在 A2.C 中编写 int mul(int a, int b) 计算 a,b 的乘法 在 A3.C 中编写 int div(int a, int b) 计算 a,b 的除法 在 A4.C 中编写 然后编写一个包含上述函数原型的头文件 MAIN.H,在主程序文件中使用#include 包含它。第十章 一.选择题 。 1.变量的指针,其含义是指该变量的 A)值 B)地址 C)名 D)一个标志 2.已有定义 int k=2;int *ptr1,*ptr2;且 ptr1 和 ptr2 均已指向变量 k,下面不能正确执行 的赋值语句是 。 A)k=*ptr1+*ptr2 B)ptr2=k C)ptr1=ptr2 D)k=*ptr1*(*ptr2) 。 3.若有说明:int *p,m=5,n;以下程序段正确的是 A)p=& B)p = & scanf(“%d”,&p); scanf(“%d”,*p); C)scanf(“%d”,&n); D)p = & *p= *p = 4.已有变量定义和函数调用语句:int a=25;print_value(a);下面函数的输出结果 是 。 void print_value(int *x) { printf(“%d\n”,++*x); } A)23 B)24 C)25 D)26 5.若有说明:int *p1, *p2,m=5,n;以下均是正确赋值语句的选项是 。 A)p1=&m; p2=&p1 ; B)p1=&m; p2=&n; *p1=*p2 ; C)p1=&m; p2=p1 ; D)p1=&m; *p1=*p2 ; 6.若有语句:int *p,a=4;和 p=&a;下面均代表地址的一组选项是 。 A)a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p 7.下面判断正确的是 。 A)char *a=”china”; 等价于 char *a; *a=”china” ; B)char str[10]={“china”}; 等价于 char str[10]; str[ ]={“china”;} C)char *s=”china”; 等价于 char *s; s=”china” ; D)char c[4]=”abc”,d[4]=”abc”; 等价于 char c[4]=d[4]=”abc” ; 8.下面程序段中,for 循环的执行次数是 。 char *s=”\ta\018bc” ; for ( ; *s!=’\0’ ; s++) printf(“*”) ; A)9 B)7 C)6 D)5 9.下面能正确进行字符串赋值操作的是 。 A)char s[5]={“ABCDE”}; B)char s[5]={‘A’,’B’,’C’,’D’,’E’}; C)char * s=”ABCDE” ; D)char *s; scanf(“%s”,s) ; 10.下面程序段的运行结果是 。 char *s=”abcde” ; s+=2 ; printf(“%d”,s); A)cde B)字符’c’ C)字符’c’的地址 D)不确定 11.设 p1 和 p2 是指向同一个字符串的指针变量,c 为字符变量,则以下不能正确执行的赋 值语句是 。 A)c=*p1+*p2 B)p2=c C)p1=p2 D)c=*p1*(*p2) 12.设有程序段:char s[ ]=”china”; char * p=则下面叙述正确的是 。 A)s 和 p 完全相同 B)数组 s 中的内容和指针变量 p 中的内容相等 C)s 数组长度和 p 所指向的字符串长度相等 D)*p 与 s[0]相等 。 13.以下与库函数 strcpy(char *p1,char *p2)功能不相等的程序段是 A)strcpy1(char *p1,char *p2) { while ((*p1++=*p2++)!=’\0’) ; } B)strcpy2(char *p1,char *p2) { while ((*p1=*p2)!=’\0’) { p1++; p2++ } } C)strcpy3(char *p1,char *p2) { while (*p1++=*p2++) ; } D)strcpy4(char *p1,char *p2) { while (*p2) *p1++=*p2++ ; } 14.下面程序段的运行结果是 。 char a[ ]=”language” , * p= while (*p!=’u’) { printf(“%c”,*p-32); p++ ; } A)LANGUAGE B)language C)LANG D)langUAGE 15.若有语句:char s1[ ]=”string”,s2[8],&s3,*s4=”string2”;则库函数 strcpy 的错误调用 。 是 A)strcpy(s1,”string2”); B)strcpy(s4,”string1”); C)strcpy(s3,”string1”); D)strcpy(s1,s2); 16.以下与库函数 strcmp(char *s,char *t)功能相等的程序段是 。 A)strcmp1(char *s,char *t) { for ( ; *s++=*t++; ) if (*s==’\0’) return 0 ; return (*s-*t) ; } B)strcmp2(char *s,char *t) { for ( ; *s++=*t++; ) if (!*s) return 0 ; return (*s-*t) ; } C)strcmp3(char *s,char *t) { for ( ; *t==*s; ) { if (!*t) return 0 ; t++ ; s++ ; } return (*s-*t) ; } D)strcmp4(char *s,char *t) { for ( ; *s==*t; s++, t++ ) if (!*s) return 0 ; return (*t-*s) ; } 。 17.以下说明不正确的是 A)char a[10]=”china” ; B)char a[10],*p=a; p=”china”; C)char *a; a=”china” ; D)char a[10],*p; p=a=”china”; 18.设有说明语句:char a[]=”It is mine”;char *p=”It is mine”;则以下不正确的叙 述是 。 A)a+1 表示的是字符 t 的地址 B)p 指向另外的字符串时,字符串的长度不受限制 C)p 变量中存放的地址值可以改变 D)a 中只能存放 10 个字符 19.若已定义 char s[10];则在下面表达式中不表示 s[1]的地址是 。 A)s+1 B)s++ C)&s[0]+1 D)&s[1] 。 20.若有定义:int a[5],*p=a;则对 a 数组元素的正确引用是 A)*&a[5] B)a+2 C)*(p+5) D)*(a+2) 21.若有定义:int a[5],*p=a;则对 a 数组元素地址的正确引用是 。 A)p+5 B)*a+1 C)&a+1 D)&a[0] 。 22.若有定义: a[2][3];则对 a 数组的第 i 行第 j 列元素值的正确引用是 int A)*(*(a+i)+j) B)(a+i)[j] C)*(a+i+j) D)*(a+i)+j 23.若有定义:int a[2][3];则对 a 数组的第 i 行第 j 列元素地址的正确引用是 。 A)*(a[i]+j) B)(a+i) C)*(a+j) D)a[i]+j 24.若有程序段:int a[2][3],(*p)[3]; p=a;则对 a 数组元素地址的正确引用是 。 A)*(p+2) B)p[2] C)p[1]+1 D)(p+1)+2 。 25.若有程序段:int a[2][3],(*p)[3]; p=a;则对 a 数组元素的正确引用是 A)(p+1)[0] B)*(*(p+2)+1) C)*(p[1]+1) D)p[1]+2 26.若有定义:int a[5];则 a 数组中首元素的地址可以表示为 。 A)&a B)a+1 C)a D)&a[1] 27.若有定义:int (*p)[4];则标识符 p 。 A)是一个指向整型变量的指针 B)是一个指针数组名 C)是一个指针,它指向一个含有四个整型元素的一维数组 D)定义不合法 28.以下与 int *q[5];等价的定义语句是 。 A)int q[5] B)int *q C)int *(q[5]) D)int (*q)[5] 29.以下正确的说明语句是 。 A)int *b[]={1,3,5,7,9} ; B)int a[5],*num[5]={&a[0],&a[1],&a[2],&a[3],&a[4]}; C)int a[]={1,3,5,7,9}; int *num[5]={a[0],a[1],a[2],a[3],a[4]}; D)int a[3][4],(*num)[4]; num[1]=&a[1][3]; 30.若有定义:int b[4][6],*p,*q[4];且 0≤i&4,则不正确的赋值语句是 。 A)q[i]=b[i]; B)p=b; C)p=b[i]; D)q[i]=&b[0][0] 31.以下正确的定义语句和赋值语句是 。 A)int b[3][5],(*p)[3],(*q)[5]; p=b; q=b; B)float b[3][5],(*p)[3]; p[0]=b[0] ; p[2]=*b+4 ; C)double b[3][5],s[5][3], *q; q= s= D)int b[10], *q; char * q= s= 32.若要对 a 进行自减运算,则 a 应有下面说明 。 A)int p[3]; B) C)char *a[3] D)int b[10]; int *a=p; int *a=&k; int *a=b+1; 。 33.以下选项中,对指针变量 p 的不正确操作是 D)int a[5] int *p1,*p2=a; *p1=*p2; 34.若有定义:int x[10]={0,1,2,3,4,5,6,7,8,9},*p1;则数值不为 3 的表达式 是 。 A)x[3] B)p1=x+3,*p1++ C)p1=x+2,*(p1++) D)p1=x+2,*++p1 35.下面程序段的输出是 。 int a[ ]={2,4,6,8,10,12,14,16,18,20,22,24},*q[4],k; for (k=01 k&4; k++) q[k]=&a[k*3]; printf(“%d\n”,q[3][0]); A)8 B)16 C)20 D)输出不合法 36.若要对 a 进行自增运算,则 a 应具有下面说明 。 A)int a[3][2]; B)char *a[ ]={“12”,”ab”}; C)char (*a) [3] D)int b[10], *a=b; 37.若有定义 int a[4][6];则能正确表示 a 数组中任一元素 a[i][j](i,j 均在有效范围内) 地址的表达式 。 A)&a[0][0]+6*i+j B)&a[0][0]+4*j+i C)&a[0][0]+4*i+j D)&a[0][0]+6*j+I 38.下面程序的运行结果是 。 main ( ) { int x[5]={2,4,6,8,10}, *p, ** p=x , pp = & printf(“%d”,*(p++)); printf(“%3d”,**pp); } A)4 4 B)2 4 C)2 2 D)4 6 39.若有定义 int x[4][3]={1,2,3,4,5,6,7,8,9,10,11,12}; int (*p)[3]= 则能够正确表示数组元素 x[1][2]的表达式是 。 A)*((*p+1)[2]) B)(*p+1)+2 C)*(*(p+5)) D)*(*(p+1)+2) 40.若有说明:char *language[]={“FORTRAN”,”BASIC”,”PASCAL”,”JAVA”,”C”};则 language[2]的值是 。 A)一个字符 B)一个地址 C)一个字符串 D)一个不定值 41.设有定义:char *cc[2]={“1234”,”5678”};则正确的叙述是 。 A)cc 数组的两个元素中各自存放了字符串”1234”和”5678”的首地址 B)cc 数组的两个元素分别存放的是含有 4 个字符的一维字符数组的首地址 C)cc 是指针变量,它指向含有两个数组元素的字符型一维数组 D)cc 数组元素的值分别维”1234”和”5678” 42.已有定义 int (*p)( );指针 p 可以 。 A)代表函数的返回值 B)指向函数的入口地址 C)表示函数的类型 D)表示函数返回值的类型 43.已有函数 max(a,b),为了让函数指针变量 p 指向函数 max,正确的赋值方法是 。 A)p= B)p=max(a,b); C)*p= D)*p=max(a,b);A)int a[3], *p; p=&a;B)int a[5], *p; p=a;C)int a[5]; int *p=a=100; 44.若有函数 max(a,b),并且已使函数指针变量 p 指向函数 max,当调用该函数时,正确的 。 调用方法是 A)(*p)max(a,b) B)*pmax(a,b); C)(*p)(a,b); D )*p(a,b); 45.以下正确的叙述是 。 A)C 语言允许 main 函数带形参,且形参个数和形参名均可由用户指定 B)C 语言允许 main 函数带形参,形参名只能是 argc 和 argv C)当 main 函数带有形参时,传给形参的值只能从命令行中得到 D)若有说明: int main(int argc,char **argv),则 argc 的值必须大于 1二.填空题 1.在 C 程序中,指针变量能够赋 值或 值。 ,不能对它进行赋值运算。 2.在 C 语言中,数组名时一个不可改变的 3.若有定义语句:int a[4]={0,1,2,3},*p;p=&a[1];则++(*p)的值是 。 4.若有定义:int a[2][3]={2,4,6,8,10,12};则*(&a[0][0]+2*2+1)的值是 , *(a[1]+2)的值是 。 5.若有程序段: int *p[3],a[6],i; for (i=0; i&3; i++) p[i]=&a[2*i] ; ,*(p[1]+1)引用的是 a 数组元素 。 则*p[0]引用的是 a 数组元素三.程序阅读题 1.写出下面程序的运行结果。 func(char *s,char a,int n) { *s=a; j= while (*s&s[j]) j-- ; } main ( ) { char c[6] ; for (i=1; i&=5 ; i++) *(c+1)=’A’+i+1; printf(“%d\n”,fun(c,’E’,5)); } 2.写出下面程序的运行结果。 fun (char *s) { char *p=s; while (*p) p++ ; return (p-s) ; } main ( ) { char *a=”abcdef” ; printf(“%d\n”,fun(a)) ; } 3.写出下面程序的运行结果。 sub(char *a,int t1,int t2) { while (t1&t2) { ch = *(a+t1); *(a+t1)=*(a+t2) ; *(a+t2)= t1++ ; t2-- ; } } main ( ) { char s[12]; for (i=0; i&12 ; i++) s[i]=’A’+i+32 ; sub(s,7,11); for (i=0; i&12 ; i++) printf (“%c”,s[i]); printf(“\n”); } 4.当运行以下程序时,写出输入 6L 的程序运行结果。 sub(char *a,char b) { while (*(a++)!=’\0’) ; while (*(a-1)&b) *(a--)=*(a-1); *(a--)=b; } main ( ) { char s[]=”97531”,c; c = getchar ( ) ; fun(s,c); puts(s) ; } 5.写出下面程序的运行结果。 main ( ) { char *a[]={“Pascal”,”C Language”,”dBase”,”Java”}; char (**p)[ ] ; p=a+3; for (j=3; k&=0; j--) printf(“%s\n”,*(p--)) ; }四.程序填空题 1.下面函数的功能是从输入的十个字符串中找出最大的那个串,请填(2)空使程序完整。 void fun(char str[10][81],char **sp) { 】; *sp = 【1 for (i=1; i&10; i++) 】; if (strlen (*sp)&strlen(str[i])) 【2 } 2.下面函数的功能是将一个整数字符串转换为一个整数, 例如:”-1234”转换为 1234, 请填(3) 空使程序完整。 int chnum(char *p) { int num=0,k,len, len = strlen(p) ; for ( ; 【1 】; p++) { k=【2 】; j=(--len) ; while (【3 】) k=k*10 ; num = num + } return (num); } 3.下面函数的功能使统计子串 substr 在母串 str 中出现的次数,请填(3)空使程序完整。 int count(char *str, char *substr) { int i,j,k,num=0; 】; i++) for ( i=0; 【1 】, k=0; substr[k]==str[j]; k++; j++) for (【2 if (substr [【3 】]==’\0’) { num++ ; } return (num) ; } 4.下面函数的功能是用递归法将一个整数存放到一个字符数组中,存放时按逆序存放,如 483 存放成“384” ,请填(2)空使程序完整。 void }

我要回帖

更多关于 小程序声明变量 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信