-
一、选择题
1. 以下叙述正确的是_C_。
A. 在C程序中main函数必须位于程序的最前面
B. C程序的每行中只能写一条语句
C. C语言本身没有输入输出语句
D. 在对一个C程序进行编译的过程中,可发现注释中的错误
2. 下列四组字符串中都可以用作C语言程序标识符的一组是( A ) 。
A. print _3d oodb aBc
B. i\am one_half start$it 3pai
C. Pxq My->book line# His.age
D. str_l Cpp pow while
3. 逗号表达式”(a=3*5,a*4),a+15″的值是__C__。
A. 15
B. 60
C. 30
D. 不确定
4. 语句 printf(“%d”,(a=2)&&(b= -2);的输出结果是___D____
A. 无输出
B. 结果不确定
C. 0
D. 1
5. 若变量已正确说明为float类型,要通过语句scanf(“%f%f %f “,&a,&b,&c);给a赋于10.0,b赋予22.0,c赋予33.0,不正确的输入形式是B
A. 10<回车> 22<回车> 33<回车>
B. 10.0,22.0,33.0<回车>
C. 10.0<回车> 22.0 33.0<回车>
D. 10 22<回车> 33<回车>
6. 下列程序的运行结果是:C
main()
{int y=-5;
while (y++) ;
printf(“y=%d\n”,y);
}
A. y=0
B. y= -1
C. y=1
D. while构成无限循环
7. 以下函数调用语句不正确的是:D
A. x=(int) power(b);
B. x=power (a+b);
C. x=power(a);
D. x=float power( a );
8. 以下不正确定义一维数组的选项是( D )
A. int num[3];
B. #define N 100 int num[N];
C. int num[2*3];
D. int N=100; int num[N];
9. 以下程序的输出结果是 ( B )
main( )
{ int a[3][3]={{1,2,3},{4,5,6},{7,8,9}},i,j,s=0;
for(i=1;i<3;i++)
for(j=0;j<i;j++) s+=a[j];
printf (“%d\n”,s);
}
A. 18
B. 19
C. 20
D. 21
10. 有下面的程序段
char a[3],b[]=”china”;
a=b;
printf(“%s”,a);
则( D )
A. 运行后将输出china
B. 运行后将输出ch
C. 运行后将输出chi
D. 编译出错
11. 在C语言中,以下说法正确的是:A
A. 普通实参和与其对应的形参各占用独立的存储单元
B. 实参和与其对应的形参共占用一个存储单元
C. 只有当实参和与其对应的形参同名时才共占用存储单元
D. 形参在函数调用前它就占用存储单元
12. 以下叙述中不正确的是__D____
A. 在不同的函数中可以使用相同名字的变量
B. 函数中的形式参数是局部变量
C. 在一个函数内定义的变量只在本函数范围内有效
D. 在一个函数内的复合语句中定义的变量在本函数范围内有效
13. 以下程序的输出结果是 A
main()
{int a=10,b=20;
int *p=&a;
*p=100;
printf(“a=%d”,*p+1);
}
A. 101
B. 11
C. 20
D. 无 结果
14. 以下程序运行后的输出结果是: A
main()
{ char s[ ]=”9876″,*p;
for ( p=s ; p<s+2 ;p++)
printf(“%s “, p);
}
A. 9876 876
B. 9876
C. 876
D. 无 结果
15. 下列关于C语言的叙述错误的是_A___
A. 大写字母和小写字母的意义相同
B. 不同类型的变量可以在一个表达式中
C. 在赋值表达式中等号(=)左边的变量和右边的值可以是不同类型
D. 同一个运算符号在不同的场合可以有不同的含义
16. 以下选项中不属于C语言的类型的是__D____
A. signed short int
B. unsigned long int
C. unsigned int
D. long short
17. 设x、y、t均为int型变量,则执行语句:x=y=3;t=++x||++y;后,y的值为( B )
A. 不定值
B. 4
C. 3
D. 1
18. 设 int x=1, y= 1; 表达式(!x||y–)的值是 B
A. 0
B. 1
C. 2
D. -1
19. 以下程序的运行结果是:B
main()
{int m=6;
if(m–>5) printf(“%d\n”,m);
else printf(“%d\n”,m–);
}
A. 4
B. 5
C. 6
D. 7
20. 下面程序段的运行结果是:B
int n=2;
while(n>=0)
n=n-1;
printf(“%d”,n);
A. -2
B. -1
C. 0
D. 有语法错误
21. 有函数int max(int a,int b),则以下调用语句正确的是:C
A. int max(a,b);
B. int max(3,4);
C. max(a,b);
D. max( );
22. 有以下程序:
main( )
{ intaa[4]={0,2,3,4};
int i,s=1;
for(i=1;i<4;i++) s*=aa;
printf(“%d\n”,s);
}
程序运行后的输出结果是( D )
A. 0
B. 6
C. 12
D. 24
23. 以下不能正确定义二维数组的是( D )
A. int a[2][3];
B. int a[2][3]={1,2,3,4,5,6};
C. int a[ ][3]={1,2,3};
D. int a[2][3]={{1},{2},{3,4}};
24. 把字串b连接到字串a后面,应当使用( C )
A. strcpy(a,b);
B. strcpy(b,a);
C. strcat(a,b);
D. strcat(b,a);
25. 若调用一个函数,且此函数中没有return语句,则关于该函数正确的说法是 A
A. 没有返回值
B. 返回若干个系统默认值
C. 能返回一个用户所希望的函数值
D. 返回一个不确定的值
26. 如果使用一个宏 tri(x+y+z) 来表示算式(x+y+z)*(x+y+z)*(x+y+z),则应如何定义 C
A. #define tri(x) x*x*x
B. #define tri(x) (x*x*x)
C. #define tri(x) (x)*(x)*(x)
D. #define tri(x) (x+y+z)*(x+y+z)*(x+y+z)
27. 以下程序的输出结果是 C
main()
{int a[5]={1,2,3,4,5};
int *p=a;
printf(“a=%d”,*(p+3));
}
A. 2
B. 3
C. 4
D. 5
28. 以下程序的输出结果为( A )
main( )
{ void sub (int *, int *);
int x=100, y=200;
sub (&x, &y);
printf(“ %d , %d \n ” , x , y);
}
void sub( int *px , int *py)
{ *px=10; *py=20; }
A. 10,20
B. 20,10
C. 100,200
D. 200,100
二、操作题
1. 将1–1000中所有21的倍数存到一个一维数组中,并输出该数组的所有数据。要求将该程序以文件名test1.c或test1.cpp保存到K盘根目录。
参考答案:
#include <stdio.h>
#define N 1000
main()
{
int i,j=0,n,sz[N]={0};
for(i=1;i<=1000;i++)
{
if(i%21==0)
sz[j++]=i;
}
n=j;
for(j=0;j<n;j++)
printf(“%d\t”,sz[j]);
printf(“\n”);
}
2. 写一个函数判断一个正整数是否为偶数,在主函数中用scanf输入正整数m,调用函数后,根据函数返回值判断这个正整数是否为偶数,若是则输出“yes”,否则输出“no” 。要求将该程序以文件名test2.c或test2.cpp保存到K盘根目录。
参考答案:
#include <stdio.h>
main()
{
int m,flag;
printf(“请输入一个正整数m\n”);
scanf(“%d”,&m);
int ifou(int);
flag=ifou(m);
if(flag) printf(“yes\n”);
else printf(“no\n”);
}
int ifou(int k)
{if(k%2==0) return 1;
else return 0;
}
3. 输入一个M*N二维数组,求该二维数组所有靠外侧的元素之和。要求M和N用#define 进行定义。要求将该程序以文件名test1.c或test1.cpp保存到K盘根目录。
参考答案:
#define M 4
#define N 3
#include <stdio.h>
main()
{
int i,j;
int aa
[N],sum=0; for(i=0;i<M;i++)
for(j=0;j<N;j++)
{scanf(“%d”,&aa[j]);
if(i==0||i==(M-1)||j==1||j==(N-1))
sum=sum+aa[j];
}
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
printf(“%d\t”,aa[j]);
printf(“\n”);
}
printf(“外侧元素之和为%d\n”,sum);
}
4. 写一个函数计算两个正整数的最小公倍数,在主函数中用scanf输入m,n两个正整数,调用函数后,打印这两个正整数的最小公倍数。要求将该程序以文件名test2.c或test2.cpp保存到K盘根目录。
参考答案:
#include <stdio.h>
void main()
{
int m,n;
int zxgbs;
int mmin(int,int);
scanf(“%d%d”,&m,&n);
zxgbs=mmin(m,n);
printf(“%d和%d的最小公倍数为%d\n”,m,n,zxgbs);
}
int mmin(int m,int n)
{int i;
for(i=(m>n?m:n);i>=1;i–)
if(m%i==0&&n%i==0)break;
returnm*n/i;
}
17. 设x、y、t均为int型变量,则执行语句:x=y=3;t=++x||++y;后,y的值为( C )