求大佬帮忙!!请编写函数fun其功能是一个函数能将字符串中所有的大写字母变成小写,并编写函数fun其功能是主程序验证。

算法就是我的灵魂
python请编写一个函数,它接受一个 list,然后把list中的所有字符串变成大写后返回
请编写一个函数,它接受一个 list,然后把list中的所有字符串变成大写后返回,非字符串元素将被忽略
&strong&&span style="font-size:18"&def toUppers(L):
return [x.upper() for x in L if isinstance(x, str)]
print toUppers(['Hello', 'world', 101])&/span&&/strong&
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!当前位置: >>
C语言习题及解答与实验指导(修改版)
第 1 部分课后练习题第 1 章 C 语言概述一、选择题 1.一个 C 程序的执行是从 。 A) 本程序的 main 函数开始,到 main 函数结束 B) 本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 C) 本程序的 main 函数开始,到本程序文件的最后一个函数结束 D) 本程序文件的第一个函数开始,到本程序 main 函数结束 2.以下叙述正确的是 。 A) 在 C 程序中,main 函数必须位于程序的最前面 B) C 程序的每行中只能写一条语句 C) C 语言本身没有输入输出语句 D) 在对一个 C 程序进行编译的过程中,可发现注释中的拼写错误 3.以下叙述不正确的是 。 A) 一个 C 源程序可由一个或多个函数组成 B) 一个 C 源程序必须包含一个 main 函数 C) C 程序的基本组成单位是函数 D) 在 C 程序中,注释说明只能位于一条语句的后面 4.C 语言规定:在一个源程序中,main 函数的位置 A) 必须在最开始 C) 可以任意 5.一个 C 语言程序是由 C) 若干过程组成 6.C 语言中的语句需要 A) : B) ; C) 。 D) // B)‘[‘和’]’ D)“*/”和”/*” 。 B) 必须在程序的结尾 。 B) 函数组成 D) 若干子程序组成 符号作为结尾。 A) 一个主程序和若干子程序组成 D) 必须在最后 。 B) 必须在系统调用的库函数的后面7. C 语言程序中可以对程序进行注释,注释部分用符号_____括起来。 A)‘{‘ 和’}’ C)“/*”和”*/” 8.C 语言中注释的位置 A) 必须在程序的最开始1 C) 可以在程序的任何位置 A) 适应性 A).c B)移植性 B) .cppD) 不可以写到 main 函数里面 。 C)兼容性 。 D) .obj 。 B) 检查 C 语言程序的逻辑错误 D) 同时检查语法和逻辑错误 。 D) .obj C) .exe C) .exe D) 操作性9.C 语言程序能够在不同的操作系统下面运行,这说明 c 语言具有很好的 10.C 语言经过编译后生成的文件的后缀是 11.C 语言编译程序的首要工作是 A) 检查 C 语言程序的语法错误 C)检查程序的完整性 A).c 二. 填空题 1.计算机程序设计语言的发展经历了从 的历程。 2.计算机唯一能识别的语言是 3.C 源程序的基本单位是 4.一个 C 源程序至少应包括一个 5.在一个 C 源程序中,注释部分两侧的分界符分别为 接后, 生成文件的后缀是______。 7. 用高级语言编写的程序称为 种方式, 一种是通过 次翻译产生目标程序,然后执行。 三.简答题 1.简述 C 语言的特点。 2.简述 C 语言的应用。 3.简述编写 C 语言程序的流程。 。 。 。 和 。 、 B) .cpp12. C 语言经过链接后生成的文件的后缀是到6.C 语言源程序文件的后缀是 ______, 经过编译后, 生成文件的后缀是 ______,经过连 , 必须将其翻译成二进制程序后才能执行。 翻译有两 翻译一句执行一句的方式执行, 另一种通过 一第 2 章 基本语法 ―― 语言描述与 数据存储的简单方法一.选择题 1.C 语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符 A)必须为字母 B)必须为下划线 。2 C)必须为字母或下划线 A) x1=26.8%3;D)可以是字母、数字和下划线中任一种字符 。 D) x4=1+2=3; B) 1+2=x2; 。 B) x=(x*100+0.5)/100.0 D) x=(x/100+0.5)*100.0 。 。 。 D) *= D) 2 B) 把 x 和 y 按从小到大排列 D) 交换 x 和 y 中的值 。 B)double b=1+5e2.5; D)float 2_and=1-e-3; 。 B)a=7+b+c,a++ D)a=a+7=c+b 。 C) x3=0x12;2. 若以下选项中的变量已正确定义,则正确的赋值语句是3. 设变量 x 为 float 型且已经赋值,则以下语句中能够将 x 中的数值保留到小数点后面两 位,并将第三位四舍五入的是 A) x=x*100+0.5/100.0 C) x=(int)(x*100+0.5)/100.0 A) %= A) 0 B) / B) 0.5 C) = C) 14. 下列 C 语言中运算对象必须是整型的运算符是5. 若有以下程序段:int c1=1,c2=2,c3;c3=1.0/c2*c1;则执行后,c3 中的值是 6. 设 x 和 y 均为 int 型变量,则以下语句:x+=y; y=x-y; x-=y; 的功能是 A) 把 x 和 y 按从大到小排列 C) 无确定结果 7. 下列变量定义中合法的是 A)short_a=1-.le-1; C)long do=0xfdaL; A)a=b=7 C)int(12.3%4)8.若变量已正确定义并赋值,符合 C 语言语法的表达式是9. 若有则 sizeof(x)和 sizeof(float)两种描述 A)都正确 B)都不正确 C)前者正确 D)后者正确10. 有整型变量 x,单精度变量 y=5.5,表达式 x=(float)(y*3+((int)y)%4)执行后,x 的值 为( ) 。 A)17 A)y=9 B)17.500000 B)y=6 C)17.5 C)y=1 D)16 。 D)表达式是错误的 。 11. 已知 float x=1,y;则 y=++x*++x 的结果是 12. 下列关于单目运算符++、--的叙述中正确的是 A)它们的运算对象可以是任何变量和常量 B)它们的运算对象可以是 char 型变量和 int 型变量,但不能是 float 型变量 C)它们的运算对象可以是 int 型变量,但不能是 double 型变量和 float 型变量 D)它们的运算对象可以是 char 型变量、int 型变量和 float 型变量 13. 已定义 ch 为字符型变量,下列赋值语句中错误的是 A)ch='\'; int k=7,x=12; A)x%=(k%=5) C)x%=k-k%5 A)3 B)4 C)11 B)x%=(k-k%5) D)(x%=k)-(k%=5) 。 。 D)12 B)ch=62+3; C)ch=NULL; 。 14. 假定有以下变量定义,则能使值为 3 的表达式是 。 D)ch='\xaa';15. 设有“int x=11;”则表达式(x++*1/3)的值是 16. 已定义 c 为字符型变量,则下列语句中正确的是3 A)c=’97’B)c=“97” 。C)c=97D)c=“a”17. sizeof(float)是 A)一个双精度型表达式 C)一种函数调用 18. 有以下定义语句: double a,b; A)a=a+b=b++ C)(c+w)%(int)a A)a 的值是字符 CB)一个整型表达式 D)一个不合法的表达式 。 B)w%((int)a+b) D)w=a=b 。 B)a 的值是浮点型 D)a 的值是字符’A’的 ASCII 值加 1 。 D)6000000 。 C)k=i==j; C)float C)20 D)b+c=1; D)double D)30若各变量已正确赋值,则下列选项中正确的表达式是19. 若变量 a 是 int 类型,并执行了语句:a=‘A’+1.6; ,则正确的叙述是 C)不允许字符型和浮点型相加 A)6.500000 A)++t; A)char A)0 值为_______。 A)4 A)表达式、语句 C)语句、语句 是 A) int A)补码 。 B) float B)反码 C)原码 C) double D) 不确定 。 B)8 C)12 D)24 25. 在 C 程序中,x + y 是_______、x + y;是_______。 B)表达式、表达式 D)语句、表达式 B)620. 设 a 和 b 均为 double 型变量,且 a=5.5、b=2.5,则表达式(int)a+b/b 的值是 C)5.. 在下列选项中,不正确的赋值语句是 B)n1=(n2=(n3=0)); B)int B)1022.已知 则表达式 a+b * c-d 的结果为_______型。 23. 若 x 为 int 型变量,则执行语句 x=10; x+=x=x-x 后,x 的值为_______。 24. 若 x、a、b、c 均 为 int 型变量,则执行表达式 x= (a = 4, b = 8, c = 12)后,x 的26.假设变量 a 是整型,b 是实型,c 是双精度型,则表达式 30+a+c*b 的值的数据类型27.在 C 语言中,char 型数据在内存中的存储形式是 D)ASCII 码 。 28.执行下列程序片段时输出结果是 int x=13,y=5; printf(“%d”,x%=(y/=2)); A)3 二.填空题 B)2 C)1 D)01. C 语言中所提供的数据结构是以数据类型形式出现的, 在 其中的基本类型包括 int 型 即 _ __、float 型即_ __、double 型即_ __、char 型即_ 、 和 __等。 。 2. C 语言中的标识符只能由三种字符组成,它们是 3. C 程序中的字符常量是用___括起来的一个字符;除此之外,还允许用一种特殊形式4 的字符常量,是以_ __开头,被称为转义字符。 4.字符串常量是一对_ __括起来的字符序列,且以_ __改变的量。 _的量。 __结束。 5.常量是指在程序执行过程中其值 6.变量是指在程序执行过程中其值_ 7.C 实型变量分为_ 8.转义字符'\n'表示_ _和__两类。 _字节。 _形式输出。 _,然后进行运算。_,使光标移到屏幕上下一行开头。9.一个字符变量在内存中占_ 11.字符串常量是用_ 13.可以利用_ _ _。10.一个字符数据既可以以字符形式输出,也可以以_ _括起来的字符序列。 12.在进行运算时,不同类型的数据必须__运算符将一个表达式的值转换成指定的类型。14.有两种类型转换,一种是在运算时不必用户指定,系统自动进行类型转换;另一种是 15.两个整数相除的结果是_ 16.求模运算符(%)只能用于_ 17.一个表达式的最后加上一个_ _。 _操作数。 _就成了一个语句。 _。 。 。 。18.若 int x = 3,则执行表达式 x*= x+= x - 1 后 x 的值为_ 19.若 a 是 int 型变量,则表达式((a=4*5,a*2),a+6)的值为 21.若 a 是 int 型变量,则执行表达式 a=25/3%3 后 a 的值为 x 的值为 三、问答题 1. 字符型常量和字符串常量有什么区别? ,n 的值为 。20.若 a 是 int 型变量,且 a 的初值为 6,则执行表达式 a+=a-=a*a 后 a 的值为 22.若 x 和 n 均是 int 型变量,且 x 和 n 的初值均为 5,则执行表达式 x+=n++2. 华氏温度 F 与摄氏温度 c 的转换公式为:c=(F-32)*5/9 ,则 float c, F; c=5/9*(F-32) 是其对应的 C 语言表达式吗?如果不是,为什么? 四、程序阅读题 1.写出以下程序运行的结果 #include&stdio.h& int main ( ) { int i,j,m,n; i=8; j=10; m=++i; n=j++; printf(“%d,%d,%d,%d”,i,j,m,n); return 0; }5。 2. 写出以下程序运行的结果 #include &stdio.h& int main() { int a = 7, b = 9; a = a + b = a - a = a - printf (&a=%d, b=%d \n&, a,b); return 0; } 3. 写出以下程序运行的结果 #include &stdio.h& int main() { int a, b, a = (b = (c = 3) * 5)*5;。。printf (&a=%d, b=%d, c=%d \n&, a, b, c); return 0; } 4. 已知字母 A 的 ASCII 码为 65。以下程序运行后的输出结果是______。 #include &stdio.h& int main() { char a, a='A'+'5'-'3'; b=a+'6'-'2'; printf(&%d %c\n&, a, b); return 0; } 5.写出以下程序的输出结果。 #include &stdio.h& int main ( ) { int y=3,x=3,z=1; printf(“%d %d\n”,(++x,y++),z+2); return 0 ; }6 第 3 章 编程语句 ―― 简单程序构建的方法一.选择题 1.以下程序的输出为 #include&stdio.h& int main( ) { double x=213.82631; printf(&%-6.2e\n&,x); return 0; } A) 213.82 A) %123%d B) 21.38e+01 B) %%d123 。 C) 2.14e+02 C) %d123 D) -2.14e2 D)上述语句语法有错 2.语句 printf(“%%d%d”, 123); 将输出: 3.以下程序的输出结果是 #include &stdio.h& int main( ) { int x=3,y=2,z=1; printf (&%s=%d\n&, &x/y&z&,x/y&z); printf (&%s=%d\n&, &x^y&~z&, x^y&~z); return 0; } A)x/y&z=0 s=x^y&~z =1 为 。 B) 'a','b', ' C) ' 'a', ' 'b' D) ', 'a',' ','c' B)x/y&z=1 x^y&~z =1 C)s=x/y&z=0 x^y&~z =0 D)x/y&z=1 x^y&~z =0 。4. 执行语句 scanf (“%c%c%c”,&c1,&c2,&c3),输入 abc 时,变量 c1、c2、c3 的值分别 A) 'a', 'b', 'c' 5.有以下程序段: int m=0,n=0;char c='a'; scanf(&%d%c%d&,&m,&c,&n); printf(&%d,%c,%d\n&,m,c,n); 若从键盘上输入:10A10&回车键&,则输出结果是 A)10,A,10 B)10,a,10 C)10,a,0 。 D)10,A,0 。6.若有以下变量说明和数据的输入方式,则正确的输入语句为 变量说明:float x1,x2; 输入方式:4.52&回车& 3.5&回车& A)scanf(“%f,%f”,&x1,&x2); C)scanf(“%3.2f %2.1f”,&x1,&x2);B)scanf(“%f%f”,&x1,&x2); D)scanf(“%3.2f%2.1f”,&x1,&x2);7 7. 下面程序的运行结果是 #include &stdio.h& #define DATA 20+7 int main( ) {。printf(&DATA=%d&,DATA/3); return 0; } A)DATA=22 B)DATA=21 C)DATA=9 D)以上都不对 。 8. 设 c1,c2 均是字符型变量,则以下不正确的函数调用为 A)scanf(“c1=%cc2=%c”,&c1,&c2); C)putchar(c2); 9.若 a 为整型变量,则以下语句 a=-2L;printf(“%d\n”,a); (A)赋值不合法 10.有以下程序 #include &stdio.h& int main( ) { int x=102,y=012; printf(“%2d,%2d\n”,x,y); return 0; } 执行后输出结果是 (A)10,01 。 (B)02,12 。 (C)102,10 (D)02,10 (B)输出值为-2 (C)输出为不确定值 (D)输出值为 2 。 B)c1=getchar( ); D)putchar(c1,c2);11. 以下程序输出的结果是 #include &stdio.h& int main( ) {printf(&\n*a=%15s*&,&chinazhongguo&); printf(&\n*b=%-5s*&, &chi&); return 0; } A)*a=chinazhongguo* b=**chi* C)*a=* chinabeijing* *b=chi* 量 c 赋以 283.19 的输入语句是 A)scanf(“%f”,c); C)scanf(“%6.2f”,&c); 13.设有如下程序段8B)*a=chinazhongguo* *b=chi * D)*a= chinazhongguo* *b=chi * 。 B)scanf(“%8.4f”,&c); D)scanf(“%8f”,&c);12.若变量 c 定义为 float 类型,当从终端输入 283.1900&CR& (&CR&代表回车键),能给变 int x=2002,y=2003; printf(&%d\n&,(x,y)); 则以下叙述中正确的是________。 A)输出语句中格式说明符的个数少于输出项的个数,不能正确输出 B)运行时产生出错信息 C)输出值为 2002 D)输出值为 2003 14. putchar 函数可以向终端输出一个 A)整型变量表达式的值 C)字符串 A) gets B) puts 。 B)实型变量的值 D)字符或字符型变量的值 。 C) getchar D) putchar15.下列函数中能够向终端输出一个字符或字符型变量值的是 16. 若有下列语句 char c=’A’; printf(“%d”,c); 则输出的结果是 A) A B) c 。 C) 65 D) 错误的语句 。17. 下列程序输入’a’字母后,执行程序后输出的结果是 #include &stdio.h& int main( ) { c=getchar(); c=c-32; printf(&%c\n&,c); return 0; } A)65 B) A C) 97 D) a 。 18.执行下列程序片段时输出结果是 float x=-; printf(“\n%8.3f,”,x); printf(“%10.3f”,x); A), - C)23.012 据输入方式是 int a1,a2; char c1,c2; scanf(“%d%c%d%c”,&a1, &c1,&a2, &c2); A)10A 20BL C)10A20BL B)10 A 20 BL C)10A20 BL 。 B)-23.012 D)-23.01219.已有如下定义和输入语句,若要求 a1,a2,c1,c2 的值分别为 10,20,A 和 B,正确的数20.对于下述语句,若将 10 赋给变量 k1 和 k3,将 20 赋给变量 k2 和 k4,则应按9方 式输入数据。 int k1,k2,k3,k4; scanf(“%d%d”,&k1,&k2); scanf(“%d,%d”,&k3,&k4); A)L int main() { int x,y, scanf(&%d%d%d&,&x,&y,&z); printf(&x+y+z=%d\n& ,x+y+z); return 0 ; } A)x+y+z=48 C)x+z=35 main() { float 输入语句 输出语句 } 输入形式 输出形式 enter x,y: 2 x+y=5.40 3.4 printf(&enter x,y:&) B)x+y+z=35 D)不确定值 。 B)10 20L 10 20L C)10,20 L 10,20L D)10 20L 10,20L 。21.阅读以下程序,当输入数据的形式为 25,13,10&CR&正确的输出结果为22.阅读以下程序,若运行结果为如下形式 ,输入输出语句的正确内容是A)scanf(&%d,%f&,&x,&y);printf(&\nx+y= %4.2f&,x+y); B)scanf(&%d%f&,&x,&y );printf(&\nx+y=%4.2f&,x+y); C)scanf(&%d%f&,&x,&y); printf(&\nx+y=%6.lf&,x+y); D)scanf(&%d%3.1f&,&x,&y );printf(&\nx+y=%4.2f&,x+y); 23.根据定义和数据的输入方式,输入语句的正确形式为 已有定义: float fl,f2; 数据的输入方式:4.52 3.5 A) scanf(&%f,%f&,&f1,&f2); B) scanf(&%f%f&,&f1,&f2 ); C) scanf(&%3.2f%2.1f&,&f2,&f1); D) scanf(&%3.2f%2.1f&,&f1,&f2); 24.printf 函数中用到格式符%5s ,其中数字 5 表示输出的字符串占用 5 列。如果字符串长 度大于 5,则输出按方式 。 B) 按原字符长从左向右全部输出 D) 输出错误信息 A) 从左起输出该字串,右补空格 C) 右对齐输出该字串,左补空格 度小于 5,则输出按方式 。10。25.printf 函数中用到格式符%5s ,其中数字 5 表示输出的字符串占用 5 列。如果字符串长 A) 从左起输出该字串,右补空格 C) 右对齐输出该字串,左补空格 A) 整型变量的输出格式符只有%d-种B) 按原字符长从左向右全部输出 D) 输出错误信息 。26.已有定义 int a=-2;和输出语句:printf(&%8lx&,a);以下正确的叙述是 B) %x 是格式符的-种,它可以适用于任何-种类型的数据 C) %x 是格式符的-种,其变量的值按+六进制输出,但%8lx 是错误的 D) %8lx 不是错误的格式符,其中数字 8 规定了输出字段的宽度 27.以下说法正确的是 。 A) 输入项可以为-实型常量,如 scanf(&%f&,3.5); B) 只有格式控制,没有输入项,也能进行正确输入,如 scanf(&a=%d,b=%d&);C) 当输入-个实型数据时,格式控制部分应规定小数点后的位数,如 scanf(&%4.2f&,&f); D) 当输入数据时,必须指明变量的地址,如 scanf(&%f&,&f); 28. 根据 下面 的程序 及数据 的输 入方 式和 输出 形式 , 程序 中输入 语句 的正确 形式 应该 为: main() {char ch1 ,ch2 ,ch3; 输入语句 printf(&%c%c%c&,ch1,ch2,ch3);} 输入形式: A B C 输出形式: A B A) scanf(&%c%c%c&,&ch1,&ch2,&ch3); C) scanf(&%c %c %c&,&ch1,&ch2,&ch3); 从键盘输入数据的正确形式应当是 B) scanf(&%c,%c,%c&, &ch1,&ch2, &ch3); D) scanf(&%c%c&,&ch1,&ch2,&ch3); 。 D) a=1,b=3,c=2(回车) 。29.有输入语句:scanf(&a= %d,b= %d,c=%d&,&a,&b,&c);为使变量 a 的值为 1,b 为 3,c 为 2, A) 132(回车) B) 1,3,2(回车) C) a=1b=3c=2(回车) 二.填空题 1.语句 printf(&a\bRe\ 'CH\'y\\\bou\n&);的输出结果是 2.以下 printf 语句中%3d 的作用是 #include &stdio.h& int main() { int i=3; printf(“##%3d\n”,i,i); return 0; } 3.若 a 和 b 均为 int 型变量,则以下语句的功能是 a+=b; b=a-b; a-=b; 4. 下列程序的输出结果是 14.00,请填空使程序完整。 int main ( ) { int a=9,b=2;11。 。,输出结果是。 float x= z=a/2+b*x/y+1/2;,y=1.1 ,printf(“%5.2f\n”,z); return 0; } 5. 下面的使用 scanf 函数的输入方式有 int main() { int a,b; scanf(“%d%d”,&a,&b); return 0; } 三.程序阅读 1.下面程序的输出结果是 #include &stdio.h& int main() { int x='f'; printf(&%c\n&, 'A'+(x-'a'+1)); return 0; } 2.以下程序的输出结果为 int main() { printf(“*%f,%4.3f*\n”,3.14,3.1415); return 0; } 3.用下面的 scanf 函数输入,使 a=3,b=7,x=8.5,y=71.82,c1=’A’,c2=’a’,问在键盘上 如何输入? int main ( ) { int a,b; float x,y; char c1,c2; scanf(“a=%d b=%d”,&a,&b); scanf(“%f%f”,&x,&y); scanf(“%c%c”,&c1,&c2); return 0 ; } 4.已知字符 A 的 ASCII 代码值为 65,以下程序运行时若从键盘输入:B33&回车&,则输出结 果是______。12种。。。 #include &stdio.h& int main() { char a,b; a=getchar(); scanf(&%d&,&b); a=a-'A'+'0';b=b*2; printf(&%c %c\n&,a,b); return 0; } 5.写出以下程序的输出结果。 int main ( ) { int a=12345; float b=-198.345, c=6.5; printf(“a=%4d,b=%-10.2e,c=%6.2f\n”,a,b,c); return 0; } 6.写出以下程序的输出结果。 int main ( ) { int x=-2345; float y=-12.3; printf(“%6D,%06.2F”,x,y); return 0 ; } 7. 写出以下程序的输出结果。 int main ( ) { int a=252; printf(“a=%o a=%#o\n”,a,a); printf(“a=%x a=%#x\n”,a,a); return 0; } 8. 写出以下程序的输出结果。 int main ( ) { int x=12; double a=3.1415926; printf(“%6d##,%-6d##\n”,x,x); printf(“%f##\n”,a); return 0; } 四.程序改错 1.找出下面程序中的错误,使之能够正常执行。13 #include&stdio.h& int main() { scanf(“%d%f”,&x,&y); return 0 ; } 2.找出下面程序中的错误,使之能够正常执行。 #include&stdio.h& int main() { int x, y, scanf(“%d%d”, x, y); sum=x+ printf(“sum =%d”,sum); return 0; } 3.找出下面程序中的错误,使之能够正常执行。 #include&stdio.h& int main() { x=getchar() ; y=getchar() ; putchar(x+y) ; return 0 ; } 五、编程题 1. 编写程序,读入 3 个双精度数,求它们的平均值并保留此平均值小数点后一位数,对小 数点后第二位数进行四舍五入,最后输出结果。 2. 编写一个简单的 C 程序,输出以下信息: * * * * * * * * * * * * * C program! * * * * * * * * * * * * * 3. 编写一个程序,输入一个弧度值,并将其换算成角度值(度、分、秒的形式)输出。 提示:设 x 为弧度,则对应的角度为 180*x/∏,其整数部分为度数,余下的部分乘 60,其整 数部分为分数,再将余下的部分乘 60,其整数部分为秒数。 4. 编写一个程序,输入一个摄氏温度,输出其对应的华氏温度。 提示:摄氏温度与华氏温度之间的转换公式为:华氏温度=9*摄氏温度/5+32。 5. 编写一个程序,输入半径,输出其圆周长、圆面积、及圆球体积。14 第 4 章 算法 ―― 程序设计的核心一.选择题 1.程序流程图中带箭头的线段表示 A) 处理操作 A) 输入 3.下面的流程图是 B) 数据流 。 C) 判断 D) 循环 B) 输出 2.程序流程图中的菱形框表示 。 C) 控制流 D) 调用关系结构的程序设计。模块 A No 条件?A) 顺序 A) 流程线 二.填空题B) 顺序加选择 B) 输出 。 、C) 判断 C) 判断D) 循环 D) 循环4. NS 图完全取消了,不允许有随意的控制流,全部算法写在一个矩形框内。1.程序设计的核心是 2.算法描述的方法包括 3.程序设计的三种基本结构包括 4.程序设计的思想包括和 、 和 。。 。和15 第 5 章 判断与循环 ―― 一般复杂问题 程序设计方法一.选择题 1. 逻辑运算符两侧运算对象的数据类型 A)只能是 0 或 1 C)只能是整型或字符型数据 2. 下列运算符中优先级最高的是 A) & B) 十 C) && D) != 。 。 B)只能是 0 或非 0 正数 D)可以是任何类型的数据 。3.能正确表示&当 x 的取值在[1,10]和[200,210]范围内为真,否则为假&的表达式是 A) (x&=1) B) (x&=1) c) (x&=1) &&(x&=10) &&(x& = 200) &&(x&=210) || (x&=10) ||(x&=200) ||(x&=210) &&(x&=10)||(x&= 200) &&(x&=210) 。D) (x & =1)||(x& =10) && (x& = 200)||(x&=210) 4.判断 char 型变量 ch 是否为大写字母的正确表达式是 A) ' A' &=ch&='z' C) (ch&=' A' )&&(ch&='z') A) 'y'&&'y' A) 0 B) x & =y C) 1 B) (ch& = 'A')&(ch&=' z' ) D) (' A' & = ch)AND('z'& = ch) 。 C) x||y+z&&y-z D) &假& 。 D) A%2 D) !(x&y)&&!z||1) 。5.设 x,y 和 z 是 int 型变量,且 x = 3,y= 4,z= 5,则下面表达式中值为 0 的是 6.已知 x=43,ch='A',y=0 则表达式(x&=y && ch&'B'&&!Y) 的值是 B) 语法错7.若希望当 A 的值为奇数时,表达式的值为&真&,A 的值为偶数 表达式的值 为&假&。则以下不能满足要求的表达式是 A) A%2==1 B) !(A%2 = =0) C) !(A%2) 8. 若有程序段如下: a=b=c=0;x=35; if(!a)x--; else if(b);if(c)x=3; else x=4; 执行后,变量 x 的值是 A)34 B)4 C)35 9.下列 if 语句中,不正确的是 B)if (x&y); C)if (x==y)x+=y; D)if (x&y){x++;y++;} 10. 若有 int x,y;,执行程序段: for(x=1,y=1;y&50;y++) {16。 D)3 。A)if (x&y)scanf (“%d”,&x) else scanf (“%d”, &y); if (x&=10) if(x%2==1) { x+=5; } x-=3; } 变量 x 的值最终为 A)11 B)12 。 C)13 D)10 。 B) for (i=0;i&10;) putchar ('a'+(i++)); 。11.与“for (i=0;i&10;i++) putchar ('a'+i);”功能不同的语句是 A)for (i=0;i&10;)putchar ('a'+(++i));C)for (i=0;i&10;putchar ('a'+i),i++); D)for (i=0;i&=9;i++)putchar ('a'+i); 12.循环控制语句“while (!scanf (“%d”,&i)getchar ( );”执行的情况是 A)循环输入字符,遇文件结束符 EOF 退出 C)若输入数据 i 有错,暂停等待处理 B)循环条件有错,不能执行 D)键入 i 值后,回车退出循环 次。13. 若输入字符串:abcde&回车&,则以下 while 循环体将执行 While ((ch=getchar( ))== ' e ')printf(& * &); A)4 B)5 C)0 D)任意 14.设 j 为 int 型变量,则下面 for 循环语句的执行结果是 for (j=10;j&3;j--) { if (j%3)j--; --j;--j; printf (&%d&,j); } A)6 3 B)7 4 C)6 2 D)7 3 。 15. 以下程序的输出结果是 #include &stdio.h& int main( ) { int a=-1,b=1,k; if((++a&0)&&!(b--&=0)) printf(&%d %d\n&,a,b); else printf(&%d %d\n&, b, a); return 0; } A)-1 1 B)0 1 C)1 0 。 D)0 0 16. 下面程序的输出结果是 #include &stdio.h& int main( )17。 { int x=5,a=0,b=0; if(x!=(a+b)) printf(&x=5\n&); else printf(&a=b=0\n&); return 0; } A)有语法错,不能通过编译 C)x=5 17. 有以下程序 #include &stdio.h& int main( ) { int i=1,j=2,k=3; if(i++==1&&(++j==3||k++==3)) printf(&%d %d %d\n&,i,j,k); return 0; } 程序运行后的输出结果是 (A)1 2 3 (B)2 3 4 。 18.下面程序运行结果是 #include &stdio.h& int main() { int a,b,c,d,x; a=c=0; b=1;d=20; if(a) d=d-10; else if(!b) if(!c)x=15; else x=25; printf(&%d\n&,d); return 0; } A)20 B)25 C)15 D)10 。 B)x&=y D)!((x&y) &&!z||1) 。 B)3 C)2 D)1 19. 定义:int x=7,y=8,z=9;后,则下面表达式为 0 的是 A)' x ' && ' y ' C)x||y+z&&y-z A)4 21. 以下程序: #include &stdio.h&18B)通过编译,但不能连接 D)a=b=0。 (C)2 2 3 (D)2 3 320. 若 w=1,x=2,y=3,z=4,则条件表达式 w&x?w:y&z?y:z 的值是 int main() { int w=4,x=3,y=2,z=1; printf(&%d\n&,(w&x?w:z&y?z:x)); return 0; } 其输出结果是 A)1 B)2 22. 有以下程序 #include &stdio.h& int main() { int i=1,j=1,k=2; if((j++||k++)&&i++) return 0; } 执行后输出结果是 A)1,1,2 。 C)2,2,2 。 D)2,2,3 B)2,2,1 printf(&%d,%d,%d\n&,i,j,k); 。 C)3 D)423. 以下程序的输出结果是 #include &stdio.h& int main() { int a=-1,b=1,k; if((++a&0)&&!(b--&=0))printf(&%d %d\n&,a, b); else printf(&%d %d\n&,b, a); return 0; } A)-1 1 B)0 1 C)1 0 D)0 0 24. 阅读以下程序: #include &stdio.h& int main() { scanf (&%d&,&x); if (x--&5) printf(&%d&,x); else printf(&%d&,x++); return 0; } 程序执行后,如果从键盘上输入 5,则输出结果是19。 A)3B)4C)5D)6 。25. 以下程序的输出结果是 #include &stdio.h& int main() { int n=4;while(n--) printf(&%d&,--n); return 0; } A)2 0 B)31 C)321 D)210 26. 有以下程序 #include &stdio.h& int main() { int a=3,b=4,c=5,d=2; if(a&b) if(b&c) printf(&%d&,d+++1); else printf(&%d&,++d+1); printf(&%d\n&,d); return 0; } 程序运行后的输出结果是 A)2 B)3 C)43 。 ) D)44 。27. 下列条件语句中,功能与其他语句不同的是 A)if(a) printf(&%d\n&,x);else printf(&%d\n&,y);B)if(a==0) printf(&%d\n&,y);else printf(&%d\n&,x); C)if(a!=0) printf(&%d\n&,x);else printf(&%d\n&,y); D)if(a==0) printf(&%d\n&,x);else printf(&%d\n&,y); 28. 下面程序的输出是 #include &stdio.h& int main( ) { int x=3,y=6,a=0; while(x++!=(y-=1)) { a+=1; if(y&x) }20。 printf(&x=%d,y=%d,a=%d\n&,x,y,a); return 0; } A)x=4,y=4,a=1 int n=0; while (n++&=2); printf (&%d&,n); A)2 B)3 C)4 D)有语法错误 30. 已知 x、a、b、c、d 均为 int 型变量,则执行如下程序段后,x 的值是_______。 a=1; b=2; c=3; d=4; x=(a&b)?a:b; x=(a&c)?a:c; x=(a&d)?a:d; A)4 int a,b,c,x; a=0; b=0; c=0; x=7; if(!a) x--; A)4 int a,b,c,d; a=1; b=7; c=15; d=10; if(a&b) x--; if(c&d) x=1; else if(a&c) if(b&d) x=2; else x=3; else x=7; A)1 B)2 C)6 D)7 33. 如下程序的输出结果是_______。 #include &stdio.h& int main() { int a,b,c,d; a=2; b=-6; c=5; if(a&b) if(b&0) c=0;21B)x=5,y=5,a=1 。C)x=5,y=4,a=3D)x=5,y=4,a=129. 下面程序段的运行结果是B)3C)2D)131. 运行下列程序段后 x 的值是_______。else if(b); B)6 C)7 D)3if(c) x=3; else x=4; 32. 运行下列程序段后 x 的值是_______。 else c++; printf (& %d \n&, c); return 0; } A)0 if(a=b) x++; A)1 B)1 if(a=&b) x++; B)2 C)5 if(a-b) x++; C)3 D)6 if(a&=b&=c) x++; if(1) x++; D)4 ? if(a!=0) a=1;else a=2; 34. 以下五条语句中有_______是合法的。35. 关于以下三条语句的描述中,正确的是_______。 ? if(a) a=1;else a=2; ? if(a==0) a=2;else a=1; A)三条语句相互等效 C)三条语句中??与?等效 while(n&=7) { n--; printf(“%d\n”,n); } A)10 9 8 7 #include &stdio.h& int main() { int n=0; while(n&=2) { n++; printf(&%d\n&,n); } return 0; } A)1 2 3 38.当把以下四个表达式用作 if 语句的控制表达式时,有一个选项与其它三个选项含义不 同,这个选项是______。 A)k%2 B)k%2==1 C)(k%2)!=0 D)!k%2==1 39.有以下程序22B)三条语句中?与?等效 D)三条语句各不等效36. 定义如下变量 int n=10;则下列循环的输出结果是_______。B)9 8 7 6C)10 9 8D)9 8 737. 以下程序执行后,输出结果是_______。B)1 2C)2 3D)2 #include &stdio.h& int main() { int i=1,j=2,k=3; if(i++==1&&(++j==3||k++==3)) printf(&%d %d %d\n&,i,j,k); return 0; } 程序运行后的输出结果是______。 A)1 2 3 是______。 A)1 B)2 C)3 D)4 B)2 3 4 C)2 2 3 D)2 3 3 40.若整型变量 a、b、c、d 中的值依次为:1、4、3、2。则条件表达式 a&b?a:c&d?c:d 的值二、填空题 1. 下面程序的功能是在屏幕上显示如下图形: 1 2 1 3 2 1 4 3 2 1 5 4 3 2 1 填空: #include &stdio.h& int main( ) { int i=1,j; while(i&=5) { printf(&\n&); j=i; while( { j--;} i++; } return 0; } 2. 执行下面程序 #include&stdio.h& int main( )23) { scanf(&%d&,&x); if(x++&5) printf(&%d\n&, x); else printf(&%d\n&, x--); return 0; } 若输入 5,其输出结果是 3. 以下程序运行后的输出结果是 #include &stdio.h& int main( ) { int a=1,b=3,c=5; if (c=a+b) printf (&yes\n&); else printf (&no\n&); return 0; } 4. 以下程序的功能是:从键盘上输入若干个学生的成绩,统计计算出平均成绩,并输出低 于平均分的学生成绩,用输入负数结束输入。 #include &stdio.h& int main( ) { float x[1000],sum=0.0,ave,a; int n=0,i; printf(&Enter mark:\n &);scanf(&%f &,&a); while(a&=0.0&& n&1000) { sum+ } ave= ; printf(&Output:\n &); printf(&ave=%f\n &,ave); i=0; while(i&n) {if( i++;} return 0; }24。 。;x[n]=;n++;scanf (&%f &,&a);) printf(&%f\n &,x[i]); 5. 以下程序将两个数从小到大输出。 #include &stdio.h& int main( ) { float a,b, scanf( if (a&b) { t=a; return 0; } 6. 若有以下程序: #include &stdio.h& int main( ) { int a=4,b=3,c=5,t=0; if(a&b)t=a;a=b;b=t; if(a&c)t=a;a=c;c=t; printf(&%d%d%d\n&,a,b,c); return 0; } 执行后输出结果是 if ( if ( else y=x; else y=3*x-11; 8.写出程序段的输出结果 int a=100; if (a&100) printf (&%d\n &,a&100); else printf (&%d\n &,a&=100); 9. 有以下程序 #include &stdio.h& int main( ) { int a=5,b=4,c=3,d=2; if(a&b&c) printf(&%d \n&,d); else if((c-1&=d)==1) printf(&%d\n&,d+1); else25; ,&a,&b); ;b=t;}printf (&%5.2f,%5.2f\n&,a,b);。7.下面的 if 语句与 y=(x&=10)?3*x-11:(x&1)?x:2*x-1;的功能相同,请补充完整。 ) )y=2*x-1;。 printf(&%d\n&,d+2); return 0; } 执行后输出结果是 为_ _。 if(x++&8) printf(&%d&,x); else printf(&%d&,x--); 12. C 语言提供了 6 种关系运算符_ 13. C 语言中,关系表达式的值是一个_ 表假。 14. C 语言提供三种逻辑运算符, 包括_ 的优先级最高。 15. 在 if-else 结构中,else 子句不能作为语句单独使用,必须与_ if 和 else 后面有多条语句,则需用_ 16. C 语言中唯一的一个三目运算符是_ 17. while 循环结构中,当表达式为_ 以上的语句,应该用_ __括起来。 __将其成为一个复合语句。 __,其一般形式为_ __。 __时执行其中的内嵌语句;循环体如果包含一个 __配对使用,且若 __、 _ __、 _ __, 这三种逻辑运算符中_ __ __、_ __、_ __、_ __、_ __、_ __。 __代 __即真或假,一般以_ __代表真,以_ 。 _;若原来 x=6,则输出结果 11. 执行了以下程序片断后,若原来 x=9,则输出结果为_18. 程序功能:从键盘上输入若干个学生的成绩,统计并输出最高成绩和最低成绩,当输入 负数时结束输入。请填空,将程序补充完整。 #include &stdio.h& int main() { float x,xmax, printf(&输入成绩:\n&); scanf(&%f&,&x); xmax=x; ; while( { if(x&xmax) xmax=x; if( scanf( } printf(&max=%f,min=%f&,xmax,xmin); return 0; } 三.程序阅读 1. 执行程序之后,输入 2L6L3L ,以下程序运行后的输出结果是______。 (L表示回车) #include &stdio.h&26)) xmin=x; ); int main() { int a,b,c,d; printf(&请输入三个整数:\n&); scanf(&%d%d%d&,&a,&b,&c); if(a&b) d=a; else d=b; if(c&d) d=c; printf(&%d\n&,d); return 0; } 2. 以下程序运行后的输出结果是______。 #include &stdio.h& int main( ) { int n,s; s=n=0; while(s&=10) { n++; s+=n; } printf(&n=%d\n&,n); return 0; } 3. 以下程序运行后的输出结果是_______________ #include&stdio.h& int main() { int k=1; while(k&5) { if(k%2) printf(&*&); else k++; } return 0; } 4. 以下程序运行后的输出结果是_______________ #include&stdio.h& int main()27printf(&#&); { int a=10,b=4,c=3; if(a&b) a=b; if(a&c) a=c; printf(&%d,%d,%d\n&,a,b,c); return 0; } 四.编程题 1. 编写一个程序,求满足以下条件的最大的 n 值。 1 +2 +3 +?n ≤1000 2. 编写一个程序,输入三条线段的长度,判断这三条线段能否构成一个直角三角形。 3. 编写一个程序,求输入实数的绝对值。 4. 编写一个程序,输入一个不多于 5 位的正整数,求出它是几位数。提示:注意整型变量 的范围。 5. 写一个程序,根据输入的 a,b,c 的值,求出 x 的值。 c/b x = a*c a+b+c 若 a=0 时 若 a!=0 且 b=0 时 其它情况2 2 2 26. 某市企业管理测评中,若企业得分低于 70 的为较差企业,以“#”表示,若得分在 70 到 80 之间的为中等企业,以“*”表示,若得分在 80 到 90 之间的为良好企业,以“**”表 示,若得分在 90 以上的为优秀企业,以“***”表示,利用 if-else 结构编写一个程序,对 于输入的企业成绩,输出相应的级别标志。 如:输入 89,输出 **。 7. 编程实现对键盘输入的英文名句子进行加密。加密方法为,当内容为英文字母时其在 26 字母中的其后第三个字母代替该字母,若为其它字符时不变。 8. 从键盘输入一指定金额(以元为单位,如 345.78) ,然后显示支付该金额的各种面额人 民币数量,要求显示 100 元、50 元、10 元、5 元、2 元、1 元、1 角、5 分、1 分各多少张。 9. 编写程序,使输入的字符按字母表后移一位输出。 如:输入 s,输出 t;输入 S,输出为 T。 10. 判断用户输入的字符是数字字符、字母字符还是其它字符。28 第 6 章 再论程序设计基本结构一.选择题 1. 对 switch 后括号内的表达式,叙述正确的是 A)只能是数字 C)只能是整型数据或字符型数据 A)break 语句只能用在 switch 语句中 B)在 switch 语句中,可以根据需要决定是否使用 break 语句 C)在 switch 语句中必须使用 break 语句 D)以上选项都不正确 3. 以下程序输出结果是 。 int 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); return 0; } A)a=1,b=0 B)a=2,b=1 。 C)a=1,b=1 D)a=2,b=2 4. 以下程序输出结果是 。 B)可以是浮点数 D)以上叙述都不对 。2.下列关于 switch 和 break 语句的说法中正确的是int 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: printf(&*&) ;29 case 2: printf(&#&) ; default : printf(&#&) ; } default: printf(&&&); } printf(&\n&); return 0; } A)@ 5. 以下程序段 B)*& 。 C)@& D)&int main() { int x=-1; do { x=x*x; }while (!x); printf(&It is the %dth day.&,x); return 0; } A)是死循环 B)循环执行 2 次 。 C)循环执行 1 次 D)有语法错误 6. 以下描述中正确的是 句 B) do-while 循环由 do 开始,用 while 结束,在 while(表达式)后面不能写分号 C) do-while 循环至少要执行一次循环语句 D) do-while 循环中,根据情况可以省略 while 7. 以下程序段的循环次数是 for(i=2; i==0; ) printf(“%d” , A)无限次 B)0 次 。 8. 下面 for 循环语句 。 i--) ; C)1 次 D)2 次A) 由于 do-while 循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语int i,k; for (i=0, k=-1; k=1; i++, k++) printf(“***”); A)判断循环结束的条件非法 C)只循环一次 9. 下面程序的输出结果是 int main ( ) { int k=0,m=0,i,j; for (i=0; i&2; i++) { for (j=0; j&3; j++) k++ ;30B)是无限循环 D)一次也不循环 。 k-= } m = i+ printf(&k=%d,m=%d&,k,m) ; return 0; } A)k=0,m=3 B)k=0,m=5 。 C)k=1,m=3 D)k=1,m=5 10. 下面程序的输出结果是 int main ( ) { int i,s,n=0; for (i=0; i&=5; i++) { s=i%3; while(s&0) s--,n++; } printf(&%d,%d&,n,s) ; return 0; } A)5,0 B)6,0 。 C)5,-1 D)6,-1 11. 下面程序的输出结果是int 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); return 0; } A)k=3 B)k=4 。 C)k=2 D)k=0 12. 以下正确的描述是A)continue 语句的作用是结束整个循环的执行31 B)只能在循环体内和 switch 语句体内使用 break 语句 C)在循环体内使用 break 语句或 continue 语句的作用相同 D)从多层循环嵌套中退出时, 只能使用 goto 语句 二.分析程序写结果 1. 写出下面程序运行的结果。 int main() { int x=1,y=0; switch(x) { case 1: switch(y) { case 0:printf(&**1**\n&); case 1:printf(&**2**\n&); } case 2:printf(&**3**\n&); } return 0; } 2. 写出下面程序运行的结果。 int main ( ) { int k=1,n=263; do { k*=n%10; n/=10 ; } while (n) ; printf(&%d\n&,k); return 0; } 3. 写出下面程序运行的结果。 int main () { int a,i; for (a=1,i=-1; i&-2 && i&1; i++) { a++; printf(&%d\n&,a); } printf(&%d\n&,i) ; return 0; }32 4. 写出下面程序运行的结果。 int main ( ) { int y=2,a=1; while (y--!=-1) do { a*= a++ ; } while (y--) ; printf(&%d,%d\n&,a,y); return 0; } 5. 写出下面程序运行的结果。 int main ( ) { int i=5; do { switch(i%2) { case 0:i++; case 1:i--; } i-=2; printf(&%d &,i); }while(i&=0); return 0; } 三.阅读程序并填空 1. 根据以下函数关系,对输入的每个整数 x 值,计算出相应的 y 值,请填空使程序完整。?0 ? x ? y?? ? 10 ?? 0.5 x ? 20 ?int main() { int x,c; scanf(&%d&,&x); if ( ) c= -1; elsex?0 0 ?? x ? 10 10 ?? x ? 20 20 ?? x ? 4033 switch (c) { case -1 : y=0 ; case 0 : y= case 1 : y=10 ; case 2 : case 3 : y=-0.5*x+20 ; default : y=-2 ; } if ( ) printf (&y=%f&,y); else printf(&error!&); return 0; } 2. 下面程序的功能是:输出满足“用 3 除余 2;用 5 除余 3,用 7 除余 2”的所有 3 位数, 请填空使程序完整。 int main () { int i=100; do { if () printf(&%4d&,i); i=i+1; }while( ); return 0;} 3. 下面程序的功能是:求 1!+2!+3!+…+10!,请填空使程序完整。 int main () { double s=0,t=1; for (n=1; ;n++) { t=t*n; } printf(&%e&, return 0; } 4. 下面程序的功能是输出 1 至 100 之间每位数的乘积大于每位数的和的数,请填空使程序 完整。 int main ( ));34 { int n,k=1,s=0, for (n=1 ; n&=100 ; n++) { k=1 ; s=0 ; while ( { k*=m%10; s+=m%10; )} if (k&s) printf(&%d &,n); } return 0; } 5. 下面程序的功能是输出 100 至 200 之间的不能被 3 整除的数,请填空使程序完整。 int main ( ) { for (n=100;n&=200;n++) { if(n%3==0) printf(&%d &,n); } return 0; } 四.程序改错 1. 下面程序输入两个运算数 x,y 和一个运算符号 op,然后输出该运算结果的值,例如输 入 3+4L得到结果 7;请判断下面程序的正误,如果错误请改正过来。 int main() { float x,y, scanf(&%f%c%f&,&x,&op,&y); switch (op) { case '+' : r=x+ case '-' : r=x- case '*' : r=x* case '/' : r=x/35 } printf(&%f&,r); return 0; } 2. 下面程序的功能是在一个正整数的各位数字中找出最大者。请判断下面程序的正误,如 果错误请改正过来。 int main () { int n,max,t; max=9; scanf(&%d&,&n); do { t=n%10; if(max&t) max=t; n/=10; }while(!n); printf(&%d&,max); return 0; } 3. 下面程序的功能是求数列 2/1,3/2,5/3,8/5,13/8,21/13……的前 20 项之和。请判断 下面程序的正误,如果错误请改正过来。 int main () { int n,t; float a=2,b=1,s=0; for(n=1;n&=20;n++) { s=a/b; t=a; a=b; b=t; } printf(&%f&,s); return 0; } 4. 假设某袋子中装有 3 个红球、5 个白球、6 个黑球,现从袋子中任意取出 8 个球。下面程 序的功能是输出这 8 个球中至少有一个白球的所有可能方案。 请判断下面程序的正误, 如果 错误请改正过来。 int main ( ) { int i,j,k; for (i=0; i&=3; i++) {36 for(j=0;j&=5;j++) { k=8-i-j; if(k&=0 && k&=6) printf(&hong=%d,bai=%d,hei=%d\n&,i,j,k); } } return 0; } 5. 下面程序完成的功能是,在全班 50 个学生中,征集慈善募捐,当总数达到 2000 元时就 结束。请判断下面程序的正误,如果错误请改正过来。 int main ( ) { float amount, for (i=1,total=0;i&=50;i++) { scanf(&%f&,&amount); total=total+ if(total&=2000) } printf(&%f &,total); return 0; } 五.程序设计 1. 对输入的年、月、日,判断这一天是这一年的第几天,用 switch 编程实现。 2. 从键盘输入若干个学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输 入,用 do-while 语句实现。 3. 输出 1~1000 之间能被 11 整除且个位数为 5 的所有整数,用 for 语句实现。 4. 从键盘输入 3 名学生的 5 门成绩,分别找出每个学生的最高成绩,用循环嵌套实现。 5. 从键盘上连续输入字符,并统计出其中数字字符的个数,直到输入“*”字符时结束程序 的运行。37 第 7 章 复杂数据类型―数据描述与扩展存储方法一.选择题 1.在 C 语言中,引用数组元素时,其数组下标的数据类型允许是 A)整型常量 C)整型常量或整型表达式 A)int a(10) ; C) scanf(“%d”,&n); int a[n]; A)a[10] B)a[3.5] B)整型表达式 D)任何类型的表达式 。 B)int n=10,a[n]; D)#define SIZE 10 int a[SIZE]; 。 D)a[10-10] 。 。2.以下对一维整型数组 a 的正确说明是3.若有定义:int a[10],则对数组 a 元素的正确引用是 C)a(5) B) int a[10]={}; D) int a[2]={0, 0, 0}; 。 4.以下能对一维数组 a 进行正确初始化的语句是 A) int a[10]=(0,0,0,0,0); C) int a[]={0};5.在 C 语言中,下面关于数组的描述正确的是A) 数组的大小是固定的,但可以有不同类型的数组元素 B) 数组的大小是可变的,但所有数组元素的类型必须相同 C) 数组的大小是固定的,所有数组元素的类型必须相同 D) 数组的大小是可变的,可以有不同的类型的数组元素 6.若有说明 int a[3][4]={0}; 则下面正确的叙述是 A) 只有元素 a[0][0]可得到初值 0 B) 此说明语句不正确 C) 数组 a 中各元素都可得到初值,但其初值不一定是 0 D) 数组 a 中各元素都可得到初值 0 7.若有二维数组 a 有 m 列,则在 a[i][j]前的元素个数为 A) j*m+i B) i*m+j C) i*m+j-1 D) i*m+j+1 8.下面对 s 的初始化,其中不正确的是 A) char s[5]={“abc”}; C) char s[5]=””; A) if(s1&s2) C) if(strcpy(s2,s1)&0) A) 4 B) 5 。 B) char s[5]={?a?,?b?,?c?}; D) char s[5]=”abcdef”; 。 B) if(strcmp(s1,s2)) D) if(strcmp(s1,s2)&0) 。 D) 10 。 C) 8 。 。9.判断字符串 s1 是否大于字符串 s2,应当使用10.调用 strlen(&abcd\0ef\ng\0&)的结果为11.函数调用“strcat(strcpy(str1,str2),str3)”的功能是A) 将字符串 str1 复制到字符串 str2 后再连接到字符串 str3 之后 B) 将字符串 str1 连接到字符串 str2 后再复制到字符串 str3 之后 C) 将字符串 str2 复制到字符串 str1 后再将字符串 str3 连接到 str1 之后38 D) 将字符串 str2 连接到字符串 str1 后再将 str1 复制到字符串 str3 中 12.若有以下程序段: int a,b,*p,*q; p=&a; q=&b; p=q; *p=5; 则以下叙述正确的是 A)*p 表示存储单元 a C)*p 表示变量 a 的地址值 A)x,p,&x C)&*p,p,&x A)*p=a; C) p=a; A)p=&a; *q=*p; C)p=&a; q=&b; *p=*q; A)p+2 C)*(p+3) A)*(p+3) C)p+1 A)p+=4, ++*p C)*p+=5, *++p A)3 B)1 。 B)*p 表示存储单元 b D)*p 表示变量 b 的地址值 。 B)p,*&x,&*x D)&p,p,*x 。 B)*p=&a; D)p=&a 。 B)*p=a; *q=b; D)p=&a; q=&b; *q=*p; 。 B)*(p+2) D)*p+3 。 B)*(p+10) D)++*p 。 B)p++, *p+5 D)*p=0, p=p+6 。 。 C)4 D)213.若有初始化“int x=5,*p=&x;” ,则下面均代表地址值的选项是14.若有初始化“int a=2,*p;” ,则要使 p 指向 a 应使用的语句是15.若有定义“int *p,*q, a=2,b;” ,则以下正确的赋值语句组是16.若有定义“int a[5]={1,2,3,4,5},*p=a;” ,则以下表达式中值为 3 的是17.若有定义“int a[]={1,2,3,4,5,6,7,8,9,10},*p=a;” ,则对 a 数组元素的正确引用是18.若有定义“int a[5]={1,2,3,4,5},*p=a;” ,则以下表达式中值为 6 的是19.若有定义“int a[4]={1,2,3,4},*p=&a[2];” ,则表达式*--p 的值是 20.若有初始化“char a[]=&well&,*p=&well&;” ,则以下正确的叙述是 A)数组 a 的首地址和 p 中的值相同 B)a[1]和 p[1]的值相同 C)p 只能指向含有 4 个有效字符的字符串 D) a 中只能存放 4 个字符 21.若有初始化“char *str=&student&;” ,则*(str+7)的值是 A)t B)空格 。 C)\0 22.以下程序的输出结果是 int main() { char a[]=&Boy&,*p; for(p=a+2;p-a&=0;p--)39。D)不确定值 printf(&%s &,p); return 0; } A)B Bo Boy B)y oy Boy 。 C)Boy Bo B D)Boy oy y 23.以下程序的输出结果是#include &string.h& int main() { char *p=&abcde&, a[20]=&ABC&,*q=a; p+=3; printf(&%s &,strcat(q,p)); return 0; } A)abcdeABC B)ABCde C)ABCabcde 。 D)ABCcde 24.在定义“int (*p)[5];”中,定义 p 为 B)基类型为 int 的指针变量 C)包含 5 个元素的整型一维数组 D)行指针,可用于指向包含 5 个元素的一维数组 25.在二维数组 a 中,元素 a[0][1]的地址可表示为 A)*(*(a+0)+1) A)aa[2][1]的地址 C)元素 aa[2][1] A)enum color{red,white,blue}; 28.以下语句执行后的输出结果是 。 B)*(a+1) C)&a B)aa[1][2]的地址 D)元素 aa[1][2] 。 B)enum color={red=1;blue}; 。 D)*a+1 。A)包含 5 个元素的一维数组,其中每个元素都是基类型为 int 的指针26.若有定义“int aa[3][4],(*ptr)[4]; ptr=” ,则*(ptr+1)+2 表示27.以下有关枚举类型定义的语句正确的是C)enum color={&red&,&white&,&blue&}; D)enum color{&red&,&white&,&blue&}; enum week{sun,mon,tue=3,wed,thu,fri,sat}; day= printf(&%d&,day); A)2 B)4 C)0 D)1 29.设有以下说明语句: struct ex{} 则以下叙述中不正确的是 A)struct 是结构类型的关键字 C)x,y,z 都是结构体成员名 30.以下程序的运行结果是 struct cargo { char name[12];40。 B)example 是结构类型名 D)ex 是结构类型名。
}; int main() { struct cargo cargo[4]={{1,&DVD&,15.5},{2,&CD&,12.0}, {3,&VCD&,13.8},{4,&BLANK&,5.6}}; for(i=0;i&=2;i+=2) printf(&%s &,cargo[i].name); return 0; } A)DVD CD B)CD VCD C)DVD VCD 。 D)DVD BLANK 31.根据下面的定义,能打印出字母‘Z’的语句是struct person { char name[20]; }; struct person class[10]={&Hongling&,17,&linlin&,18,&ZhanHui&,19,&chengli&,20}; A)printf(&%c&,class[3].name); C)printf(&%c&,class[2].name[0]); 32.若有以下定义及语句: struct s1 { char a[3]; }t,*p; p=&t; 则能正确引用 t 中的 num 域的是 A)*p.t.num struct s1 { char a[3]; }t={'a','b','c',4},*p; p=&t; 则输出值为 c 的语句是 A)printf(&%c&,p-&t.a[2]); C)printf(&%c&,p-& a[3]); 34.以下程序的运行结果是 union u { 。 。 B)printf(&%c&,(*p).a[2]); D)printf(&%c&,(*p).t.a[2]); B)p-&t.num 33.若有以下定义及语句: 。 C)p-&num D)(*p).t.num B)printf(&%c&,class[3].name[1] ); D)printf(&%c&,class[2].name[1] );41 char c[2]; }u1; int main() { u1.c[0]=13; u1.c[1]=0; printf(&%d&,u1.k); return 0; } A)13 B)208 C)15 。 D)130 35.下面关于 typedef 的说法中不正确的是 B)用 typedef 可以增加新类型 C)使用 typedef 有利于程序的通用和移植 D)用 typedef 是为已存在的类型取一个别名 二.分析程序写结果 1.运行下面程序,输入为 0 1 2 3 4 5 6 7 8 9 时,请给出程序运行结果。 int main() { int arr[10],i,j, printf(&Input value of array:\n&); for(i=0;i&10;i++) scanf(&%d&,&arr[i]); for(i=0,j=9;i&=j;i++,j--) { temp=arr[i]; arr[i]=arr[j]; arr[j]= } for(i=0;i&10;i++) printf(&%4d&,arr[i]); return 0; } 2.请给出程序运行结果。 int main() { int a[10]={1,2,3,4,5,6,7,8,9,10}; int k,s,i; for(k=s=i=0;i&10;i++) { if(a[i]%2!=0)42A)用 typedef 可以定义各种类型名,但不能用来定义变量 s+=a[i]; k++; } if(k!=0) { ave=s/k; printf(&%d,%f\n&,k,ave); } return 0; } 3.请给出程序运行结果。 #define N 7 int main() { int i,j,a[N][N]; for (i=1;i&N;i++) { a[i][i]=1; a[i][1]=1; } for (i=3;i&N;i++) for(j=2;j&=i-1;j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=1;i&N;i++) { for(j=1;j&=i;j++) printf(&%6d&,a[i][j]); printf(&\n&); } printf(&\n&); return 0; } 4.请给出程序运行结果。 int main() { char ch[7]={&65ab21&}; int i,s=0; for (i=0;ch[i]&='0' && ch[i]&='9';i++) s=10*s+ch[i]-'0'; printf(&%d\n&,s); return 0; } 5.请给出程序运行结果。 int main() { float x,*f=&x;43 x=5.17; *f=x+4.83; printf(&%f &,x+*f); return 0; } 6.请给出程序运行结果。 int main() { int w[10],i,*p; for(i=0;i&10;i++) w[i]=3*i; for(p=w,i=0;p-w&10;p++,i++) *p+=1; printf(&w[7]=%d&,w[7]); return 0; } 7.请给出程序运行结果。 int main() { char ch[]=&1\&23456\&&,*p= printf(&%c&,*(p++)); printf(&%s&,++p); return 0; } 8.请给出程序运行结果。 int main() { int a[4][2]={3,5,7,9,11,13},(*pp)[2]=a+2; printf(&%d&,pp[0][1]); return 0; } 9.请给出程序运行结果。 int main() { enum team{my,your=4,his,her=his+10}; printf(&%d %d %d %d &,my,your,his,her); return 0; } 10.请给出程序运行结果。 int x[5]={1,2,3,4,5}; struct { int *b; }*k,t[3]={100,&x[0],200,&x[2],300,&x[4]};44 int main() { k=t; printf(&%d %d &,++(++k)-&a,*(*k).b); return 0; } 三.阅读程序并填空 1.以下程序的功能是输入一个整数,插入到一个已排好序的数组中,使其仍然有序。请填 空。 int main() { int a[10]={2,5,8,10,15,20,28,37}; int x,i,n=8; scanf(&%d&,&x); for(i=n-1;i&=0;i--) if(a[i]&x) n++; for(i=0;i&n;i++) printf(&%5d&,a[i]); return 0; } 2.下面程序的功能是输出 5*6 阶矩阵中值最大的元素值。请填空。 int main() { int i,j,a[5][6], for(i=0;i&5;i++) for(j=0;j&6;j++) scanf(&%d&, max=a[0][0]; for(i=0;i&5;i++) for(j=0;j&6;j++) if( ) max=a[i][j]; printf(&max=%d\n&,max); return 0; });3.对从键盘上输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字符的 ASCII 码之差。例如:输入的两个字符串分别为 abcdefg 和 abceef,则输出为-1。程序如下, 请填空。 int main() {45 char str1[100],str2[100],c; int i,s; printf(&\n Input string 1:\n&); gets(str1); printf(&\n Input string 2:\n&); gets(str2); i= ; while((str1[i]==str2[i])&&(str1[i]!= i++; s= ; printf(&%d\n&,s); return 0; }))4.下面程序的功能是计算两个整数 a 和 b 相除的商及余数。请将程序补充完整。要求:所 有操作必须通过指针变量 pa 和 pb 实现。 int main() { int a,b,*pa,* pa=&a; pb=&b; scanf(&%d %d&, ); printf(&a=%d,b=%d&,*pa,*pb); printf(&商是%d,余数是%d&, return 0; } 5.下面程序的功能是把一个随机产生的整数 x 按逆序输出(例如:对于整数 123,则输出 321) 。请将程序补充完整。要求:必须使用指针 p 和 q 来分别引用数组 x 和数组 num 中的 元素。 int main() { int x,i,num[5]={0},*p,*q,n=0; p=&x; q= srand(time(0)); *p=rand(); printf(&随机产生的数据是%d\n&,*p); do { q[n++]=*p%10; }while(*p!=0); for(i=0;i&n;i++) printf(&逆置后的整数是%d&,*p); return 0;46);//随机时间函数,产生随机种子值 } 6.下面程序的功能是从键盘输入字符串,在字符串中每两个字符之间插入一个?#?构成新 字符串。如输入 abc,则输出新字符串 a#b#c#。请将程序补充完整。 #include &string.h& int main() { char str[80],*p; p= gets(p); puts(p); for(i=strlen(p);i&0;i--) { *(p+2*i)=*(p+i); } puts(p); return 0; } 7.已知 stu 数组中存放着 3 名学生的数学、语文和英语课程的成绩,下面程序的功能是输 出每名学生的课程成绩及平均分。请将程序补充完整。要求:必须使用指针 p 来引用数组 stu 中的各元素。 int main() { float stu[3][4]={{98,76.5,77},{65,83.5,74},{82,61,90}}; float s,(*p)[4]; int i,j; p= for(i=0;i&3;i++) { s=0; for(j=0;j&3;j++) ; ; } for(i=0;i&3;i++) { printf(&第%d 名同学的成绩是:&,i+1); for(j=0;j&3;j++) printf(&%f &,stu[i][j]); printf(&\n 平均分是:%f \n&,stu[i][3]); } return 0; } 8.下面程序的功能是定义数组,说明结构体,同时初始化变量 t,使 t 的 a 成员值为 50,b47 成员值为 x 数组的首地址,并输出 t 的值。请将程序补充完整。 int x[5]={1,2,3,4,5}; struct { int *b; } ; int main() { printf(&%d %d\n&,t.a,t.b); return 0; } 9.下面程序的功能是输出结构体数组的内容,请将程序补充完整。 struct { char name[10]; }p[3]={&Lee&,'f',46,&Mon&,'m',62,&Fan&,'F',25}; int main() { for (i=0;i&3;i++) ; return 0; } 四.程序改错 1.下面程序的功能是统计数组 a 中偶数的个数以及所有奇数的平均值,请判断下面程序的 正误,如果错误请改正过来。 int main() { int a[10]={1,13,24,37,68,79,101,3,42,36}; int num=0,s=0,i; for(i=0;i&10;i++) if (a[i]%2! =0) num=num+1; else s+=a[i]; printf(&The number of even is %d\n&,num); printf(&The average of odd is %f\n&,s/num); return 0; } 2.下面程序的功能是输出二维数组中每列元素的平均值,请判断下面程序的正误,如果错 误请改正过来。48 int main() { int s[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; int i,j, float ave[4]; for(i=0;i&4;i++) { sum=0; for(j=0;j&3;j++) sum=sum+s[i][j]; ave[i]=(float)sum/3; } for(i=0;i&4;i++) printf(&%8.2f\n&,ave[i]); return 0; } 3.下面程序的功能是统计一个字符串中数字字符和小写字符的个数,请判断下面程序的正 误,如果错误请改正过来。 int main() { char ch[80]; int i,m,n; gets(ch); while(ch[i]!='\0') { if (ch[i]&='0' || ch[i]&='9') m++; if (ch[i]&='a' || ch[i]&='z') n++; i++; } printf(&m=%d,n=%d&,m,n); return 0; } 4.下面程序的功能是交换变量 a 和 b 中的值,请判断下面程序的正误,如果错误请改正过 来。 int main() { int a,b,*p,*q,*t; p=&a; q=&b; printf(&请输入变量 a 和 b 的值:\n&); scanf(&%d %d&,&p,&q); t=*p; *p=*q;49 *q=t; printf(&交换后 a 和 b 的值:\n %d %d&,a,b); return 0; } 5.下面程序的功能是在 w 数组中查找值为 x 的元素,若存在则输出该元素所在的位置,否 则就将元素 w[0]替换为 x,请判断下面程序的正误,如果错误请改正过来。要求:必须通过 指针 p 引用数组 w 中的各元素。 int main() { int w[10]={11,22,33,44,55,66,77,88,99,100}; int *p,x,i; p=w; printf(&请输入要查找的数&); scanf(&%d&,&x); for(i=0;i&10;i++) if(p[i]==x) { printf(&%d 出现在数组中第%d 个位置上&,x,i+1); } if(i==10) { printf(&数组中不存在%d,将其放入 w[0]中&,x); p=x; printf(&w[0]=%d&,w[0]); } return 0; } 6.下面程序的功能是将字符串 ch 逆置,请判断下面程序的正误,如果错误请改正过来。 int main() { char ch[]=&abcdef&,*p,*q,t; p= printf(&原有字符串为%s&,p); q=ch+strlen(ch); while(p&q) { t=*p; *p=*q; *q=t; p++; q--; } printf(&逆置后的字符串为%s&,ch); return 0;50 } 7. 下面程序的功能是从键盘输入 5 个字符串并找出最大的字符串, 请判断下面程序的正误, 如果错误请改正过来。 int main() { char s[5][50],*p; for(i=0;i&5;i++) gets(s[i]); p=s[0][0]; for(i=0;i&5;i++) { if(strcmp(p,s[i])&0) p=s[i]; } puts(p); return 0; } 8.以下程序有若干语法错误,请修改。 struct date {m;d; }; struct stu { char n[10]; }s={&Zhang&,{},18}; int main() { printf(&%c %d %d\n&,s.n,s.y,s.a); return 0; } 9.以下程序有若干语法错误,请修改。 union { struct {} }; int main() { m.a=200; m.v=120.5;51 printf(&%d %f \n&,m.a,m.v); return 0; } 五.程序设计 1.编写程序计算 1~5 的阶乘,将结果保存到一维数组 w 中,并输出。 2.编写程序,从键盘输入一个 4×5 的矩阵,输出该矩阵的转置矩阵。 3.编程实现,从键盘输入一个整数,将该整数的各位数字按逆序构成一个字符串。如整数 345 构成字符串“543” 。 4.编程实现,判断用户从键盘输入的两个 double 型数据(非 0)是否具有相同的符号。要 求,所有操作必须通过指针实现。 5.编程实现,用移动指针的方法将用户从键盘输入的若干字符(用空格键结束输入)存放 到数组 w 中,找出数组中具有最大 ASCII 码值的字符,输出该字符及其 ASCII 码。要求, 程序中所有操作(输入、查找及输出)都必须通过指针完成。 6.编程实现, 运行程序时随机产生一道算术题, 题目中只包含两个运算数和一个运算符 (加、 减、乘、除) ,当用户输入计算结果后,程序给出“正确”或“错误”的相应信息。要求, 所有操作必须通过指针实现。 7.编程实现,将二维数组 arr 中第 1 列与最后一列的元素对调,第 2 列与倒数第 2 列的元 素对调,依此类推,输出原始数组及调换后的数组。要求,定义行指针 p 使其指向二维数组 arr,而对二维数组的所有操作都必须通过 p 进行。 例如:若数组 arr 的原始数据是:
34567 则调换后的数组如下:
76543 8.某单位规定男职工年龄在 20~50 岁之间,女职工年龄在 20~45 岁之间应该参加义务献 血。定义一个职工记录的结构体类型,其成员为:姓名、年龄、性别。编程实现,输入全体 职工情况(假设只有 5 名职工) ,并输出符合年龄条件的职工记录及人数。 9.请编写一个程序,定义一个轿车销售结构体类型,其成员为:轿车名称、型号、颜色、 销售价格,并按销售价格从大到小排序(假设只有五种轿车) 。52 第 8 章 函数 ― 复杂程序的实现方法一.选择题 1.以下说法中错误的是 。 A)C 语言总是从 main 函数开始执行 B)函数在程序中出现的先后位置与其被调用的顺序无关 C)一个完整的 C 程序可由若干个 C 源程序文件组成 D)main 函数的定义必须出现在所有其他函数之前,否则将产生运行错误 2.C 语言规定,函数返回值的类型是 A)由 return 语句中表达式的类型所决定 B)由调用该函数的主调函数所具有的类型决定 C)由定义该函数时所指定的函数类型决定 D)由系统随机决定 3.以下说法中正确的是 。 A)main 函数和其他函数间可相互调用 B)main 函数可以调用其他函数,但其他函数不能调用 main 函数 C)因为 main 函数可不带参数,所以其后的参数小括号能省略 D)根据情况可以不写 main 函数 4.以下函数定义中正确的是 A)fun(float x,y) { return x+y; } 5.以下说法中正确的是 。 C)fun(int x, int y); { return x+y; } D)void fun(int x, int y) { return x+y; } B)fun(int x, int y) { return x+y; } 。 。A)在一个函数的执行过程中又出现对其他函数的调用,则称此函数为递归函数。 B)递归函数中必须存在递归结束的条件 C)函数的递归调用可以提高程序的执行效率 D)递归函数中必须出现 return 语句 6.以下有关“递归函数”说法中正确的是 A)既允许直接递归调用,也允许间接递归调用 C)既不允许直接递归调用,也不允许间接递归调用 A) 整个数组 C) 数组占用的内存单元个数 A) 可以是相应类型简单变量 C) 可以是相应类型数组名 9.下述函数的功能是 int fun(char *x) { char *y=x; while(*y++);53。 B)只允许直接递归调用 D)只允许间接递归调用 。7. C 语言中,函数调用时若实参是数组名,则传递给被调函数对应形参的是 B) 数组元素的个数 D) 数组在内存中存放的首地址 。 B) 必须是相应类型数组名 D) 必须是相应类型的指针变量 。8.C 语言中,函数调用时若实参是数组名,则被调函数对应形参 return y-x-1; } A)将字符串 x 连接到字符串 y 的后面 C)比较两个字符串的大小 10.下面函数 fun 的功能是 int fun(char *s,char *t) { while(*s==*t) if(*s='\0') return 0; else s++,t++; return *s-*t; } A) 测字符串 s 和 t 的长度 C) 将字符串 t 拷贝到 s 11.以下说法中错误的是 。 B)指针可以作为函数的形参 D)结构指针变量不能作为函数参数 。 A)数组元素可以作为函数实参 C)结构变量可以作为函数参数 12.C 语言中,以下叙述中错误的是 A) 主函数中定义的变量是全局变量 B) 同一程序中,全局变量和局部变量可以同名 C) 全局变量的作用域从定义处开始到本源程序文件结束 D) 局部变量的作用域被限定在其所定义的局部范围中 13.在一个源程序文件中定义的全局变量,其作用域为 A) 整个源程序文件 C) 整个主函数 A) auto 存储类型 。 B) 只能是 extern D) 可以是 extern 或 static B) static 。 B) 从定义处开始到本源程序文件结束 D) 所处 C 程序的所有源程序文件中 。 D) extern C) register B) 将字符串 s 拷贝到 t D) 比较字符串 s 和 t 的大小 。 B)求字符串的存放位置 D)求字符串的长度14.在 C 函数中,局部变量的隐含存储类型是15.在 C 程序中,如果限定一个局部变量只能在所定义的范围中起作用,那么这个变量的 A) 只能是 auto C) 可以是 auto 或 static 二.分析程序写结果 1.请给出程序运行结果。 int main() { for(i=1;i&=5;i++) printf(&%d &,sub(i)); printf(&\n&); return 0;54 } int sub(int n) { if(n==1) return 1; a=n+sub(n-1); } 2.请给出程序运行结果。 #include &string.h& void fun(char a[], int k) { int i, len=strlen(a); for(i=0;i&k;i++) a[i]=a[i+1]; for(i=len-1;i&k;i--) a[i]=a[i-1]; } int main() { char a[20]=&&; fun(a,4); puts(a); return 0; } 3.请给出程序运行结果。 #include &stdio.h& int main() { void fun(int *k); int w=5; fun(&w); return 0; } void fun(int *k) { (*k)++; printf(&%d\n&,*k++); } 4.请给出程序运行结果。 struct student { char name[20];55
}; struct student stu[3]={ {11302,&Wang&,'F',20,483}, {11303,&Liu&,'M',19,503}, {11304,&Song&,'M',19,471.5} }; print(struct student s) { printf(&%s,%d,%5.1f\n&,s.name,s.age,s.score); } add10(struct student *ps) { if(ps-&age&=19)ps-&score=ps-&score+10; } int main() { struct student *p; for(i=0; i&3; i++) print(stu[i]); for(i=0,p= i&3; i++,p++) add10(p); for(i=0,p= i&3; i++,p++) print(*p); return 0; } 5.请给出程序运行结果。 int m=10; int main() { int fun(int x,int y); int a=7,b=6; printf(&%d\n&,fun(a,b)/m); return 0; } int fun(int x,int y) { int m=2; return x*y-m; } 6.请给出程序运行结果。56 int main() { int fun(int a); int a=2,j,k; for(j=0;j&3;j++) { k=fun(a++); printf(&%d\n&,k); } return 0; } int fun(int a) { int b=0; static int c=3; a=c++,b++; } 三.阅读程序并填空 1.以下程序的功能是计算 1!+2!+3!+…+20!。请填空。 float fun(float t) { float a=1,n; for(n=1; ; n++) a=a*n; } int main() { float n,sum=0,s; for (n=1;n&=20;n++) { s= ; sum=sum+s; } printf(&sum=%e\n&,sum); return 0; } 2.以下程序的功能是求一个 3*4 矩阵中最小元素。请填空。 fun(int a[][4]) { int i,j,k,min=10000; for(i=0;i&3;i++) for(j=0;j&4;j++) if()57 min=a[i][j]; } int main() { int a[3][4]={1,2,3,-22,5,6,-3,8,9,-8,22,10}; k= ; printf(&%d\n&,k); return 0; } 3.以下程序的功能是通过 average 计算数组中各元素的平均值。请填空。 float average(int *pa,int n) { float avg=0.0; for (x=0;x&n;x++) avg=avg+ ; avg=avg/n; } int main() { int a[5]={2,4,6,8,10}; mean= ; printf(&mean=%f\n&,mean); return 0; } 4.以下程序的功能是计算某员工的总工资。请填空。 struct payment { char * }clerk={ &Karlis&,150.20,30.0}; int main() { float total,sum(float,float); printf(&%s has a total wage of %.2f\n&,clerk.name, return 0; } float sum(float x,float y) { ;58); } 5.以下程序的功能是:利用全局变量来完成一个函数,输入圆的半径 r 后,得到圆的面积 和周长。请填空。 //全局变量 float carea(float r) { ar=3.14*r*r; cl=2*3.14*r; ; } int main() { float r, printf(&请输入圆的半径:&); scanf(&%f&,&r); area=carea(r); printf(&半径=%f 面积=%f 周长=%f&, return 0; } 四.程序改错 1.下面程序的功能是:用户从键盘输入两个 float 型数据 a 和 b,计算并输出 a 除以 b 的商。 请判断下面程序的正误,如果错误请改正过来。 float cal(float a, b) { x=a/b; } int main() { float a,b; scanf(&%f %f&,&a,&b); printf(&商=%f\n&,cal(a,b)); return 0; } 2.下面程序的功能是:在数组 b 中依次存放 a 数组中偶数所在的下标值,并利用数组 b 的 各元素输出 a 数组中的所有偶数。请判断下面程序的正误,如果错误请改正过来。 int fun(int a[],int b[]) { int i,j=0; for(i=0;i&10;i++) if(a[i]%2==0) { b[j]=i;59); j++; } } int main() { int a[10]={1,4,3,2,6,5,10,7,8,9},b[10],i,k; k=fun(a[],b[]); for(i=0;i&k;i++) { printf(&%3d &,a[b[i]]); printf(&\n&); } return 0; } 3.下面程序的功能是:将一个由 0、1 二进制数字字符组成的字符串转换为相应的十进制整 数。请判断下面程序的正误,如果错误请改正过来。 int fun(char *a) { while(*a!='\0') { k=k*2+*a-'0'; (*a)++; } } int main() { char a[16]; gets(a); k=fun(a); printf(&%s %d\n&,a,k); return 0; } 4.下面程序的功能是:计算某员工的总工资。请判断下面程序的正误,如果错误请改正过 来。 struct payment { char * }clerk={&Karlis&,150.20,30.0}; int main()60 { float sum(struct payment *); printf(&%s has a total wage %.2f.\n&,clerk.name,sum(clerk)); return 0; } float sum(struct payment *wage) { return(wage.salary+wage.subsidy); } 5.下面程序的功能是:输出全局变量 a、b 两者的最小值。请判断下面程序的正误,如果错 误请改正过来。 int min(int x,int y) { z=x&y?x:y; } int main(void) { printf(&min=%d\n&,min(a,b)); return 0; } int a=8,b=7; 五.程序设计 1.编写函数,计算 1+2+3+…+n 的和。 2.编写函数,删除字符串中的所有数字字符。 3.编写函数,计算 m 的倒数和 n 的倒数的和与差。 4.设有以下结构体,编写函数,计算公司的工资总额,即所有员工的基本工资和津贴之和。 struct payment { char * } clerk[2]={{&Karlis&,150.2,20},{&Fred&,146.5,20}}; 5.编写函数,计算如下分数序列的第 n 项,n 从键盘输入。2 3 5 8 13 , , , , ,... 1 2 3 5 86.一只猴子摘了若干个桃子,已知第 1 天猴子吃了所摘桃子的一半多一个;第 2 天又吃了 剩下桃子的一半多 1 个;如此吃法,到第 10 天时还剩下 1 个桃子。编写函数,计算猴子所 摘桃子的个数。61 第 9 章 文件 ― 数据独立存储的方法一.选择题 1.在 C 语言中,叙述正确的是 A) 对文件操作必须先关闭文件 C) 对文件操作顺序没有统一规定 2.C 语言可以处理的文件类型是 A) 文本文件和数据文件 C) 数据文件和二进制文件 A)fp=fopen(&file&, &r&) C)fp=fopen(&file&, &w&) 字符串应是 A)&a+& 值为 A)0 6.有以下程序 #include &stdio.h& int main( ) { FILE *f; f=fopen(&filea.txt&,&w&); fprintf(f,&abc&); fclose(f); return 0; } 若文本文件 filea.txt 中原有内容为: hello, 则运行以上程序后, 文件 filea.txt 的内容为 A)helloabc B)abclo C)abc D)abchello 7. 已知函数的调用形式: fread(buffer,size,count,fp); 其中 buffer 代表的是 。 B) 一个文件指针,指向要读入的文件 D) 一个存储区,存放要读的数据项 。 B) 将文件指针移到距离文件尾 10 个字节处 D) 将文件指针从当前位置前移 10 个字节 B) 只能随机存取 A) 一个整型变量,代表要读入的数据项总数 C) 一个指针,指向要读入数据的存放地址 8.函数调用语句 fseek(fp,10,0)的含义是 A) 将文件指针移到距离文件头 10 个字节处 C) 将文件指针从当前位置后移 10 个字节 9.C 语言中文件的存取方式有 A) 只能顺序存取 。 。 。 B)fp 所指文件的起始地址 C)fp 的值 D)1 。 B)&r+& C)&wb+& D)&ab& 。 B) 文本文件和二进制文件 D) 以上答案都不完全 。 B)fp=fopen(&file&, &w+&) D)fp=fopen(&file&, &r+&) 。 B) 对文件操作必须先打开文件 D) 以上都错3.要打开一个已存在的非空文件 file 用于修改,正确的语句是4.若要用 fopen 函数打开一个新的二进制文件,该文件要既能读也能写,则文件读写方式5. fclose(fp)函数的作用是关闭 fp 所指向的文件,当顺利关闭该文件后,fclose 函数的返回62 C) 即可顺序存取,也可随机存取 是 。 B) fseek( )D) 只能从文件开头进行存取10.在对文件进行操作的过程中,若要求文件的位置回到文件的开头,应当调用的函数 A) fopen( ) 是 A) -1 。 B) 1 。 C) 0 D) NULL C) fclose( ) D) rewind( )11.若 fp 是指向某文件的指针,且已读到该文件的末尾,则 C 语言函数 feof(fp)的返回值12.下面程序的功能是#include &stdio.h& int main() { FILE * fp=fopen(&wj.txt&,&rb&); fseek(fp,0,SEEK_END); n=ftell(fp); fclose(fp); printf(&%ld&,n); return 0; } A) 计算文件 wj.txt 的起始地址 C) 计算文件 wj.txt 的长度 二.分析程序写结果 1.请给出程序运行结果。 #include&stdio.h& void fun(char *fname,char *st) { FILE * fp=fopen(fname,&w&); for (i=0;i&strlen(st);i++) fputc(st[i],fp); fclose(fp); } int main() { fun(&test&,&new world&); return 0; } 2.已有文本文件 te.txt,其中的内容为“Hello,everybody!” 。请给出程序运行结果。 #include&stdio.h& int main() { FILE *63B) 计算文件 wj.txt 的终止地址 D) 将文件指针定位到文件末尾 char str[40]; if((fp=fopen(&te.txt&,&r&))==NULL) { printf(&Can not open the file!\n&); exit(0); } fgets(str,4,fp); printf(&%s\n&,str); fclose(fp); return 0; } 3.请给出程序运行结果。 #include&stdio.h& int main() { FILE * char s1[80],s[]=&abcdefghijklmnop&; fp=fopen(&alf.dat&,&wb+&); i=sizeof(s); fwrite(s,i,1,fp); rewind(fp); fread(s1,i,1,fp); printf(&all=%s\n&,s1); fseek(fp,0,0); printf(&seek1 ch=%c\n&,fgetc(fp)); fseek(fp,10,1); printf(&seek2 ch=%c\n&,fgetc(fp)); fseek(fp,1,1); printf(&seek3 ch=%c\n&,fgetc(fp)); fclose(fp); return 0; } 三.阅读程序并填空 1.以下程序的功能是从键盘上输入一个字符串, 将该字符串升序排列后输出到文件 test.txt 中,然后从该文件读出字符串并显示出来。请填空。 #include&stdio.h& int main() { FILE * char t,str[100],str1[100]; int n,i,j; if((fp=fopen(&test.txt&,&w&))==NULL) {64 printf(&can't open this file.\n&); exit(0); } printf(&input a string:\n&); gets(str); ; for(i=0;i&n;i++) for(j=0;j&n-i-1;j++) if( ) { t=str[j]; str[j]=str[j+1]; str[j+1]=t; } ; fclose(fp); fp=fopen(&test.txt&,&r&); fgets(str1,100,fp); printf(&%s\n&,str1); fclose(fp); return 0; } 2.从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到文件“test.txt” 中保存。输入的字符串以!结束。请填空。 #include &stdio.h& #include &string.h& int main() { FILE * char str[100]; int i=0; if((fp=fopen(&test.txt&,&w&))==NULL) { printf(&cannot open the file\n&); exit(0); } printf(&please input a string:\n&); gets(str); while(str[i]!='!') { if(str[i]&='a' && str[i]&='z') ; ; i++; } fclose(fp);65 fp=fopen(&test.txt &,&r&); fgets(str,strlen(str)+1,fp); printf(&%s\n&,str); fclose(fp); return 0; } 3.有三个学生,每个学生有 3 门课的成绩,从键盘输入以上数据(包括学生号,姓名,三 门课成绩) ,计算出平均成绩,将原有的数据和计算出的平均分数存放在磁盘文件& stud.txt & 中。请填空。 #include&stdio.h& struct student { char num[6]; char name[8]; int score[3]; }stu[5]; int main() { int i,j, FILE * for(i=0;i&3;i++) { printf(&stuNo:&); scanf(&%s&,stu[i].num); printf(&name:&); scanf(&%s&,stu[i].name); sum=0; for(j=0; j&3;j++) { printf(&score %d.&,j+1); scanf(&%d&,&stu[i].score[j]); sum+=stu[i].score[j]; } ; } fp=fopen(&stud.txt&,&w&); for(i=0;i&3; i++) { if(fwrite(&stu[i], ,1,fp)!=1) printf(&file write error\n&); } fclose(fp); fp=fopen(&stud.txt&,&r&); for(i=0;i&3; i++) {66 fread(&stu[i],sizeof(struct student),1,fp); printf(&%s %s %d %d %d %f\n&,stu[i].num,stu[i].name, stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].avr); } fclose(fp); return 0; } 四.程序改错 1.下面程序的功能是:把 1~1000 之间所有 3 的倍数,按顺序写到文件 test.txt 中。请判断 下面程序的正误,如果错误请改正过来。 #include &stdio.h& int main() { FILE * fp=fopen(&test.txt&,&w&); for(i=3;i&1000;i+=3) fprintf(&%4d&,i); fclose(fp); return 0; } 2.下面程序的功能是:把文本文件 test1.txt 中的数字复制到文本文件 test2.txt 中。请判断下 面程序的正误,如果错误请改正过来。 #include &stdio.h& int main() { FILE *fp1,*fp2; fp1=fopen(&test1.txt&,&r&); fp2=fopen(&test2.txt&,&r&); while(!feof(fp1)) { ch=fgetc(fp1); if(ch&='0' && ch&='9') fputc(ch); } fclose(fp1); fclose(fp2); return 0; } 3.下面程序的功能是:统计文件 test.txt 中字符的个数。请判断下面程序的正误,如果错误 请改正过来。 #include &stdio.h& int main()67 { FILE * long num=0L; if((fp=fopen(&test.txt&,&r&))==NULL) { printf(&Open Error\n&); exit(0); } ch= fgetc(fp); num=num+1; while(!feof( )) { fgetc(fp); num=num+1; } fclose(fp); printf(&num=%ld\n&,num); return 0; } 五.程序设计 1.编写程序,将文本文件 t1.txt 中的所有空格去掉后,存放到 t2.txt 中,并在屏幕中显示。 2.编写程序,从键盘上输入一组实型数据,以特殊数据 -1 作为结束标志,将其写入到一 个二进制文件 t2.dat 中,计算该组数据的和并追加写入到文件末尾,最后在屏幕上显示。 3.编写程序,从键盘输入 5 位职工的工号、姓名、年龄、基本工资等信息,将其写入到文 件 t3.txt 中,并从文件中读出数据,计算出所有职工的平均工资。68 第 10 章 编译预处理 ― 程序设计的一般策略一.选择题 1.在宏定义#define PI 3.1415926 中,用宏名 PI 代替一个 A) 单精度数 2.如果有#define 为 A) 36 。 B) 25 。 C) 11 D) 13 B) 双精度数 C) 常量 。 D) 字符串f(x,y) x+y 及 int a=2,b=3;则执行 printf(&%d&,f(a,b)*f(a,b)); 后的值3.以下程序运行后,输出结果是 #include&stdio.h& #define PT 5 #define S(x) PT*x*x int main( ) { int a=1,b=2; printf(&%d\n&,S(a+b)); return 0; } A) 49 B) 9 4.设有以下宏定义: #define N 3 #define Y(n) (N+1*n)C) 22D) 45则执行语句:z=2*(N*Y(5+1)); 后,z 的值为 A) 30 B) 72 。 5.以下有关宏替换的叙述不正确的是 A) 宏替换不占用运行时间 C) 宏替换只是字符串替换 起时,寻找被包含文件的方式是。 C) 48 D) 54B) 宏名无类型 D) 宏替换是在运行时进行的 。6.在“文件包含”预处理语句的使用形式中,当#include 后面的文件名用&&(双引号)括 A) 直接按系统设定的标准方式搜索目录 B) 先在源程序所在目录搜索,再按系统设定的标准方式搜索 C) 仅仅搜索源程序所在目录 D) 仅仅搜索当前目录 7.在“文件包含”预处理语句的使用形式中,当#include 后面的文件名用& &(尖括号) 括起时,寻找被包含文件的方式是 A) 仅仅搜索当前目录 B) 仅仅搜索源程序所在目录 C) 直接按系统设定的标准方式搜索目录 D) 先在源程序所在目录搜索,再按系统设定的标准方式搜索 8. 如果程序中有 #include &文件名& 则意味着69。。 A) 将&文件名&所指的该文件的全部内容,复制插入到此命令行处 B) 指定标准输入输出 C) 宏定义一个函数 D) 条件编译说明 9.C 语言提供的预处理功能包括条件编译,其基本形式为: #XXX 标记符 程序段 1 #else 程序段 2 #endif 这里 XXX 可以是 A)define 或 include C)ifdef 或 ifndef 或 define 二.分析程序写结果 1.请给出程序运行结果。 #include &stdio.h& #define MUL(i) t=t*(i) int main( ) { int x,s=0,t=1; for(x=0;x&4;x++) { MUL(x+1); s+=t; } printf(&\n%d&,s); return 0; } 2.请给出程序运行结果。 #include &stdio.h& #define SQR(x) x*x int main( ) { int a=10,k=2,m=1; a=SQR(k+m)/SQR(k+m); printf(&%d\n&,a); return 0; } 3.请给出程序运行结果。 #include &stdio.h& #define DEBUG int main() {70。 B)ifdef 或 include D)ifdef 或 ifndef 或 if int a=10,b=20,c; c=b/a; #ifdef DEBUG printf(&a=%d,b=%d,&,a,b); #endif printf(&c=%d\n&,c); return 0; } 三.阅读程序并填空 1.以下程序的功能是统计输入字符串中小写字母的个数。请填空。 #include &stdio.h& #define IA(x) int main( ) { char ch[80]; int i=0,count=0; gets(ch); while(ch[i]!='\0') { if(IA(ch[i])) count++; i++; } printf(&小写字母的个数为%d\n&,count); return 0; } 2.以下程序的功能是用带参宏实现从 3 个数中找出最大数。请填空。 #include &stdio.h& #define MAX(a,b) int main() { int a,b,c; printf(&请输入 3 个整数:&); scanf(&%d %d %d&,&a,&b,&c); printf(&最大数是:%d\n&, MAX(MAX(a,b),c)); return 0; } 四.程序改错 1.下面程序的功能是:计算 f(x)= 4*x*x+3*x+2 的值。请判断下面程序的正误,如果错误请 改正过来。 #include &stdio.h& #define f(x) = 4*x*x+3*x+2 int main()71 { scanf(&%d&,&i); printf(&%d&,f(i)); return 0; } 2.下面程序的功能是:交换两个数。请判断下面程序的正误,如果错误请改正过来。 #include &stdio.h& #define SWAP(x,y)t=x;x=y;y=t; int main() { int a, scanf(&%d %d&,&a,&b); SWAP(a,b); printf(&%d %d&,a,b); return 0; } 五.程序设计 1.编写程序,用宏定义的方法求两个整数相除的余数。 2.用条件编译方法实现以下功能:输入一行电报文字,可以任选两种输出,一为原文输出; 一为将字母变成其下一字母(如“a”变成“b”,…,“z”变成“a”。其它字符不变)。用#defin

我要回帖

更多关于 oracle编写函数 的文章

 

随机推荐