二级C语言备考2

发布时间:2024年01月11日

一、单选 ??共40题 (共计40分)

第1题 (1.0分) ???????题号:6951 ???????难度:较易 ???????第1章

以下叙述中错误的是

A:算法正确的程序可以有零个输入

B:算法正确的程序最终一定会结束

C:算法正确的程序可以有零个输出

D:算法正确的程序对于相同的输入一定有相同的结果

答案:C

第2题 (1.0分) ???????题号:6759 ???????难度:易 ???????第2章

设有定义:int a=64,b=8;,则表达式(a&b)||(a&&b)和(a|b)&&(a||b)的值分别为

A:1和1

B:1和0

C:0和1

D:0和0

答案:A

第3题 (1.0分) ???????题号:6977 ???????难度:较易 ???????第2章

有以下程序

#include <stdio.h>

main()

{ ?int ?a=2, b;

???b = a<<2;

???printf ("%d\n", b );

}

程序运行后的输出结果是

A:2

B:4

C:6

D:8

答案:D

第4题 (1.0分) ???????题号:6321 ???????难度:中 ???????第2章

以下不能作为合法常量的是().

A:1.234e0

B:1.234e04

C:1.234e+4

D:1.234e0.4

答案:D

第5题 (1.0分) ???????题号:6706 ???????难度:较易 ???????第2章

设有定义:int a=0,b=1,c=1;

以下选项中,表达式值与其它三个不同的是

A:b=a==c

B:a=b=c

C:a=c==b

D:c=a!=c

答案:A

第6题 (1.0分) ???????题号:6812 ???????难度:中 ???????第3章

有以下程序:

#include ?<stdio.h>

main()

{ ?char ?a,b,c,d;

?scanf("%c%c",&a, &b);

?c=getchar(); ???d=getchar();

?printf("%c%c%c%c\n",a,b,c,d);

}

当执行程序时,按下列方式输入数据(从第1列开始,<CR>代表回车,注意:回车也是一个字符)

12<CR>

34<CR>

则输出结果是().

A:12

34

B:12

C:1234

D:12

3

答案:D

第7题 (1.0分) ???????题号:7280 ???????难度:中 ???????第3章

有以下程序

????#include <stdio.h>

????main()

????{

????????int ?sum, pad, pAd; ????

????????sum = pad = 5; ?

????????pAd = ++sum, pAd++, ++pad;

????????printf("%d\n", pad );

????}

程序的输出结果是

A:5

B:6

C:7

D:8

答案:B

第8题 (1.0分) ???????题号:7341 ???????难度:易 ???????第3章

有以下程序

#include <stdio.h>

main()

{ ?int ?k=33;

???printf("%d,%o,%x\n", k, k, k);

}

程序的运行结果是

A:33,41,21

B:33,33,33

C:41,33,21

D:33,21,41

答案:A

第9题 (1.0分) ???????题号:7222 ???????难度:较易 ???????第4章

以下叙述中正确的是

A:在C语言中,逻辑真值和假值分别对应1和0

B:关系运算符两边的运算对象可以是C语言中任意合法的表达式

C:对于浮点变量x和y,表达式:x==y 是非法的,会出编译错误

D:分支结构是根据算术表达式的结果来判断流程走向的

答案:B

第10题 (1.0分) ???????题号:6987 ???????难度:较易 ???????第4章

有以下程序

????#include <stdio.h>

????main()

????{ ?int ?x;

???????scanf("%d", &x);

???????if(x<=3) ; ?else

???????if(x!=10) ?printf("%d\n", x);

????}

程序运行时,输入的值在哪个范围才会有输出结果

A:小于3的整数

B:不等于10的整数

C:大于3或等于10的整数

D:大于3且不等10的整数

答案:D

第11题 (1.0分) ???????题号:6326 ???????难度:易 ???????第4章

以下关于switch语句的叙述中正确的是().

A:所有case的标号都应当是连续的

B:每个case语句标号后面可以没有break语句

