二级C语言备考5

发布时间:2024年01月14日

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

第1题 (1.0分) ???????题号:6100 ???????难度:中 ???????第1章

下列叙述中正确的是

A:程序可以作为算法的一种表达方式

B:算法的有穷性是指算法的规模不能太大

C:算法的复杂度用于衡量算法的控制结构

D:算法的效率与数据的存储结构无关

答案:A

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

以下选项中与 ( !a== 0 )的逻辑值不等价的表达式是

A:( a== !0 )

B:a

C:(a>0 || a<0)

D:(a!= 0 )

答案:A

第3题 (1.0分) ???????题号:6842 ???????难度:中 ???????第2章

若有定义int ?x,y; 并已正确给变量赋值,则以下选项中与表达式(x-y)?(x++) : (y++)中的条件表达式(x-y) 等价的是().

A:(x-y<0||x-y>0)

B:(x-y<0)

C:(x-y>0)

D:(x-y==0)

答案:A

第4题 (1.0分) ???????题号:6134 ???????难度:较易 ???????第2章

若变量已正确定义并赋初值,以下合法的赋值语句是

A:k=(m==n);

B:k=-m-n

C:k=int(m+n);

D:k=m*n=1;

答案:A

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

有以下程序

#include ??<stdio.h>

main( )

{

????int ?a = 2, b;

????b = (a >>= 1) + 4;

????printf("%d,%d", a, b);

}

程序运行后的输出结果是

A:1,5

B:2,4 ?

C:2,6

D:2,5

答案:A

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

有以下程序段

????char c1,c2,c3;

????scanf("%c%c%c",&c1,&c2,&c3); ?

若要给c1、c2、c3分别输入字母A、B、C,则以下对输入形式的描述正确的是

A:字母A、B、C之间可以用空格分隔

B:字母A、B、C之间不能有分隔符

C:字母A、B、C之间可以用回车符分隔

D:字母A、B、C之间可以用Tab键分隔

答案:B

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

若有定义:char ch; int a; double d;, 当输入为12345 678910.36时,以下选项中能给各个变量正确输入数据的是().

A:scanf("%d%c%lf",&a,&ch,&d);

B:scanf("%5d%2c%7.2lf",&a,&ch,&d);

C:scanf("%d%c%lf",a,ch,d);

D:scanf("5d%2c%7.2lf%",&a,&ch,&d);

答案:A

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

与数学表达式x≥y≥z对应的C语言表达式是

A:(x>=y)||(y>=x)

B:(x>=y>=z)

C:(x>=y)!(y>=z)

D:(x>=y)&&(y>=z)

答案:D

第9题 (1.0分) ???????题号:6770 ???????难度:中 ???????第4章

有如下程序

#include ??<stdio.h>

main( )

{

????int ?a = 0, b = 1;

????if (a++ && b++)

????????printf("TRUE");

????else

????????printf("FALSE");

????printf("_OUT:a=%d,b=%d\n", a, b);

}

程序运行后的输出结果是

A:FALSE_OUT:a=1,b=1

B:FALSE_OUT:a=0,b=2

C:TRUE_OUT:a=1,b=2

D:TRUE_OUT:a=0,b=1

答案:A

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

有以下程序

????#include <stdio.h>

????main()

????{ ?int ??x=1, y=0, a=0, b=0;

???????switch ( x )

???????{ ?case 1:

????????????switch(y)

????????????{ ?case 0: ?a++; ?break;

???????????????case 1: ?b++; ?break;

????????????}

??????????case 2: ?a++; ?b++; ?break;

??????????case 3: ?a++; ?b++;

???????}

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

????}

程序的运行结果是

A:a=2,b=2

B:a=2,b=1

C:a=1,b=1

D:a=1,b=0

答案:B

第11题 (1.0分) ???????题号:6843 ???????难度:中 ???????第4章

有以下程序:

#include ?<stdio.h>

main()

{ int ?x=1, y=0;

if (!x) ?y++;

else if (x==0)

if (x) ?y+=2;

else ??y+=3;

printf("%d\n", y);

}

