二级C语言备考1

发布时间:2024年01月10日

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

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

以下叙述中正确的是

A:C语言规定必须用main作为主函数名,程序将从此开始执行

B:可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行

C:C语言程序将从源程序中第一个函数开始执行

D:main的各种大小写拼写形式都可以作为主函数名,如:MAIN,Main等

答案:A

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

有以下程序

#include <stdio.h>

main()

{ ?

????int a=1, b=2, c=3, x;

????x = (a^b)&c;

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

}

程序的运行结果是

A:3

B:1

C:2

D:0

答案:A

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

设有定义:int k=3,i=2; 以下选项中,变量k的值与其他三个不同的是().

A:k-=i;

B:k=--i;

C:k=i-1;

D:k=i--;

答案:D

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

以下是正确C语言实型常量的是().

A:.8e+8.

B:e+8

C:+8e.8

D:+8.8e+8

答案:D

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

有以下定义语句,编译时会出现编译错误的是

A:char ?a='\x2d';

B:char ?a='\n';

C:char ?a='a';

D:char ?a="aa";

答案:D

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

若有定义:double a; char d; ?float b;

若想把1.2输入给变量a,字符'k'输入给变量d,3.4输入给变量b,程序运行时键盘输入:

???1.2 k 3.4 <回车>

则以下正确的读入语句是().

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

B:scanf("%lf %c %f", &a, &d, &b);

C:scanf("%f %c %f", &a, &d, &b);

D:scanf("%f%c%f", &a, &d, &b);

答案:B

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

以下能正确表述算式 sin(2πr+30°)的C语言表达式是

A:sin(2*3.14*r+3.14*30/180.0)

B:sin(2*π*r+ 30 )

C:sin(2*3.14*r+ 30 )

D:sin(2*3.14*r+30*3.14/360.0)

答案:A

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

有以下程序段

?????int ?i, n;

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

?????{ ?n = rand( ) % 5;

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

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

???????????case 3: ?printf("%d \n", n); ?break;

???????????case 2:

???????????case 4: ?printf("%d \n", n); ?continue;

???????????case 0: ?exit(0);

????????}

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

?????}

以下关于程序段执行情况的叙述,正确的是

A:for循环语句固定执行8次

B:当产生的随机数n为4时结束循环操作

C:当产生的随机数n为1和2时不做任何操作

D:当产生的随机数n为0时结束程序运行

答案:D

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

对于if(表达式)语句,以下叙述正确的是

A:"表达式"不能是变量

B:"表达式"的值只能是整数值

C:"表达式"可以是常量

D:"表达式"中不可以出现字符型变量的比较

答案:C

第10题 (1.0分) ???????题号:6743 ???????难度:中 ???????第4章

有以下程序段

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

????????if(a<b) a==b;

????????if(a<c) a==c;

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

该程序段的功能是

A:输出a、b、c中值相等的数值

B:输出a、b、c中的最大值

C:输出a、b、c中的最小值

D:输出a的原始值

答案:D

第11题 (1.0分) ???????题号:6388 ???????难度:中 ???????第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

第12题 (1.0分) ???????题号:6461 ???????难度:易 ???????第4章

对于 if(表达式) 语句,以下叙述正确的是( ).

A:"表达式"可以是常量

B:"表达式"的值只能是整数值

C:"表达式"不能是变量

D:"表达式"中不可以出现字符

答案:A

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

有以下程序

????#include <stdio.h>

????main()

????{ ?int ?a, b; ????

???????for( a=1,b=1; a<=100; a++ )

???????{ ?if(b>=20) break;

??????????if(b % 3==1) { ?b=b+3; continue; }

??????????b=b-5;

???????}

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

????}

程序的输出结果是

A:10

B:9

C:8

D:7

答案:C

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

有以下程序

????#include <stdio.h>

?????main()

????{ int ?k=5;

??????while(--k) ?printf("%d",k -= 3);

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

????}

执行后的输出结果是

A:1

B:2

C:4

D:死循环

答案:A

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

有以下程序:

#include ?<stdio.h>

main()

{int i,j,m=1;

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

{for(j=3;j>0;j-- )

{ if(i*j>3) break;

m*=i*j;

?}

}

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

}

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

A:m=4

B:m=2

