一、单选 ??共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 <stdio.h>
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 ?<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
34
B:12
C:1234
D:12
3
答案:D
第7题 (1.0分) ???????题号:7280 ???????难度:中 ???????第3章
有以下程序
????#include <stdio.h>
????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 <stdio.h>
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 <stdio.h>
????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 <stdio.h>
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 ??<stdio.h>
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 <stdio.h>
????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 <stdio.h>
????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<stdio.h>
?????#include<math.h>
?????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 <stdio.h>
????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 <stdio.h>
?????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 ??<stdio.h>
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 ??<stdio.h>
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 <stdio.h>
????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 <stdio.h>
#include <string.h>
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 <stdio.h>
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 ??<stdio.h>
????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 <stdio.h>
????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 <stdio.h>
?????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 <stdio.h>
#define N 4
void fun(int a[][N])
{ ?
??int i;
??for(i=0; i<N; 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<N; i++) printf("%d,", x[i][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 <stdio.h>
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 <stdio.h>
#include <stdlib.h>
#include <string.h>
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 <stdio.h>
/***********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 <stdlib.h>
#include <conio.h>
#include <stdio.h>
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 <stdio.h>
#include <conio.h>
#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<M;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<M;i++) ?????????????????????????????
for(j=0;a[i][j]!='\0';j++)
b[k++]=a[i][j];
b[k]='\0'; ?