程序运行后的输出结果是().

A:3

B:2

C:1

D:0

答案:D

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

设有定义:int m=1,n=2;

则以下if语句中,编译时会产生错误信息的是().

A:if(m>n) m--

else n--;

B:if(m=n){ m++; n++; }

C:if(m<0 && n<0) { ?}

D:if(m>0) ;

else m++;

答案:A

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

有以下程序

????#include <stdio.h>

????void main()

????{

????????int i, m = 0, n = 0, k = 0;

????????for(i = 9; i <= 11; i++)

????????????switch(i / 10)

????????????{ ?case 0: m++; n++; break;

???????????????case 10: n++; break;

???????????????default: k++; n++;

????????????}

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

????}

程序运行后的输出结果是().

A:4 5 1

B:3 5 4

C:1 5 4

D:1 3 2

答案:D

第14题 (1.0分) ???????题号:7197 ???????难度:较易 ???????第5章

有以下程序

????#include <stdio.h>

????main()

????{ ?int ?i, sum;

???????for( i=1; i<6; ?i++ ) ?sum+=i;

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

????}

程序运行后的输出结果是

A:随机值

B:0

C:15

D:16

答案:A

第15题 (1.0分) ???????题号:6851 ???????难度:较难 ???????第5章

有以下程序:

#include ??<stdio.h>

main()

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

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

switch(i%2)

{ case 0: switch(a[i]%2)

??{ case 0:a[i]++;break;

?case 1:a[i]--;

???} break;

case 1:a[i]=0;

}

for(i=0;i<4;i++) printf("%d ",a[i]); printf("\n");

}

程序运行后的输出结果是().

A:0 3 0 4

B:2 0 5 0

C:3 3 4 4

D:3 0 4 0

答案:D

第16题 (1.0分) ???????题号:5962 ???????难度:易 ???????第5章

有如下程序段

??????int ?k;

??????for(k=2;k==0;) ?printf("%d",k--);

则for循环体执行的次数是

A:0次 ?

B:1次

C:2次 ??

D:无限次

答案:A

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

有以下程序

????#include <stdio.h>

????main()

????{ ?int ?k, j, s;

???????for( k=2; k<6; k++,k++ )

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

??????????for (j=k; j<6; j++ ) ?s+=j;

???????}

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

????}

程序运行后的输出结果是

A:6

B:10

C:24

D:40

答案:B

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

有以下程序 ??

?#include <stdio.h>

????main()

????{

????????int ?i,j;

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

????????{

????????????for(j=i; j<4; j++) ?printf("%d*%d=%d ?",i,j,i*j);

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

????????}

????}

程序运行后的输出结果是

A:1*1=1 ?1*2=2 ?1*3=3

2*2=4 ?2*3=6

3*3=9

B:1*1=1 ?1*2=2 ?1*3=3

2*1=2 ?2*2=4

3*1=3

C:1*1=1

1*2=2 ?2*2=4

1*3=3 ?2*3=6 ?3*3=9

D:1*1=1

2*1=2 ?2*2=4

3*1=3 ?3*2=6 ?3*3=9

答案:A

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

设有定义

????char str[] = "Hello";

则语句

????printf("%d %d", sizeof(str), strlen(str));

的输出结果是

A:5 5

B:6 6

C:6 5

D:5 6

答案:C

第20题 (1.0分) ???????题号:6054 ???????难度:较易 ???????第6章

以下定义数组的语句中错误的是

A:int ?num[][3]={ {1,2},3,4,5,6 };

B:int ?num[2][4]={ {1,2},{3,4},{5,6} };

C:int ?num[]={ 1,2,3,4,5,6 };

D:int ?num[][4]={1,2,3,4,5,6};

答案:B

第21题 (1.0分) ???????题号:7083 ???????难度:较易 ???????第6章

以下错误的定义语句是

A:int ?x[4][3]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};

B:int ?x[4][]= {{1,2,3},{1,2,3},{1,2,3},{1,2,3}};

C:int ?x[][3]={{0},{1},{1,2,3}};

