1、第 6-8 章复习题一、判断题( )1数组元素在内存中是按顺序、连续存放的。( )2组成数组的数据可以是若干个不同的类型。( )3字符数组可以存放字符串,也可以存放若干字符。( )4多维数组中各维的大小必须相同。( )5数组定义后没有被初始化也有一个确定的默认值。( )6字符串的结束标志是n 。( )7定义数组时必须有数据类型说明,而不必有存储类型说明。( )8数组在赋初值时允许越界。( )9一维字符数组中可以存放多个字符串。( )10定义函数时必须指出该函数的类型。( )11函数说明必须放在函数体内,不可放在函数体外。( )12定义函数时给出的参数是形参,调用函数时给出的参数是实参。( )1
2、3函数调用时要求形参与实参个数相等、对应类型相同。( )14函数的调用方式既可以传值也可以传地址。( )15函数可以嵌套调用,也可以嵌套定义。( )16函数的函数体可以是空的,也可以有若干条语句。( )17预处理命令的前面必须加一个“#” 。( )18一条文件包含命令只能包含一个文件,若要包含多个文件时,可使用多条文件包含命令。( )19带参数宏定义的参数个数不得超过 2 个。( )20预处理命令的处理是在程序运行前进行的。二、单选题1数组赋初值的初始值表中的数据项个数与数组元素个数的关系,错误的是( ) 。A大于 B小于 C等于 D小于等于2设 int a23; 下列数组元素的表示中错误的是
3、( ) 。Aa00 Ba11 Ca22 Da123下列数组带初始化的定义中,错误的是( ) 。Aint m5=3; Bchar s5= “ab123”;Cint n=6,6,4,3,2,1; Dint p3=1,3,5;4已知一个一维数组,有 10 个 int 元素,其中后面 3 个元素的值分别为 3、2、1,其余元素为默认值。在下面的实现方法中,正确的是( ) 。Aint a10=3,2,1;Bint a=3,2,1;Cint a10=0; a7=3; a8=2; a9=1;Dint a10=0; a8=3; a9=2; a10=1;5下面关于字符数组的描述中,错误的是( ) 。A可以使用字
4、符串给字符数组名赋值B字符数组中的元素都是字符型的C字符数组中可以存放若干个字符,也可以存放字符串D字符数组可以用字符串给它初始化6已知:int a=5,4,3,2,1; 数值为 3 的表达式是( ) 。A. a3 B. a4 C. ac-a D. a57下列数组的定义中,正确的是( ) 。Achar c15=“1”, “24680”; Bchar c22=“1”, “24680”;Cchar c3=“1”, “24680”; Dchar c45=“1”, “0”;8已知:static int a3=5,3,13; 数值为 0 的元素是( ) 。A. a00 B. a02 C. a10 D.
5、a209下列关于函数参数的描述中,错误的是( ) 。A定义函数时可以有参数,也可以无参数B函数的形参在该函数被调用前没有确定值C在传值调用时,实参只能是变量名,不可以是表达式D要求函数的形参和实参个数相等,对应类型相同10在变量定义时,缺省(或默认)的存储类型是( ) 。Aextern Bauto Cstatic Dregister11在下列函数的调用中,实参的个数是( ) 。fun(a1, (a2, a3), (a4, a5, a6) )A6 B5 C4 D312下列关于函数返回值的描述中,错误的是( ) 。A函数返回值可实现函数间的信息传递B函数返回值的类型是由返回语句中表达式的类型决定的
6、C函数的返回值由 return 实现的D一个函数只能返回一个值13下列函数被调用了 3 次,a 的值是( ) 。Fun( ) static int a=1; +a; A1 B 2 C3 D414下列不可以用作函数实参的是( ) 。A语句 B表达式 C地址值 D常量15一个函数没有返回值,它的类型说明符是( ) 。Aint Bvoid Cstatic Dauto16在 C 语言函数调用中,如果函数 Funa 调用了 Funb,函数 Funb 又调用了函数Funa,则称为( ) 。A函数的直接递归调用 B函数的间接递归调用C函数的递归定义 DC 语言中不允许这样的形式17在下面的叙述中,只有( )
7、是正确的。A递归函数中的形参是自动变量B递归函数中的形参是外部变量C递归函数中的形参是静态变量D递归函数中的形参可以根据需要自己定义存储类型18下列关于宏定义的描述中,错误的是( )A宏定义有两种:不带参数的宏定义和带参数的宏定义B宏定义在程序中出现,宏名在编译前被替换C带参数的宏定义中,参数表中参数必须指出参数的类型D宏替换在正常编译前进行,实际上占用编译时间19已知:#define A 4#define B A+2#define C B/2printf(“%dn”, C+1);上述程序段的输出结果是( ) 。A6 B5 C4 D320已知:#define A 2#define B(x) x
8、*(A+2)int a=5;printf(“%dn”, B(a+1);上述程序段的输出结果是( ) 。A24 B18 C9 D421在下列函数的调用语句中,不正确的是( ) 。Amax(a, b); Bmax(3, a+b); Cmax(3, 5); Dint max(a, b);22宏定义#define PI 3.1415926 的作用是:指定用标识符 PI 来代替一个( ) 。A单精度数 B字符串 C整数 D双精度数三、填空题1带参数的宏定义进行替换时,使用程序中宏调用语句中的 来替换宏定义中的 ,其他内容 。2已知:#define B(a, b) a+1/b,则表达式 B(5,1+3)的
9、值是 。3程序填空。下列程序是将某个字符串的内容颠倒过来,假设字符串中有 8 个字符。#includevoid main()int i , j, ;char str=“87654321”;for(i=0, j= ; ivoid main() int a, b;printf(“Enter a, b:”);scanf(“%d,%d”, );printf(“Sum=%dn”, Sum(a, b);int Sum(int i , int j) int k= ;return k;5一个函数的实参和形参都是数组名时,实际上这两个数组在内存中的起始地址是 。四、阅读程序,写出程序执行结果1#includev
10、oid main() int a=3, -5, 8, 0, 9;int fun (int b, int k);printf(“%dn”, fun(a, 4);1程序执行结果:int fun(int b, int k) int a, s=2;for(a=0; aint fun(int i, int j) static int a=5, b;a+=i;return a+i+j;void main() int a=3, b=5;printf(“%d,” ,fun(a, b);printf(“%dn”, fun(a,b);3#include#define N 4void main() int a=N;
11、int f(int);printf(“%dn”, f(a);int f(int a) return (a=0)?1:a*f(a-1); 4#includevoid main() int x=10; fun(x);printf(“%dn”, x);fun(int x) x=20; 5#include2程序执行结果:3程序执行结果:4程序执行结果:int x=3; void main() fun(x); printf(“%dn”, x);fun(int x) x=5; 6下面程序输入 12 时输出结果为 (1) ;若输入 17,输出结果为 (2) 。#includevoid main() int
12、number ;scanf(“%d“,if(prime(number) printf(“%d is prime number.n“,number);else printf(“%d is not prime number.n“,number);int prime(int s) int flag=1, n;for(n=2; ns/2 n+)if(s%n=0)flag=0;return flag;五、编程题1百鸡百钱问题。用一百钱买一百只鸡,公鸡一只 5 钱,母鸡一只 3 钱,雏鸡 3 只一钱,问共有多少种买法。2鸡兔同笼问题。鸡兔共有 30 只,脚共有 90 只,编程计算鸡兔各有多少只。3编写函数 fun 求 s = a + aa + aaa + (此处 a 和 n 的值在 19 之间)。例如,a=3,n=5,则表达式为:s = 3 + 33 + 333 + 3333 + 33333。在主函数中输入 a 和 n 的值,通过调用 fun 函数完成计算。4编写一个函数,计算 x 的 n 次方。在主函数中输入 x 和 n,调用函数计算结果。5程序执行结果:6程序执行结果:1217