C期末考试复习题.docx
(1) int a4=5,3,8,9;其中 a3的值为( D )。 A. 5 B. 3 C. 8 D. 9(2) 以下 4 个数组定义中,(D )是错误的。 A. int a7; B.int n=5; long bn; C. char c5; D. int n,d7;(3) 对字符数组进展初始化,( B )形式是错误。 A. char c1 ='1', '2', '3' B. char c2 =123; C. char c310 = '1', '2', '3', '0' D. char c4 ="123"(5) 在数组中,数组名表示( A. )。 A. 数组第 1 个元素的首地址 2 个元素的首地址 C. 数组所有元素的首地址 1 个元素的首地址(6) 假设有以下数组说明,那么数值最小的和最大的元素下标分别是(B )。 int a12 =1,2,3,4,5,6,7,8,9,10,11,12; A. 1,12 B. 0,11 C. 1,11 D. 0,12 (7) 假设有以下说明,那么数值为 4 的表达式是( D )。 int a12 =1,2,3,4,5,6,7,8,9,10,11,12; char c=a, d=4, g=3 A. ag-c B. a4 C. a'd'-'c' D. a'd'-c (8) 设有定义:char s12 = "string" 那么printf( "%dn",strlen(s); 的输出是( A )。 A. 6 B. 7 C. 11 D. 12(9) 设有定义:char s12 = "string" 那么printf("%dn ", sizeof(s); 的输出是( D)。 A. 6 B. 7 C. 11 D. 12(10) 合法的数组定义是( A)。 A. char a = "string " B. int a5 =0,1,2,3,4,5; C. char a= "string " D. char a =0,1,2,3,4,5(11) 下面的程序中哪一行有错误( D )。 #include <stdio.h> main() float array5=0.0; /第A行 int i; for(i=0;i<5;i+) scanf("%f",&arrayi); for(i=1;i<5;i+) array0=array0+arrayi;/第B行 printf("%fn",array0); /第C行 A. 第A行 B. 第B行 C. 第C行 D. 没有(12) 下面哪一项为哪一项不正确的字符串赋值或赋初值的方式( C )。 C A. char *str; str="string" B. char str7='s','t','r','i','n','g' C. char str110;str1="string" D. char str1="string",str2="12345678"(13) 假设有以下说明和语句,那么输出结果是哪一项( C )。 (strlen(s)为求字符串s的长度的函数) char s12="a book!" printf("%d",strlen(s); A. 12 B. 8 C. 7 D. 11(14) 假设有以下说明和语句,那么输出结果是( C )。char str=""c:abc.dat"" printf("%s",str); A. 字符串中有非法字符 B. "c:abc.dat" C. "c:abc.dat" D. "c:abc.dat" (15)假设有以下语句,那么下面 是正确的描述。char x="123456" char y='1', '2','3','4','5','6' (B )A. x数组与y数组长度一样。 B. x数组长度大于y数组长度。 C. x数组长度小于y数组长度。 D. x数组和y数组的赋值是非法的。(16)在C 语言中,引用数组元素时,其数组下标的数据类型允许是。C A整型常量B整型表达式C整型常量或整型表达式D任何类型的表达式(17)以下对一维整型数组a 的正确说明是。 DAinta(10);Bint n=10,an;Cint n;D#define SIZE 10scanf(“%d,&n);int aSIZE;int an;(18)假设有说明:int a10;那么对a 数组元素的正确引用是。 C Aa10 Ba3.5 Ca(5) Da10-10(19)在C 语言中,一维数组的定义方式为:类型说明符数组名; (C) A整型常量表达式 B整型表达式C整型常量 或整型表达式 D常量(20)以下能对一维数组a 进展正确初始化的语句是。 ( C)Aint a10=(0,0,0,0,0); Bint a10=;Cint a=0; Dint a10=10*1;(21)下面程序如果只有一个错误,那么是每行程序前面的数字表示行号 。(A)1 main()2 3 float a3=3*0;4 int i;5 for(i=0;i<3;i+) scanf(“%d,&ai);6for(i=1;i<3;i+) a0=a0+ai;7 printf(“%dn,a0);8 A第3 行有错误B第7 行有错误C第5 行有错误D没有错误(22)下面程序中有错误9*/的行是每行程序前面的数字表示行号。(D)1 main()2 3 float a3=1;4 int i;5 scanf(“%d,&a);6 for(i=1;i<3;i+) a0=a0+ai;7printf(“a0=%dn,a0);8 A3 B6 C7 D5(23)下面程序每行程序前面的数字表示行号。 (D)1 main()2 3float a3=0;4 int i;5 for(i=0;i<3;i+) scanf(“%f,&ai);6 for(i=1;i<4;i+) a0=a0+ai;7 printf(“%fn,a0);8 A没有错误B第3 行有错误C第5 行有错误D第6 行有错误(24)对以下说明语句的正确理解是。 (B)int a10=6,7,8,9,10;A将5 个初值依次赋给a1至a5B将5 个初值依次赋给a0至a4C将5 个初值依次赋给a6至a10D因为数组长度与初值的个数不一样,所以此语句不正确1.变量的指针,其含义是指该变量的_B_. a)值 b)地址 c)名 d)一个标志2假设有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是_D_. a)a,point,*&a b)&*a,&a,*point c)*&point,*point,&a d)&a,&*point ,point3假设有说明;int *p,m=5,n;以下正确的程序段的是_D_.a)p=&n; b)p=&n;scanf("%d",&p); scanf("%d",*p);c)scanf("%d",&n); d)p=&n; *p=n; *p=m;4. 以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是_B_. main()int *p,*q,a,b;p=&a;printf(“input a:);scanf(“%d,*p);a)*p表示的是指针变量p的地址b)*p表示的是变量a的值,而不是变量a的地址c)*p表示的是指针变量p的值d)*p只能用来说明p是一个指针变量5. 已有变量定义和函数调用语句:int a=25; print_value(&a); 下面函数的正确输出结果是_D_. voidprint_value(int *x) printf(“%dn,+*x);a)23b)24 c)25 d)266.假设有说明:long *p,a;那么不能通过scanf语句正确给输入项读入数据的程序段是A A) *p=&a;scanf("%ld",p); B) p=(long *)malloc(8);scanf("%ld",p); C) scanf("%ld",p=&a); D) scanf("%ld",&a);7.有以下程序B #include<stdio.h> main() int m=1,n=2,*p=&m,*q=&n,*r; r=p;p=q;q=r;printf("%d,%d,%d,%dn",m,n,*p,*q);程序运行后的输出结果是A1,2,1,2 B1,2,2,1C2,1,2,1 D2,1,1,28.有以下程序 Cmain() int a=1, b=3, c=5;int *p1=&a, *p2=&b, *p=&c; *p =*p1*(*p2);printf("%dn",c);执行后的输出结果是A1B2C3D49.有以下程序 main() inta,k=4,m=4,*p1=&k,*p2=&m;a=p1=&m;printf("%dn",a);程序运行后的输出结果是CA4B1C0 D运行时出错,无定值10.在16位编译系统上,假设有定义int a=10,20,30, *p=&a;,当执行p+;后,以下说法错误的选项是A Ap向高地址移了一个字节Bp向高地址移了一个存储单元Cp向高地址移了两个字节Dp与a+1等价11.有以下程序段int a10=1,2,3,4,5,6,7,8,9,10,*p=&a3,b;b=p5;b中的值是C A)5 B)6 C)8 D)912.假设有以下定义,那么对a数组元素的正确引用是_d_. int a5,*p=a; a)*&a5 b)a+2 c)*(p+5) d)*(a+2)13.假设有以下定义,那么p+5表示_A_.int a10,*p=a; a)元素a5的地址 b)元素a5的值 c)元素a6的地址 d)元素a6的值14.设已有定义: int a10=15,12,7,31,47,20,16,28,13,19,*p; 以下语句中正确的选项是B A) for(p=a;a<(p+10);a+); B) for(p=a;p<(a+10);p+); C) for(p=a,a=a+10;p<a;p+);D) for(p=a;a<p+10; +a);15.有以下程序段#include <stdio.h>int main() int x = 10, 20, 30;int *px = x;printf("%d,", +*px); printf("%d,", *px);px = x;printf("%d,", (*px)+); printf("%d,", *px);px = x;printf("%d,", *px+); printf("%d,", *px);px = x;printf("%d,", *+px); printf("%dn", *px); return 0;程序运行后的输出结果是(A )A11,11,11,12,12,20,20,20 B20,10,11,10,11,10,11,10C11,11,11,12,12,13,20,20 D20,10,11,20,11,12,20,2016.设有如下定义:intarr=6,7,8,9,10;int *ptr;ptr=arr; *(ptr+2)+=2;printf ("%d,%dn",*ptr,*(ptr+2);那么程序段的输出结果为 DA)8,10 B)6,8 C)7,9 D)6,1017.假设有定义:int a=2,4,6,8,10,12,*p=a;那么*(p+1)的值是_. *(a+5)的值是_A_.A)4 12 B)4 10 C)2 8 D)5 1721.有以下定义 char a10,*b=a;不能给数组a输入字符串的语句是BA)gets(a) B)gets(a0) C)gets(&a0); D)gets(b);22.下面程序段的运行结果是_C_. char *s="abcde" s+=2;printf("%d",s); a)cde b)字符'c' c)字符'c'的地址 d)无确定的输出结果23.以下程序段中,不能正确赋字符串编译时系统会提示错误的是CA) char s10="abcdefg" B) char t="abcdefg",*s=t;C) char s10;s="abcdefg" D) char s10;strcpy(s,"abcdefg");24.设已有定义: char *st="how are you" 以下程序段中正确的选项是A A) char a11, *p; strcpy(p=a+1,&st4); B) char a11; strcpy(+a, st); C) char a11; strcpy(a, st);D) char a, *p; strcpy(p=&a1,st+2);25.有以下程序 main()char a="programming",b="language"char *p1,*p2;int i;p1=a;p2=b;for(i=0;i<7;i+)if(*(p1+i)=*(p2+i)printf("%c",*(p1+i);输出结果是D A)gm B)rg C)or D)ga26设p1和p2是指向同一个字符串的指针变量,c为字符变量,那么以下不能正确执行的赋值语句是_B_. a)c=*p1+*p2; b)p2=c c)p1=p2 d)c=*p1*(*p2);27以下正确的程序段是_C_. a)char str20; b)char *p;scanf("%s",&str); scanf("%s",p); c)char str20; d)char str20,*p=str;scanf("%s",&str2); scanf("%s",p2);28假设有说明语句 char a="It is mine" char *p="It is mine"那么以下不正确的表达是_D_. a)a+1表示的是字符t的地址 b)p指向另外的字符串时,字符串的长度不受限制 c)p变量中存放的地址值可以改变 d)a中只能存放10个字符29下面程序的运行结果是_B_. #include <stdio.h> #include <string.h> main() char *s1="AbDeG" char *s2="AbdEg" s1+=2;s2+=2;printf("%dn",strcmp(s1,s2); a)正数 b)负数 c)零 d)不确定的值30.有以下程序 void f(int *x,int *y) int t; t=*x;*x=*y;*y=t; main() int a8=1,2,3,4,5,6,7,8,i,*p,*q; p=a;q=&a7; while(*p!=*q)f(p,q);p+;q-; for(i=0;i<8;i+) printf("%d,",ai); 程序运行后的输出结果是_C_。A8,2,3,4,5,6,7,1, B5,6,7,8,1,2,3,4, C1,2,3,4,5,6,7,8, D8,7,6,5,4,3,2,1,31. 已定义以下函数 C fun int *p return *p; 该函数的返回值是 A不确定的值 B形参p中存放的值 C形参p所指存储单元中的值 D形参p的地址值33.假设有以下函数首部 int fun(double x10, int *n)那么下面针对此函数的函数声明语句中正确的选项是DAint fun(double x, int *n);Bint fun(double , int );Cint fun(double *x, int n);Dint fun(double *, int *);34.有以下程序Avoid sum(int *a) a0=a1;main( ) intaa10=1,2,3,4,5,6,7,8,9,10,i;for(i=2;i>=0;i-) sum(&aai);printf("%dn",aa0); 执行后的输出结果是A)4 B)3 C)2 D)135.下段代码的运行结果是:Dint main()char a;char *str=&a;strcpy(str,"hello");printf(str);return 0;A)hello B)null C)h D)发生异常36.下段程序的运行结果是:Bvoid main()char *p,*q;char str="Hello,Worldn"q = p = str;p+;print(q);print(p);void print(char *s)printf(“%s,s);A)H e B)Hello,World ello,WorldC)Hello,World Hello,World D)ello,World ell,World37.有以下程序void fun(char *c,int d)*c=*c+1;d=d+1;printf("%c,%c,",*c,d);void main()char a='A',b='a'fun(&b,a); printf("%c,%cn",a,b);程序运行后的输出结果是_D_。A) B,a,B,aB) a,B,a,BC) A,b,A,bD) b,B,A,b38、下面选项属于函数指针的是:DA、(int*)p(int, int) B、int *p(int, int) C、两者都是 D、两者都不是39、假设有函数max(a,b),并且已使函数指针变量p指向函数max,当调用该函数时,正确的调用方法是_C_.A)(*p)max(a,b); B)*pmax(a,b);C) (*p)(a,b); D) *p(a,b);41、以下选项中声明了一个指针数组的是:EA)int *p2; B)int (*p)2; C)typedefint* intPtr;intPtr p2;D)A和BE)A和CF)B和C42、下面代码能通过编译的是:AA)int main()int a3=1,2,3;int *b3=&a1,&a2,&a3;int *p = b;return 0;B)int main()int a3=1,2,3;int *b3=a1,a2,a3;int *p = b;return 0;C)int main()int a3=1,2,3;int *b3=&a1,&a2,&a3;int *p = b; return 0;D)int main()int a3=1,2,3;int *b3=&a1,&a2,&a3;int *p = &b;return 0;2当定义一个构造体变量时,系统为它分配的内存空间是【】 A构造中一个成员所需的内存容量B构造中第一个成员所需的内存容量C构造体中占内存容量最大者所需的容量D构造中各成员所需内存容量之和4定义以下构造体数组cstruct c int x;int y; s2=1,3,2,7;语句printf("%d",s0.x*s1.x)的输出结果为 【 】 A) 14 B) 6 C) 2D) 215运行以下程序段,输出结果是 【a 】 struct country intnum; char name10; x5=1,"China",2,"USA",3,"France",4, "England",5, "Spanish"struct country *p; p=x+2;printf("%d,%c",p->num,(*p).name2);A) 3,a B) 4,g C) 2,U D) 5,S6下面程序的运行结果是【c 】。structKeyWordchar Key20;int ID;kw="void",1,"char",2,"int",3,"float",4,"double",5;main()printf("%c,%dn",kw3.Key0, kw3.ID);A) i,3B) n,3C) f,4D) l,48如果有下面的定义和赋值,那么使用【 】不可以输出n中data的值。astructSNodeunsigned id;int data;n,*p;p=&n;A) p.dataB) n.dataC) p->dataD) (*p).data9.根据下面的定义,能输出Mary的语句是B【】。struct person char name9;int age;structperson class5="John",17,"Paul",19,"Mary",18,"Adam",16;A) printf("%sn",class1.name); B) printf("%sn",class2.name);C) printf("%sn",class3.name); D) printf("%sn",class0.name); Astruct date int year;int month;int day; ;struct s struct date birthday; char name20; x4=2021, 10, 1, "guangzhou", 2021, 12, 25, "Tianjin"语句printf("%s,%d,%d,%d",x0.name,x1.birthday.year); 的输出结果为 【】。A) guangzhou,2021 B) guangzhou,2021 C) Tianjin,2021 D) Tianjin,202111运行以下程序段,输出结果是【D】。struct country intnum; char name20; x5=1,"China",2,"USA",3,"France",4, "England",5, "Spanish"struct country *p; p=x+2;printf("%d,%s",p->num,x0.name);A) 2,FranceB) 3,FranceC) 4,EnglandD) 3, China12定义以下构造体数组Dstruct intnum; char name10; x3=1,"china",2,"USA",3,"England"语句printf("n%d,%s",x1.num,x2.name)的输出结果为【】DA2,USAB3,England C1,chinaD2,England13定义以下构造体数组struct date int year;int month; ;struct s struct date birth; char name20; x4=2021,8,"hangzhou",2021,3,"Tianjin"语句printf("%c,%d",x1.name1,x1.birth.year);的输出结果为【】CAa,2021Bhangzhou,2021Ci,2021DTianjin,202114运行以下程序,输出结果是【B】 structcontryintnum; char name20;x5=1,"China",2,"USA",3,"France",4,"Englan",5,"Spanish"main()int i; for (i=3;i<5;i+)printf("%d%c",xi.num,xi.name0);A3F4E5SB4E5SCF4EDc2U3F4E(4)有以下程序 #include "stdio.h"void WriteStr(char *fn,char *str) FILE *fp; fp=fopen(fn,"W"); fputs(str,fp); fclose(fp);main() WriteStr("t1.dat","start"); WriteStr("t1.dat","end");程序运行后,文件t1.dat中的内容是 B AstartBendCstartendDendrt(5) 有如下程序 #include <stdio.h>main()FILE *fp1; fp1=fopen("f1.txt","aBA) goodabc B) abcd C) abc D) abcgood(6) 有以下程序 #include <stdio.h>main( ) FILE *fp; inti,k=0,n=0; fp=fopen(“d1.dat,w); for(i=1;i<4;i+) fprintf(fp,%d,i); fclose(fp); fp=fopen(“d1.dat,r); fscanf(fp,%d%d,&k,&n); printf(“%d %dn,k,n); fclose(fp);执行后输出结果是BA) 1 2 B) 123 0 C) 1 23 D) 0 0