C:char型常量不能做case的标号使用

D:default必须放在全部case的最后

答案:B

第12题 (1.0分) ???????题号:6656 ???????难度:中 ???????第4章

有如下程序

#include <stdio.h>

main()

{

????int x = 0x13;

????if (x = 0x18) printf("T");

????printf("F");

????printf("\n");

}

程序运行后的输出结果是

A:TF

B:T

C:F

D:TFT

答案:A

第13题 (1.0分) ???????题号:6557 ???????难度:中 ???????第5章

有以下程序段

????????int ?s, n;

????????s=1;

????????for( n=10; n>0; n-- ) ?s+=n;

该程序段拟实现整数1~10的累加求和,但程序中有错误.以下4种修改方案中仍然错误的一个是().

A:将s=1; 改为 s=0;

B:将for循环改为for(n=10;n>1;n--)

C:将for循环改为for(n=10;n>=2;n--)

D:将for循环改为for(n=2;n<10;n++)

答案:D

第14题 (1.0分) ???????题号:6079 ???????难度:中 ???????第5章

以下程序拟实现计算 sum=1+1/2+1/3+ … +1/50 .

#include ??<stdio.h>

main( )

{ ?int ?i; ???double ?sum;

???sum=1.0;

???i=1;

???do

???{ ?i++; ???sum += 1/i; ??}

???while( i<50 );

???printf("sum=%lf\n",sum);

}

程序运行后,不能得到正确结果,出现问题的语句是

A:sum += 1/i;

B:while(i<50);

C:sum = 1.0;

D:i++;

答案:A

第15题 (1.0分) ???????题号:7019 ???????难度:中 ???????第5章

有以下程序

????#include <stdio.h>

????main()

????{ ?int i,j, m=55;

???????for(i=1;i<=3;i++)

???????for(j=3; j<=i; j++) ?m=m%j;

???????printf("%d\n ", m);

????}

程序的运行结果是

A:0

B:1

C:2

D:3

答案:B

第16题 (1.0分) ???????题号:7107 ???????难度:中 ???????第5章

若有以下程序

????#include <stdio.h>

????main()

????{ ?int ?s=0, n;

???????for (n=0; n<4; n++) ?

???????{ ?switch(n)

?????????{ ?default: ?s+=4;

????????????case 1: ?s+=1;

????????????case 2: ?s+=2;

????????????case 3: ?s+=3;

?????????}

???????}

???????printf("%d\n", s);

????}

则程序的输出结果是

A:6

B:18

C:10

D:24

答案:D

第17题 (1.0分) ???????题号:6263 ???????难度:中 ???????第5章

有以下程序

?????#include<stdio.h>

?????#include<math.h>

?????main()

?????{

????????int s; float n,t,pai;

????????t=1,pai=0,n=1.0,s=1;

????????while(fabs(t)>1.0e-6) ????????{

??????????pai+=t;

??????????n+=2; s=-s;t=s/n;

????????}

????????printf("total=%f\n",pai);

?????}

程序所计算的是().

A:1-1/2!+1/3!-1/5!+1/7!-…

B:1+1/3+1/5+1/7+1/9-…

C:1+1/2+1/3+1/4+1/5-…

D:1-1/3+1/5-1/7+1/9-…

答案:D

第18题 (1.0分) ???????题号:6989 ???????难度:中 ???????第5章

有以下程序

????#include <stdio.h>

????main()

????{

????????char ?b,c; ??

????????int ?i;

????????b= 'a'; ??

????????c = 'A';

????????for (i=0; i<6; i++)

????????{ ??

????????????if (i%2) putchar(i+b);

????????????else putchar(i+c);

????????} ?

????????printf("\n");

????}

程序运行后的输出结果是

A:abcdef

B:ABCDEF

C:aBcDeF

D:AbCdEf

答案:D

第19题 (1.0分) ???????题号:7149 ???????难度:中 ???????第6章

若有以下程序

?????#include <stdio.h>

