第一套
一.选择题
1.下列正确的标识符是(C ).
A、a+b B、6a C、_do D、%y
2.执行以下程序段后,输出结果和a的值是(B)。
int a=10; printf(“%d”,a++);
A、11 和 10 B、10 和 11 C、11 和 11 D、10 和 10
3.以下不正确的if语句形式是(B)。
A、if(x<y) {x++;y++;} B、if(x!=y) scanf(“%d”,&x) else scanf(“%d”,&y);
C、if(x>y&&x!=y); D、if(x==y) x+=y;
4.int a=3,b=2,c=1; if(a>b && b>c)a=b; else a=c;则a的值为(C)。
A、1 B、0 C、2 D、3
5.对for(表达式1; ;表达式3)可以理解为(C ).
A、for(表达式1;表达式3;表达式3) B、for(表达式1;表达式1;表达式3)
C、for(表达式1;1;表达式3) D、for(表达式1;0;表达式3)
6.运行结果是" 11 12"的程序段是:请在A处填写正确内容(B )。
for(i=1;i<=2;i++) A
A、for(j=1;j<=2;j++)printf(“%3d”,10i+j);break;
B、{for(j=1;j<=2;j++)printf(“%3d”,10i+j);break;}
C、for(j=1;j<=2;j++)printf(“%3d”,10i+j);continue;
D、{for(j=1;j<=2;j++)printf(“%3d”,10i+j);continue;}
7.static char str[10]=“China”;数组元素个数为(D)。
A、6 B、9 C、5 D、10
8.以下程序的输出结果是:(C ).
fun(int x, int y, int z){ z=xx+yy; }main( )
{ int a=31; fun(5,2,a); printf(“%d”, a);}
A、无定值 B、29 C、31 D、0
9.文件包含中,被包含文件(B ).
A、可以是可执行文件. B、可以嵌套其它文件.
C、可以是目标文件或源文件. D、必须用".h"为后缀.
10.下列程序段的输出结果是:(C ).
void fun( int *x, int *y){
printf("%d %d",*x,*y);*x=3;*y=4;}
main( ){
int x=1, y=2;fun(&y, &x); printf("%d %d", x, y);}
A、2 1 1 2 B、1 2 3 4 C、2 1 4 3 D、1 2 1 2
二.判断题
1.在C程序中,main函数必须位于程序的最前面 错误
2.表达式 (j=3, j++) 的值是4. 错误
3.已知a=3,b=4,c=5,则逻辑表达式a||b+c && b-c的值为0.【参考答案】错误
4.循环结构中的continue语句是使整个循环终止执行【参考答案】错误
5 在实际编程中,do-while循环完全可以用for循环替换.【参考答案】正确
6 引用数组元素时,数组元素下标必须是整型常量.【参考答案】错误
7 如果函数值的类型和return语句中表达式的值不一致,则以函数类型为准。正确
8 带参数的宏定义不是进行简单的字符串替换,还要进行参数替换.【答案】正确
9 下列的初始化的方式是正确的吗? char st[10]; st=“string”;【答案】错误
10 在定义结构体变量时不允许对它赋初值.【参考答案】错误
三.填空题
1.设i,j,k均为int型变量,则执行完下面的for循环后,k的值为10_
.
for(i=0,j=10;i<=j;i++,j–) k=i+j;
2.结构体是不同数据类型的数据集合,作为数据类型, 必须先说明结构体类型
___,再说明结构体变量.
四.程序设计题
功能:将主函数中输入的字符串反序存放。例如:输入字符串"abcdefg",则应输出"gfedcba"。
注意: 请在Begin 和 End 注释行之间填写代码, 所有注释语句都不能删除。
参考代码
#include "stdio.h" #include "string.h"
#include "conio.h" #define N 81
void fun(char str[],int n)
{
/*********Begin**********/
int i,j;
char c;
for(i=0,j=n-1;i<j;i++,j--)
{
c=str[i];
str[i]=str[j];
str[j]=c;}
/********** End **********/
}
void main()
{
void TestFunc(); char s [N]; int l; printf("input a string:");gets(s);
l=strlen(s); fun(s,l); printf("The new string is :");puts(s);TestFunc();}
五.程序改错题
功能:先从键盘上输入一个3行3列矩阵的各个元素的值,然后输
出主对角线上的元素之和sum。
#include "stdio.h"
int fun()
{
int a[3][3],sum;int i,j;
/**********ERROR**********/
a=0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
/**********ERROR**********/
scanf("%d",a[i][j]);
for(i=0;i<3;i++)
/**********ERROR**********/
sum=sum+a[i][j];
/**********ERROR**********/
printf("sum=%f\n",sum);
}
void main()
{
fun();}
1【参考答案】sum=0;
2【参考答案】scanf(“%d”,&a[i][j]);
3【参考答案】sum=sum+a[i][i]; sum+=a[i][i];
4【参考答案】printf(“sum=%d\n”,sum);
六.程序填空
先将在字符串s中的字符按正序存放到t串中,然后把s中的字符按逆序连接到t串的后面。
#include "stdio.h" #include "string.h"
void fun (char s[], char t[])
{
int i, sl;
/***********FILL***********/
sl = _____;
for(i=0; i<sl; i++)
t[i] = s[i];
for (i=0; i<sl; i++)
/***********FILL***********/
t[sl+i] = _____;
/***********FILL***********/
t[sl+i]=_____;
}
void main()
{
char s[100], t[100];
/***********FILL***********/
printf("\nPlease enter string s:"); _____("%s",s); fun(s, t);
printf("The result is: %s\n", t);}
1【参考答案】 strlen(s)
2【参考答案】 s[sl-i-1] s[strlen(s)-i-1]
3【参考答案】 ‘\0’ 0
4【参考答案】 scanf
第二套
一.选择题
若变量均已正确定义并赋值,以下合法的C语言赋值语句是(C )。
A、x+n=I; B、x==5; C、x=n/2.5; D、5=x=4+1;
用scanf函数输入数据,使得x=9.6,y=81.73选择正确的输入语句(D ).
A、scanf(“x=%3f”,x); scanf(“y=%5f”,&y); B、scanf(“x=%f”,&x); scanf(“y=%f”,y);
C、scanf(“x=%3.1f”,&x); scanf(“y=%f”,&y); D、scanf(“x=%f”,&x); scanf(“y=%f”,&y);
int a=1,b=2,c=3; if(a>c)b=a;a=c;c=b;则c的值为(C)。
A、1 B、3 C、2 D、不一定
为了避免在嵌套的条件语句 if-else 中产生二义性,C语言规定:else子句总是与(A)配对。
A、其之前最近的未配对的if B、其之后最近的if C、同一行上的if D、缩排位置相同的if
存在多层嵌套循环时,下列说法正确的是(D ).
A、continue语句可以中止所有循环B、break语句可以中止所有循环
C、continue语句能够中止包含该语句的最内层循
D、break语句能够中止包含该语句的最内层循环
下面程序正确的运行结果是(B ).(答案中用大写字母U代表空格)
main()
{ int num=0; while(num<=2)
{ num++; printf(“%3d”,num);}}
A、UU 1 B、UU1UU2UU3 C、UU1UU2UU3UU4 D、UU1UU2
int a[10];合法的数组元素的最小下标值为(D)。
A、10 B、9 C、1 D、0
下面叙述中错误的是( B)。
A、在其它函数中定义的变量在主函数中也不能使用B、主函数中定义的变量在整个程序中都是有效的C、复合语句中定义的变量只在该复合语句中有效D、形式参数也是局部变量
设有宏定义#define MAX(x,y) (x)>(y)?(x):(y),则F=4*MAX(2,3)的值为(B ).
A、3 B、2 C、12 D、8
设有以下定义:
int w[3][4]={
{0,1},{2,4},{5,8}}; int (*p)[4]=w;
则数值为4的表达式是(B ).
A、w[1]+1 B、p[1][1] C、p++,(p+1) D、w[2][2]
二.判断
1 .printf 函数的一般格式为:printf (格式控制,输出表列). 【参考答案】 正确
2在C程序中,%是只能用于整数运算的运算符【参考答案】正确
3逻辑表达式4>2&&1||5<3-!0的值为1.【参考答案】正确
4continue语句对于while和do-while循环来说,意味着转去计算While表达式.
【参考答案】正确
5do-while循环由do开始,while结束,在while(表达式)后面不能加分号.
【参考答案】错误
6对任何一个二维数组的元素,都可以用数组名和两个下标唯一地加以确定. 【正确
7每次调用函数时,都要对静态局部变量重新进行初始化.【参考答案】错误
8若有 #define S(a,b) a*b 则语句 area=S(3,2); area的值为6。【参考答案】正确
9设有定义 : int a[10], *p; 则下列的语句是等价的. p=&a[0]; p=a; 正确
10共用体变量在引用时不能只用共用体变量名,必须使用某个成员名.【答案】正确
三.填空
1已知a=13,b=6, a%b的十进制数值为__1___.
2当a=3,b=2,c=1;时,执行以下程序段后 b=1_. if(a>b) a=b; if(b>c) b=c; else c=b; c=a;
3若输入字符串:abcde<回车>,则以下while循环体将执行 0_ 次.
while((ch=getchar())==‘e’) printf(“*”);
4求字符串长度的库函数是_strlen____,只写函数名即可.
5 feof(fp)函数用来判断文件是否结束,如果遇到文件结束,函数值为_非0值_, 否则为__0__.
四【程序设计】
功能:对任意输入的 x,用下式计算并输出 y 的值。(还可以尝试用case语句)
-1 x<0
y= 0 x=0
1 x>0
#include "stdio.h"
int fun(int n)
{
/*********Begin**********/
int m;
if(n<0)
m=-1;
else
if(n==0) m=0;
else m=1;
return m;
/********** End **********/
}
void main ()
{
void TestFunc();
int x,y;
printf("enter x:");
scanf("%d",&x);
y=fun(x);
printf("x=%d,y=%d\n",x,y);
TestFunc();
}
五.改错
改错-功能:将6个数按输入时顺序的逆序进行排列.
#include "stdio.h"
void sort(char *p,int m)
{
int i; char change,*p1,*p2;
for(i=0;i<m/2;i++)
{
/***********ERROR***********/
*p1=p+i; *p2=p+(m-1-i); change=*p1;
*p1=*p2; *p2=change;}}
main( )
{
int i;
/***********ERROR***********/
char p,num[6];
for(i=0;i<=5;i++)
/***********ERROR***********/
scanf("%d",num[i]);
p=&num[0];
/***********ERROR***********/
sort(*p,6);
for(i=0;i<=5;i++)
printf("%d",num[i]);
}
【参考答案】p1=p+i; p2=p+(m-1-i);【参考答案】char *p,num[6];
【参考答案】scanf(“%d”,&num[i]);【参考答案】sort(p,6);
六.程序填空
功能:输入3个数a,b,c,按从小到大的顺序输出。(冒泡法或选择法,尝试用来程序设计)
#include "stdio.h"
main()
{
void swap(int *p1, int *p2);
int n1,n2,n3;
int *pointer1,*pointer2,*pointer3;
printf("please input 3 number:n1,n2,n3:");
scanf("%d,%d,%d",&n1,&n2,&n3);
pointer1=&n1;
pointer2=&n2;
pointer3=&n3;
/***********FILL***********/
if(_____) swap(pointer1,pointer2);
/***********FILL***********/
if(_____) swap(pointer1,pointer3);
/***********FILL***********/
if(_____) swap(pointer2,pointer3);
printf("the sorted numbers are:%d,%d,%d\n",n1,n2,n3);
}
/***********FILL***********/
void swap(_____)
int *p1,*p2;
{
int p; p=*p1;*p1=*p2;*p2=p;}
【参考答案】n1>n2 n2<n1 *pointer1>*pointer2 *pointer2<*pointer1
【参考答案】n1>n3 n3<n1 *pointer1>*pointer3 *pointer3<*pointer1
【参考答案】n2>n3 n3<n2 *pointer2>*pointer3 *pointer3<*pointer2
【参考答案】p1,p2
第三套
一.填空
若x,i,j,k 都是int型变量,则计算x=(i=4,j=16,k=32)后,x的值为:( D).
A、52 B、16 C、4 D、32
执行以下程序段后,输出结果和a的值是(B)。
int a=10; printf(“%d”,a++);A、11 和 10 B、10 和 11 C、11 和 11 D、10 和 10
以下程序的输出结果是:(A )
main() {int m=5; if(m++>5) printf(“%d\n”,m); else printf(“%d\n”,m–); }
A、6 B、5 C、7 D、4
执行下面程序段后,i的值是( A).
int i=10; switch(i)
{case 9: i+=1; case 10: i–;case 11: i*=3;case 12: ++i;}
A、28 B、10 C、9 D、27
下面有关 for 循环的正确描述是(C )。
A、for 循环是先执行循环体语句,后判断表达式B、在 for 循环中,不能用 break 语句跳出循环体C、for 循环的循环体语句中,可以包含多条语句,但必须用花括号括起来
D、for 循环只能用于循环次数已经确定的情况
若char a[10];已正确定义,以下语句中不能从键盘上给a数组的
所有元素输入值的语句是(A)。
A、for(i=0;i<10;i++)a[i]=getchar(); B、scanf(“%s”,a);C、gets(a);D、a=getchar();
下面叙述中错误的是(B )。
A、在其它函数中定义的变量在主函数中也不能使用B、主函数中定义的变量在整个程序中都是有效的C、复合语句中定义的变量只在该复合语句中有效D、形式参数也是局部变量
file1.c中有命令,#include <file2.c>,若file2.c中有全局静态变量a,则(B ).
A、a在file1.c中应用extern说明.B、a在file1.c中有效,不必用extern说明.
C、a在file1.c中不生效D、a在file1.c和file2.c中均不生效.
若有定义:int aa[ 8];则以下表达式中不能代表数组元素aa[1]的地址的是(C)。
A、&aa[1] B、&aa[0]+1 C、&aa[0]++ D、aa+1
二.选择
1.在C程序中,main函数必须位于程序的最前面【参考答案】错误
2若a和b类型相同,在计算了赋值表达式a=b后,b中的值将放入a中,而b中的值不变
【参考答案】正确
3逻辑表达式4>2&&1||5<3-!0的值为1. 正确
4 break语句不能终止正在进行的多层循环.【参考答案】正确
5 C语言中三种基本结构:顺序选择循环,其结构内的每个部分都会被执行到.【答案】错误
6数值型数组整体不参加数据处理(即不参加各种运算),参加数据处理的只能是数组的元素.
【参考答案】正确
7 在C语言中,函数名代表函数的入口地址.【参考答案】正确
8宏名有类型,其参数也有类型.【参考答案】错误
9数组名与指针变量是相互等价的. 错误
10 一个共用体变量中不能同时存放其所有成员.【参考答案】 正确
三.填空
三1int x=2;z=++x+1; 则x的值为__3__.
2当a=1,b=2,c=3时,执行以下程序段后c=2. if (a>c) b=a; a=c; c=b;
3设x和y均为int型变量,则以下for循环中的scanf语句最多可执行的次数是__3___.
for (x=0,y=0;y!=123&&x<3;x++) scanf (“%d”,&y);
4.字符串比较的库函数是_____,只写函数名即可. strcmp
5调用 fopen 函数打开一文本文件,在"使用方式"这一项中, 为追加而打开需填入
a 或 a+
四.程序设计
【程序设计】在键盘上输入一个3行3列矩阵的各个元素的值(值为整数),然后输出主对角线元素的平方和,并在fun()函数中输出。
#include "stdio.h"
void main()
{
int i,j,s,a[3][3];
int fun(int a[3][3]);
void TestFunc();
for(i=0;i<3;i++)
{
for(j=0;j<3;j++) scanf("%d",&a[i][j]);}
s=fun(a);printf("Sum=%d\n",s); TestFunc();}
int fun(int a[3][3])
{
/*********Begin**********/
【参考代码】
int sum=0,i;
for(i=0;i<3;i++)
sum=sum+a[i][i]