一、单选 共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
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
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列开始,
12
34
则输出结果是().
A:12
34
B:12
C:1234
D:12
3
答案:D
第7题 (1.0分) 题号:7280 难度:中 第3章
有以下程序
#include
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
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
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
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
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
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
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
#include
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
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
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
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
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
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
#include
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
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
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
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
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
#define N 4
void fun(int a[][N])
{
int i;
for(i=0; 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 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 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 #include #include 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 /***********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 #include #include 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 #include #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 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 for(j=0;a[i][j]!='\0';j++) b[k++]=a[i][j]; b[k]='\0';