1、 1 / 23 目录 习题 7 . 1 选择题 . 1 2.程序填空题 . 3 习题 8 . 5 1.填空题 . 5 习题 9 . 9 选择题 . 9 程序填空题 . 12 习题 10 . 13 选择题 . 13 习题 11 . 15 选择题 . 15 程序填空题 . 18 习题 12 . 20 选择题 . 20 程序填空题 . 22 习题 7 选择题 ( 1) 在 C 语言中,引用数组元素时,其数组下标的数据类型允许是( C) 。 A.整型常量 B.整型表达式 C.整型常量或整型表达式 D.任何类型表达式 ( 2)若有说明: int a0;则对数组元素的正确引用是( D)。 A.a10; B
2、.a3.5 C.a(5) D.a10-10 ( 3)设有数组定义: char array=”china”;则数组 array 所占的空间为( C)。 A 4 个字节 B.5 个字节 C.6 个字节 D.7 个 字节 ( 4)若二维数组 a 有 m 列,则在 aij的元素个数为( B) A.J*m+I B.i*m+j C.i*m+j-1 D.i*m+j+1 ( 5)若有说明: int a3=1,2,3,4,5,6,7;则 a 数组第一维的大小是( B)。 A 2 B.3 C.4 D.无确定值 ( 6)以下不正确的定义语句是( B)。 A double x5=2.0,4.0,6.0,8.0,10.
3、0; B. int y5=0,1,3,5,7,9; C. char c1=1,2,3,4,5; D. char c2=x10,xa,x8; 2 / 23 ( 7)以下不能对二维数组 a 进行正确的初始化的语句是( C)。 A. int a23=0; B. int a3=1,2,0; C. int a23=1,2,3,4,5,6; D. int a3=1,2,3,4,5,6; ( 8)以下能对 二维数组 a 进行正确初始化的语句是( B)。 A. int a2=1,0,1,5,2,3; B. int a3=1,2,3,4,5,6; C. int a24=1,2,3,4,5,6; D. int a
4、3=1,0,1, ,1,1; D中间初始值不存在, 的初始化是错误的 ( 9)以下不能正确的字符串赋初值的语句是( A)。 A. char str5=”good!”; B. char str=”good!”; C. char str8=”good!”; D. char str5=g,o.o,d; (10)判断字符串 s1 是否大于字符串 s2,应当使用( D) A. if(s1s2) B. if(strcmp(s1,s2); C. if(strcmp(s2,s1)0) D.if(strcmp(s1,s2)0) ( 11)给出以下定义,则正确的叙述为( C)。 char x=”abcdefg”;
5、 char y=a, b, c, d, e, f, g; A.数组 x 和数组 Y 等价 B.数组 x 和数组 y 的长度相同 C.数组 X 的长度大于数组 y 的长度 D.数组 X 的长度小于数组 y 的长度 ( 12)以下程序的输出结果是( B)。 void main() char st20=”hello0t”; printf(“%d %dn”,sterlen(st),sizeof(st); A.9 9 B.5 20 C.13 20 D.20 20 ( 13)定义如下变量和数组: Int k; Int a33=1,2,3,4,5,6,7,8,9; 则下面语句输出结果是( A)。 for(k
6、=0;k=0 flaot aver,max,min; int I; for(i=0,over=0;ixi) min=xi; aver=(aver-min-max)/6; printf(“Average=4.2%fn”,aver); ( 2) 以下程序是实现在 M 行 N 列的二维数组中,找出每一行上的最大值。请将程序补充完整 #define M 3 #define N 4 void main() int xMN=1,5,7,4,2,6,4,3,8,2,3,1; int I,j,p; for(i=0;i #include void main() int I; char s20,str320; f
7、or(i=0;i0) strcpy(s,str2); printf(“The min string is %sn”,s); 5 / 23 ( 4) 下面程序的功能是将键盘数 输入 的字符串 str 中的所有 c字符用 C替换,请将程序补充完整。 #include #incldude void main() int i; char80; gets(str); for(i=0;stri!=0;i+) if (stri!=c) countine; stri=0; printf(“%sn”,str); 习题 8 1.填空题 ( 1) 在 C 语言程序中,功能模块是由函数来实现的。函数是 一段可以重复调
8、用的,功能相对独立完整 的程序段。 ( 2) 从函数定义角度看,函数可分为 标准库 函数 和 用户自定义 函数两种。 ( 3)对于有返回值的函数来说,通常函数体内包含有 return 语句,其格式为 return(表达式); ( 4)当一个函数的返回值类型缺省时,意味着该函数的返回值类型为 无返回值 类型。 ( 5)调用带参数的函数时,实参列表中的实参必须与函数定义时的形参 数量 相同, 类型 相符 . ( 6)对带有参数的函数进行调用时,参数的传递方式主要有 传值 调用和 传(地址)址 调用两种方式。 ( 7)变量的作用域和生存期是从 空间 和 时间 的角度来体现变量的特性。 ( 8)变量的
9、存储类型可分为静态存储和动态存储两种类型。 C 语言中,对变量的存储类型说明有以下四种,即 auto(自动型) , register(寄存器型) , extern(外部型) 和 static(静态型) 。 ( 9)静态局部变量若在定义时未赋初始值,则系统自动赋初始值 0。其生存期是 整个源程序 ,其作用域是 只能在定义该变量的函数内或复合语句中使用该变量 。 ( 10) C 语言程序中,函数不允许嵌套 定义,但允许嵌套调用。 2.选择题 ( 1)一下正确的说法是( D) 6 / 23 A用户若需调用标准库函数,调用前必须重新定义 B.用户可以重新定义标准库函数,若如此,该函数将失去原有含义 C
10、.系统根本不允许用户重新定义标准库函数 D.用户若需调用标准库函数,调用前不必使用预编译命令将该函数所在文件包括到用户源文件中,系统自动去调用 (2)以下不正确的说法是( B) A.实参可以是常量,变量或表达式 B.形参可以市常量,变量或表达式 C实参可以为任何类型 D.形参应与对应的实参类型一致 ( 3)一下正确的函数定义形式是( A) A.double fun(int x,int y) B.double fun(int x; int y) C.double fun(int x,int y); D.double fun(int x,y); (4)以下正确的说法是( D) A.定义函数时,参数
11、的类型说明可以放在函数体内 B.return 后边的值不能为表达式 C.如果函数值的类型与返回值类型不一致,以实参类型为准 D.如果形参与实参类型不一致,以实参类型为标准 ( 5)在 C 语言中, 函数的隐含存储类别是( A) A.auto B.static C.extern D.无存储类别 ( 6)凡是函数中未指定的存储类别的局部变量,其隐含的存储类别为( A) A自动( auto) B.静态( static) C.外部( extern) D.寄存器( register) ( 7)若是用一位数组名作为函数实参,则以下正确的说法是( A) A.必须在主调函数中说明此数组的大小 B.实参数组类型
12、与形参数组类型可以不匹配 C.在被调用函数中,不需要考虑形参数组的大小 D.是参数组名誉形参数组名必须一致 ( 8)已有如下数组定义和 f 函数调用语句,则在 f 函数的说明中,对形参数组 array 正确定义方式为( B) int a34; f(a); A. f(int array6) B.f(int array3) B. f(int array4) D.f(int array25) ( 9)若用数组名作为函数的实参,传递给形参的是( A) A.数组的首地址 B.数组的第一元素的地址 C数组中全部元素的地址 D.数组元素的个数 ( 10)函数调用不可以( D) A.出现在执行语句中 B.出现
13、在一个表达式中 C 作为函数的实参 D.作为函数的形参 ( 11) C 语言规定函数返回值类型是由( D) A.return 语句中表达式类型所决定 B调用该函数时的主调函数类型决定 7 / 23 C.调用该函数时的系统临时决定 D.在定义该函数时所制定的函数类型决定 ( 12) C 语言规定:简单变量做实参时, 他和对性餐之间的数据传递方式是( B) A.地址传递 B.单向值传递 C.有实参传给形参,在有形参传回给实参 D.有用户指定传递方式 ( 13)一下只有在使用时才为该类型变量分配内存的存储类说明是( B) A Auto 和 static B.auto 和 register C.reg
14、ister 和 static D.extern 和 register ( 14)以下叙述中不正确的是( D) A.在不同的函数中可以使用相同名字的变量 B.函数中形式参数是局部变量 C.在一个函数内定义变量只在本函数的范围内有效 D.在一个函数内的复合语句中定义的变量 只在本函数范围内有效 ( 15)有以下程序,程序运行后的输出结果是( D) float fun(int x,int y) return(x+y); void main() Int a=2.b-5,c=8; Printf(“%3.0fn”,fun(int)fun(a+c,b),a-c); A.编译出错 B.9 C.21 D.9.0
15、 ( 16)下列程序执行后的输出结果是( C) char st=“hello,friend“; void func1 (int i) printf(“%c“,sti); if(i3)i+=2;func2(i); void func2(int i) printf(“%c“,sti); if(i3)i+=2;func1(i); void main() int i=0;func1(i);printf(“n“); A.hello B.hel C.hlo D.hlm ( 17)有以下程序,程序运行后的输出结果是( B) int f(int n) if(n=1) return 1; 8 / 23 else
16、 return f(n-1)+1; void main() int i,j=0; for(i=1;i3;i+) j+=f(i); printf(“%dn“,j); A.4 B.3 C.2 D.1 ( 18)以下程序的输出结果是( C) void incre(); int x=3; void main() int i; for(i=1;ix;i+) incre (); void incre() static int x=1; x*=x+1; printf(“ %d“,x); A.3 3 B. 2 2 C. 2 6 D. 2 5 ( 19)以下程序的输出结果是( A) int a=3; main(
17、) int s=0; int a=5; s+=a+; s+=a+;printf(“%dn”,s); A.8 B.10 C.7 D.11 (20)以下程序的输出结果是( A) void f(int a,int i,int j) int t; if(ij)t=ai; ai=aj; aj=t; f(a,i+1,j-1); void main() int i,a5=1,2,3,4,5; f(a,0,4); 9 / 23 for(i=0;i5;i+) printf(“%d,”,ai); A.5,4,3,2,1 B.5,2,3,4,1 C.1,2,3,4,5 D.1,5,3,4,2 习题 9 选择题 (
18、1) 下面能正确的进行字符串赋值的操作是( B) A. char s5=“ABCDE”; B. char s5=A,B,C,D,E; C. char *s,s=”ABCDE”; D. Char *s;scanf(“%s”,s); ( 2)对于基类型相同的两个指针变量之间,不能进行的运算是( C) A. B.= C.+ D.- ( 3) 下面说明不正确的是() A. char a10=”china” B. char a10,*p;p=”china”; C.char *a;a=”china”; D.char a10;*p; p=a=”china”; (4)若有下面的程序段,则下列叙述正确的是( C
19、) char s=”china”; char *p;p=s; A. s 和 p 完全相同 B. 数组 s 中的内容和 指针变量 p 中的内容相同 C. s 数组长度和 p 所指向的字符串长度相等 D. *p 与是 s相等 ( 5) 若有说明; int *p,m=5,n;以下正确的程序段是( D) A.p= B. p=scanf(“%d”,*p); C.scanf(“%d”, *p=n; D.p= (6)若有语句 int *point,a=4;和 point=下面均代表地址的一组选项是( D) A.a,point,*int *ptr1,*ptr2;且 prt1 和 ptr2 均指向变量 k,下面
20、不能正确执行赋值语句的是( C) A.k=*ptr1+*ptr2; B.ptr2=k; C.ptr1=ptr2; D.k=*ptr1*(*ptr2); ( 9)若有说明: int i,j=2,*p=则能完成 i=j 赋值成功的语句是( B) A.i=*p ; B.*p=* C.i= D.i=*p; ( 10)若有定义: int a8;则以下表达式中不能代表数组元素 a1的地址的是( A) A. A. x+ B.下列程序段中正确的是( C) A. char a11,*p;strcpy(p=a+1, B. char a11,strcpy(+a,st); C. char a11;strcpy(a,s
21、t); D. char a,*p;strcpy(p=a1,st+2); ( 13)下面程序段的运行结果是( C) char s=”abcdefgh”,*p=s; p+=3; printf(“%dn”,strlen(strcpy(p,”ABCD”); A.8 B.12 C.4 D.7 ( 14) 下面程序段中, for 循环的执行次数是( C) char *s=”ta018bc”; for(;*s!=0;s+) printf(“*”); A.9 B.5 C.6 D.7 ( 15) 以下程序的输出结果是( D) void main() char *p=”abcdefgh”,*r; long *q;
22、 q=(long*)p; q+; r=(char*)q; printf(“%sn”,r); A.bcdefgh B.cdefgh C.defgh D.efgh ( 16)设有语句 int array34;,则下面几种引用下标 i 和 j 的数组元素的方法中不正确的方法是( C) A.arrayij B.*(*(array+i)+j) C.*(arrayi+j) D.*(array+i*4+j) ( 17)一下程序的运行结果是( B) void sub(int x,int y,int *z) *z=y-x; void main() Int a,b,c; sub(10,5; sub(7,a; sub(a,b; printf(“%d,%d,%dn”,a,b,c); A.5,2,3 B.-5,-12,-7 C.-5,-12,-17 D.5,-2,-7 ( 18)在说明语句 int *f();中,标识符 f 代表的是( A) A.一个用于指向整型数据的变量 B一个用于指向一维数组的行指针