D:int ?x[][3]={1,2,3,4};

答案:B

第22题 (1.0分) ???????题号:7026 ???????难度:较易 ???????第6章

有以下程序

????#include <stdio.h>

????main()

????{ ?

????????int ?s[12]={1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i;

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

????????????c[s[i]]++;

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

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

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

????}

程序的运行结果是

A:2 3 4 4

B:4 3 3 2

C:1 2 3 4

D:1 1 2 3

答案:B

第23题 (1.0分) ???????题号:6660 ???????难度:较易 ???????第6章

以下选项中叙述正确的是

A:char c1, c2, *c3, c4[40]; 是合法的变量定义语句

B:数组说明符的一对方括号中只能使用整型常量,而不能使用表达式

C:数组下标的下限可以是负值

D:若有数组定义 float array[4]; 则语句 printf("%f", array[3.12]);是合法的

答案:A

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

设有如下程序段

????int a[8] = {0};

????int b[] = {0};

????char c[2] = {"A", "B"};

????char d = "AB";

以下叙述正确的是

A:只有a,b,c的定义是合法的

B:a,b,c,d的定义都是合法的

C:只有a,b的定义是合法的

D:只有c的定义是合法的

答案:C

第25题 (1.0分) ???????题号:6004 ???????难度:易 ???????第7章

以下叙述错误的是

A:未经赋值的全局变量值不确定

B:未经赋值的auto变量值不确定

C:未经赋值的register变量值不确定

D:未经赋值的静态局部变量值为0

答案:A

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

以下有关函数的叙述错误的是().

A:C语言规定,不能在函数的内部定义函数

B:在C语言的函数体中可以有多个return语句

C:在C语言中函数的实参个数可以有多个,各实参之间用分号隔开

D:C语言程序总是从main()函数开始执行

答案:C

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

有以下程序

#include <stdio.h>

#define ?S(x) ?x*x

main()

{ ?int ?k=5, j=2;

???printf("%d,%d\n", S(k+j+2),S(j+k+2));

}

程序的运行结果是

A:21,18

B:81,81

C:21,21

D:18,18

答案:A

第28题 (1.0分) ???????题号:5936 ???????难度:易 ???????第7章

有以下程序

#include <stdio.h>

double fun(double ?a)

{ double ?x;

??x = a - (int)a;

??return x;

}

main( )

{ ?double ?a = 3.1415;

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

}

程序的运行结果是

A:3.000000 ??

B:3.141500

C:0.141500

D:0.000000

答案:C

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

以下判断形参变量a是否为素数的函数正确的是( ).

A:int ?isprime(int ????a)

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

???????????for(i=2; i<=a/2; i++)

?????????????if(a%i==0) return ?0;

???????????return ?1;

????????}

B:int isprime(int ?a)

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

???????????for(i=2; i<=a/2; i++)

??????????????if(a%i==1) return ?1;

???????????return ?0;

????????}

C:int ?isprime(int ?a)

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

???????????for(i=2; i<=a/2; i++)

?????????????if(a%i==0) return ?0;

?????????????else ?return ?1;

????????}

D:int isprime(int ?a)

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

???????????for(i=2; i<=a/2; i++)

???????????if(a%i==1) return ?1;

???????????else ?return ?0;

????????}

答案:A

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

有以下程序

#include <stdio.h>

#define ?S(x) ?x/x*x

main( )

{ ?int ?k=6, j=3;

???printf("%d,%d\n", S(k+j), S(j+k));

}

程序运行后的输出结果是

A:27,27

B:9,9

C:27,29

D:29,29

答案:C

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

若有定义语句:int ?a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;,以下选项中错误引用a数组元素的是(其中 0≤i<10)

A:*(*(a+i))

B:a[ p-a ]

C:p[i]

D:*( &a[i] )

答案:A

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

若有以下程序

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

?????int ?*f(int ?*s, int ?*t)

?????{ ?int ?k;

????????if (*s < *t) ?{ k = *s; ?*s=*t; ?*t=k; }

????????return s;

?????}

?????main()

