一、选择题
1.一个C语言程序是由(a )构成。
A.语句 B.行号 C.数据 D.函数
2.下面标识符中正确的是(b )。
A.d&ef B.6a C.z4x5c D.a3/b4
3.在C语言中,存储一个字符型、整型、单精度实型变量所需的空间是(b)。型、单精度实型变量所需的空间是()。
A.1、2、4 B.1、1、4 C.1、2、8 D.2、2、8
4.为了避免嵌套的条件分支语句 if--else中的else总是与( c ) 组成成对关系。
A.缩排位置相同的 B.在其之前未配对的
C.在其之前未配对的最近的if D.在同一行上的if
5.下列表达式的结果正确的是()。
int aa,bb,cc,dd;
aa=bb=cc=dd=1;sp; aa=bb=cc=dd=1;sp; aa=bb=cc=dd=1;
(aa+1==2)?bb=aa+2:aa+3
A.2 B.3 C. 1 D.5
6.设有int x=11 ;则表达式(x+1/3)的值是( c )。
A.3 B.4 C.11 D.12
7.设有字符串A=“He has 钱!”,则该字符串的长度为( a )。
A.9 B.10 C.11 D.8
8.有如下程序段,则正确的执行结果是(b)
int m=3;
while(m<=5)
{
printf("%d ",m-3);
m++;
}
A. 0 0 0 B.0 1 2 C.1 2 3 D.无结果
9.执行语句:printf("%d",(a=2)&&(b= -2);后,输出结果是( )。
A.无输出 B.结果不确定 C.-1 D.1
10.有如下定义类型语句,若从键盘输入数据,正确的输入语句是( )。
int x;Char y;Char z[20];
A.scanf("%d%c%c",&x,&y,&z); B.scanf("%d%c%s",&x,&y,&z);
C.scanf("%d%c%c",&x,&y,z); D.scanf("%d%c%s",&x,&y,z);
11.struct ex
{
int x ;
float y;
char z ;
} example;
则下面的叙述中不正确的是( )。
A.struct结构体类型的关键字 B.example是结构体类型名
C.x,y,z都是结构体成员名 D.struct ex是结构体类型
12.在C语言中对于实型数组,其每个数组元素的类型是( )。
A.实型 B.整型 C.可以为任何类型 D.不确定
13.若已定义:int a[9],*p=a;不能表示a[1] 地址的表达式是( )。
A.p+1 B.a+1 C.a++ D.++p
二、填空题
1.在C语言中,正确的标识符是由____________组成的,且由____________开头的。
2.设p=30,那么执行q=(++p)后,表达式的结果q为______,变量p的结果为________。
若a为int类型,且其值为3,则执行完表达式a+=a-=a*a后,a的值是_________。
3.一个变量的指针是指___________________________________________________。
4.在C语言程序中,对文件进行操作首先要____________________;然后对文件进行操作,最后要对文件实行__________________________操作,防止文件中信息的丢失。
5.以下程序运行后的输出结果是 。该程序的功能是。
int main()
{
int x=10,y=20 ,t=0;
if(x!=y)
t=x;
x=y;
y=t;
printf("%d,%d\n",x,y);
}
6.若fp已正确定义为一个文件指针,d1.dat为二进制文件,请填空,以便为"读"而打开此文件:fp=fopen( );。
7.有以下程序,当输入的数值为2,3,4时,输出结果为__________。
int main()
{
int x,y,z;
printf("please input three number");
scanf(“%d,%d,%d”,&x,&y,&z);
sum=x*x+y*2+z;
printf("sum of number is : %d",sum);
}
8.有以下程序
int main()
{
char c;
while((c=getchar())!='? ')
putchar(--c );
}
程序运行时,如果从键盘输入:YDG?N?<回车>,则输出结果为。
9.在循环中,continue语句与break语句的区别是:
continue语句是
break语句是
三、程序填空与算法题
1.下面程序是计算10个整数中奇数的和及其偶数的和,请填空。
#include
int main()
{
int a,b,c,i;
a=c=0;
for(i=1;i<=10;i++)
{
scanf("%d",&b);canf("%d",&b);
}
printf("偶数的和=%d\n",a);
printf("奇数的和=%d\n",c);
}
2.编写一个自定义函数,实现求两个实数的平方和
3.以下程序运行后的输出结果是。
int main()
{
char s[]="GFEDCBA";
int p=6;
while(s[p]!='D')
{
printf("%c ", p);
p=p-1;
}
}
4.定义一个反映学生信息的结构体,包括学生的姓名,性别,年龄,成绩等。
5.以下程序输出的结果是。
int ff(int n)
{
static int f=l;
f=f*n;
return f;
}
int main()
{ int i;
for(i=1;i<=5;i++)
printf("%d\n",ff(i));
}
6. 设有以下程序:
int main()
{
int n1,n2;
scanf("%d",&n2);
while(n2!=0)
{
n1=n2%10;
n2=n2/10;
printf("%d",n1);
}
}
程序运行后,如果从键盘上输入1298;则输出结果为。
7.下面程序的功能是:输出 100以内(不包含100)能被 3整除且个位数为 6的所有整数,请填空。
#include
main()
{
int i, j;
for(i=1; ____________; i++)
if (________________)
printf("%d", j);
}
8.现有一个单链表Head,如下图所示,如果要在元素B和D之间插入一个字符型元素C。
所需要的语句为:(如果用到指针,在图中标出指针的位置)
四、编程题
1.编程实现求解下面的式子的结果
s=1*2+2*3+3*4+…+20*21
2.编程实现求下面式子的结果, 正弦sin(x)的近似值的多项式公式如下,要求输入x和ε,按下面公式计算sin(x)的近似值,要求计算的误差小于给定的ε。
3.编程实现将某文本文件file1.txt的内容读出来,显示到屏幕上。
一、填空。
1.实型变量的类型说明符有:__________、____________。
2.表达式7+8>2 && 25 %5的结果是_______________________。
3.下列程序段是从键盘输入的字符中统计数字字符的个数,用换行符结束循环。
int n=0, ch;
Ch=getchar( );
while( __________________ ) ) ) )
{
if ( ________________ ) n++;
}
4.putchar(c ) 函数的功能是_____________________________________。
5 int *p 的含义是_________________________________________。
6.C语言中数组的下标下限为___________________________。
7.定义fp为文件型指针变量的定义方法为_______________________。
8.数组 int a[3][4];共定义了____________个数组元素。
二、单项选择题
1、下列属于整型常量的是________。
A、12 B、12.0 C、-12.0 D、10E10
2、不属于字符型常量的是_________。
A.‘A’ B、'a' C、“A” D、'b'
3、下列表达式为关系表达式的为_________。(其中a为一整型变量)
A.3+4*5B、a==10 C、a>0?a:-a D、a=1
4、下面不正确的赋值语句是_____________。
A.a=a+1 B、a==b C、a+=b D、a=1
5、下列对数组定义不正确的语句是______________。
A.int m[5]; B、char b[]={‘h’,’e’};
C、int a[10]={1,6,8,4}; D、char p[];
6、若有以下定义,则______和______是对数组元素的正确引用。
int a[5],*p=a
A. *&a[6] B、*p+8 C、*(a+2) D、*p
7、执行下列语句后,a的值是______。
int a=8;
a+=a-=a*a;
A.-240 B、64 C、112 D、-112
8.指出下面正确的输入语句( )。
A.scanf(“a=b=%d”,&a,&b) ; B.scanf(“%d,%d”,&a,&b) ;
C.scanf(“%c”,c) ; D.scanf(“%f\n”,&f) ;
9.下面的变量说明中正确的是____________。
A.int:a, b, c; B.int a; b; c; C.int a, b, c D.int a, b, c;
10.C语言用( )表示逻辑“真”值。
A.True B.t 或 y C.非零整型值 D.整型值0
11.若x=5,y=4 则y*=x+5; y的值为( ).
A.40 B.20 C.15 D.30
13.C语言中以追加方式打开一个文件应选择_______________参数。
A.“r” B.“w” C.“rb” D.“a”
14.Break语句的正确的用法是()。
A.无论在任何情况下,都中断程序的执行,退出到系统下一层。
B.在多重循环中,只能退出最靠近的那一层循环语句。
C.跳出多重循环。
D.只能修改控制变量。
15.两个指针变量的值相等时,表明两个指针变量是________________。
A.占据同一内存单元。 B.指向同一内存单元地址或者都为空。
C.是两个空指针。 D.都没有指向。
16.字符串指针变量中存入的是________________。
A.字符串的首地址。 B.字符串
C.第一个字符 D.字符串变量。
17.以_______________个是不正确的描述。
A.不论在主函数还是自定义函数中,只要说明了变量,就可为其分配存贮单元。
B.在定义函数时,必须指定形参的类型。
C.形参和实参之间可以是值传递。
D.数组名可以作为参数进行传递。
18 表达式“1?(0?3:2):(10?1:0)”的值为_____________________。
A.3 B.2 C.1 D.0
19.为表示关系x≥y≥z,应使用C语言表达式
A.(x>=y)&&(y>=z) B.(x>=y) AND (y>=z) C.(x>=y>=z) D.(x>=z)&(y>=z)
20. 以下说法中正确的是_______________。
A.C语言程序总是从第一个定义的函数开始执行。
B.在C语言程序中,要调用的函数必须有main( ) 函数中定义。
C.C语言程序总是从main( ) 函数开始执行。
D.C语言程序中的main( ) 函数必须放在程序的开始部分。
21.设有数组定义:char array[]=”China”;则数组所占的存贮空间为__________。
A.4个字节 B.5个字节 C.6个字节 D.7个字节
22.根据C语言的语法规则,下列________个是不合法标识符。
A.While B.Name C.Rern5 D._exam
三、读出下列程序,写出程序的运行结果。
1.int main()
{ int a=8 , b=1;
a=a+b;
b=a*b;
printf("a=%d,b=%d",a,b);
}
该程序的运行结果是___________________________________。
2.int main()
{ int i,num[5];
for(i=0;i<5;i++)
num[i]=i*10 - 2;
printf("%d",num[3]);
}
该程序的运行结果是___________________________________。
3.int main()
{ float c,f;
c=30.0;
f=(6*c)/5+32;
printf("f=%f",f);
}
该程序的运行结果是___________________________________。
4.int main()
{ int a=6095 , b ;
b=a%1000 ;
printf("%d", b);
}
该程序的运行结果是___________________________________。
5.# include
int main( )
{ int a[]={8,2,9,4,1}, *p;
p=a;
*(p+2)+=2;
printf("%d, %d ", *p, *(p+2));
}
该程序的运行结果是___________________________________。
四、将下列程序中不正确的语句改正。
1.int mian( )
{ int k ;
k=35555;
printf ("%d", k) ;
}
2.int main ( )
{ int a , b ;
scanf ( "input a ,b:",a , b );
printf ("a=%d, b=%d",a,b);
}
3.int main( )
{ int sum , k ;
sum=0 ;
k= 1 ;
while (k < =100 )
sum = sum+k ;
k + + ;
printf (" sum=%d\n", sum) ;
}
4.int main( )
{ int k , a( 8 ) ;
for( k=0; k<10 ; k++)
scanf("%d", &a(k));
......
}
5.int main( )
scanf("%d", a);
if (a = 1)
printf("One\n") ;
}
一、 单项选择题(共30分,每题1分)
1.在PC机中,‘\n’在内存占用的字节数是( )
A.1 B.2 C. 3 D.4
2.字符串“ABC”在内存占用的字节数是( )
A.3 B. 4 C.6 D.8
3.在C语言中,合法的长整型常数是( )
A.0L B.4962710 C.0.054838743 D.2.1869 e10
4.执行语句“x=(a=3,b=a--)”后,x,a,b的值依次是( )
A.3,3,2 B.3,2,2 C.3,2,3 D.2,3,2
5.设有语句int a=3;,则执行了语句a+=a-=a*a后,变量a的值是( )
A.3 B.0 C.9 D.-12
6.设char k= 'A ';执行k=k+1;后k值为( )
A.'A ' B.'B ' C.' b' D.'a'
7.下列正确的标识符是()
A.hot_do B.a+b C.test! D.%y
8.设int a=5,使b不为2的表达式是( )
A.b=6-(--a) B.b=a%2 C.b=a/2 D.b=a>3?2:1
9.执行x=(6*7%8+9)/5;后,x的值为( )
A.1 B.2 C.3 D.4
10.执行语句x=(a=3,b=a--)后,x,a,b的值依次为( )
A.3,2,3 B.2,3,2 C.3,3,2 D.3,2,2
11.设a=-3;执行(a>0)?a:-a;后,a的值为()
A.3 B.1 C.0 D.-3
12.设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值为( )
A.7 B.8 C.9 D.2
13.下面正确的字符常量是( )
A."c " B.'\\ ' ' C.'W ' D. ' '
14.若有代数式3ae/bc,则不正确的c语言表达式是( )
A.a/b/c*e*3 B.3*a*e/b/c C.3*a*e/b*c D.a*e/c/c*3
15.在C语言中,要求运算数必须是整型的运算符是( )
A./ B.++ C.!= D.%
16.若有说明语句:char c=’\72’;则变量c ( )
A.包含1个字符 B.包含2个字符 C.包含3个字符 D.说明不合法
17.sizeof (float)是( )
A.一个双精度型表达式 B.一个整型表达式
C.一种函数调用 D 一个不合法的表达式
18.设变量a 是整型,f是实型,i是双精度型,则表达式10+’a’+i*f值的数据类型是( )
A.int B.folat C.double D.不确定
19.若有定义int a[10],*p=a;,则p+5表示( )
A.元素a[5]的地址 B.元素a[5]的值 C.元素a[6]的地址 D.元素a[6]的值
20.以下与int *q[5];等价的定义语句是( )
A.int q[5]; B.int * q C.int (q[5]) D.int (*q)[5]
21.若有定义int a[5],*p=a;则对a数组元素地址的正确引用是( )
A.P+5 B.*a+1 C.&a+1 D &a[0]
22.凡是函数中未指定存储类别的局部变量,其隐含的存储类别是( )
A.auto B.static C.extern D.register
23.若用数组名作为函数调用的实参,传递给形参的是()
A.数组的首地址 B.数组第一个元素的值
C.数组中全部元素的值 D.数组元素的个数
24.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是( )
A.float B.int C.long D.double
25.以下对二维数组a的正确说明是()
A.int a[3][] B.float a(3,4) C.double a[1][4] D.float a(3)(4)
26.若有说明int a[3][4];则对a数组元素的正确引用是(A )
A.a[2][4] B.a[1,3] C.a[1+1][0] D.a(2)(2)
26.语句while(!E);中的表达式!E等价于( )
A.E= =0 B.E!=1 C.E!=0 D.E= =1
27.C语言中while和do—while循环的主要区别是()
A. do—while的循环体至少无条件执行一次
B. While的循环控制条件比do—while的循环控制条件严格
C. do—while允许从外部转到循环体内
D. do—while循环体不能是复合语句
28.为了避免在嵌套的条件语句if—else中产生二义性,C语言规定:else子句总与()配对
A.缩排位置相同的if B.其之前最近的if
C.其之后最近的if D.同一行上的if
29.判断char型变量ch是否为大写字母的正确表达式是( )
A.'A '<=ch<= 'Z' B.(ch>='A')&(ch<='Z')
C.(ch>='A')&&(ch<='Z' D.('A'<=ch)AND ('Z'>=ch)
30.以下能正确定义整型变量a、b、c并为其赋初值5的语句是( )
A.int a=b=c=5; B.int a,c, c=5; C.a=5,b=5,c=5; D.a=b=c=5;
二、 填空(20分,每空1分)
1.C语言中的实型变量分为两种类型,它们是()和( )。
2.C语言中的标识符只能由三种字符组成,它们是()、( )和( )。
3.若有定义:char c=’\010’;则变量c中包含的字符个数是( )。
4.C语言提供的三种逻辑运算符是()、()、( )。
5.设y为int型变量,请写出描述“y是奇数”的表达式( )。
6.设x,y,z均为int型变量,请写出描述“x或y中有一个小于z”的表达式( )。
7.在C语言中,二维数组元素在内存中的存放顺序是( )。
8.若有定义:double x[3][5];则x数组中行下标的下限为( ),列小标的上限为( )。
9.若有定义:int a[3][4]={ {1,2},{0},{4,6,8,10}};则初始化后,a[1][2]得到的初值是( ),a[2][2]得到的初值是( )。
10.若自定义函数要求返回一个值,则应在该函数体中有一条( )语句,若自定义函数要求不返回一个值,则应在该函数说明时加一个类型说明符( )。
11.函数中的形参和调用时的实参都是数组名时,传递方式为( ),都是变量时,传递方式为( )。
三、 读程序(30分)
1.运行结果:
int main()
{ int a=2,b=3,c;
c=a;
if (a>b)
c=1;
else if (a= =b)
c=0;
else
c=-1;
printf ("%d\n",c);
}
2.运行结果:
int main()
{ int a=2,b=7,c=5;
switch (a>0)
{ case 1: swithch (b<0)
{ case 1:printf("@");break;
case 2:printf("!");break;
}
case 0: switch (c==5)
{ case 0:printf("*");break;
case 1:printf("#"),break;
default:printf("#");break;
}
default:printf("&");
}
printf ("\n");
}
3.运行结果:
#include
int main()
{ int i;
for (i=1;i<=5;i++)
switch (i%5)
{ case 0:printf("*");break;
case 1:printf("#");break;
default:printf("\n");
case 2:printf ("&");
}
}
4.运行结果:
int main()
{ int i,b,k=0;
for (i=1;i<=5;i++)
{ b=i%2;
while (b-->=0) k++;
}
printf ("%d,%d",k,b);
}
5. 运行结果:
#include
int main()
{ char ch[7]={"12ab56"};
int i,s=0;
for (i=0;ch[i]>='0'&&ch[i]<='9';i+=2)
s=s*10+ch[i]-‘0';
printf ("%d\n",s);
}
6. 运行结果:
int main()
{ int a=2,i;
for (i=0;i<3;i++)
printf ("%4d",f(a));
}
f(int a)
{ int b=0;static int c=3;
b++;c++;
return(a+b+c);
}
一、 填空与选择
1.C语言从源程序的书写到上机运行输出结果要经过_______________四个步骤。
2.C语言的表达式与语句的区别在于___________________________________。
3.C语句_____________ (有、没有)输入、输出语句。
4.结构化程序的编写有_______________________________三种程序结构。
5.表达式10/3*9%10/2的值是___________________。
6.设有"int x=2,y"说明,则逗号表达式"y=x+5,x+y"的值是_________________。
7.设有"int x=1",则"x>0?2*x+1: 0"表达式的值是______________________。
8.变量Y满足以下两条件中的任意一个:①能被4整除,但不能被100整除;②能被400整除。请用逻辑表达式表示所给条件。______________________________
9.逻辑运算符"&&、||、 !"中的优先级是____________________
10.C语言是由________________基本单位组成的。
A.过程 B.语句 C.函数 D.程序
11.有如下语句: X+Y*Z>39 && X*Z||Y*Z是什么表达式__________
A.算术表达式 B.逻辑表达式 C.关系表达式 D.字符表达式
12.下面几种说法中哪个是正确的?_____________
A.else语句需与它前面的if语句配对使用;
B.else语句需与前面最接近它的if语句配对使用;
C.else语句需与前面最接近它,且没有和其它else语句配对的if语句配对;
D.以上都正确。
13.有说明语句:char a[ ]="this is a book"。请问该数组到底占了几个字节?
A.11 B.12 C.14 D.15
14.设整型变量a为5,使b不为2的表达式是___________
A.b=a/2 B.b=6-(--a) C.b=a%2 D.b=a>3?2:1
15.设整型变量n的值为2,执行语句"n+=n-=n*n"后,n的值是_________
A.0 B.2 C.-4 D.4
16.执行语句"x=(a=3,b=a--)"后,x,a,b的值依次为_________
A.3, 3, 2 B.3,2,2 C.3,2,3 D.2,3,2
17.如果X=5,执行语句X*=X+=X*3后,则X的值为__________
A.100 B.400 C.450 D.900
18.下列常量中哪个是不合法的_________________
A.2e32.6 B.0.2e-5 C."basic" D.0x4b00
19.下列标识符错误的是_______
A.x1y B._123 C.2ab D._ab
20.c语言中int型数-8在内存中的存储形式为_____
A.1111111111111000 B.1000000000001000
C.0000000000001000 D.1111111111110111
1.写出下列程序段的输出结果:
int main()
{ int x=5; int y=10;
printf("%d\n",x++);
printf("%d\n",++y);
}
2. 下面程序的输出结果是什么?
#include
int main()
{ int x=3;
switch(x)
{ case 1:
case 2:printf("x<3\n");
case 3:printf("x=3\n");
case 4:
case 5:printf("x>3\n");
default:printf("x unknow\n");
}
}
3.根据源程序,写出相应的数学表达式
#include
int main()
{ int x,y;
scanf("%d",&x);
if (x<0)
y= -1;
else if (x== 0)
y=0;
else
y=1;
printf("x=%d,y=%d\n",x,y);
}
4.读出下列程序的输出结果:
int main()
{ int a=1,b=1,c=1;
printf("%d,%d,%d\n",a,b,c)
a+=b+=++c;
printf("%d,%d,%d\n",a,b,c);
printf("%d,%d,%d\n",a++,--b,++c);
printf("%d,%d,%d\n",a,b,c); }
三、 程序填空:(根据题意,将空缺的语句补上。)
1.下列程序的功能是计算圆的面积,将程序补充完整。
#define PI = 3.14159
int main()
{ float r,s;
printf("Enter a number r:");
____________________________
s=PI*r*r
___________________;
}
2. 该程序完成的功能是求1+2+3+…+10的累加和,并进行累加和的输出打印。变量sum是存放累加值的。
#include
int main()
{ ________________
i=1,sum=0;
for(; i<=10;)
{ sum+=i;
_________
}
printf("%d\n",sum);
}
四、改错:
求Fibonacci数列40个数。这个数列有如下特点:第1,2 两个数为1,1。从第3个数开始,该数是其前面两个数之和。即:
F1=1 (n=1) F2=1 (n=2) Fn=Fn-1+Fn-2 (n≥3)
程序如下,请改正:
int main()
{ long int f1,f2
int i;
f1=f2=1;
for (i=1, i<=20 , i- -);
{ printf("%12ld %12ld",f1,f2);
if (i%4=0)
printf("\n");
f1=f1+f2
f2=f2+f1;
}
}
五、编程:
1. 给定一个正整数,判断它是否能同时被3、5、7整除。
一、单项选择题。(每题1分,共20分)
1.C程序的基本单位是:( )
A.子程序 B.程序 C.子过程 D.函数
2.在C语言中,非法的八进制是:( )
A.016 B.018 C.017 D.02
3.不是C语言实型常量的是:( )
A.55.0 B.0.0 C.55.5 D.55e2.5
4 .字符串"xyzw"在内存中占用的字节数是:( )
A.6 B.5 C.4 D.3
5.若已定义f,g为double类型,则表达式:f=1,g=f+5/4的值是:( )
A.2.0 B.2.25 C.2.1 D.1.5
6.若有语句char c1='d',c2='g';printf("%c,%d\n",c2-'a',c2-c1);则输出结果为:( )
A.M,2 B.G,3 C.G,2 D.D,g
7.使用语句scanf("a=%f,b=%d",&a,&b);输入数据时,正确的数据输入是:( )
A.a=2.2,b=3 B.a=2.2 b=3 C.2.2 3 D.2.2,3
8.表示关系12<=x<=y的C语言表达式为:( )
A.(12<=x)&(x<=y) B.(12<=x)&&(x<=y) C.(12<=x)|(x<=y) D.(12<=x)||(x<=y)
9.设x=1,y=2,m=4,n=3,则表达式x>y?x:m A.1 B.3 C.2 D.4 10.若有说明和语句:int a=5,b=6;b*=a+1;则b的值为:( ) A.5 B.6 C.31 D.36 11.设整型变量s,t,c1,c2,c3,c4的值均为2,则执行语句(s=c1==c2)||(t=c3>c4)后,s,t的值为:( ) A.1,2 B.1,1 C.0,1 D.1,0 12.语句for(a=0,b=0;b!=100&&a<5;a++)scanf("%d",&b);scanf最多可执行次数为:( ) A.4 B.6 C.5 D.1 13.对于for(s=2; ;s++)可以理解为:( ) A.for(s=2;0 ;s++) B.for(s=2;1 ;s++) C.for(s=2;s<2 ;s++) D.for(s=2;s>2;s++) 14.若有char h='a',g='f';int a[6]={1,2,3,4,5,6};则数值为4的表达式为:( ) A.a[g-h] B.a[4] C.a['d'-'h'] D.a['h'-'c'] 15.设:char s[10]={"october"};则printf("%d\n",strlen(s));输出是:( ) A.7 B.8 C.10 D.11 16.若有int a[3][5]={2,2},{2,6},{2,6,2}},则数组a共有个元素:( ) A.8 B.5 C.3 D.15 17.设int a=5,b,*p=&a,则使b不等于5的语句为: ( ) A.b=*&a B.b=*a C.b=*p D.b=a 18.若有int a[7]={1,2,3,4,5,6,7},*p=a则不能表示数组元素的表达式是: ( ) A.*p B.*a C.a[7] D.a[p-a] 19.若有int b[4]={0,1,2,3},*p则数值不为3的表达式是: ( ) A.p=s+2,*(p++) B.p=s+3,*p++ C.p=s+2,*( ++p) D.s[3] 20.设有如下定义:struct jan{int a;float b;}c2,*p;若有p=&c2;则对c2中的成员a的正确引用是:( ) A.(*p).c2.a B.(*p).a C.p->c2.a D.p.c2.a 二、填空题。(每空1分,共15分) 1.C语言标识符由 _________、__________和___________来构造。 2.在C语言中,字符串常量是用一串字符。 3.若有说明和语句:int a=25,b=60;b=++a;则b的值是 。 4.若int x=5;while(x>0)printf("%d",x--);的循环执行次数为。 5.若有int a[5],*p=a;则p+2表示第 个元素的地址。 6.若有说明和语句:int a=5,b=6,y=6;b-=a;y=a++则b和y的值分别是 、 。 7.已知整型变量a=3,b=4,c=5,写出逻辑表达式a||b+c>c&&b-c的值是 。 8.C程序设计的三种基本结构是 ________、________和________。 9.数组是表示类型相同的数据,而结构体则是若干数据项的集合。 10.C语言中文件是指。 三、将下列程序补充完整。(每空2.5分,共30分) 1.输入三角形的三条边a,b,c,求三角形的面积。 #include #include int main( ) { float a,b,c,d,t,s; printf("请输入三角形的三条边:"); scanf("%f,%f,%f",&a,&b,&c); if(1) printf("%f%f%f不能构成三角形!", a,b,c); else { t=(a+b+c)/2; s= (2) printf("a=%7.2f,b=%7.2f,c=%7.2f,area=%7.2f\n", a,b,c,s); } } (1) (2) 2.输入两个整数,n1,n2(要求n1 #include int main() { int n1,n2,j,n=0; printf("\n请输入两个数:"); scanf ( (3) ); if(n1>n2) { (4)} for(j=n1;j<=n2,j++) if(5) n++; printf("a=%5d,b=%5d,n=%5d\n"n1,n2,n); } (3) (4) (5) 3.输入两个整数,n1,n2(要求n1 #include #include int prime (int x) { int k; for (6) if (x%k==0) return(0); return(1) } int main() { int a,b,j,n=0; printf("\n请输入两个数:"); scanf("%d,%d",&a,&b); if(a>b) { (7) } for(j=a;j<=b,j++) if( (8) ) n++; printf("a=%4d,b=%4d,n=%4d\n"a,b,n); } (6) (7) (8) 4.编写程序,输入n个整数(n由键盘输入),统计其中正数、负数和零的个数。 #include int main( ) { int x,n,k,k1=0,k2=0,k3=0; printf("input n=:"); (9) for(k=0;k { scanf("%d",&x); if (x<0) k1++; (10); else k3++; printf("k1=%4d,k2=%4d,k3=%4d\n",k1,k2,k3) } } (9) (10) 5.设计一个程序完成以下功能:若从键盘输入英文字母,则原样输出;输入其他字符不理会,直到输入Q键结束.] #include int main( ) { char ch; do{ ch=getchar(); if ( (11) ) break; else if( (12) ) putchar(ch); }while(1); } (11) (12) 四、按格式写出程序运行结果。每题4分,共16分。 1.输出下列程序运行结果: int main() { int a=1,c=65,d=97; printf("a10=%d,a8=%o,a16=%x\n",a,a,a); printf("c10=%d,c8=%o,c16=%x,cc=%c\n"c,c,c,c); d++; printf("d10=%d,dc=%c\n"d,d); } 2.输出下列程序运行结果: int main() { int y=9,k=1; for(;y>0;y--) { if(y%3==0) { printf("%4d"--y); continue; } k++; } printf("\nk=%4d,y=%4d\n",k,y); } 3. 输出下列程序运行结果: #include int main( ) { int k,j; int a[]={3,-5,18,27,37,23,69,82,52,-15}; for(k=0,j=k;k<10;k++) if(a[k]>a[j]) j=k; printf("m=%d,j=%d\n",a[j],j); } 4. 输出下列程序运行结果: int main( ) { char *p,s[]="ABCD"; for ( p=s;p printf("%s\n",p); } 五、按题目要求写出可运行程序:(19分) 1.求元素个数为10的一维数组元素中的最大值和最小值。 2.将矩阵 9 7 5 倒置为 9 3 4 3 1 2 7 1 6 4 6 8 5 2 8 3.编写函数:输入两个正整数m,n,求它们的最大公约数和最小公倍数。 编写程序如下: 一、选择题(1—14每题1分,15-18每题1.5分,共20分) 1.可选作用户标识符的一组标识符是( ) A.void B.C5_b8 C.For D.3a Define _53 -ab DO WORD IF case int 2.在C语言中,非法的八进制是:( ) A.018 B.016 C.017 D.0257 3.在TC中,基本int a[4]类型变量所占的字节数是( ) A.1 B.2 C.4 D.8 4.设x,y,z,k都是int型变量,则执行表达式:x=(y=4,z=16,k=32)后,x的值为( ) A.4 B.16 C.32 D.52 5.设int型变量a为5,使b不为2的表达式是( ) A.b=a/2 B.b=6-(-a) C.b=a%2 D.b=a>3?2:1 6.一个C程序的执行是从( ) A.main()函数开始,直到main()函数结束。 B.第一个函数开始,最后一个函数结束。 C.第一个语句开始,最后一个语句结束。 D.main()函数开始,直到最后一个函数。 7.C语言中用于结构化程序设计的三种基本结构是( ) A.if、switch、break B.if while for C.while do- while for D.顺序结构、选择结构、循环结构 8.以下叙述中不正确的是( ) A.在不同的函数中可以使用相同名字的变量。 B.函数中的形式参数是局部变量。 C.在一个函数内的符合语句中定义变量在本函数范围内有效。 D.在一个函数内定义的变量只在本函数范围内有效。 9.若k为int 类型,且k的值为3,执行语句k+=k-=k*k后,k的值为( ) A.-3 B.6 C.-9 D.-12 10.执行有以下程序,输出结果( ) int main() { int x=3,y=3,z=3; printf("%d %d\n"(++x,y++),++z); } A.3 3 B.3 4 C.4 2 D.4 3 11.若有定义和语句:int a=21,b=021; printf("%x,%d \n",a,b); 执行后输出结果( ) A.17,15 B.16,18 C.17,19 D.15,17 12.已有定义语句:int x=3,y=4,z=5;则值为0的表达式是( ) A.x>y++ B.x<=++y C.x!=y+z>y-z D.y%z>=y-z 13.能正确表达逻辑关系"a≥10或a≤0"的C语言表达式是( ) A.a>=10 or a<=0 B.a>=10||a<=0 C.a>=10&&a<=0 D.a>=10|a<=0 14.n为整型常量,且n=2;while(n--);printf("%d",n); 执行后的结果是:( ) A.2 B.1 C.-1 D.0 15.若有以下定义和赋值double *q,a=5.5; int *p,i=1; double *q,a=5.5;int *p,i=1; p=&i; q=&a; 以下对赋值语句叙述错误的是()。 A.*p=*q 变i中的值。 B.p=oxffd0;将改变p的值,使p指向地址为ffd0的存储单元。 C.*q=*p;等同于a=i; D.*p=*q;是取q所指变量的值放在p所指的存储单元 16.若有以下定义语句double a[8],*p=a; int i=5; 对数组元素错误的引用是() A.*a B.*a[5] C.*(p+i) D.p[8] 17.以下选项中不能使指针正确指向字符串的是() A.char *ch;*ch="hello" B.char *ch="hello" C.char *ch="hello";ch="bye" D.char *ch";ch="hello" 18.若有以下说明和定义语句:union uti {int n;double g;char ch[9];} struct srt{float xy;union uti uv;}aa;则变量aa所占内存的字节数是( ) A. 9 B. 8 C. 13 D.17 二、填空题(每空1分,共12分) 1.C语言源程序文件的扩展名是 (1) ,经过编译后,生成文件的扩展名是 (2) ,经过连接后,生成文件的扩展名是 (3) 。 2.把a,b定义成长整型变量的定义语句是 (4) 3.设x和y均为整型变量,且x=3,y=2,则1.0*x/y表达式的值为 (5) 4.已有定义:float x=5.5;则表达式:x=(int)x+2的值为 (6) 5.已有定义:int x=0,y=0;则表达式:(x+=2,y=x+3/2,y+5)后,变量x的值为 (7),变量y的值为 (8),表达式的值为 (9) 。 6.执行以下for(i=1;i++<=5)语句后,变量i的值为(10) 。 7.数组是表示类型相同的数据,而结构体则是若干(11)数据项的集合。 8.C语言中文件是指 (12) 。 三、程序补充题(每空3分,共24分) 1.从键盘上输入若干个学生成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入。 int main() { float s,gmax,gmin; scanf("%f,"&s); gmax=s;gmin=s; while (1) { if(s>gmax) gmax=s; if(2) gmin=s; scanf("%f",&s); } printf("gmax=%f\ngmin=%f\n"gmax,gmin); } 2.求任意两个正整数的最大公约数和最小公倍数 #include int main() { int r,m,n,temp,gcd,lcm; printf("enter two number please:"); scanf(" (3) ",&m,&n); lcm=m*n; while(m%n!=0) { r=m%n; (4); n=r; } gcd=n; lcm=lcm/n; printf("gcd=%d\nlcm=%d\n",gcd,lcm); } 3.求y的x次方。 Double fun1(double y,int x) int main() { int i; double z=1.0; for(i=1;I (5) ;i++) z= (6); return z; } 4.对输入一个整数进行判断,若是偶数,输出even,否则输出odd,在子函数fun2功能是判定整数是否为偶数,若是偶数,返回1,否则返回0。 int fun2(int x) { if(x%2==0) (7); return 0; } int main() { int n; scanf("%d",&n); if(8) printf("even\n"); else printf("odd\n"); } 四、按格式写出程序运行结果。(每题4分共20分) 1. 执行下列程序写出运行结果: #include int main() { int a=10,c='A',d='B'; printf("a8=%o,a16=%x\n",a,a); printf("c10=%d,c8=%o,c16=%x,cc=%c\n",c,c,c,c); d++; printf("d10=%d,dc=%c\n",d,d); } 2. 执行下列程序写出运行结果: #include void f(int x,int y) { int t; if(x { t=x;x=y;y=t;} } int main() { int a=4,b=3;c=5; f(a,b); f(a,c); f(b,c); printf("%d,%d,%d",a,b,c); } 3. 执行下列程序写出运行结果: #include int main() { int i=0,a=2; if(i==0) printf("**"); else printf("$$"); printf("*"); } 4. 当输入:1 程序运行的结果为 #include int main() { int sum=0,n; scanf("%d",&n); while(n<=5) { sum+=n; n++; } printf("sum=%d",sum); } 5.执行以下程序段,输出的结果为( ) #include int main() { int a[2][3]={ {3,2,7},{4,8,6}}; int *p,m; p=&a[0][0]; m=(*p)*(*(p+2))*(*(p+4)); printf("m=%d",m); } 五、按题目要求写出可运行程序:(24分) 1.模拟计算器功能,编写程序,根据用户输入的运算符,对两个数进行运算。(用switch语句) () 2.求3~100之间的全部素数,并统计素数个数。 3.编写程序完成矩阵转置,即将矩阵的行和列对换: 如将矩阵 9 7 5 1 倒置为 9 3 4 3 1 2 8 7 1 6 4 6 8 10 5 2 8 1 8 10