?????main()

?????{ ?int ?i, j=0;

????????char ?a[]="How are you!", b[10];

????????for ( i=0; ?a[i]; ?i++ )

???????????if (a[i] == ' ') ?b[j++]=a[i+1];

????????b[j]='\0';

????????printf("%s\n",b);

?????}

则程序的输出结果是

A:Howareyou!

B:Howareyou

C:Hay!

D:ay

答案:D

第20题 (1.0分) ???????题号:6032 ???????难度:中 ???????第6章

有以下程序

#include ??<stdio.h>

main( )

{

????int ?i, array[6] = {1, 5, 0, 4};

????for (i=0; i<5; i++)

????????printf("%d,", array[i] & 4);

????printf("\n");

}

程序运行后的输出结果是

A:1,2,1,2,0

B:1,5,0,4,0, ?

C:1,5,5,4,0, ?

D:0,4,0,4,0

答案:D

第21题 (1.0分) ???????题号:6377 ???????难度:中 ???????第6章

有以下程序

#include ??<stdio.h>

main( )

{ ?char ?b[4][10]; ???int ?i;

???for ( i=0; i<4; i++ )

????????scanf( "%s", b[i] );

???for( i=3; i>=0; i-- )

????????printf( "%s ", b[i] );

???printf( "\n" );

}

执行时若输入: ?Peach flower is pink.<回车> ?,则输出结果是

A:Peachflower is pink.

B:pink. is flower Peach

C:Peachflowerispink.

D:Pink is flower peach.

答案:B

第22题 (1.0分) ???????题号:6967 ???????难度:中 ???????第6章

有以下程序

????#include <stdio.h>

????main()

????{

????????int ?a[4][4]={{1,4,3,2},

??????????????????????{8,6,5,7},

??????????????????????{3,7,2,5},

??????????????????????{4,8,6,1}};

????????int i, j, k, t;

????????for (i=0; i<4; i++)

????????????for (j=0; j<3; j++)

????????????????for (k=j+1; k<4; k++)

????????????????????if (a[j][i] > a[k][i])

???????????????????????{

???????????????????????????t=a[j][i];

???????????????????????????a[j][i] = a[k][i];

???????????????????????????a[k][i] = t;

???????????????????????} /* 按列排序 */

????????for (i=0; i<4; i++)

????????????printf("%d, ",a[i][i]);

????}

程序运行后的输出结果是

A:1, 6, 2, 1,

B:8, 7, 3, 1,

C:4, 7, 5, 2,

D:1, 6, 5, 7,

答案:D

第23题 (1.0分) ???????题号:7327 ???????难度:中 ???????第6章

以下选项中,没有编译错误的是

A:char ?str3[] = {'d', 'e', 'b', 'u', 'g', '\0'};

B:char ?str1[5] = "pass", str2[6]; ?str2 = str1;

C:char ?name[10]; ?name = "china";

D:char ?str4[]; ?str4 = "hello world";

答案:A

第24题 (1.0分) ???????题号:6968 ???????难度:中 ???????第6章

有以下程序(strcat函数用以连接两个字符串)

#include <stdio.h>

#include <string.h>

main()

{

????char a[20]="ABCD\0EFG\0",b[]="IJK";

????strcat(a,b);

????printf("%s\n",a);

}

程序运行后的输出结果是

A:IJK

B:ABCDE\0FG\0IJK

C:ABCDIJK

D:EFGIJK

答案:C

第25题 (1.0分) ???????题号:6574 ???????难度:中 ???????第7章

以下叙述中正确的是().

A:用static说明的变量是全局变量

B:register变量不能进行求地址运算

C:系统默认auto变量的初值为0

D:用register说明的变量被强制保留在CPU的寄存器中

答案:B

第26题 (1.0分) ???????题号:7359 ???????难度:中 ???????第7章

有以下程序

#include <stdio.h>

int ?a=2;

int ?f()