?????{ ?int ?i=3, j=5, *p=&i, *q=&j, *r; ?

????????r=f(p,q);

????????printf("%d,%d,%d,%d,%d\n", i, j, *p, *q, *r);

?????}

则程序的输出结果是

A:5,3,3,5,5

B:3,5,5,3,5

C:3,5,3,5,5

D:5,3,5,3,5

答案:D

第33题 (1.0分) ???????题号:5968 ???????难度:较难 ???????第8章

有以下程序

#include <stdio.h>

main()

{ ?int x[3][4] = {1,3,5,7,9,11,2,4,6,8,10,12} ;

???int (*p)[4] = x, k = 1, m, n = 0;

???for(m=0; m<2; m++) n += *(*(p+m)+k);

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

}

程序的运行结果是

A:10

B:20 ?

C:14

D:16

答案:C

第34题 (1.0分) ???????题号:7150 ???????难度:较难 ???????第8章

若有以下程序

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

?????char ?*a="you", b[ ]="welcome#you#to#China!";

?????main()

?????{ ?int ?i,j=0; ???char *p;

????????for ( i=0; b[i]!='\0'; i++ )

????????{ ??if (*a == b[i])

????????????{ ?p=&b[i];

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

????????????????{ ?if (a[j] != *p) ?break;

???????????????????p++;

????????????????}

????????????if (a[j]=='\0') ?break;

????????????}

????????}

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

?????}

则程序的输出结果是

A:#to#China!

B:#you#to#China!

C:me#you#to#China!

D:#China!

答案:A

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

有以下程序

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

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

?????{ int *c;

???????c=a;a=b;b=c;

?????}

?????main()

?????{ int ?x=3, y=5, *p=&x, *q=&y ;

???????fun(p,q); ?printf("%d,%d,",*p,*q);

???????fun(&x,&y); printf("%d,%d\n",*p,*q);

?????}

程序运行后的输出结果是

A:3,5,3,5

B:3,5,5,3

C:5,3,3,5

D:5,3,5,3

答案:A

第36题 (1.0分) ???????题号:6848 ???????难度:较难 ???????第8章

有以下程序:

#include ??<stdio.h>

int add( int ?a,int ?b){ return (a+b); ?}

main()

{ int ?k, (*f)(), a=5,b=10;

f=add;

}

则以下函数调用语句错误的是().

A:k=f(a,b);

B:k=add(a,b);

C:k=(*f)(a,b);

D:k= *f(a,b);

答案:D

第37题 (1.0分) ???????题号:5913 ???????难度:较难 ???????第9章

若有定义

typedef int *T;

T ?*a[20];

则以下与上述定义中a类型完全相同的是

A:int ?**a[20];

B:int ?(*a)[20];

C:int ?*(*a)[20];

D:int ?*a[20];

答案:A

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

以下叙述中错误的是

A:用typedef可以说明一种新的类型名

B:typedef的作用是用一个新的标识符来代表已存在的类型名

C:可以用typedef说明的新类型名来定义变量

D:typedef说明的新类型名必须使用大写字母,否则会出编译错误

答案:D

第39题 (1.0分) ???????题号:6517 ???????难度:中 ???????第9章

设有定义

#include <stdio.h >

#include <stdlib.h >

typedef struct{ int x,y; } T;

typedef struct{ int x,y; } *USER;

USER fun( )

{ USER p;

??p=(USER)malloc(sizeof(T));S

??p- >x=1;

??p- >y=2;

??return p;

}

函数fun返回值的类型是().

A:T类型的结构体

B:指向结构体类型的指针

C:int类型的元素

D:int类型的指针

答案:B

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

有以下程序

#include <stdio.h>

main( )

{ ?FILE *fp;

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

???fp = fopen("data.dat", "w+");

???fprintf(fp, "%d\n", a[0]);

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

???{ ??rewind(fp);

???????fprintf(fp, "%d\n", a[i]);

???}

???rewind(fp);

???fscanf(fp, "%d", &k);

???fclose(fp);

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

}

程序运行后的输出结果是

A:6 ??

