二级C语言备考10

发布时间:2024年01月19日

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

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

以下叙述正确的是

A:有些算法不能用三种基本结构来表达

B:C语言程序不编译也能直接运行

C:结构化程序的三种基本结构是循环结构、选择结构、顺序结构

D:如果C语言程序实现的算法很简单,则计算机不进行任何代码转换就能执行程序

答案:C

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

以下选项中不能作为C语言合法常量的是

A:1.00E+05

B:cd'

C:"\a"

D:\011'

答案:B

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

若有以下程序

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

?????main()

?????{ ?int c;

????????c = 13|5;

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

?????}

则程序的输出结果是

A:13

B:15

C:18

D:5

答案:A

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

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

A:.e-1

B:e-1

C:-1e

D:1e-1

答案:D

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

有以下程序:

#include ??<stdio.h>

main()

{int ?x, y, z;

?x=y=1;

?z=x++,y++,++y;

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

}

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

A:2,3,3

B:2,3,2

C:2,3,1

D:2,2,1

答案:C

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

???????????????3

B:12

C:1234

D:12

???????????????34

答案:A

第7题 (1.0分) ???????题号:7044 ???????难度:较易 ???????第3章

有以下程序

????#include <stdio.h>

????main()

????{

????????char ?c1,c2,c3,c4,c5,c6;

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

????????c5=getchar(); ???

????????c6=getchar();

????????putchar(c1); ????????

????????putchar(c2);

????????printf("%c%c\n",c5,c6);

????}

程序运行后,若从键盘输入(从第1列开始)

?????123<回车>

?????45678<回车>

则输出结果是

A:1245

B:1256

C:1278

D:1267

答案:A

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

若有定义 float a=12.3f; ?double b=456.78; 若想用printf函数输出a和b的值,关于输出格式,以下说法正确的是().

A:只能用%lf输出a,用%f输出b

B:只能用%f输出a,用%lf输出b

C:只能用%lf输出a,用%lf输出b

D:既可以用%f输出a,也可以用%f输出b

答案:D

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

有以下程序段

????#include <stdio.h>

main()

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

????a=10; ?b=50; ?c=30;

????if (a>b) a=b, ?b=c; ?c=a;

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

程序的输出结果是( ).

A:a=10 b=50 c=10

B:a=10 b=50 c=30

C:a=10 b=30 c=10 ?

D:a=50 b=30 c=50

答案:A

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

???????}

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

????}

程序运行后的输出结果是

A:a=1,b=0

B:a=1,b=1

C:a=2,b=1

D:a=2,b=2

答案:C

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

若有定义:

????float x=1.5;

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

则正确的switch语句是( ).

A:switch(a+b)

??????????{ case ?1: ???printf("*\n");

??????????case ?2+1: ?printf("**\n"); }

B:switch((int)x);

??????????{ case ?1: ?printf("*\n");

????????????case ?2: ?printf("**\n"); }

C:switch(x)

??????????{ case ?1.0: ?printf("*\n");

????????????case ?2.0: ?printf("**\n"); }

D:switch(a+b)

??????????{ case ?1: ?printf("*\n");

????????????case ?c: ?printf("**\n"); }

答案:A

第12题 (1.0分) ???????题号:6714 ???????难度:中 ???????第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的原始值

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

答案:A

第13题 (1.0分) ???????题号:6740 ???????难度:较难 ???????第5章

有以下程序

????#include <stdio.h>

????main()

????{

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

???????for( ?; ?i<6 ; )

???????{ ??switch(i%3)

??????????????{ ?case 0: k++;

?????????????????case 1: k++; break;

?????????????????case 2: k++; continue;

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

????????????i+=1;

???????}

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

????}

程序的运行情况是

A:形成无限循环

B:输出6

C:输出5

D:输出4

答案:A

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

若变量已正确定义

????for( x=0,y=0; ( y!=99 && x<4 ); x++ )

则以上for循环

A:执行3次

B:执行4次

C:执行无限次

D:执行次数不定

答案:B

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

有如下程序段

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

?????????if (i <= 5) break;

则循环结束后i的值为

A:1

B:0

C:5

D:10

答案:B

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

有以下程序

#include <stdio.h>

main()

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

???for(;a<5; a++)

???{ ?if (a%2==0) ?break;

??????b += a;

???}

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

}