{ ?static int ?n=0;

???int m=0;

???n++; ?a++; ?m++;

???return n+m+a;

}

main()

{ ?int ?k;

???for (k=0; k<3; k++)

??????printf("%d,", f( ));

???printf("\n");

}

程序的运行结果是

A:5,7,9,

B:5,6,7,

C:5,8,11,

D:5,5,5,

答案:A

第27题 (1.0分) ???????题号:6476 ???????难度:难 ???????第7章

有以下程序

????#include ??<stdio.h>

????int fun(int ?a[],int ?k)

????{ ?if(k==0) return (a[0]);

???????return ?a[0]+fun(a+1,k-1);

????}

????main()

????{ ?int ?a[ ]={1,2,3,4,5};

???????printf("%d\n", fun(a,3));

????}

执行后的输出结果是( ).

A:4

B:3

C:10

D:9

答案:C

第28题 (1.0分) ???????题号:6466 ???????难度:中 ???????第7章

有以下程序

????#include <stdio.h>

????void ?fun( int ?a, ?int ?b )

????{ ?int ??t;

???????t=a; ?a=b; ?b=t;

????}

????main()

????{ ?int ??c[10]={1,2,3,4,5,6,7,8,9,0}, i;

???????for (i=0; i<10; i+=2) ?fun(c[i], c[i+1]);

???????for (i=0;i<10; i++) ?printf("%d,", c[i]);

???????printf("\n");

????}

程序的运行结果是( ).

A:1,2,3,4,5,6,7,8,9,0,

B:2,1,4,3,6,5,8,7,0,9,

C:0,9,8,7,6,5,4,3,2,1, ?

D:0,1,2,3,4,5,6,7,8,9,

答案:A

第29题 (1.0分) ???????题号:7298 ???????难度:较难 ???????第7章

有以下程序

?????#include <stdio.h>

?????int ?fun( int ?n )

?????{ ?int ?a;

????????if( n==1 ) return ?1;

????????a = n + fun( n-1 );

????????return ( a );

?????}

?????main()

?????{ ??printf( "%d\n", fun( ?5 ) ); ?}

程序的输出结果是

A:9

B:14

C:10

D:15

答案:D

第30题 (1.0分) ???????题号:6778 ???????难度:中 ???????第7章

有以下程序

#include <stdio.h>

#define N 4

void fun(int a[][N])

{ ?

??int i;

??for(i=0; i<N; i++)

?????a[0][i] += a[N-1][N-1-i];

}

main( )

{ ?int x[N][N]={ {1, 2, 3, 4},

?????????????????{5, 6, 7, 8},

?????????????????{9,10,11,12},

?????????????????{13,14,15,16}}, i;

???fun(x);

???for (i=0;i<N; i++) printf("%d,", x[i][i]);

???printf("\n");

}

程序运行后的输出结果是

A:4,7,10,13,

B:1,6,11,16,

C:17,6,11,16,

D:5,13,21,29,

答案:C

第31题 (1.0分) ???????题号:7261 ???????难度:中 ???????第8章

以下叙述中正确的是

A:基类型不同的指针变量可以相互混用

B:函数的类型不能是指针类型

C:函数的形参类型不能是指针类型

D:设有指针变量为 double *p,则 p+1 将指针p移动8个字节

答案:D

第32题 (1.0分) ???????题号:6854 ???????难度:中 ???????第8章

以下不能将s所指字符串正确复制到t所指存储空间的是()

A:do{*t++=*s++;}while(*s );

B:for(i=0;t[i]=s[i];i++);

C:while(*t=*s){t++;s++}

D:for(i=0,j=0;t[i++]=s[j++]; );

答案:A

第33题 (1.0分) ???????题号:6996 ???????难度:中 ???????第8章

以下选项中正确的语句组是

A:char ?*s; ?s={"BOOK!"};

B:char ?*s; ?s="BOOK!";

C:char ?s[10]; ?s="BOOK!";

D:char ?s[]; ?s="BOOK!";

答案:B