C:m=6

D:m=5

答案:C

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

以下程序段中,循环次数不超过10的是

A:int i=10; ?do{ i=i+1;} while(i<0);

B:int i=5; ??do{ i+=1;} while(i>0);

C:int i=1; ??do{ i+=2;} while(i!=10);

D:int i=6; ??do{ i-=2;} while(i!=1);

答案:A

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

以下叙述中正确的是

A:continue语句使得整个循环终止

B:break语句不能用于提前结束for语句的本层循环

C:使用break语句可以使流程跳出switch语句体

D:在for语句中,continue与break的效果是一样的,可以互换

答案:C

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

若有以下程序

????#include <stdio.h>

????main()

????{ ?int ?a=6, b=0, c=0;

???????for ( ;a; ) ?{ ?b += a; ??a -= ++c; ?}

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

????}

则程序的输出结果是

A:1,14,3

B:0,14,3

C:0,18,3

D:0,14,6

答案:B

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

有以下程序

#include <stdio.h>

#include <string.h>

main()

{ ???char ?s[5][8]={"red","yellow","green","blue","white"};

?????int i,j; ?char t[8];

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

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

????????????if(strlen(s[i])<strlen(s[j]))

????????????{ ?strcpy(t,s[i]); strcpy(s[i],s[j]); strcpy(s[j],t); }

?????printf("%s\n",s[0]);

} ???

程序的运行结果是

A:red

B:white

C:yellow

D:green

答案:C

第20题 (1.0分) ???????题号:6879 ???????难度:较易 ???????第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分) ???????题号:6086 ???????难度:较难 ???????第6章

有以下程序

#include ??<stdio.h>

main( )

{ ?int ?a[4],p,x,i;

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

?????a[i-1]=i*2-1;

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

???i=0;

???while( a[i]<x ) ?

?????i++;

???p=i;

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

?????a[i]=a[i-1];

???a[p]=x;

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

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

???printf("\n");

}

执行时输入:2<回车>,则输出结果是

A:1 ?2 ?3 ?4

B:5 ?4 ?3 ?1

C:1 ?2 ?3 ?5

D:3 ?2 ?1 ?4

答案:C

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

下面说法正确的是().

A:方括号数组说明符中不能使用带有运算符的表达式

B:char c1 = 'A', c2, *c3; 是合法的变量定义语句

C:数组下标的下限在定义数组时设置,可以设定为负数

D:对于数组元素是浮点值的数组float array[3],array[1.5]是合法的

答案:B

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

语句printf("%d\n", strlen("\t\"\\\n\'\065\08AB"));的输出结果是

A:6

B:7

C:8

D:9

答案:A

第24题 (1.0分) ???????题号:6444 ???????难度:较难 ???????第6章

有以下程序

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

????main()

????{ ?char ?s[][6]={"abcd","abc","ab"}; ???int ?i;

???????for( i=0;i<3;i++ ) ?puts(s[i]);

????}

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

A:abcd

abc

ab

B:a

a

a

C:abcd

bcd

cd

D:a

b

c

答案:A

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

下面关于编译预处理的命令行中,正确的是().

A:#define int INT

B:##define eps 0.001

C:##DEFINE TRUE

D:#define E 2.88

答案:D

第26题 (1.0分) ???????题号:6992 ???????难度:较难 ???????第7章

设有以下函数:

????void fun(int n,char *s)

????{ ?…… ?}

则下面对函数指针的定义和赋值均正确的是

A:void (*pf)(int,char); ????pf=&fun;

B:void ?*pf(); ?????pf=fun;

C:void ?*pf(); ????*pf=fun;

D:void ?(*pf)(int, char*); ???pf=fun;

答案:D

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

有下列程序

#include <stdio.h>

int a = 1;

int func(int a)

{ int b = 1;

??static int c = 1;

??a++; b++; ++c;

??return a + b + c;

}

main( )

{ ?int k, a = 4;

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

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

}

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

A:9,9,9,

B:6,8,10,

C:6,7,8,

D:9,10,11,

答案:D

第28题 (1.0分) ???????题号:6220 ???????难度:较难 ???????第7章

有以下程序

????#include <stdio.h>

????int a[5]={ 7,2,9,10,3 };

????void st(int *,int);