程序的运行结果是

A:1

B:10

C:0

D:4

答案:A

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

有以下程序

????#include <stdio.h>

????main()

????{ int ?i;

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

??????{ if(i++%5==0)

???????????if(++i%8==0) ?printf("%d ",i);

??????}

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

????}

执行后的输出结果是

A:5

B:24

C:32

D:40

答案:C

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

以下叙述中正确的是

A:只能在循环体内和switch语句体内使用break语句

B:当break出现在循环体中的switch语句体内时,其作用是跳出该switch语句体,并中止循环体的执行

C:continue语句的作用是:在执行完本次循环体中剩余语句后,中止循环

D:在while语句和do-while语句中无法使用continue语句

答案:A

第19题 (1.0分) ???????题号:5934 ???????难度:易 ???????第6章

设有如下程序段

int ?a[1] = {0};

int ?b[] = {9};

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

char ?d = "12";

以下叙述正确的是

A:a, b的定义合法,c, d的定义不合法

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

C:a,b,c的定义是合法的,d的定义不合法

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

答案:A

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

以下叙述中正确的是

A:任何情况下都不能用函数名作为实参

B:函数既可以直接调用自己,也可以间接调用自己

C:函数的递归调用不需要额外开销,所以效率很高

D:简单递归不需要明确的结束递归的条件

答案:B

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

有以下程序

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

?????main()

?????{ ?char ?s[]="012xy\08s34f4w2";

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

????????for ( i=0; s[i]!=0; i++ )

???????????if(s[i] >= '0' && s[i] <= '9') ?

???????????????n++;

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

?????}

程序运行后的输出结果是

A:7

B:0

C:3

D:8

答案:C

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

有以下程序

#include <stdio.h>

#include <string.h>

main()

{ ?int ?i;

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

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

??????if (a[i] == ' ')

??????{ ?strcpy(a, &a[i+1]);

?????????i=0;

??????}

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

}

程序的运行结果是

A:you!

B:Howareyou!

C:areyou!

D:are you!

答案:A

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

若要求定义具有10个int型元素的一维数组a,则以下定义语句中错误的是

A:#define ?n ?5

int ?a [2*n];

B:int ?n=10,a[n];

C:int ?a[5+5];

D:#define ?N ?10

int ?a[N];

答案:B

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

以下叙述中正确的是

A:语句 int a[4][3] = {{1,2}, {4,5}}; 是错误的初始化形式

B:语句 int a[4][3] = {1,2,4,5}; 是错误的初始化形式

C:语句 int a[][3] = {1,2,4,5}; 是错误的初始化形式

D:在逻辑上,可以把二维数组看成是一个具有行和列的表格或矩阵

答案:D

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

下面选项中关于编译预处理的叙述正确的是

A:预处理命令行必须使用分号结尾

B:凡是以#号开头的行,都被称为编译预处理命令行

C:预处理命令行不能出现在程序的最后一行

D:预处理命令行的作用域是到最近的函数结束处

答案:B

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

有以下程序

#include ??<stdio.h>

void fun( int ?n )

{ ?static int ?k=0;

???if(n<0) ?{ ?printf("-"); ??n=-n; ?}

???k+=n%10; ????

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

???if(n/10) ?

???????fun(n/10);

}

main( )

{ ?int ?x=-12;

???fun(x); ???

???printf("\n");

}

程序运行后的输出结果是

A:-2,3

B:-1,-2,

C:-2,-3,

D:-2,1

答案:A

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

有以下程序

????#include <stdio.h>

????main()

????{ ?int findmax(int,int,int),m;

????????????┋

???????m=findmax(a,b,c);

????????????┋

????}

????int findmax(int x,int y,int z)

????{ ??????… ?????????}

则以下叙述正确的是

A:在main函数中声明了findmax函数

B:在main函数中定义了findmax函数

C:在main函数中两次调用了findmax函数

D:在main函数内、外重复定义了findmax函数

答案:A

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

以下说法正确的是().

A:函数可以返回另一个函数的整个函数体

B:函数返回值只能是基本数据类型的数值或指针

C:函数返回值可以是一个指向函数的指针

D:函数返回值可以是一个数组,同时返回多个值

答案:C

第29题 (1.0分) ???????题号:5964 ???????难度:中 ???????第7章

有以下程序

#include ??<stdio.h>

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

