一、单选 ??共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;