第34题 (1.0分) ???????题号:6244 ???????难度:中 ???????第8章

设有定义语句:double *p,m=2.6;,要使指针p指向变量m,则以下正确的赋值语句是().

A:p=&m;

B:p=m; ?

C:*p=&m;

D:*p=m;

答案:A

第35题 (1.0分) ???????题号:6998 ???????难度:较难 ???????第8章

有以下程序

#include <stdio.h>

void fun1(char *p)

{

????char ?*q;

????q=p;

????while(*q!='\0')

????{ ?

????????(*q)++; ?

????????q++; ?

????}

}

main()

{

????char ?a[]={"Program"}, *p;

????p=&a[3]; ?

????fun1(p); ?

????printf("%s\n",a);

}

程序执行后的输出结果是

A:Prphsbn

B:Prohsbn

C:Progsbn

D:Program

答案:B

第36题 (1.0分) ???????题号:7294 ???????难度:中 ???????第8章

设有某函数的说明为

????int* func(int a[10], int n);

则下列叙述中,正确的是

A:形参a对应的实参只能是数组名

B:说明中的a[10]写成a[]或*a效果完全一样

C:func的函数体中不能对a进行移动指针(如a++)的操作

D:只有指向10个整数内存单元的指针,才能作为实参传给a

答案:B

第37题 (1.0分) ???????题号:7124 ???????难度:中 ???????第9章

若有以下程序

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

struct stu { ?

????char ?*name, gender;

????int ?score;

};

main()

{ ?

????struct stu ?a={NULL, 'm', 290}, b;

????a.name=(char *)malloc(10);

????strcpy(a.name, "Zhao");

????b = a; ??b.gender = 'f'; ??b.score = 350;

????strcpy(b.name, "Qian");

????printf( "%s,%c,%d,", a.name, a.gender, a.score );

????printf( "%s,%c,%d\n", b.name, b.gender, b.score );

}

则程序的输出结果是

A:Zhao,m,290,Zhao,f,350

B:Zhao,m,290,Qian,f,350

C:Qian,f,350,Qian,f,350

D:Qian,m,290,Qian,f,350

答案:D

第38题 (1.0分) ???????题号:6124 ???????难度:较易 ???????第9章

设有以下程序段

struct ?book

{

????float price;

????char language;

????char title[20];

} rec, *ptr;

ptr = &rec;

要求输入字符串给结构体变量rec的title成员,错误的输入语句是

A:scanf("%s", ptr.title);

B:scanf("%s", rec.title);

C:scanf("%s", (*ptr).title);

D:scanf("%s", ptr->title);

答案:A

第39题 (1.0分) ???????题号:6034 ???????难度:较易 ???????第9章

有如下定义:

struct

{ ?int ?num;

???char ?name[10];

???struct ?

??????{ int ?y; int ?m; int ?d;} birth;

} s,*ps=&s;

以下对内嵌结构体成员的引用形式错误的是

A:ps->birth.y ?

B:s.birth.y

C:ps.birth.y

D:(*ps).birth.y

答案:C

第40题 (1.0分) ???????题号:6732 ???????难度:中 ???????第10章

有以下程序段

??????FILE *fp;

??????if( (fp=fopen("test.txt","w")) == NULL)

????????{ ??printf("不能打开文件!");

????????????exit(0);}

??????else

???????????printf("成功打开文件!");

若指定文件test.txt不存在,且无其他异常,则以下叙述错误的是

A:输出"不能打开文件!"

B:输出"成功打开文件!"

C:系统将按指定文件名新建文件

D:系统将为写操作建立文本文件

答案:A

二、程序填空 ??共1题 (共计18分)

第1题 (18.0分) ???????题号:654 ???????难度:中 ???????第2章

/*-------------------------------------------------------

【程序填空】

---------------------------------------------------------

功能:编程求解"百钱百鸡问题":公鸡一只值5元钱,母鸡一只值3元

??????钱,小鸡3只值一元钱,求解100元钱买100只鸡。输出结果如样张。

---------------------------------------------------------*/