{ ?

???int i;

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

???{

???????if (i % 3 == 0)

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

???????else

??????????a[i] += n;

????}

}

main( )

{ ?int c[5] = {6,7,8,9,10},i;

???fun(c, 5);

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

???printf("\n");

}

程序运行后的输出结果是

A:1,12,13,4,15,

B:10,9,8,7,6,

C:1,7,13,9,15,

D:10,12,8,4,6,

答案:A

第30题 (1.0分) ???????题号:6057 ???????难度:较易 ???????第7章

有以下程序

#include ??<stdio.h>

int new_div(double ?a, double ?b)

{ ???return a / b + 0.5; ??}

main( )

{ ??printf("%d", new_div(7.8, 3.1)); ??}

程序运行后的输出结果是

A:1

B:2

C:3

D:0

答案:C

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

设有定义

????double ?a[10] ,*s=a;

以下能够代表数组元素a[3]的是

A:(*s)[3]

B:*(s+3)

C:*s[3]

D:*s+3

答案:B

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

有以下程序

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

?????main()

?????{ ?int ?y=1,x,a[]={2,4,6,8,10},*p;

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

????????for( x=0; x<3; x++ ) ?y=y+*( p+x );

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

?????}

程序运行后的输出结果是

A:17

B:19

C:18

D:20

答案:B

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

有以下程序

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

?????#include<string.h>

?????char *p[10];

?????int n=0;

?????int fun(char *q)

?????{

???????int len=strlen(q);

???????n=0;p[n]=q;

???????if(len>1) p[++n]=q+1;

???????if(len>3) p[++n]=q+3;

???????if(len>5) p[++n]=q+5;

???????return n;

?????}

?????void main()

?????{

???????char s[100];

???????gets(s);

???????n=fun(s);

???????for(--n;n>=0;n--)

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

?????}

程序运行时输入:HELLO WORLD!<回车>,则输出结果是().

A:LO WORLD!

?????ELLO WORLD!

?????HELLO WORLD!

B:WORLD!

?????LLO WORLD!

?????HELLO WORLD!

C:HELLO WORLD!

?????ELLO WORLD!

?????LO WORLD!

D:ELLO WORLD!

?????LO WORLD!

?????WORLD!

答案:A

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

有以下程序

#include ??<stdio.h>

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

{ ?char ?*s=a;

???while(*s) s++;

???s--;

???while(s>=a)

???{ *b=*s; s--; b++; }

???*b='\0';

}

main()

{ ?char ?s1[]="abc",s2[6];

???fun(s1,s2);

???puts(s2);

}

程序运行后的输出结果是

A:cbaabc

B:abc

C:cba

D:abccba

答案:C

第35题 (1.0分) ???????题号:6113 ???????难度:中 ???????第8章

对于以下函数声明

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

以下叙述中正确的是

A:array, ptr 都是指针变量

B:调用fun函数时,实参的值将逐一复制给array

C:调用fun函数时,array按值传送,ptr按地址传送

D:array 是数组,ptr 是指针,它们的性质不同

答案:A

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

有以下程序

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

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

?????{ ?while( *a=='*' ) a++;

????????while( *b=*a ){ b++;a++; }

?????}

?????main()

?????{ ?char ?*s="*****a*b****" , t[80];

????????fun(s,t); ?puts(t);

?????}

程序的运行结果是

A:ab

B:a*b

C:*****a*b

D:a*b****

答案:D

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

有以下程序

#include <stdio.h>

#include <string.h>

struct ?A

{ ?

????int a;

????char b[10];

????double c;

};

struct A f(struct A t);

main()

{

????struct A a={1001,"ZhangDa",1098.0};

????a=f(a);

????printf("%d,%s,%6.1f\n",a.a,a.b,a.c);

}

struct A ?f(struct A ?t)

{

????t.a=1002;

????strcpy(t.b,"ChangRong");

????t.c=1202.0;

????return t;

}

程序运行后的输出结果是

A:1002,ZhangDa,1202.0

B:1002,ChangRong,1202.0

C:1001,ChangRong,1098.0

D:1001,ZhangDa,1098.0

答案:B

第38题 (1.0分) ???????题号:6945 ???????难度:中 ???????第9章

有以下结构体说明、变量定义和赋值语句

?????struct STD