B:21

C:123456 ??

D:654321

答案:A

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

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

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

【程序填空】

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

题目:下列给定程序中,函数fun的功能是:把形参a所指数组中的最小值放在元素a[0]中,

???????接着把a所指数组中的最大值放在a[1]元素中;再把a所指数组元素中的次小值放

???????在a[2]中,把a所指数组元素中的次大值放在a[3],以此类推。

例如:若a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7;则按规则移动后,

??????数据排列为:1、9、2、8、3、7、4、6、5。形参n中存放a所指数组中数据的个数。

??????规定fun函数中的max存放当前所找的最大值,px存放当前所找最大值的下标。

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

# include ???<stdio.h>

#define ???N ???9

void fun(int ?a[], int ?n)

{ ?

????????int ?i,j, max, min, px, pn, t;

????????for (i=0; i<n-1; i+=2)

????????{

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

????????????????max = min = 【?】;

????????????????px = pn = i;

????????????????for (j=i+1; j<n; j++)

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

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

????????????????????????if (max<【?】)

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

????????????????????????????????max = a[j]; px = j;

????????????????????????}

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

????????????????????????if (min>【?】)

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

????????????????????????????????min = a[j]; pn = j;

????????????????????????}

????????????????}

????????????????if (pn != i)

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

????????????????????????t = a[i]; a[i] = min; a[pn] = t;

????????????????????????if (px == i) px =pn;

????????????????}

????????????????if (px != i+1)

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

????????????????????????t = a[i+1]; a[i+1] = max; a[px] = t;

????????????????}

????????}

}

main()

{

????????int ?b[N]={9,1,4,2,3,6,5,8,7}, i;

????????printf("\nThe original data ?:\n");

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

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

????????fun(b, N);

????????printf("\nThe data after moving ?:\n");

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

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

}

答案:

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

a[i]

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

*(a+i)

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

*(i+a)

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

a[j]

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

*(a+j)

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

*(j+a)

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

a[j]

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

*(a+j)

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

*(j+a)

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

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

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

【程序改错】

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

题目:下列给定程序中函数fun的功能是:用下面的公式求π的近似值,直到最后一项

??????的绝对值小于指定的数(参数num)为止。如"图片1"。

例如:程序运行后,输入0.0001,则程序输出3.1414。 ???

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

#include <math.h>

#include <stdio.h>

float fun ( float num )

{ ??

????????int s ;

????????float n, t, pi ;

????????t = 1 ; pi = 0 ; n = 1 ; ?s = 1 ;

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

????????while(t >= num)

????????{

????????????????pi = pi + t ;

????????????????n = n + 2 ;

????????????????s = -s ;

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

????????????????t = s % n ;

????????}

????????pi = pi * 4 ;

????????return pi ;

}

main( )

{ ??

????????float n1, n2 ;

????????printf("Enter a float number: ") ;

????????scanf("%f", &n1) ;

????????n2 = fun(n1) ;

????????printf("%6.4f\n", n2) ;

}

答案:

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

while(fabs(t)>=num)

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

while(num<=fabs(t))

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

while(fabs(t)>num)

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

while(num<fabs(t))

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

t=s/n;

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

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

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

【程序设计】

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

题目:请编写函数fun,该函数的功能是:计算并输出n(包括n)以内

??????所有素数的平方根之和。

??????

例如:若主函数中从键盘给n输入20后,则输出为sum=23.432264。

注意:n的值要求不大于100。

??????请勿改动主函数main和其他函数中的任何内容,仅在函数fun的

??????花括号中填入你编写的若干语句。

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

#include ?<stdio.h>

#include ?<math.h>

double fun(int n) ?

{

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

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

}

void main()

{

????????int n;

????????double sum;

????????printf("Input ?N=");

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

????????sum=fun(n);

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

}

答案: int m,k,i;

double s=0.0;

for(m=2;m<=n;m++)

{

k=sqrt(m);

for(i=2;i<=k;i++)

if(m%i==0)

break;

if(i>=k+1)

s+=sqrt(m);

}

return s;

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