#include <stdio.h>

/***********SPACE***********/

【?】()

{

????int a,b,c;

????/***********SPACE***********/

????for(a=1;【?】;a++)

????/***********SPACE***********/

???????for(b=1;【?】;b++)

???????????for(c=1;c<=100;c++)

????/***********SPACE***********/

???????????????if((a+b+c==100)&&(15*a+9*b+1*c==【?】))

????/***********SPACE***********/

????????????????????printf("公鸡:%4d,母鸡:%4d,小鸡:%4d\n",【?】);

}

答案:

=======(答案1)=======

main

=========或=========

void main

=========或=========

int main

=======(答案2)=======

a<=20

=========或=========

a<21

=========或=========

20>=a

=========或=========

21>a

=========或=========

a<=100

=========或=========

a<100

=========或=========

100>i

=========或=========

100>=i

=======(答案3)=======

b<=33

=========或=========

33>=b

=========或=========

b<34

=========或=========

34>b

=========或=========

b<=100

=========或=========

b<100

=========或=========

100>=b

=========或=========

100>b

=======(答案4)=======

300

=======(答案5)=======

a,b,c

三、程序改错 ??共1题 (共计18分)

第1题 (18.0分) ???????题号:200 ???????难度:中 ???????第1章

/*-------------------------------------------------------

【程序改错】

---------------------------------------------------------

题目:下列给定程序中,fun函数的功能是:根据形参m,计算下列公式的值。

???????t=1+1/2+1/3+1/4+…+1/m

例如:若输入5,则应输出2.283333。

-------------------------------------------------------*/

#include <stdlib.h>

#include <conio.h>

#include <stdio.h>

double fun(int m)

{

????????double t=1.0;

????????int i;

????????for(i=2;i<=m;i++)

/***********FOUND***********/

????????????????t+=1.0/k; ????????????/*只修改错误的地方其他不要改写否则不得分*/

/***********FOUND***********/

????????return i;

}

void main()

{

????????int m;

????????system("CLS");

????????printf("\nPlease enter 1integer number: ");

????????scanf("%d",&m);

????????printf("\nThe result is %1f\n", fun(m));

}

答案:

=======(答案1)=======

t+=1.0/i;

=========或=========

t= t + 1.0/i ;

=======(答案2)=======

return t;

=========或=========

return (t);

四、程序设计 ??共1题 (共计24分)

第1题 (24.0分) ???????题号:300 ???????难度:中 ???????第1章

/*-------------------------------------------------------

【程序设计】

---------------------------------------------------------

题目:请编写函数fun,该函数的功能是:将放在字符串数组中的M个字符串(每串的长度不

??????超过N),按顺序合并组成一个新的字符串。

例如:若字符串数组中的M个字符串为{"AAAA","BBBBBBB","CC"}则合并后的字符串内容应

??????该是"AAAABBBBBBBCC"

注意:请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入

??????所编写的若干语句。

-------------------------------------------------------*/

#include <stdio.h>

#include <conio.h>

#define M 3

#define N 20

void fun(char a[M][N],char *b)

{

/**********Program**********/

??????????????????????????????????????????????????????????????

/********** ?End ?**********/

}

void main()

{

??

????????char w[M][N]={"AAAA", "BBBBBBB", "CC"},i;

????????char a[100]={"##############################"};

????????printf("The string:\n ");

????????for(i=0;i<M;i++)

????????????????puts(w[i]);

????????printf("\n ");

????????fun(w,a);

????????printf("The A string:\n ");

????????printf("%s ",a);

????????printf("\n\n ");

}

答案: int i,j,k=0;

for(i=0;i<M;i++) ?????????????????????????????

for(j=0;a[i][j]!='\0';j++)

b[k++]=a[i][j];

b[k]='\0'; ?

文章来源:https://blog.csdn.net/2301_78235522/article/details/135470818
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。