?????{ char ?name[10];

???????int ?age;

???????char ?sex;

?????} s[5],*ps;

?????ps=&s[0];

则以下scanf函数调用语句有错误的是

A:scanf("%s",s[0].name);

B:scanf("%d",&s[0].age);

C:scanf("%c",&(ps->sex));

D:scanf("%d",ps->age);

答案:D

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

有以下程序:

#include ??<stdio.h>

#include ??<string.h>

typedef ?struct { char ?name[9]; ?char ?sex; ?int ?score[2]; ?} STU;

STU ?f (STU ?a)

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

int ?i;

strcpy( a.name, b.name );

a.sex = b.sex;

for ( i=0; i<2; i++ ) ?a.score[i] = b.score[i];

return ?a;

}

main()

{ STU ?c= { "Qian", 'f', 95, 92 }, d;

d = f(c);

printf ("%s,%c,%d,%d, ", d.name, d.sex, d.score[0], d.score[1]);

printf ("%s,%c,%d,%d\n", c.name, c.sex, c.score[0], c.score[1]);

}

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

A:Zhao,m,85,90, Qian,f,95,92

B:Zhao,m,85,90, Zhao,m,85,90

C:Qian,f,95,92, Qian,f,95,92

D:Qian,f,95,92, Zhao,m,85,90

答案:A

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

有以下程序

#include <stdio.h>

main()

{

????FILE ?*fp;

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

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

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

????fprintf(fp, "%d%d%d\n", a[3],a[4],a[5]);

????fclose(fp);

????fp = fopen("d2.dat", "r");

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

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

????fclose(fp);

}

程序运行后的输出结果是

A:1 2

B:1 4

C:123 4

D:123 456

答案:D

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

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

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

【程序填空】

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

题目:函数fun的功能是:计算如“图片1”直到“图片2” 。

??????若x=2.5,函数值为1.917915。

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

#include ??<stdio.h>

#include ??<math.h>

double fun(double ?x)

{ ?

????????double ?f, t; ?????int ?n;

????????f = 1.0 + x;

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

????????t=【?】;

????????n = 1;

????????do

????????{

????????????????n++;

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

????????????????t*=(-1.0)*x/【?】;

????????????????f += t;

????????}

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

????????while(【?】 >=1e-6);

????????return ?f;

}

main()

{ ??

????????double x, y;

????????x=2.5;

????????y = fun(x);

????????printf("\nThe result is :\n");

????????printf("x=%-12.6f y=%-12.6f\n", x, y);

}

答案:

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

x

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

n

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

fabs(t)

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

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

/*------------------------------------------------------ ???

【程序改错】

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

功能:判断整数x是否是同构数。若是同购数,函数返回1;否则返回0。

说明:所谓“同构数”是指这个数出现在它的平方数的右边。

例如:输入整数25,25的平方数是625,25是625中右侧的数,

??????所以25是同构数。

注意:x的值由主函数从键盘读入,要求不大于1000。

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

#include <stdio.h>

#include <stdlib.h>

int fun(int x)

{

??/**********FOUND**********/

??int k

??/**********FOUND**********/

??k=x;

??/**********FOUND**********/

??if((k%10==x)&&(k%100==x)&&(k%1000==x))

????return 1;

??else

????return 0;

}

main()

{

??int x,y;

??printf("\nPlease enter a integer numbers:");

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

??if(x>100){printf("data error!\n");exit(0);}

??y=fun(x);

??if(y)

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

??else

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

}

答案:

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

int k;

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

k=x*x;

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

if((k%10==x)||(k%100==x)||(k%1000==x))

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

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

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

【程序设计】

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

题目:编程从键盘输入一个M×N的二维数组,求该数组中最外圈元素的平均值,

??????并输出结果。

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

#include <stdio.h>

#define M 3

#define N 4

void main()

{

????????int a[M][N];

????????int i,j,k=0; ???????/*k用来保存外围元素的个数*/

????????double sum=0.0;

????????printf("请输入数组:\n");

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

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

?????????????scanf("%d",&a[i][j]);

????????

????????/**********Program**********/

?????

???????

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

????????printf("外围元素的平均值为:%lf\n", sum/k);

}

答案: ?for(i=0;i<M;i++)

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

???if(i==0||i==M-1||j==0||j==N-1) ?//四周边元素

????{

sum=sum+a[i][j];

k++;

}

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