C语言的问题,以下高中复合函数零点问题中(*p)[5]是什么意思,为什么写成*p就是错误的,请大神帮忙解答

当前位置: >>
c语言所有题库里的题目
一、单选题 1、有以下程序 #define N 20 fun(int a[],int n,int m) { int i,j; for(i=m;i&=n;i--) a[i+1]=a[i]; } main() { int i,a[N]={1,2,3,4,5,6,7,8,9,10}; fun(a,2,9); for(i=0;i&5;i++) printf(&%d&
,a[i]); } 程序运行后的输出结果是______。A:10234B:12344C:12334D:12234答案:C 评析: 本题考查的是循环的嵌套。 本题函数fun的作用是将指定的数组元素(从下标n到下标m)向后移一位。由函数调用&fun(a,2,9);&可知,函数 fun用于将a[2]到a[9]的各元素依次向后移一位, 移完后, a数组中各元素的值分别为1,2,3,3,4,5,6,7,8,9,10, 故输出的前5个数组元素为12334。 故本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:没有定义 2、有以下程序 #define P 3 void F(int x){return(P*x*x);} main() {printf(&%d\n&,F(3+5));} 程序运行后的输出结果是______。A:192B:291 C:25D:编译出错答案:D 评析: 本题考查的是宏定义。 return语句用于从被调函数带回一个函数值。void关键字表示&无类型&,即不需要从被调函数中带回函数值, 所以不需要return语句,故编译时出错。 故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数的类型和返回值、宏定义3、有以下程序 int fun1(double a){return a*=a;} int fun2(double x,double y) { double a=0,b=0; a=fun1(x);b=fun1(y); return(int)(a+b); } main() {w=fun2(1.1,2.0);……} 程序执行后变量w中的值是______。A:5.21B:5C:5.0D:0.0答案:C 评析: 本题考查的是数值类型的定义与强制转换。 本题在进行调用函数fun2()时, 又对函数fun1()进行了调用, 由于函数fun1()定义为整型, 所以第一次调用fun1() 时返回的值为1,然后再将1赋值给a,此时由于a为double型,则系统自动类型转换,将1转换成了1.000000赋值 给了变量a,以此类推,得b的值为4.000000,然后通过&return(int)(a+b);&将a+b的值强制转换为int型5返回 给主函数,此时又由w的类型为double,所以返回的整型值5又被转换为double型。故输出结果为5.0。 故本题答案为C。2 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数、不同类型数据间的转换与运算4、若有以下函数首部 int fun(double x[10], int *n) 则下面针对此函数的函数声明语句中正确的是______。A:intfun(double x, int *n);B:intfun(double, int );C:intfun(double *x, int n);D:intfun(double *, int *);答案:D 评析: 本题考查的是函数的声明。 函数声明可以照写已定义的函数的首部,再加一个分号就成为了对函数的声明,在函数声明中也可以不写形参 名,而只写形参的类型,但要保证与函数首部写法上的一致,即函数类型、函数名、参数个数、参数类型和参 数顺序相同。字符数组可用指针来表示,所以选项D正确。 故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数的定义方法、指针5、有以下程序 void f(int n,int *r) { int r1=0; if(n%3==0) r1=n/3; else if(n%5==0) r1=n/5; else f(--n,&r1); *r=r1; } main() { int m=7,r; f(m,&r); printf(&%d\n&,r); } 程序运行后的输出结果是______。A:23 B:1C:3D:0答案:A 评析: 本题考查的是指针作为函数的参数和函数的调用。 题目中定义了一个指针变量r作为形参的f()函数。在主函数main()中定义了两个变量m和r,同时给m赋初值7, 执行&f(m,&r);&语句,调用f()函数并将m的初值7传递给形参n,将r的地址传给形参指针变量r。f()函数中通过 指针r将最后的值返回。首先执行if语句中的条件:n%3==0,7%3=1条件为假,执行第一个else下的语句,同样 不满足条件,再执行第二个else下的语句,n自行减一,n=6,再执行if语句,满足条件,r1=2,把r1的值2赋给 指针变量r所指向的存储单元,即为主函数r的值,输出结果为2。 故本题答案选A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/用指针作函数参数6、有以下程序 #include &stdio.h& #include &string.h& void fun( char s[][10],int n) { int i,j; for(i=0;i&n-1;i++) for(j=i+1;j&n;j++) /* 比较字符串的首字符大小,并交换字符串的首字符 */ if(s[i][0]&s[j][0]) {t=s[i][0];s[i][0]=s[j][0];s[j][0]=t;} } main() { char ss[5][10]={&bcc&,&bbcc&,&xy&,&aaaacc&,&aabcc&}; fun(ss,5); printf(&%s,%s\n&,ss[0],ss[4]); } 程序的运行结果是______。A:xy,aaaaccB:aaaacc,xyC:xcc,aabccD:acc,xabcc4 答案:D 评析: 本题的考查点是循环嵌套。 函数fun的功能是对数组中的每个字符串的第一个字符按由小到大的顺序排序, 最终输出数组的第一个和第五个 的字符串。比较各字符串的首字符可知,字符'a'最小,字符'x'最大,所以输出的ss[0]的值为acc,ss[4]的值 为xabcc。 故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/循环的嵌套7、有以下程序 void f(int *x,int *y) { t=*x;*x=*y;*y=t; } main() { int a[8]={1,2,3,4,5,6,7,8},i,*p,*q; p=a;q=&a[7]; while(p&q) {f(p,q);p++;q--;} for(i=0;i&8;i++) printf(&%d,&,a[i]); } 程序运行后的输出结果是______。A:8,2,3,4,5,6,7,1,B:5,6,7,8,1,2,3,4,C:1,2,3,4,5,6,7,8,D:8,7,6,5,4,3,2,1,答案:D 评析: 本题考查的是函数的调用。 本程序中函数f的作用是交换指针变量x和y所指向的存储单元的值。 在主函数中, 能过&p=a;q=&a[7];&将指针变 量p指向了数组的第一个元素, 指针变量q指向了数组的最后一个元素。 通过&f(p,q)&调用函数f进行对称的数组 元素的交换。当while循环4次(即p=q)后,a数组中各元素的值分别为,所以程序输出的结果为 8,7,6,5,4,3,2,1,。 故本题答案为D。 等级:1 难度:1 区分度:15 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数的正确调用,嵌套调用,递归调用8、已定义以下函数 fun(char *p2, char *p1) {while((*p2=*p1)!='\0'){p1++;p2++;} } 函数的功能是______。A:将p1所指字符串复制到p2所指内存空间B:将p1所指字符串的地址赋给指针p2C:对p1和p2两个指针所指字符串进行比较D:检查p1和p2两个指针所指字符串中是否有'\0'答案:A 评析: 本题的考查点是函数。 while((*p2=*p1)!='\0'表示将p1所指向的值赋给*p2,即将p1所指字符串复制到p2所指内存空间。在这里 &*P2=*p1&是赋值操作,而不是比较是否相等,比较应当为双等号&==&。所以B,C,D都不对。 故本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:没有定义9、以下程序中函数f的功能是将n个字符串,按由大到小的顺序进行排序。 #include &string.h& void f(char p[][10],int n) { char t[20]; int i,j; for(i=0;i&n-1;i++) for (j=i+1;j&n;j++) if(strcmp(p[i],p[j])&0) { strcpy(t,p[i]);strcpy(p[i],p[j]);strcpy(p[j],t);} } main() { char p[][10]={&abc&,&aabdfg&,&abbd&,&dcdbe&,&cd&}; f(p,5); printf(&%d\n&,strlen(p[0])); } 程序运行后的输出结果是______。A:66 B:4C:5D:3答案:C 评析: 本题的考查点是比较字符串的大小。 比较字符串的大小是从字符串的第一个字母开始比较,如果第一个字母相同则比较第二个字母,以此类推,直 至字符串结束,结合本题可知,比较后的字符串数组为: p[0]=&dcdbe& p[1]=&cd& p[2]=&abc& p[3]=&abbd& p[4]=&aabdfg& 所以,strlen(p[0])=5。 故本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构10、以下程序中的函数reverse的功能是将a所指数组中的内容进行逆置。 void reverse(int a[],int n) { int i,t; for(i=0;i&n/2;i++) {t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;} } main() { int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0; reverse(b,8); for(i=6;i&10;i++) s+=b[i]; printf(&%d\n&,s); } 程序运行后的输出结果是______。A:22B:10C:34D:307 答案:A 评析: 本题的考查点是对数组的操作。 本题并不是将整个数组中的内容逆置,而是逆置前8个元素。逆置后的数组为:8,7,6,5,4,3,2,1,9, 10。通过for循环计算b[6]+b[7]+b[8]+b[9]即2+1+9+10=22。 故本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/数组、函数、FOR循环结构11、有以下程序 void ss(char *s,char t) { while(*s) { if(*s==t) *s=t-'a'+'A'; s++; } } main() { char str1[100]=&abcddfefdbd&,c='d'; ss(str1,c); printf(&%s\n&,str1); } 程序运行后的输出结果是______。A:ABCDDEFEDBDB:abcDDfefDbDC:abcAAfefAbAD:Abcddfefdbd答案:B 评析: 本题的考查点是将字符串中指定的小写字母转换为大写字母。 在主函数中,因为c被赋值为字符'd',所以函数的功能是将字符串中d字母转换为大写。 故本题答案为B。 等级:3 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数、WHILE和DO WHILE循环结构8 12、以下程序的输出结果是______。 char cchar(char ch) { if(ch&='A'&&ch&='Z') ch=ch-'A'+'a'; } main() { char s[]=&ABC+abc=defDEF&,*p=s; while(*p) { *p=cchar(*p); p++; } printf(&%s\n&,s); }A:abc+ABC=DEFdefB:abc+abc=defdefC:abcABCDEFdefD:abcabcdefdef答案:B 评析: 本题中cchar函数的作用是: 如果参数ch是大写字母, 则将它转换成小写的, 而对大写字母以外的字符不起作用。 所以答案应该是B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数的正确调用,循环、指针13、设有以下函数; f(int a) { int b=0; static int c=3; b++;c++; return(a+b+c); } 如果在下面的程序中调用该函数,则输出结果是______。 main() { int a=2, for(i=0;i&3;i++) printf(&%d\n&,f(a)); } A) B) C) D) 7 7 7 7 8 9 10 7 9 11 13 79 A:A)B:B)C:C)D:D)答案:A 评析: 本题考查的是C语言的静态数据类型。 静态数据类型的变量的值在退出了函数时依然存放在内存中, 且只初始化 一次。 本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:没有定义14、下列程序的运行结果是______。 void fun(int *a,int *b) { int *k; k=a;a=b;b=k; } main() { int a=3,b=6,*x=&a,*y=&b; fun(x,y); printf(&%d %d&,a,b); }A:6 3B:3 6C:编译出错D:0 0答案:B 评析: 本题中主函数里的x、y,fun函数里的a,b,k,这些都是指针,fun函数中只是将a,b这两个指针交换了位置,10 而并没有改变主函数中变量a,b的值。 本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:没有定义15、有以下程序 main() { int a[][3]={{1,2,3},{4,5,0}},(*pa)[3],i; pa=a; for(i=0;i&3;i++) if(i&2) pa[1][i]=pa[1][i]-1; else pa[1][i]=1; printf(&%d\n&,a[0][1]+a[1][1]+a[1][2]); } 执行后输出结果是______。A:7B:6C:8D:无确定值答案:A 评析: 本题的考查点是二维数组和指针数组的应用。 在所给的程序中,pa指向二维数组首地址a,接着执行下面的for循环,当i=0或i=1时,数组元素 pa[1][i]的值 减1,当 i=2时,数组元素pa[1][i]的值为1,此时得到新的二维数组a[][3]={{1,2,3},{3,4,1}},最终打印结 果就是2+4+1=7。 故本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构、2级指针16、有以下程序 main() {char str[][10]={&China&,&Beijing&},*p= printf(&%s\n&,p+10); }11 程序运行后的输出结果是______。A:China B:Bejing C:ng D:ing答案:B 评析: 此题考的是指向数组元素的指针变量。 本题首先要知道,C语言中二维数组元素排列的顺序是按行存放,即在内存中先顺序存放第一行的元素,再存放 第二行的元素。此题二维数组str[0]前5个元素为''C','h','i','n','a','\0',第6个元素为'\0',后4 个元素为空字符。紧接着内存单元存放的内容即从str[1][0]到str[1][9]为'B','e','i','j','i','n', 'g','\0',第八个元素为'\0',后两个元素为空字符,执行*p=str后,指针p就指向了二维数组str的首地址, 所以p+10就指向了从首地址依次向后的第11个存储单元即字符B的地址,所以输出Beijing,故答案为B。如果此 题将*p=str改为(*p)[10]=则p+10指的就是str的第10行,如果此时要想输出Beijing,则必需将p+10改为 p+1, 因为(*p)[10]中的p是行指针, 它是指向包含10个元素的一维数组, 那么p+1就是加的一行了; 而本题的p+1 只是移动一个位置,因为此题的p只是一个指针变量。 故本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/指向数组元素的指针变量17、有以下程序段 int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b; b=p[5]; b中的值是______。A:5B:6C:8D:9答案:D 评析: int *p中p为指向整型数据的指针变量,*p为指针变量p所指向的变量。指针变量中只能存放地址(指针),本 题中p存放的是a[3]的地址,即p指向数组{4,5,6,7,8,9,10},b=p[5]=9。12 故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:没有定义18、若有以下说明和语句 int c[4][5],(*p)[5]; p=c; 能够正确引用c数组元素的是______。A:p+1B:*(p+3)C:*(p+1)+3D:*(p[0]+2)答案:D 评析: 本题考查的是数组元素的引用。 如果定义一个指针指向二维数组的一行,则可以移动到下一行,这就是行指针。行指针的定义格式为:[存储类 型] 数据类型(*指针)[n] 这里的n是一个整数,表示所指向的二维数组的列数。(*p)[5]中p是指向一个包含5 个元素的一维数组,p的值就是该一维数组的首地址。所以当用行指针访问二维数组时,行指针每增加1,就移 动一行,即指向二维数组的下一行,例如此题中的p+i将指向数组的第i行。即选项A所指的意思是指向数组c的 第1行,并不是引用c数组的元素;B答案中p+3是指向数组元素的第3行,*(p+3)是指第三行第零个元素的地址; 选项C由对选项A,选项B的解释可知,它指的是第一行第3列元素的地址;选项D中p[0]+2是指第0行第2列元素的 地址,再加个*就表示第0行第2列的元素,即c[0][2]。 故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:没有定义19、若要用下面的程序片段使指针变量p指向一个存储整型变量的动态存储单元 int *p; p= ______ malloc(sizeof(int) ); 则应填入______。A:intB:int *13 C:(*int)D:(int*)答案:D 评析: 本题的考查点是强制类型转换。 不论p是指向什么类型的指针变量,都可以通过强制类型转换的方法使之类型一致,强制类型转换的格式为(数 据类型 *)。 故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/不同类型数据间的转换与运算、指针20、若有以下说明和语句,请选出哪个是对c数组元素的正确引用______。 int c[4][5],(*cp)[5]; cp=c;A:cp+1B:*(cp+3)C:*(cp+1)+3D:*(*cp+2)答案:D 评析: 本题的考查点是数组元素的引用。 cp=c这个语句是将数组c的首地址赋给了指针数组cp的第一个数组元素。 选项A,cp+1是指将数组c的首地址加1,不是对数组元素的引用; 选项B,*(cp+3)是地址等于数组c的首地址加3的那个内存单元的内容,不是对数组元素的引用; 选项C,*(cp+1)+3是地址等于数组c的首地址加1的那个内存单元中存放的值加3,不是对数组元素的引用。 故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:没有定义14 21、设有以下语句,其中不是对a数组元素的正确引用的是:______(其中0≤i&10) int a[10]={0,1,2,3,4,5,6,7,8,9,},*p=a;A:a[p-a]B:*(&a[i])C:p[i]D:*(*(a+i) )答案:D 评析: 本题的考查点是通过指针引用数组元素。 观察程序可知,a实际上就是数组a的首地址,所以&*(a+i)&表示的就是数组a中的第i个元素的值,进而,我们 可以知道 *(*(a+i) ) 必然不是对a数组元素的正确引用。 故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:没有定义22、下面程序 main() { int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; printf(&%d\n&,*(p+2) ); } 的输出是______。A:3B:4C:1D:2答案:A 评析: 本题的考查点是通过指针引用数组元素。15 *p=a语句是使指针p指向数组a的第一个数组元素,因此*(p+2)即是数组a的第3个元素的值,即a[2]。 故本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:没有定义23、下面程序 void prtv(int *x) { printf(&%d\n&,++*x); } main() { int a=25; prtv(&a); } 的输出是______。A:23B:24C:25D:26答案:D 评析: 本题的考查点是指针变量作为函数参数。 观察程序,可以发现,函数prtv()的作用是将地址等于x的内存单元中值加1,因为我们在主函数中是将变量a 的地址作为实参传递给了prtv()函数,所以,函数prtv()将地址等于变量a的地址的那个内存单元中值加一,打 印结果自然就是25+1=26了。 故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:没有定义24、下面函数 int fun1(char*x) { char *y=x; while(*y++); return(y-x-1); } 的功能是______。16 A:求字符串的长度B:比较两个字符串的大小C:将字符串x复制到字符串yD:将字符串x连接到字符串y后面答案:A 评析: 本题的考查点是while()循环语句。 这个函数的功能是求字符串的长度,需要注意的是,在返回长度时一定记住要减一,否则计算出的串长度将会 多一。 故本题答案是A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/WHILE和DO WHILE循环结构25、以下程序的输出结果是______。 main() { char *s=&&; int v[4]={0,0,0,0},k,i; for (k=0;s[k];k++) { switch(s[k]) { case '1':i=0; case '2':i=1; case '3':i=2; case '4':i=3; } v[i]++; } for(k=0; k&4;k++) printf(&%d &,v[k]); }A:42 11B:00 08C:46 78D:88 8817 答案:B 评析: 本题的考查点是switch语句的应用。 在每次执行switch后面括号内的表达式s[k]时,要先取当前s[k]的值与case后的字符常量进行比较,找到与之 匹配的分支后,即转去执行该分支中的语句。switch语句中,某分支执行完毕,若未遇到break语句,则接着执 行剩余的其它分支,直到遇到break语句。此题中,因为没有break语句,所以总会执行到i=3,即总是v[3]在递 加。 故本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:没有定义26、有如下程序 #define N 2 #define M N+1 #define NUM 2*M+1 main() { for(i=1;i&=NUM;i++)printf(&%d\n&,i); } 该程序中的for循环执行的次数是______。A:5B:6C:7D:8答案:B 评析: 在C语言中,宏定义在编译时将被直接替换,所以NUM最后会被替换成2*N+1+1,即2*2+1+1,值为6。因此,for 循环执行的次数为6。 本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构、宏定义27、有如下程序 main() {18 int n[5] = {0,0,0},i,k = 2; for(i = 0; i & i++) n[i] = n[i] + 1; printf(&%d\n&,n[k]); } 该程序的输出结果是______。A:不确定的值B:2C:1D:0答案:D 评析: 由代码可知,题中的for循环值执行2次(i = 0和1),所以只对a[0]和a[1]重新赋了值,而a[k]即a[2]的值并 没有变,仍为0。 本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构、数组28、有如下程序 main() { int a[3][3] = {{1,2},{3,4},{5,6}}, i,j,s = 0; for(i = 1; i & 3; i++) for(j = 0; j &= j++) s += a[i][j]]; printf(&%d\n&,s); } 该程序的输出结果是______。A:18B:19C:20D:2119 答案:A 评析: 题中的外循环只执行了2次: 第1次: a[1][0] = 3,a[1][1] = 4,所以s = 7; 第2次: a[2][0] = 5,a[2][1] = 6,a[2][2] = 0,所以s = 7 + 5 + 6 + 0 = 18。 本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/循环的嵌套 数组29、有如下定义 struct person{char name[9];}; struct person class[10] = { &John&,17, &Paul&,19, &Mary&,18, &Adam&,16,}; 根据上述定义,能输出字母M的语句是______。A:printf(&%c\n&,class[3].name);B:printf(&%c\n&,class[3].name[1]);C:printf(&%c\n&,class[2].name[1]);D:printf(&%c\n&,class[2].name[0]);答案:D 评析: 选项A将输出A;选项B将输出d;选项C将输出a;选项D将输出M。 本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:没有定义30、有以下程序 main() { int x[]={1,3,5,7,2,4,6,0},i,j,k; for(i=0;i&3;i++) for (j=2;j&=i;j--) if(x[j+1]&x[j]){ k=x[j];x[j]=x[j+1];x[j+1]=k;} for (i=0;i&3;i++)20 for(j=4;j&7-i;j++) if(x[j]&x[j+1]){ k=x[j];x[j]=x[j+1];x[j+1]=k;} for (i=0;i&8;i++) printf(&%d&,x[i]); printf(&\n&); } 程序运行后的输出结果是______。A:B:C:D:答案:A 评析: 本题考查的是排序算法。 for(i=0;i&3;i++) for (j=2;j&=i;j--) if(x[j+1]&x[j]){ k=x[j];x[j]=x[j+1];x[j+1]=k;} 此段程序的作用是将数组x[0]到x[3]中的数由大到小进行排列,运行此段程序后x[]中的值变为 x[]={7,5,3,1,2,4,6,0} for(i=0;i&3;i++) for(j=4;j&7-i;j++) if(x[j]&x[j+1]){ k=x[j];x[j]=x[j+1];x[j+1]=k;} 此段程序的作用是将数组x[4]到x[7]中的数由小到大进行排列,运行此段程序后x[]中的值变为 x[]={7,5,3,1,0,2,4,6} 最后通过一个循环将X[]中的数依次输出。 故本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/循环的嵌套、数组31、下面程序的输出结果是______。 main() { int a[]={1,2,3,4,5,6,7,8,9,0},*p; p=a; printf(&%d\n&,*p+9); }A:0B:121 C:10D:9答案:C 评析: 本题中,p=a,则表明指针p指向数组a的第一个元素,即a[0]。指针运算符&*&的优先级高于加法运算符&+&,所 以&*p+9&相当于a[0]+9,即10。 本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:没有定义32、以下程序的输出结果是______。 #define SQR(X) X*X main() { int a=16,k=2,m=1; a/=SQR(k+m)/SQR(k+m); printf(&%d\n&,a); }A:16B:2C:9D:1答案:B 评析: 本题所考查的是宏定义。C语言在预编译时遇到带实参的宏名,则按命令行中指定的字符串从左到右进行置换。 在做这条题时,我们也不妨将运用置换法。得到: a/=k+m*k+m/k+m*k+m=16/7=2。 注:a为整形,所以在做除法时,自动取整。 本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/复合语句、宏定义22 33、若定义了以下函数: void f(……) {…… *p=(double*)malloc(10*sizeof(double)); …… } p是该函数的形参,要求通过p把动态分配存储单元的地址传回主调函数,则形参p的正确定义应当是______。A:double *pB:float **pC:double **pD:float *p答案:C 评析: 通过程序中给出的语句,我们可以判断,*p是一个指向double型指针的指针。因此,要通过p把动态分配存储单 元的地址传回主调函数,应该使用double **p。 本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/返回指针值的指针函数34、设有以下函数; f(int a) { int b=0; static int c=3; b++;c++; return(a+b+c); } 如果在下面的程序中调用该函数,则输出结果是______。 main() { int a=2, for(i=0;i&3;i++) printf(&%d\n&,f(a)); } A) B) C) D) 7 7 7 7 8 9 10 7 9 11 13 7A:A)23 B:B)C:C)D:D)答案:A 评析: 本题考查的是C语言的静态数据类型。 静态数据类型的变量的值在退出了函数时依然存放在内存中, 且只初始化 一次。 本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构、函数35、若有说明:int i,j=2,*p=&i;,则能完成i=j赋值功能的语句是______。A:i=*p;B:*p=*&j;C:i=&j;D:i=**p;答案:B 评析: 本题考查C语言中指针赋值运算。指针是一种特殊的变量,它是用来存放变量地址的变量。指针定义时可以为其 赋初值。只有指针被赋了值后才能对其使用。 本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/表达式语句,空语句,复合语句、指针36、以下定义语句中,错误的是______。24 A:int a[]={1,2};B:char *a[3];C:char s[10]=&test&;D:int n=5,a[n];答案:D 评析: 本题考查C语言数组的定义与初始化。 在C语言中数组的初始化可以对部分元素,数组的定义,不能含有变量。 本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/C的数据类型及其定义方法、数组37、以下程序的输出结果是______。 main() { int i,a[10]; for(i=9;i&=0;i--) a[i]=10-i; printf(&%d%d%d&,a[2],a[5],a[8]); }A:258B:741C:852D:369答案:C 评析: 本题使循环语句给数组元素赋值。 C语言中for循环语句的一般形式为: for(表达式1;表达式2;表达式3) { 语句部分; } 本题答案为C。25 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构、数组38、以下程序的输出结果是______。 main() { char st[20]=&hello\0\t\\&; printf(&%d%d\n&,strlen(st),sizeof(st)); }A:99B:520C:1320D:2020答案:B 评析: 本题主要考查C语言的字符串与库函数。 C语言中字符串是以'\0'字符结束的, 且strlen()函数计算的是'\0'字符前的所有字符的个数。 本题中strlen(st) 应为5。数组定义以后系统就为其分配相应大小的内存空间,而不论其中有没有内容。sizeof()函数是计算变量 或数组的所分配到的内存空间的大小。所以本题的sizeof(st)为20。 本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/不同类型数据间的转换与运算39、以下程序输出正确的是______。 amovep(int *p,int (*a)[3],int n) { int i,j; for(i=0;i&n;i++) for(j=0;j&n;j++){ *p=a[i][j];p++; } } main() { int *p,a[3][3]={{1,3,5},{2,4,6}}; p=(int*)malloc(100); amovep(p,a,3); printf(&%d%d\n&,p[2],p[5]);free(p);26 }A:56B:25C:34D:程序错误答案:A 评析: 本题主要考查的是指针与数组的操作。可以用malloc()函数为指针分区内存空间,用free()函数释放指针变量 所用内存空间。 本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构、数组、指针40、以下程序的输出结果是______。 struct HAR { int x,y;struct HAR *p;} h[2]; main() { h[0].x=1;h[0].y=2; h[1].x=3;h[1].y=4; h[0].p=&h[1];h[1].p=h; printf(&%d%d\n&,(h[0].p)-&x,(h[1].p)-&y); }A:12B:23C:14D:32答案:D 评析: 本题考查的是C语言中结构体与链表。本题中是一个含有两个结点的循环链表。27 C语言中结构体的定义为: struct 结构体类型名 { 成员表列; }; 本题答案为D。等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:没有定义41、以下程序的输出结果是______。 union myun { struct { int x,y,z;}u; }a; main(0 { a.u.x=4;a.u.y=5;a.u.z=6; a.k=0; printf(&%d\n&,a.u.x); }A:4B:5C:6D:0答案:D 评析: 本题主要考查C语言中构造类型,联合体与结构体。结构体中的成员使用各自的存储区,而联合体中的成员使用 共同的存储区。 本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:没有定义42、若有说明语言:int a,b,c,*d=&c;则能正确从键盘读入三个整数分别赋给变量a,b,c的语句是______。28 A:scanf(&%d%d%d&,&a,&b,d);B:scanf(&%d%d%d&,&a,&b,&d);C:scanf(&%d%d%d&,a,b,d);D:scanf(&%d%d%d&,a,b,*d);答案:A 评析: 在scanf语句中,要为某一变量赋值,引用的是该变量的地址,所以在这里要为a,b,c 赋值可以写成两种形式, 除了采用答案B的形式外,还可以写成scanf(&%d%d%d&,&a,&b,d)。 本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/表达式语句,空语句,复合语句、指针43、若定义:int a=511,*b=&a:,则printf(&%d\n&,*b):的输出结果为______。A:无确定值B:a的地址C:512D:511答案:D 评析: 本题,首先定义了一个整型变量a,并将它赋值为511,然后又定义了一个指针变量,将它赋值为变量a的地址, 在输出语句中,输出项是*b,而*b=a,所以输出结果应该是511。 本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/数据的输入与输出,指针44、以下程序的输出结果是______。 main()29 {int a=0,i; for(i=1;i&5;i++) { switch(i) {case0: case3:a+=2; case1: case2:a+=3; default:a+=5; } } printf(&%d\n&,a) }A:31B:13C:10D:20答案:A 评析: switch结构的执行过程为:进入switch结构后,对条件表达式进行计算,然后从上至下去找与条件表达式的值 相匹配的case,以此作为入口,执行switch结构中后面的各语句。第一次for循环中,switch结构的条件表达式i 的值是1,则从case 1 开始执行后面的语句,先执行a+=3,a的值变成3,接着执行a+=5,a的值变成了8。然后 进入第二次循环,switch结构条件表达式i的值2,则从case 2开始执行后面的语句,结束第二轮循环时a的值是 16,在第三轮循环中,switch结构条件表达式的值是3,则从case 3后面的语句开始执行,a+=2 语句使a的值变 成了18,然后执行a+=3,和a+=5,第三轮循环结束时,a的值是26。第四轮循环中, switch结构条件表达的值 是4,从default处开始执行,执行一个a+=5的操作,a的值变成了31,i 的值经修改变成了5,不再满足循环条 件,退出循环。 本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/选择结构的嵌套、循环45、以下程序的输出结果是______。 #include &stdio.h& main() { int i=0,a=0; while(i&20) { for(;;) { if((i%10)==0) else i--; } i+=11; a+=i;30 } printf(&%d\n&,a); }A:21B:32C:33D:11答案:B 评析: 本题中,有两个循环语句。首先,i=0,进入while循环,for语句中对循环没有任何条件,故直接进入for循环, 因为0%10结果还是0,所以跳出for循环,执行i+=11,i的值变为11,执行a+=j,a的值变为11;接着进入下一轮 while循环,在for循环中,因为i的值是11,对10取余结果为1,所以执行i自减,i的值变成10,进入又一轮for 循环,因为10%10==0,所以跳出for循环,执行i+=11,i的值变成21,执行a+=i,也就是将21+11的和赋给a,a=32, 因为此时i的值不再小于20,所以结束循环,故输出结果是32。 本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/选择结构的嵌套、循环46、以下程序的输出结果是______。 int f( ) { static int i=0; int s=1; s+=i; i++; } main() { int i,a=0; for(i=0;i&5;i++) a+=f( ); printf(&%d\n&,a); }A:20B:24C:2531 D:15答案:D 评析: 本题主要考的是对变量存储属性的理解,一个变量被指定为静态变量,在编译时就为其分配了存储空间,程序 一开始执行便被建立,直到该程序执行结束都存在,而不像动态变量只存在于函数或分程序被调用期间。在函 数多次被调用的过程中静态局部变量的值具有可继承性。在第一次调用函数结束时,i的值是1,返回值1,第二 次调用函数时,i的值保侍为1,执行自加操作后,i的值变成了2,到了第三次调用时,i的值保持了上次调用结 束时的值,再执行自加,值变成了3。到第五次调用结束时,i的值是5。而s的值不具备i的这种可继承性,每次 调用时,它都先被重新赋值为1,再执行下面的操作。 本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构、函数47、以下程序调用findmax函数返回数组中的最大值。 findmax(int *a,int n) {int *p,*s; for(p=a,s=a; p-a&n; p++) if ( _____ ) s=p; return(*s); } main() {int x[5]={12,21,13,6,18}; printf(&%d\n&,findmax(x,5)): } 在下划线处应填入的是______。A:p&sB:*p&*sC:a[p]&a[s]D:p-a&p-s答案:B 评析: findmax函数求的是数组元素的最大值,首先让指针p,s都指向a[0],由最后的return语句可以知道,最终s代表 数组元素最大值的地址,要实现这个目的,就要让s指针指向的内容与数组元素逐个比较,把较大值的地址放在 s中,而在for循环中,每做一次循环,p指针自加一次,即指针p遍历了整个数组,所以应该在循环语句中,用p 指针指向的内容与s指针指向的内容作比较,并让两者间大值的地址存入s。32 本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构、综合48、以下程序的输出结果是______。 main() { int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1; for(i=0;i&3;i++) for(j=i;j&=i;j++) t=t+b[i][b[j][j]]; printf(&%d\n&,t); }A:3B:4C:1D:9答案:B 评析: 本程序中,有两个循环语句嵌套使用,在第一次外循环中,i=0,执行内循环时,将j赋值为i的值0,执行一次 t=t+b[i][b[j][j]],得到t=1,退出内循环,接着进入第二次外循环,在第二次外循环结束时t=2,然后执行第三 次外循环,得到t=4,退出循环,输出t的值。 本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构、数组49、以下程序的输出结果是______。 #inclue &stdio.h& #inclue &string.h& main() { char b1[8]=&goddwer&,b2[8],*pb=b1+3; while(--pb&=b1) strcpy(b2,pb); printf(&%d\n&,strlen(b2)); }A:833 B:3C:1D:7答案:D 评析: 本题中,每次执行循环,都是将pb指针指向的内容复制到b2中,第一次循环中,将b1[2]~b1[7]六个字符复制到 b2中,第二次循环,将b[1]~b[7]七个字符复制到b2中,第三次循环,将b1数组的全部内容复制到b2中。而后一 次复制会覆盖前面的复制,最后b2的实际长度应该是八,而strlen()函数测出的是一个字符串中&\0&之前的全 部字符的个数,所以最后输出的值是七。 本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/WHILE和DO WHILE循环结构、数组、字符串50、在说明语句:int *f();中,标识符f代表的是______。A:一个用于指向整型数据的指针变量B:一个用于指向一维数组的行指针C:一个用于指向函数的指针变量D:一个返回值为指针型的函数名答案:D 评析: int * f() 表示f是一个函数,它带回一个指针值,这个指针是指向一个整型数据的。 本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/C的数据类型及其定义方法、指针51、以下程序的输出结果是______。 int x=3; main()34 { for(i=1;i&x;i++) incre(); } incre() { static int x=1; x*=x+1; printf(& %d&,x); }A:33B:22C:26D:25答案:C 评析: incre()中定义一个静态局部变量x,它的作用范围仅限于本函数中, 而不会影响main()函数中的x值, 所以main() 中执行两次for循环,第一次调用incre()函数时,函数中x的初值是1,x*=x+1语句可以写成x=x*(x+1),结果x 的值变成2,随后输出值2;在第二次调用incre()函数时,x的值继承了上次调用的运行结果,变成了2,执行了 x*=x+1后,x的值是6,故又输出了数字6。 本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构、函数52、已定义以下函数 fun(int *p) { return *p; } 该函数的返回值是______。A:不确定的值B:形参p中存放的值C:形参p所指存储单元中的值D:形参p的地址值35 答案:C 评析: 本题的考查点是函数的返回值。 本题函数中形参为*p,它是一个指针变量,函数调用后,返回的是p所指向的存储单元里的值。 故本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/返回指针值的指针函数53、以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序。 void sort(int a[],int n) {int i,j,t; for(i=0;i&n-1;i++) for(j=i+1;j&n;j++) if(a[i]&a[j]) {t=a[i];a[i]=a[j];a[j]=t;} } main() {int aa[10]={1,2,3,4,5,6,7,8,9,10},i; sort(&aa[3],5); for(i=0;i&10;i++) printf(&%d,&,aa[i]); printf(&\n&); } 程序运行后的输出结果是______。A:1,2,3,4,5,6,7,8,9,10,B:10,9,8,7,6,5,4,3,2,1,C:1,2,3,8,7,6,5,4,9,10,D:1,2,10,9,8,7,6,5,4,3,答案:C 评析: 本题的考查点是对数组的操作。 本题并不是对数组的所有元素进行排序,而是对从a[3]开始往后的4个元素进行排序。 故本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构、函数、数组54、有以下程序36 int f(int n) {if (n==1) return 1; else return f(n-1)+1; } main() {int i,j=0; for(i=1;i&3;i++) j+=f(i); printf(&%d\n&,j); } 程序运行后的输出结果是______。A:4B:3C:2D:1答案:B 评析: 本题的考查点是函数的递归调用。 j+=f(i)即为j=j+f(i)=f(1)+f(2)=1+(f(1)+1)=3。 故本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构、函数55、设有定义语句 int x[6]={2,4,6,8,5,7},*p=x,i; 要求依次输出x数组6个元素中的值,不能完成此操作的语句是______。A:for(i=0;i&6;i++) printf(&%2d&,*(p++));B:for(i=0;i&6;i++) printf(&%2d&,*(p+i));C:for(i=0;i&6;i++) printf(&%2d&,*p++);D:for(i=0;i&6;i++) printf(&%2d&,(*p)++);答案:D37 评析: 此题考的是指向数组元素的指针。 *p=x的作用是将x的首地址(即x[0]的地址)赋给指针变量p,那么程序段A当i=0时,*(p++)虽然是先执行括号 内的表达式,但括号内表达的++是在p的后面,所以它要先执行p再加,即先取*p(x[0]),再使得p加1,为i=2时 取下一个元素作准备。 选项C中因为*和++是处于同一优先级别,而结合方向为自右而左,因此*p++相当于*(p++),所以选项A和选项C 都是可以输出6个元素的值的。 选项B,p表示x的首地址即x[0]的地址,p+i则表示x[i]的地址,那么*(p+i)就表示x[i]的值,所以选项C也是可 以输出6个元素的值的;选项D由于(*p)++后面的++是使*p的值+1,又因为*p指的是x[0]的值,所以它不能实现 地址的依次向下移动,每次循环只是x[0]的值在改变,而p的值并没有丝毫变化,所以它并不能实现6个元素的 输出。 故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:没有定义56、以下程序中的函数reverse的功能是将a所指数组中的内容进行逆置。 void reverse(int a[],int n) {int i,t; for(i=0;i&n/2;i++) {t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;} } main() {int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0; reverse(b,8); for(i=6;i&10;i++) s+=b[i]; printf(&%d\n&,s); } 程序运行后的输出结果是______。A:22B:10C:34D:30答案:A 评析: 本题的考查点是对数组的操作。 本题并不是将整个数组中的内容逆置,而是逆置前8个元素。逆置后的数组为:8,7,6,5,4,3,2,1,9, 10通过for循环计算b[6]+b[7]+b[8]+b[9]即2+1+9+10=22。 故本题答案为A。38 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构、数组、函数57、有以下程序 struct STU {char num[10]; float score[3]; } main() {struct STU s[3]={{&2,85}, {&2,75}, {&2,90}},*p=s; float sum=0; for(i=0;i&3;i++) sum=sum+p-&score[i]; printf(&%6.2f\n&,sum); } 程序运行后的输出结果是______。A:260.00B:270.00C:280.00D:285.00答案:B 评析: 本题的考查点是结构体数组。 通过for循环计算每个学生的总分,但是最后打印的只是最后一个学生的总分。因为sum定义的是实型变量,所 以最后结果应为实型数据。 故本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构、结构体数组58、以下程序中函数f的功能是将n个字符串,按由大到小的顺序进行排序。 #include &string.h& void f(char p[][10],int n) { char t[20]; int i,j; for(i=0;i&n-1;i++) for (j=i+1;j&n;j++) if(strcmp(p[i],p[j])&0) { strcpy(t,p[i]);strcpy(p[i],p[j]);strcpy(p[j],t);}39 } main() {char p[][10]={&abc&,&aabdfg&,&abbd&,&dcdbe&,&cd&}; f(p,5); printf(&%d\n&,strlen(p[0])); } 程序运行后的输出结果是______。A:6B:4C:5D:3答案:C 评析: 本题的考查点是比较字符串的大小。 比较字符串的大小是从字符串的第一个字母开始比较,如果第一个字母相同则比较第二个字母,以此类推,直 至字符串结束,结合本题可知,比较后的字符串数组为: p[0]=&dcdbe& p[1]=&cd& p[2]=&abc& p[3]=&abbd& p[4]=&aabdfg& 所以,strlen(p[0])=5。 故本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构、函数、数组59、以下叙述正确的是______。A:C语言比其他语言高级B:C语言可以不用编译就能被计算机识别执行C:C语言以接近英语国家的自然语言和数学语言作为语言的表达形式D:C语言比其他高级语言出现的最晚、具有其他语言的一切优点40 答案:C 评析: 本题的考查点是C语言的特点。 C语言主要有如下一些特点: 1,语言简洁、紧凑,使用方便、灵活; 2,运算符丰富; 3,数据结构丰富,具有现代化语言的各种数据结构; 4,具有结构化的控制语句; 5,语法限制不太严格,程序设计自由度大; 6,C语言允许直接访问物理地址,能进行位操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。 7,生成目标代码质量高,程序执行效率高; 8,用C语言写的程序可移植性好。 但是所有的语言都不可能没有任何缺点,C语言也不例外,C语言是高级语言,需要通过编译才能被计算机识别。 本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/程序的构成,MAIN函数和其他函数60、有以下程序 main() { for(i=0;i&3;i++) switch(i) { case 1: printf(&%d&,i); case 2: printf(&%d&,i); default: printf(&%d&,i); } } 执行后输出的结果是______。A:011122B:012C:012020D:120答案:A 评析: 本题的考查点是switch语句。 switch语句在执行时先计算表达式i的值,当表达式i的值与某一个case中的常量表达式的值相等时,就执行该 case后面的语句系列,接着再执行后面各个case中的语句序列,一直到执行完default后面的语句序列,然后结 束switch。 如果所有case中的常量表达式的值都没有与表达式i的值相匹配, 就只执行default后面的语句序列。 break语句与switch语句配合使用,可以强行控制程序流程退出switch。41 由于本题没有与break语句配合使用,因此在执行完&case 1&以后,还要继续执行&case2&和&defult&。 当i=0时,执行defult语句,输出0; 当i=1时,执行case 1语句,输出1,因为没有break控制程序流程退出,所以继续执行下面的语句,输出11,以 此类推。 故本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/选择结构的嵌套、循环61、有以下程序 main() { int p[7]={11,13,14,15,16,17,18},i=0,k=0; while(i&7&&p[i]%2){k=k+p[i]; i++;} printf(&%d\n&,k); } 执行后输出的结果是______。A:58B:56C:45D:24答案:D 评析: 本题的考查点是while循环语句。 while语句是先判断后执行。 i=0时,i&7为真,p[0]%2=11%2=1为真,k=k+p[0]=11; i=1时,i&7为真,p[1]%2=13%2=1为真,k=k+p[1]=11+13=24; i=2时,i&7为真,p[2]%2=14%2=0为假,结束循环。 所以打印输出24。 故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:没有定义62、有以下程序 int *f(int *x,int *y) { if(*x&*y) else42
} main() { int a=7,b=8,*p,*q,*r; p=&a; q=&b; r=f(p,q); printf(&%d,%d,%d\n&,*p,*q,*r); } 执行后输出结果是______。A:7,8,8B:7,8,7C:8,7,7D:8,7,8答案:B 评析: 本题的考查点是指针变量作为函数参数。 f是用户定义的函数,它的作用是返回变量值小的那个。f函数的两个形参x,y是指针变量。程序开始执行时,先 初始化a和b的值,然后将a,b的地址分别赋给指针变量p和q,即使p指向a,q指向b。接着执行f函数,注意p和q 是指针变量,在函数调用开始时,实参变量将它的值传送给形参变量。采取的依然是&值传递&方式。因此虚实 结合后形参x的值为&a,y的值为&b。这时x和p都指向变量a,y和q都指向b。接着执行f函数的函数体,输出*x 和*y小的那个值。 函数调用结束后, x和y不复存在, 最后在main函数中输出的*r的值即为a和b小的那个值, 即7, *p,*q的值未变。 故本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/用IF语句实现选择结构、指针、函数63、有以下程序 main() { int m[][3]={1,4,7,2,5,8,3,6,9}; int i,j,k=2; for(i=0;i&3;i++) { printf(&%d &,m[k][i]); } } 执行后输出结果是______。A:4 5 643 B:2 5 8C:3 6 9D:7 8 9答案:C 评析: 本题的考查点是二维数组的应用。 m[][3]即为定义的一个3行3列的二维数组,因为k=2所以打印的为第二行的数组元素,即m[2][0],m[2][1], m[2][2]。为3 6 9。 故本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/FOR循环结构、循环64、以下叙述中不正确的是______。A:C语言中的文本文件以ASCII码形式存储数据B:C语言中对二进制位的访问速度比文本文件快C:C语言中,随机读写方式不使用于文本文件D:C语言中,顺序读写方式不使用于二进制文件答案:D 评析: 本题主要考查C文件的基本概念。 C语言把文件看作是一个字符(字节)的序列,根据数据组织形式可分为ASCII文件(又称文本文件)和二进制 文件,即一个C文件可以看成是一个字节流或二进制流,对于流式文件,可以进行顺序读写,也可以进行随机读 写,关键在于控制文件的位置指针,由于文本文件要发生字符转换,计算位置时往往会发生混乱,访问速度受 到影响,所以随机读写方式不使用于文本文件。 故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/C语言的风格、C文件的基本概念65、以下叙述中正确的是______。44 A:C程序中注释部分可以出现在程序中任意合适的地方B:花括号&{&和&}&只能作为函数体的定界符C:构成C程序的基本单位是函数,所有函数名都可以由用户命名D:分号是C语句之间的分隔符,不是语句的一部分答案:A 评析: 本题的考查点是C程序设计的初步知识。 选项A,C程序中/*……*/表示注释部分,注释只是给人看的,对编译和运行不起作用,可以加在程序中任何位 置,所以选项A是对的; 选项B,函数体是函数的主体,从左花括号开始,到与之匹配的右花括号结束。 选项C,一个C程序中必须有且只能有一个由&main&命名的主函数,其他函数由用户自行命名。 选项D,C语句是组成C程序的基本单位,具有独立的程序功能。所有的C语句都以分号结尾。 故本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/源程序的书写格式66、以下叙述中正确的是______。A:C语言的源程序不必通过编译就可以直接运行B:C语言中的每条可执行语句最终都将被转换成二进制的机器指令C:C语言程序经编译形成的二进制代码可以直接运行D:C语言中的函数不可以单独进行编译答案:B 评析:1,编辑源文件。根据需要修改输入或修改源程序; 2,编译源程序,编译时先生成一个汇编语言程序,然后由编译程序再将汇编语言程序翻译成机器指令程序,即 目标程序。 3,执行程序。 故本题答案为B。45 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/源程序的书写格式67、有以下程序 main() { for(i=1;i&3;i++) { scanf(&%c&,&k); switch(k) { case '0': printf(&another\n&); case '1': printf(&number\n&); } } } 程序运行时,从键盘输入:01L,程序执行后的输出结果是______。A:another numberB:another number anotherC:another number numberD:number number答案:C 评析: switch语句的一般形式如下: switch(表达式) {case 常量表达式1:语句1; case 常量表达式2:语句2; . . . case 常量表达式n:语句n; default :语句n+1; } switch语句执行完一个case后面的语句后, 流程控制转移到下一个case继续执行。 &case 常量表达式&只是起语 句标号作用,并不是在该处进行条件判断。在执行switch语句时,根据switch后面表达式的值找到匹配的入口 标号,就从此标号开始执行下去,不再进行判断。如果想在执行一个case分支后,使流程跳出switch结构,即46 终止switch语句的执行。可以用一个break语句来达到此目的。本题中没有使用break终止switch语句的执行, 本题当k为0时,执行完case '0'后将继续执行case '1'。 故本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/用SWITCH语句实现多分支选择结构、循环68、以下叙述中正确的是______。A:用C程序实现的算法必须要有输入和输出操作 B :用C程序实现的算法可以没有输出但必须要输入 C :用C程序实现的算法可以没有输入但必须要有输出 D :用C程序实现的算法可以既没有输入也没有输出答案:C 评析: 本题考查的是算法的特性。 算法的特性中包括&有零个或多个输入&及&有一个或多个输出&这两个特性。输入是指执行算法时从外界取得必 要的信息。一个算法可以有两个或多个输入,但也可以没有输入;一个算法得到的结果就是算法的输出,没有 输出的算法是没有意义的,所以一个算法必须至少有一个输出。 故本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/基本知识二、填空题 1、以下程序段的输出结果为______。 char *p;int i,d; p=&PDP1-0&; for(i=0;i&7;i++) { d=isdigit(*(p+i) ); if(d!=0) printf(&%c\n&,*(p+i) ); }答案: 01:1:1评析: 本题的考查点是函数isdigit()。 这段程序的目的是按从左至右的顺序从字符串p中找出阿拉伯数字字符,如果找到,将其打印出来。最后的输出 应当是: 147 0等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/库函数的正确调用 2、以下程序中,主函数调用了LineMax函数,实现在N行M列的二维数组中,找出每一行上的最大值。请填空: #define N 3 #define M 4 void LineMax(int x[N][M]) { int i,j,p; for(i=0;i&N;i++) { p=0; for(j=1;j&M;j++) if(x[i][p]&x[i][j])______; printf(&The max value in line %d is %d\n&,i, a[i][p]); } } main() { int x[N][M]={1,.5,7,4,2,6,4,3,8,2, 3,1}; ______; }答案: 1:1:p=j 2:LineMax(x) 评析: LineMax函数中运用了两个循环,外循环来控制数组的行,内循环控制列,在寻找每行最大的元素时,先把每行 的第一个元素列下标即0赋给p,然后把后面的数逐一与之比较,如果大于它,则把大的数的列下标重新赋给p。 所以(1)处应该填p=j; 内循环结束后,便获得了本行中最大的数,即a[i][p]; 而(2)处,很显然是要调用函数,关键就在于参数怎么写,函数中需要的是整个数组,所以应该把数组名做为实 参,传递过去,(2)处的答案应该是LineMax(x)。注意大小写,C语言中大小写是不等价的。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数的正确调用,嵌套调用,递归调用3、fun函数的功能是:首先对a所指的N行N列的矩阵,找出各行中的最大的数,再求这N个最大值中的最小的那 个数作为函数值返回。请填空。 #include &stdio.h& #define N 100 int fun(int(*a)[N]) {int row,col,max, for(row=0;row&N;row++) {for(max=a[row][0],col=1;col&N;col++) if(______) max=a[row][col]; if(row==0) min= else if(______) min= }48
}答案: 1:1:max&a[row][col]#max&=a[row][col]#a[row][col]&max#a[row][col]&=max 2:max&min#max&=min#min&max#min&=max 评析: 本题的考查点是求矩阵最大值的算法。 本题中的第一空要求判断出每一行中的最大数,应该填写条件max&a[row][col],第二空要求从N个最大值中找 出最小的数,应填入条件max&min。 故本题答案为:max&a[row][col]和max&min。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:没有定义4、函数ColumMin的功能是:求出M行N列二维数组每列元素中的最小值,并计算它们的和值。和值通过形参传回 主函数输出。请填空。 #define M 2 #define N 4 void ColumMin(int a[M][N],int *sum) { int i,j,k,s=0; for(i=0;i&N;i++) { k=0; for(j=1;j&M;j++) if(a[k][i]&a[j][i])k=j; s+= ; } *sum =s; } main() { int x[M][N]={3,2,5,1,4,1,8,3},s; ColumMin(x,&s); printf(&%d\n&,s); }答案:1:1:a[k][i]评析: 本题考查的是函数参数的传送。 解题过程: (1) 执行以i为变量的for语句 1)k=0 2)执行以j为变量的for语句 ①当j=1 ②比较a[0][0]和a[1][0]的大小,如果a[0][0]大于a[1][0]则k=1;如果a[0][0]大于a[1][0]则k=0 ③j=2所以结束循环49 3)此时a[k][i]就代表第一列中最小的值,要累计所有列中的最小值的和,应该在第一空内填写 a[k][i],用 变量s累加。 (2) SumColumMin是一个无返回值的函数,其中形式参数*sum是一个指针类型,所以第二空应该填写 *sum, 用来将该指针变量指向s (3) 当主函数main调用SumColumMin时,需要两个实际参数,一个代表被操作的数组,一个为指向累计和的 指针变量,所以第三个空应该为 x,&s,分别代表已经被定义的数组x,和整型变量s的地址。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数的正确调用,嵌套调用,递归调用5、若给fun函数的形参s传送字符串:& long fun(char s[ ]) { for (; isspace(*s);s++); sign=(*s=='-')?-1:1; if (*s=='+' || *s=='-') s++; for (n=0;isdigit(*s);s++) n=10*n+(*s-'0'); return sign*n; }6354abc&,则函数的返回值是______。(字符串中包括空格)答案: 评析:1:1:[NN]6354本题的考查点是函数的返回值。 这个函数的目的是提取出由函数的形参传送来的字符串中的数字字符,并通过相应各个字符位置计算出它们数 值形式的幂,最后返回字符串中的数字字符的数值形式,所以函数的返回值应当是&6354&。 故本题答案为:6354。 等级:3 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数的正确调用,嵌套调用,递归调用6、函数fun的功能是计算x^n。 double fun(double x,int n) { double y=1; for(i=1;i&=n;i++) y=y*x; } 主函数中已经正确定义m,a,b变量并赋值,并调用fun函数计算:m=a^4+b^4-(a+b)^3。实现这一计算的函数调 用语句为______。答案: 评析:1:1:fun(a,4)+fun(b,4)-fun((a+b),3)#fun(b,4)+fun(a,4)-fun((a+b),3);函数fun的功能是计算x的n次方,所以a的4次方的调用函数应当为fun(a,4),b的4次方的调用函数应当为50 fun(b,4),(a+b)的3次方的调用函数应当为fun((a+b),3),所以,实现m=a^4+b^4-(a+b)^3这一计算的函数调用 语句为:fun(a,4)+fun(b,4)-fun((a+b),3);。 等级:2 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数的正确调用,嵌套调用,递归调用7、以下程序通过函数SunFun和f(x),x=0到10,这里f(x)=x^2+1,由F函数实现,请填空。 main() { printf(&The sun=%d\n&,SunFun(10));} SunFun(int n) { int x,s=0; for(x=0;x&=n;x++)s+F(______); } F(int x) { return (______);}答案: 1:1:x 2:x*x+1#1+x*x#x^2+1#1+x^2 评析: 本题考查的是函数的调用。 解题过程: (1)f(x)的含义为x的平方加上1 (2)所以F(int x)的返回值应该为 x*x+1 (3)SunFun(10)的作用是将0到10之间所有的整数相加求和 (4)所以F()的形式参数为x。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数的正确调用,嵌套调用,递归调用8、以下程序运行后的输出结果是______。 main () { char a[]=&Language&,b[]=&Programe&; char *p1,*p2; p1=a; p2=b; for(k=0;k&=7;k++) if(*(p1+k)==*(p2+k)) printf(&%c&,*(p1+k)); }答案: 评析:1:1:[YY]gae本题考查的是字符指针变量与字符数组。 解题过程:51 (1) (2) (3) (4) (5) (6) (7) (8) (9) (10)当k=0时,*(p1+0)='L',*(p2+0)='P',L!=P,所以没有输出 当k=1时,*(p1+1)='a',*(p2+1)='r',a!=r,所以没有输出 当k=2时,*(p1+2)='n',*(p2+2)='o',n!=o,所以没有输出 当k=3时,*(p1+3)='g',*(p2+3)='g',g==g,所以输出g 当k=4时,*(p1+4)='u',*(p2+4)='r',u!=r,所以没有输出 当k=5时,*(p1+5)='a',*(p2+5)='a',a==a,所以输出a 当k=6时,*(p1+6)='g',*(p2+6)='m',g!=m,所以没有输出 当k=7时,*(p1+7)='e',*(p2+7)='e',e==e,所以输出e 当k=8时结束循环 输出结果为:gae。等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/数组的定义和引用、字符串与字符数组9、函数mycmp(char *s,char *t)的功能是比较字符串s和t的大小,当s等于t时返回0,当s&t返回正值,当s&t 时返回负值。请填空。 mycmp( char *s,char *t) { while (*s==*t) { if (*s=='\0')return 0; ++s;++t; } return(______); }答案: 评析:1:1:*s-*t#-*t+*s本题的考查点是比较字符串的大小。 函数的两个形参是两个字符指针变量,字符串的首地址是指针变量的值,*s和*t表示字符串数组s和t的第一个 字符,在while循环中,是通过s和t值的不断变化改变两个串的第一个字符,要返回s和t的第一个不同字符的 ASCII码的差值,必须使用&*s-*t&得出。 故本题答案为:*s-*t。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/库函数的正确调用10、以下程序的输出结果是______。 void fun() { static int a=0; a +=2; printf(&%d&,a); } main() { for(cc=1;cc&4;cc++) fun(); printf(&\n&); }52 答案: 评析:1:1:[NN]246循环for(cc=1;cc&4;cc++)被执行了3次。在函数fun中,由于a是static型变量,所以函数第1次调用后,a= 2; 第2次调用后,a = 4;第3次调用后,a = 6。等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:没有定义11、若要使指针p指向一个double类型的动态存储单元,请填空。 p=______malloc(sizeof (double));答案: 评析:1:1:(double*)函数malloc返回的是void*而不是double类型指针。所以要使指针p指向一个double类型的存储单元就必须进行 强制类型转换。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数的类型和返回值12、下列程序的输出结果是______。 void fun(int *n) { while((*n)--); printf(&%d&,++(*n)); } main() { int a=100; fun(&a); }答案: 评析:1:1:0在函数fun()中, while((*n)--)是先引用*n的值, 再做(*n)-- 运算, 所以循环结束时*n的值为0, 再做(*n)-- 运 算后,*n的值为-1;执行++(*n)后,*n的值是0。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数的正确调用,嵌套调用,递归调用53 13、以下程序中,主函数调用了LineMax函数,实现在N行M列的二维数组中,找出每一行上的最大值。请填空: #define N 3 #define M 4 void LineMax(int x[N][M]) { int i,j,p; for(i=0;i&N;i++) { p=0; for(j=1;j&M;j++) if(x[i][p]&x[i][j])______; printf(&The max value in line %d is %d\n&,i,______); } } main() { int x[N][M]={1,.5,7,4,2,6,4,3,8,2, 3,1}; LineMax(x); }答案: 1:1:p=j 2:a[i][p]评析: LineMax函数中运用了两个循环,外循环来控制数组的行,内循环控制列,在寻找每行最大的元素时,先把每行 的第一个元素列下标即0赋给p,然后把后面的数逐一与之比较,如果大于它,则把大的数的列下标重新赋给p。 所以(1)处应该填p=j; 内循环结束后,便获得了本行中最大的数,即a[i][p],这也就是(2)处应该填写的答案; 而(3)处,很显然是要调用函数,关键就在于参数怎么写,函数中需要的是整个数组,所以应该把数组名做为实 参,传递过去。注意大小写,C语言中大小写是不等价的。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数的正确调用,嵌套调用,递归调用14、下面程序的运行结果是:______。 void swap(int *a,int *b) {int *t; t=a;a=b;b=t; } main() {int x=3,y=5,*p=&x,*q=&y; swap(p,q); printf(&%d%d\n&,*p,*q); }答案: 评析:1:1:[NN]35本题的考查点是函数调用。54 观察本题的程序可以看出, 被调函数swap()实现的功能是交换变量的值, 但由于函数不返回任何值, 所以在main() 函数中打印出的变量的值并没有发生交换,即仍为3和5。 故本题答案为:3和5。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数的类型和返回值15、fun函数的功能是:首先对a所指的N行N列的矩阵,找出各行中的最大的数,再求这N个最大值中的最小的那 个数作为函数值返回。请填空。 #include &stdio.h& #define N 100 int fun(int(*a)[N]) {int row,col,max, for(row=0;row&N;row++) {for(max=a[row][0],col=1;col&N;col++) if(______) max=a[row][col]; if(row==0) min= else if(______) min= } }答案: 1:1:max&a[row][col]#max&=a[row][col]#a[row][col]&max#a[row][col]&=max 2:max&min#max&=min#min&max#min&=max 评析: 本题的考查点是求矩阵最大值的算法。 本题中的第一空要求判断出每一行中的最大数,应该填写条件max&a[row][col],第二空要求从N个最大值中找 出最小的数,应填入条件max&min。 故本题答案为:max&a[row][col]和max&min。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数的正确调用,嵌套调用,递归调用16、以下程序的功能是调用函数fun计算:m=1-2+3-4+…+9-10,并输出结果。请填空。 int fun ( int n) { int m=0,f=1,i; for(i=1; i&=n; i++) { m+=i*f; f=______; } } main() { printf(&m=%d\n&,______);}55 答案: 1:1:-f#f*-1#-1*f#f*(-1)#(-1)*f 2:fun(10) 评析: 本题的考查点是C程序设计。根据程序写出运行结果。 考察的知识点主要是函数的调用。本题利用一个fun函数来完成题目要求的计算。程序中f起的作用是控制i*f 的符号,看的出,偶数位都为负值,所以f的值为(-1)^(i+1),最后要求输出m的值,在输出中调用fun函数,并 把实参10传给n。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:C综合题目部分/知识点/综合/函数的正确调用,嵌套调用,递归调用三、是非题 此题型下没有试题! 四、操作题 此题型下没有试题! 五、多选题 此题型下没有试题! 六、改错题 此题型下没有试题! 七、论述题 此题型下没有试题! 八、简答题 此题型下没有试题! 九、问答题 此题型下没有试题! 一、单选题 1、请读程序: #include &stdio.h& #define SUB(X,Y) (X)*Y main() { int a=3, b=4; printf(&%d\n&,SUB(a++,b++) ); } 上面程序的输出结果是______。A:12B:15C:16D:2056 答案:A 评析: 本题的考查点是宏定义。 X++的形式应当先使用X值,然后X才进行自加1运算,所以程序在进行SUB()乘法运算的时候,仍取a,b的原值, 所以最后打印的结果是3*4=12。 故本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:没有定义 2、以下程序的输出结果是______。 #define f(x) x*x main() { int a=6,b=2,c; c=f(a)/f(b); printf(&%d\n&,c); }A:9B:6C:36D:18答案:C 评析: 本题的考查点是带参数的宏定义。 观察程序段可知, 对带参数的宏的展开只是将语句中的宏名后面括号内的实参字符串代替#define命令行中的形 参。本题中c=f(a)/f(b)用#define f(x) x*x代替得c=f(6)/f(2),即c=6*6/2*2,结果为36。 故本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:没有定义3、有如下程序 #define N 2 #define M N+1 #define NUM 2*M+1 main() { for(i = 1; i &= NUM; i++)57 printf(&%d\n&,i); } 该程序中的for循环执行的次数是______。A:5B:6C:7D:8答案:B 评析: 本题的考查点是对C语言中宏定义的理解。 分别将N, M的宏定义代入NUM的表达式中, 可以得到NUM=2*2+1+1=6, 所以当常数NUM作为for循环的终止条件时, 应当循环6次。 故本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:没有定义4、以下程序的输出结果是______。 #define SQR(X) X*X main() { int a=16,k=2,m=1; a/=SQR(k+m)/SQR(k+m); printf(&%d\n&,a); }A:16B:2C:9D:1答案:B 评析:58 本题所考查的是宏定义。C语言在预编译时遇到带实参的宏名,则按命令行中指定的字符串从左到右进行置换。 在做此题时,我们可以运用置换法。得到: a/=k+m*k+m/k+m*k+m=16/7=2。 注:a为整型,所以在做除法时,自动取整。 本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:没有定义5、以下程序的输出结果是______。 #define M(x,y,z) x*y+z main() { int a=1,b=2,c=3; printf(&%d\n&,M(a+b,b+c,c+a)); }A:19B:17C:15D:12答案:D 评析: 本题考查C语言的宏定义。 C语言的宏定义包括不带参数的宏定义与带参数的宏定义。本题为带参数的宏定义,其形式为: #define 宏名(形参表) 字符串 本题的M(a+b,b+c,c+a)被字符串a+b*b+c+c+a代替。 所以答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:没有定义6、程序中头文件type1.h的内容是: #define N 5 #define M1 N*3 程序如下: #include &type1.h& #define M2 N*2 main() {59 i=M1+M2; printf(&%d\n&,i); } 程序编译后运行的输出结果是______。A:10B:20C:25D:30答案:C 评析: 本题的考查点是宏定义。 宏定义就是用一个指定的标识符(即名字)来代表一个字符串,它的一般形式为: #define 标识符 字符串 这种方法使用户能以一个简单的名字代替一个长的字符串,因此把这个标识符(名字)称为&宏名&。宏名一般 习惯用大写字母表示,以与变量名相区别。使用宏名代替一个字符串,可以减少程序中重复书写某些字符串的 工作量。 i=M1+M2=N*3+N*2=5*3+5*2=25。 故本题答案为C。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:没有定义7、有以下程序 #include &stdio.h& #define F(x,y) (x)*(y) main() { int a=3,b=4; printf(&%d\n&,F(a++,b++)); } 程序运行后的输出结果是______。A:12B:15C:16D:2060 答案:A 评析: 本题的考查点是带参数的宏定义。 本题的程序中就定义了一个带参数的宏,对F(a++,b++)进行展开后,宏的返回值为12,注意a++,b++都是先使用 变量值,再自增。 故本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:没有定义8、有以下程序: #define f(x) x*x main() { i=f(4+4)/f(2+2); printf(&%d\n&,i); } 执行后输出的结果是______。A:28B:22C:16D:4答案:A 评析: 对带参的宏定义是这样展开置换的: 在程序中如果有带实参的宏, 则按#define命令行中指定的字符串从左到右 进行置换。如果串中包含宏中的形参,则将程序语句中相应的实参(可以是常量、变量或表达式)代替形参, 如果宏定义中的字符串中的字符不是参数字符,则保留。这样就成了置换的字符串。 本题中,展开后为i=4+4*4+4/2+2*2+2=4+16+2+4+2=28。 故本题答案为A。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:没有定义9、以下叙述中正确的是______。61 A:预处理命令行必须位于源文件的开头B:在源文件的一行上可以有多条预处理命令C:宏名必须用大写字母表示D:宏替换不占用程序的运行时间答案:D 评析: 本题考查的是预处理概念。 通常,预处理命令位于源文件的开头,但不一定必须位于开头,也可以写在函数与函数之间;由于预处理命令 的末尾不加分号,所以,不能在一行上写多条预处理命令,否则,系统处理时就会把它当作一条命令;宏名一 般习惯用大写字母表示,以便与变量名相区别,但这并非规定,也可用小写字母。 故本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:第八章 编译预处理部分/知识点/编译预处理/&文件包含&处理10、以下叙述中正确的是______。A:预处理命令行必须位于C源程序的起始位置B:在C语言中,预处理命令行都以&#&开头C:每个C程序必须在开头包含预处理命令行:#include&stdio.h&D:C语言的预处理不能实现宏定义和条件编译的功能答案:B 评析: 本题考查的是预处理命令。 选项B正确,原因是这部分语句与C程序其他部分的语句是有区别的,所以在每个预处理语句之前都有一个&#& 符号以示区别。C提供三种预处理语句:(1)宏替换,(2)文件包含,(3)条件编译。如果一个文件中要引 用另外一个文件时才需要在开头包含预处理命令行:#include&stdio.h&。 故本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:第八章 编译预处理部分/知识点/编译预处理/&文件包含&处理62 11、有以下程序 #include &stdio.h& #define N 5 #define M N+1 #define f(x) (x*M) main() { int i1,i2; i1=f(2); i2=f(1+1); printf (&%d %d\n&,i1,i2); } 程序的运行结果是______。A:12 12B:11 7C:11 11D:12 7答案:B 评析: 本题考查的是宏定义。 在编译时预处理程序用&替换文本&来替换宏,并用对应的实参来替换&替换文本&。此题中的替换文本分别为: N+1、(x*M)。引用带参的宏名i1=f(2),在经过宏替换后 i1=2*N+1=2*5+1=11(注:因为在对宏 M 的替换中N+1 没有加括号,所以对宏f(x)的替换文本展开后就变为:x*N+1形式);与上相同 i2在引用带参的宏名并替换展开 后变为:i2=1+1*N+1=1+1*5+1=7。 故本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:没有定义12、若程序中有宏定义行:#defineN 100 则以下叙述中正确的是______。A:宏定义行中定义了标识符N的值为整数100B:在编译程序对C源程序进行预处理时用100替换标识符NC:对C源程序进行编译时用100替换标识符N63 D:在运行时用100替换标识符N答案:B 评析: 本题的考查点是宏定义。 无参宏的宏名后不带参数。其定义的一般形式为:#define 标识符 字符串 其中的&#&表示这是一条预处理命令。凡是以&#&开头的均为预处理命令。&define&为宏定义命令。&标识符&为 所定义的宏名。&字符串&可以是常数、表达式、格式串等。例如:#define N 100它的作用是指定标识符N来 代替常数100。 在编写源程序时, 所有的100都可由N代替, 而对源程序作编译时, 将先由预处理程序进行宏代换, 即用100去置换所有的宏名N,然后再进行编译。 故本题答案为B。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:没有定义二、填空题 1、以下程序的输出结果是______。 #define MAX(x,y) (x)&(y)?(x):(y) main() { int a = 5, b = 2,c = 3, d = 3, t = MAX(a + b, c + d)*10; printf(&%d\n&, t); }答案: 评析:1:1:7本题的考查点是宏定义。 宏替换后,表达式t = MAX(a + b, c + d)*10即变为:t = (a+b)&(c+d) ? (a+b) : (c + d)*10; 由于(a+b)&(c+d)为真, 所以t = (a+b),即为7。 故本题答案为:7。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:没有定义 2、下面程序的运行结果是:______。 #define N 10 #define s(x) x*x #define f(x) (x*x) main() {int i1,i2; i1=1000/s(N);i2=1000/f(N); printf(&%d,%d\n&,i1,i2); }64 答案: 评析:1:1:[NN]1000,10本题的考查点是宏定义。 根据宏定义,变量i1的值为=1000,变量i2的值为)=10。 故本题答案为:1000和10。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:没有定义3、以下程序的输出结果是______。 #define MCRA(m) 2*m #define MCRB(n,m) 2*MCRA(n)+m main() { int i=2,j=3; printf(&%d\n&,MCRB(j,MCRA(i))); }答案: 评析:1:1:[NN]16本题的考查点是带参数的宏定义。 带参数的宏定义是这样展开置换的:在程序中如果有带实参的宏,则按#define 命令行中指定的字符串从左到 右进行置换。如果串中包含形参,则将程序语句中相应的实参(可以是常量、变量或表达式)代替形参,如果 宏定义中的字符串中的字符不是参数字符,则保留。因此对MCRB(j,MCRA(i))进行宏展开就得到了 2*MCRA(j)+MCRA(i),即:2*2*j+2*i=2*2*3+2*2=16。 故本题答案为:16。等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:没有定义4、有以下程序 #define f(x) (x*x) main() { int i1,i2; i1=f(8)/f(4); i2=f(4+4)/f(2+2); printf(&%d,%d\n&,i1,i2); } 程序运行后的输出结果是______。 A:64,28 B:4,465 C:4,3 D:64,64答案: 评析:1:1:[NN]4,3本题考查的是宏定义。 对带参数的宏的展开只是将语句中宏名后面括号内的实参字符串代替#define命令行中的形参。本题中 &i1=f(8)/f(4)&用&#define f(x) (x*x)&代替得i1=(8*8)/(4*4), 结果为4; &i2=f(4+4)/f(2+2)&用&#define f(x) (x*x)&代替得i2= (4+4*4+4)/(2+2*2+2),求得结果为3。故本题输出的值为4,3。 故本题答案为4和3。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:没有定义5、有一个名为init.txt的文件,内容如下: #define HDY(A,B) A/B #define PRINT(Y) printf(&y=%d\n&,Y) 有以下程序 #include &init.txt& main() { int a=1,b=2,c=3,d=4,k; k=HDY(a+c,b+d); PRINT(k); } 下面针对该程序的叙述正确的是______。 A:编译出错 B:运行出错 C:运行结果为 y=0 D:运行结果为 y=6答案: 评析:1:1:[NN]y=6本题考查的是带参数的宏定义。 宏替换后,表达式k=HDY(a+c,b+d)即变为k=a+c/b+d=1+3/2+4=6。 故本题答案选y=6。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间:66 知识点:没有定义三、是非题 此题型下没有试题! 四、操作题 此题型下没有试题! 五、多选题 此题型下没有试题! 六、改错题 此题型下没有试题! 七、论述题 此题型下没有试题! 八、简答题 此题型下没有试题! 九、问答题 此题型下没有试题! 一、单选题 1、以下程序的输出结果是______。 main() { int k=17; printf(&%d,%o,%x\n&,k,k,k); }A:17,021,0x11B:17,17,17C:17,0x11,021D:17,21,11答案:D 评析:67 本题的考查点是不同格式的数据输出。 printf函数对不同类型的数据用不同的格式字符,&%d&是以带符号的十进制形式输出整数(正数不输出符号); &%o&以8进制无符号形式输出整数(不包括前导符0);&%x&以16进制无符号形式输出整数(不包括前导符0x)。 本题答案为D。 等级:1 难度:1 区分度:1 出题人:文本导入 修改人: 审核人: 创建时间: 最后修改时间: 知识点:第二章数据类型和运算部分/知识点/数据类型及其运算/C的数据类型及其定义方法 2、请读程序片段(字符串内没有空格字符): printf(&%d\n&,strlen(&ATS\n012\1\\&)); 上面程序片段的输出结果是______。 A:11 B:10 C:9 D:8 答案:C 评析: 本题的考查点是字符串的长度。 这个语句的功能是输出&ATS\n012\1\\&这个串的长度, 在串中&\\&代表一个&\&, 为了和printf()函数中的转义 字符区分开来,在语法上使用了两个反斜杠代替了一个反斜杠,所以它仅仅为一个字符,而&\1&代表数字1,也 占一个

我要回帖

更多关于 高中二次函数最值问题 的文章

 

随机推荐