????void main()

????{

????????int i;

????????st(a,5);

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

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

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

????}

????void st(int *b,int n)

????{

????????int i,m,t;

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

????????m=0;

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

????????????if(b[i]<b[m]) m=i;

????????t=b[0];b[0]=b[m];b[m]=t;

????????b++;n--;

????????st(b,n);

????}

程序的运行结果是().

A:2 ?3 ?7 ?9 ?10

B:10 ?9 ?7 ?3 ?2

C:2 ?10 ?3 ?9 ?7

D:2 ?7 ?3 ?9 ?10

答案:A

第29题 (1.0分) ???????题号:6441 ???????难度:易 ???????第7章

若有函数定义如下

??????????int fun(int ?x,int ?y)

??????????{ ?return ?x-y; ?}

则以下涉及上述函数的说明语句错误的( ).

A:int fun( int ?x,y ); ?

B:int fun( int ,int );

C:int fun( int ?a,int ?b ); ?

D:int i,fun(int ?x,int ?y);

答案:A

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

有以下程序

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

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

??????{ ?static int t=1; ??int i=1;

?????????for( ; i<=n; i++) ?t*=i;

?????????return t;

??????}

??????main()

??????{ ?int t=1,i;

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

????????????t+=fun(i);

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

??????}

程序的运行结果是

A:8

B:11

C:15

D:4

答案:C

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

有以下程序(其中的strstr()函数头部格式为:char *strstr(char *p1, char *p2) 确定

p2字符串是否在p1中出现,并返回p2第一次出现的字符串首地址)

#include <stdio.h>

#include <string.h>

char ?*a="you";

char ?*b="Welcome you to Beijing!";

main()

{ ?char *p;

???p = strstr(b, a) + strlen(a) + 1;

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

}

程序的运行结果是

A:to Beijing!

B:you to Beijing!

C:Welcome you to Beijing!

D:Beijing!

答案:A

第32题 (1.0分) ???????题号:5947 ???????难度:较难 ???????第8章

有以下程序

#include <stdio.h>

#include <stdlib.h>

void fun(int **s, int x[2][3])

{ ?**s=*(x[1]+1); ?}

main()

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

???p = (int*)malloc(sizeof(int));

???fun(&p,a);

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

}

程序的运行结果是

A:6

B:2

C:5

D:3

答案:C

第33题 (1.0分) ???????题号:6357 ???????难度:易 ???????第8章

以下叙述正确的是

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

B:数组说明符的一对方括号中不能使用表达式

C:数组元素下标可以是非整数

D:若有定义 char array[4]; 则语句 printf("%c", array["3"]);是合法的

答案:A

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

设有定义:

????char *c;

以下选项中能够使c正确指向一个字符串的是

A:char str[ ]="string"; c=str;

B:scanf("%s",c);

C:c=getchar( );

D:*c="string";

答案:A

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

以下关于指针的叙述,错误的是

A:两个基类型相同的指针变量不能指向同一个对象

B:可以通过对指针变量加上或减去一个整数来移动指针

C:在关系表达式中可以对两个指针变量进行比较

D:一个指针变量可以通过不同的方式获得一个确定的地址值

答案:A

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

对于函数声明

????void fun(float array[], int *ptr);

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

A:调用函数时,array按值传送地址,ptr是按地址传送数值

B:函数参数 array 是数组名,不是指针变量,ptr 是指针变量

C:调用函数时,调用处的实参数组的所有值都会自动复制到array数组中

D:函数参数 array, ptr 都是指针变量

答案:D

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

有下列程序

#include ?<stdio.h>

#include ?<string.h>

typedef struct stu {

????char name[9];

????char gender;

????int score;

} STU;

void f(STU *a)

{ ??STU c={"Sun", 'f', 90},*d=&c;

????a = d;

????strcpy(a->name,c.name);

a->gender = c.gender;

????a->score = c.score;

printf("%s,%c,%d,", a->name, a->gender, a->score);

}

main( )

{ ?STU a={"Zhao", 'm', 85};

???f(&a);

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

}

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

A:Zhao,m,85,Sun,f,90

B:Sun,f,90,Sun,f,90

C:Sun,f,90,Zhao,m,85

D:Zhao,m,85,Zhao,m,85

