1、一、判断下列问题描述及语句正确与否,正确的打“√”。 1.C的关键字都是小写的。( √ ) 2、C语言规定:在一个源程序中,main函数的位置必须在最开始。( × ) 3.一个复合语句是作为一个语句处理的且在逻辑上相互关联的一组语句。( √ ) 4、假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是8。( √ ) 5、凡是函数中未指定存储类别的局部变量,其隐含的存储类别为静态存储。( × ) 6.# define PI=3.14159 ( × ) 7、C语言中规定函数的返回值的类型是由return语句中的表达式类型所决定。( × ) 8.
2、局部变量在进入代码块时生成,退出代码块时消失。( √ ) 9、在C语言中对文件操作必须先关闭当前文件,然后再打开一个新文件。( × ) 10.int a=123456;( × ) 11、C语言程序的基本单位是语句。( × ) 12.函数可以嵌套定义,也可嵌套调用。( × ) 13. switch与if不同,switch只能测试是否相等,而if中还能测试关系和逻辑表达式。( √ ) 14.break和 continue语句都可用于选择结构和循环结构中。( × ) 二、单项选择题: 1、假设已定义char a[10]和char *p=a, 下面的
3、赋值语句中,正确的是:( C ) A) a[10]=”Turbo C”; B) a=”Turbo C”; C) *p=”Turbo C”; D) p=”Turbo C”; 2.C语言中基本数据类型包括( B )。 A. 整型、实型、逻辑型 B. 整型、实型、字符型 C. 整型、字符型、逻辑型 D. 整型、实型、逻辑型、实型 3、下面关于运算符优先顺序的描述中正确的是:( C ) A)关系运算符< 算术运算符< 赋值运算符< 逻辑与运算符 B)逻辑 运算符< 关系运算符< 算术运算符< 赋值运算符
4、C)赋值运算符< 逻辑与运算符< 关系运算符< 算术运算符 D)算术运算符< 关系运算符< 赋值运算符< 逻辑与运算符 4.已知int i,a; 执行语句“i=(a=2*3,a*5),a+6;”后,变量a的值是(A )。 A. 6 B. 12 C. 30 D. 36 5、以下正确的描述是。( B ) A)continue语句的作用是结束整个循环的执行 B)只能在循环体内和switch语句体内使用break语句 C)在循环体内使用break语句或continue语句的作用相同 D)从多层循环嵌套中退出时, 只能使用goto语句 6.C语言中规定函数的返回
5、值的类型是由( D )。 A. return语句中的表达式类型所决定 B. 调用该函数时的主调用函数类型所决定 C. 调用该函数时系统临时决定 D. 在定义该函数时所指定的函数类型所决定 7、用8位无符号二进制数能表示的最大十进制数为( C ) A) 127 B) 128 C) 255 D)256 8.不能进行++和--运算的数据类型是( B )。 A. 指针 B. double C. int D. long 9、下列叙述中正确的是:( D ) A) C语言中既有逻辑类型也有集合类型 B) C语言中没有逻辑类型但有
6、集合类型 C)C语言中有逻辑类型但没有集合类型 D) C语言中既没有逻辑类型也没有集合类型 10.为了判断两个字符串s1和s2是否相等,应当使用( D )。 A. if(s1==s2) B. if(s1=s2) C. if(strcpy(s1,s2)) D if (strcmp(s1,s2)) 11、以下对C语言函数的有关描述中,正确的是:( A ) A)调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参 B)函数既可以嵌套定义又可以递归调用 C)函数必须有返回值,否则不能使用函数 D) 程序中有调
7、用关系的所有函数必须放在同一个源程序文件中 12.若有以下说明和语句: struct stu {int no; char *name; }student, *p=&student; 则以下引用方法不正确的是( D )。 A. student.no B. (*p).no C. p->no D. student->no 13、在C语言中,不正确的int类型的常数是:( A ) A) 32768 B)0 C) 037 D) 0xaf 1
8、4.以下不是死循环的语句为( D )。 A. for(; ; x+=k); B. while(1){x++}; C. for(k=10; ;k――)sum+=k; D. for(;(c=getchar())!=’\n’;)printf(“%c”,c); 15、以下叙述中不正确的是:( D ) A)在不同的函数中可以使用相同名字的变量 B)函数中的形式参数是局部变量 C)在一个函数内定义的变量只在本函数范围内有效 D)在一个函数内的复合语句中定义的变量在本函数范围内有效 16.以下错误的描述
9、是( D )。 A. 不同的函数中可以使用相同的变量名 B. 形式参数是局部变量 C. 一个函数内部定义的变量只能在本函数范围内有效 D. 在一个函数内部的复合语句中定义的变量可以在本函数范围内有效 17、以下说法中正确的是:( D ) A)#define和printf都是C语句 B)#define是C语句,而printf不是 C)printf是C语句,但#define不是 D)#define和printf都不是C语句 18.若用数组名作为函数调用时实参,则实际上传递给形参的是( A )。 A.数组首地址
10、 B. 数组的第一个元素值 C.数组中全部元素的值 D. 数组元素的个数 19、若有以下定义和语句:double r=99,*p=&r; *p=r;则以下正确的叙述是:( B ) A)以下两处的*p含义相同,都说明给指针变量p赋值 B)在“double r=99,*p=&r;”中,把r的地址赋值给了p所指的存储单元 C)语句“*p=r;”把变量r的地址值赋给指针变量p D)语句“*p=r;”取变量r的值放回r中 20.已知int a,*p=&a;则为了得到变量a的值,下列错误的表达式是( A )。 A. *&p B.*p
11、C. p[0] D.*&a
三、填空题:
1、下面程序的功能是:输入一行字符,统计其中有多少个单词,单词之间用空格分开。请填空完成。
# include
12、 %d word in line. \n”,num);
}
2.已知int *p,a; 则语句 p=&a;中的运算符&的含义是
将变量a的地址存入指针变量p中 。
3、下面程序的功能是:用选择排序法对数组中10个数据按由小到大排序。请填空完成。
void sort(int a[],int n)
{ int I,j,k,t;
for(I=0;I 13、
}
}
main()
{ int b[10],I;
printf(“enter the array\n”);
for(I=0;I<10;I++)
scanf(“%d”.&b[I]);
sort(b,10);
printf(“the sorted array: \n”);
for(I=0;I<10;I++)
printf(“%d”,b[I]);
printf(“\n”);
}
4.凡在函数体内没有明显存储类别说明的变量是 自动变量 。
5、判断m是否是素数
#include 14、
scanf(“%d”,&m); k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0) break ;
if(i>=k+1) printf(“%d is a prime number\n”,m);
else printf(“%d is not a prime number\n”,m);
}
6.已知: struct
{ int k;
char c;
float a;}test; 则sizeof(test)的值是 7 。
7、假设当年产值为100,工业产值的增长率分别为6%、8 15、10%、12%时,求工业产
值分别经过多少年可实现翻番。请填空完成。
main()
{ int y[4],I;
float s[4]={100,100,100,100},c[4]={0.06,0.08,0.10,0.12};
clrscr();
for(i=0;i<4;i++)
{ y[i]=0;
while( s[i]<=200 )
{ s[i]=s[i]*(1+c[i]);
y[i]++; }
printf("\ny=%d\ts=%.2f\tc=%.2f",y[i],s[i],c[i]);
}
}
8.已 16、知 i=3,执行语句k=(i++)+(i++)+(i++)后,k的值为 9 。
9.当a=3,b=2,c=1时,表达式 f=a>b>c的值是 0 。
10.设有以下程序:
# include 17、第十一个元素是 a[1][4] 。
13.用以下语句调用库函数malloc,使字符指针st指向具有11个字节的动态存储空间,请填空 st=(char*) *maclloc(11) 。
14.把名为file的文件拷贝到新文件new.dat中,请填空将程序补充完整.
#include 18、 c= fgetc(p1) ;
while (c!=EOF)
{
fputc(c,p2);
c=fgetc(p1);
}
fclose(p1);
fclose(p2);
}
}
四、读程序,写出运行结果:
1、 main()
{int x=10,y=10,I;
for(I=0;I>8;y=++I)
printf(“%d %d”,x--,y);
}
运行结果:
10 10 9 1
2、main()
{ int m=37,n=13;
while(m!=n)
{ wh 19、ile(m>n)
m=m-n;
while(n>m)
n-=m;
}
printf(“m=%d\n”,m);
}
运行结果:
m=1
3、main()
{ int x=9;
for(;x>0;x--)
{ if(x%3==0) { printf(“%d”, --x);
continue; }
}
}
运行结果 20、
852
4、 main()
{ int a=7,b=2;
float x=2.5,y=4.7,z;
z=x+a%3*(int)(x+y)%2/4;
printf(“%f\n”,z);
z= (a+b)/2+(int)x%(int)y;
printf(“%f”,z);
}
运行结果:
2.500000
6.000000
5.main()
{ int a=5,b=4,x,y;
x=a++*a++*a++;
printf(“a=%d,x=%d\n”,a,x);
y=――b 21、――b*――b;
printf(“b=%d,y=%d\n”,b,y);
}
运行结果:
a=8,x=125
b=1,y=1
6.#include 22、
printf(“%s%s\n”,s2.cp,s2.ss1.s);
printf(“%s%s\n”,++s2.cp,++s2.ss1.s);
}
运行结果:
ad
abcdef
ghimno
hino
7.#include 23、3
8. void fun()
{ static int a=5;
a++;
printf(“a=%d\n”,a);
}
main()
{
int m;
for(m=0;m<=1;m++)
fun();
}
运行结果:
a=6
a=7
五、编程
写一个程序求一个3*3的二维数组单条从左上角到右下角的对角线之和,数组的初值为1,2,3,4,5,6,7,8,9。
main()
{
int i,j,s=0;
static int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
for (i=0;i<=2;i++)
for (j=0;j<=2;j++)
if (i = = j ) s+=a[i][j];
printf (“s=%d \ n”,s);
}