答案:C

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

设有定义:

????struct complex

????{ ?int real,unreal;} data1={1,8},data2;

则以下赋值语句中错误的是

A:data2=(2,6);

B:data2=data1;

C:data2.real=data1.real;

D:data2.real=data1.unreal;

答案:A

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

以下结构体类型说明和变量定义中正确的是

A:struct ?REC ;

{ int ?n; ?char ?c; };

REC ?t1,t2;

B:typedef struct

{ int ?n; ?char ?c; } REC;

REC ?t1,t2;

C:typedef struct ?REC;

{ int ?n=0; ?char ?c='A'; } t1,t2;

D:struct

{ int ?n; ?char ?c; } REC;

REC ?t1,t2;

答案:B

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

以下叙述中正确的是

A:函数的返回值不能是结构体类型

B:在调用函数时,可以将结构体变量作为实参传给函数

C:函数的返回值不能是结构体指针类型

D:结构体数组不能作为参数传给函数

答案:B

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

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

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

【程序填空】

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

功能: 打印以下图案:

*********

??*******

????*****

??????***

????????*

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

#include<stdio.h>

void main()

{

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

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

????for( i=0 ; i<5;i【?】 )

????{

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

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

??????????for( j=1 ; j【?】2*i ; j++ )

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

???????????????【?】("%c",' ');

??????????for( k=0 ; k < 9-2*i ; k++ )

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

???????????????printf("%【?】",'*');

????}

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

}

答案:

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

++

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

=i+1

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

=1+i

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

+=1

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

<=

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

printf

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

c

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

第1题 (18.0分) ???????题号:393 ???????难度:难 ???????第20章

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

【程序改错】

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

题目:void add(char a[],char b[],char c[])函数将由'0','1'

??????组成的字符串a,b按二进制数加法规则相加,和仍以'0','1'

??????组成的字符串形式保存到字符串c中。

例如:字符串a为"1100",字符串b为"111",调用add函数后字符串c

??????为"10011"。

??????请改正程序中的错误,使它能得出正确的结果。

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

注意:不得增行或删行,也不得更改程序的结构。

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

#include <stdio.h>

#include <string.h>

void reverse(char s[])

{

????int i,len;

????char t;

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

????len=strlen(s)-1;

????for(i=0;i<len/2;i++)

????{

????????t=s[i];

????????s[i]=s[len-i-1];

????????s[len-i-1]=t;

????}

}

void add(char a[],char b[],char c[])

{

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

????i=strlen(a)-1;

????j=strlen(b)-1;

????k=flag=0;

????while(i>=0||j>=0)

????{

????????if(i<0)

????????????t=b[j]-48+flag;

????????else if(j<0)

????????????t=a[i]-48+flag;

????????else

????????????t=a[i]-48+b[j]-48+flag;

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

????????c[k]=t/2;

????????k++;

????????if(t>1)

????????????flag=1;

????????i--;

????????j--;

????}

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

????if(flag==0)

????????c[k++]='1';

????c[k]='\0';

????reverse(c);

}

int main()

{

????char a[50],b[50],c[51];

????printf("Input a(binary):\n");

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

????printf("Input b(binary):\n");

????scanf("%s",b);

????add(a,b,c);

????printf("After adding ?a+b=%s\n",c);

????return 0;

}

答案:

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

len=strlen(s);

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

c[k]=t%2+48;

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

c[k]=48+t%2;

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

c[k]=t%2+'0';

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

c[k]='0'+t%2;

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

if(flag)

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

if(flag==1)

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

if(flag!=0)

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

if(1==flag)

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

if(0!=flag)

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

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

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

【程序设计】

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

题目:请编写函数fun,其功能是:找出2×M整型二维数组中最大元素的值,并将此值 ?

??????返回调用函数。

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

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

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

#include <stdio.h>

#include <stdlib.h>

#define M 4

int fun (int a[][M])

{

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

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

}

main( )

{ ?

????????int arr[2][M]={5,8,3,45,76,-4,12,43} ;

????????printf("max =%d\n", fun(arr)) ;

????????system("pause");

}

答案: int i,j,max=a[0][0];

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

for(j=0;j<M;j++)

if(max<a[i][j])

max=a[i][j];

return max;

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