2.执行语句:
for(i=1;i++<4;)后,变量i的值是 。
3.在C语言中,写一个十六进制的整数,必须在它的前面加上前缀
。
4.利用减1运算符“--”,下面的两个语句
b=5+a:
a-=1
表达的功能,可以由一个语句来实现。
这个语句是 。
5.任何一个数组的元素都具有相同的名字和。
6.有说明语句:
intx[][4]={{1},{2},{3}};那么元素x[1][1]的
取值是。
7.在C语言中,指针就是一个。
8.如果指针变量p当前指向数组a的第I个元素a[i]。
那么表达式
*(--p)
的操作过程是。
9.如有以下说明:
floatnum[10]={0.0,1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9},
*p=&num[5];那么执行语句“p-=4;”后,指针p指向的元素是。
10.如果一个函数没有返回值,那么该函数的类型是的。
二、单项选择(每题2分,共30分)
1.若变量已正确定义并赋值,下面符合C语言语法的表达式是。
A.a:
=b+1B.a=b=c+2C.int18.5%3D.a=a+7=c+b
2.以下字符中,不正确的C语言转义字符是。
A.\’B.\011C.\\D.\80
3.若已定义x和y为double型,则表达式x=1,y=x+3/2的值是。
A.1B.2C.2.0D.2.5
4.有如下说明,则数值为9的表达式是。
A.*p+9B.*(p+8)C.*p+=9D.p+8
5.以下关于C语言字符数组的描述错误的是。
A.字符数组可以存放字符串
B.字符数组中的字符串可以整体输入输出
C.可以在赋值语句中通过赋值运算符‘=’对字符数组整体赋值
D.不可以用关系运算字符数组中的字符串进行比较
6.若已定义:
inta[]={0,1,2,3,4,5,6,7,8,9},*p=a,i;
其中0≤i≤9,则对a数组元素不正确的引用是。
A.a[p-a]B.*(&a[i])C.p[i]D.a[10]
7.有如下程序段,执行该程序段后,a的值为。
int*p,a=10,b=1;
p=&a;a=*p+b;
A.12B.11C.10D.编译出错
8.假如指针p1已经指向某个整型变量,要使指针p2也指向同一个变量,哪一个语句是正确的。
A.p2=&p1;B.p2=**p1;C.p2=&*p1;D.p2=*p1
9.设有数组定义:
chararray[]=”china”;则数组array所占的空间为。
A.4个字节B.5个字节C.6个字节D.7个字节
10.执行语句x=(a=3,b=a--);后,x,a,b的值依次是。
A.3,3,2B.3,2,2C.3,2,3D.2,3,2
11.若有以下定义:
int[3][2];则能正确表示t数组元素地址的表达式是。
A.&t[3][2]B.t[3]C.t[1]D.*t[2]
12.设整型变量a,b,c均为2,表达式a+++b+++c++的值为。
A.6B.9C.8D.表达式错误
13.以下叙述中不正确的是。
A.在函数中,通过return语句传回函数值
B.在函数中,可以有多条return语句
C.在C中,main后的一对圆括号中也可以带有形参
D.在C中,函数的调用必须在一条独立的语句中完成
14.用在函数间传递数据时,C语言不为形参分配新的存储区。
A.普通变量B.数组名C.数组元素D.指针变量
15.以下关于字符串与指针的描述,正确的是。
A.字符串中的每个字符都是指针
B.可以用一个char*型指针指向字符串
C.字符串与指针等价
D.只有以“\0”结尾的字符串,才能用一个char*型指针指向其开头
三、判断题(每题1分,共10分)
1.“0x41”这个转义字符代表大写字母“A”。
()
2.如果数组说明中给出的初值个数小于数组长度,那么C编译会自动把剩余的元素初始话为与所列最后一个初值相同的取值。
()
3.若有说明:
chara[]=“abcde”;那么字符数组a的长度是6。
()
4.有说明语句:
charb[10];,那么b=“china”;就把字符串“china”赋给了数组b。
()
5.一个指针变量中,可以存放任意类型变量的地址。
()
6.在C语言中,指针变量有自己的地址。
()
7.有如下变量说明:
intx,*p;floaty,*q;由于P是指向int型变量的指针,q是指向float型的指针,因此p和q占用的内存字节数是不相同的。
()
8.在一个函数里,不能说明全局变量。
()
9.没有返回值的函数一定没有参数。
()
10.用普通变量或指针变量传递数据时,C语言总是把实参的值赋给形参。
()
四、程序写结果(每题4分,共12分)
1.阅读下面的程序,给出执行后变量gx的取值。
#include“stdio.h”
intgx;
voidsgb()
{
intgx;
gx=3;
}
voidfun()
{
gx=5;
sgb();
gx=gx*3;
}
main()
{
fun();
printf(“gx=%d\n”,gx);
}
gx的值为。
2.写出下面程序段的输出结果。
Voidmain()
{
chara[]=“ABCDEFGH”,b[]=“abCDefGH”;
char*p1,*p2;
intk;
p1=a;p2=b;
for(k=0;k<7;k++)
if(*(p1+k)==*(p2+k))
printf(“%c”,*(p1+k));
printf(“\n”);
}
结果为。
3.写出下列程序段的输出结果。
intfun(int*p,intn)
{inti,t;
t=*p;
for(i=1;iif(t<(*p+i))t=*(p+i);
returnt;
}
voidmain()
{
inta[10]={10,23,1,3,4,0,-9,5,9,64};
intma;
ma=fun(a,10);
printf(“%d”,ma);
}ma的值为。
五、程序设计题(共28分,任选三题)
1.编写一个程序,求出所有各位数字的立方和等于1099的三位整数。
比如,379就是这样一个满足条件的三位数。
2.用函数calculate来统计一任意二维数组中负数的个数n,并返回n的值。
3.编写一个程序,它利用char型的指针变量指向一个字符串,并把字符串里的小写字母全部转换成大写字母。
试题二
一、填空题:
1、C语言程序是由构成的,一个程序有且只有一个函数。
2、函数一般由和两部分构成。
3、C语言本身没有输入输出语句,输入和输出分别是由库函数和等函数来完成的。
4、C语言提供的基本数据类型有、、和。
5、设a=2,b=3,x=3.5,y=2.5,则表达式(float)(a+b)/2+(int)x%(int)y的值为.
6、从变量的作用域角度来分,可以分为变量和变量,从变量值存在的时间角
度来分,可以分为方式和方式。
7、按函数调用在程序中出现的位置来分,可以有三种函数调用方式,分别为、
、。
8、引用一个数组元素,可以用两种方法和。
9、数组元素a[I]的等价形式为。
二、选择题
1、若要求在if后一对圆括号中表示“a不等于0”的关系,则能正确表示这一关系的表达式为
A)a<>0B)!
a
C)a=0D)a
2、在C语言中,合法的字符常量是
A)'\084'B)'\x43'
C)'ab'D)"\0"
3、若已定义x和y为double类型,则表达式:
x=1,y=x+3/2的值是
A)1B)2
C)2.0D)2.5
4、在以下一组运算符中,优先级最高的运算符是
A)<=B)=C)%D)&&
5、下列合法的数组定义是
A)inta[]="string";B)inta[5]={0,1,2,3,4,5};
C)inta="string";D)chara[]={0,1,2,3,4,5};
6、若有定义和语句:
chars[10];s="abcd";printf("%s\n",s);
则结果是(以下u代表空格)
A)输出abcdB)输出a
C)输出abcduuuuuD)编译不通过
7、以下对C语言函数的有关描述中,正确的是
A)在C中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参
B)C函数既可以嵌套定义又可以递归调用
C)函数必须有返回值,否则不能使用函数
D)C程序中有调用关系的所有函数必须放在同一个源程序文件中
8、若有以下定义和语句:
inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;则不能表示a数组元素的表达式是
A)*pB)a[10]C)*aD)a[p-a]
9、若有定义和语句:
int**pp,*p,a=10,b=20;
pp=&p;p=&a;p=&b;printf("%d\n",*p,**pp);
则输出结果是:
A)10,20B)10,10
C)20,10D)20,20
10、若有以下定义:
chars[20]="programming",*ps=s;则不能代表字符o的表达式是
A)ps+2B)s[2]
C)ps[2]D)ps+=2,*ps
三、判断题
1、如果对a,b,c这三个变量赋初值,可以这样定义:
inta=b=c=3;()
2、continue语句和break语句的区别是:
continue语句只结束本次循环,而不是终止整个循环的执行,而break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。
()
3、若有定义charstr[13];那么使用的输入函数可以写成:
scanf(“%s”,&str);()
4、判断下列语句是否正确:
(1)chara[14];
a=”Ilovechina”;()
(2)charstr[]={“Ilovechina!
”};
str=str+7;
printf(%s”,str);()
四、阅读下列程序,写出运行结果
1、intast(intx,inty,int*cp,int*dp)
{*cp=x+y;
*dp=x-y;
}
main()
{inta,b,c,d;
a=4;b=3;
ast(a,b,&c,&d);
printf("%d%d\n",c,d);
}
上面程序的输出结果是:
2、
#include
inta[]={2,4,6,8};
main()
{inti;
int*p=a;
for(i=0;i<4;i++)
a[i]=*p++;
printf("%d\n",a[2]);
}
上面程序的输出结果是:
3、
#include
main()
{inta,b;
for(a=1,b=1;a<=100;a++)
{if(b>=20)break;
if(b%3==1)
{b+=3;
continue;
}
b-=5;
}
printf("%d\n",a);
}
上面程序的输出结果是:
五、编程题
1、编程找出200-300之间满足下列条件的数:
该数各位数字之和为12,之积为42。
2、打印出以下图案:
*
***
*****
*******
*****
***
*
试题三
一、选择题
1、.结构化程序设计所规定的三种基本控制结构是:
()
A、输入、处理、输出B、树形、网形、环形
C、顺序、选择、循环D、主程序、子程序、函数
2、以下程序的输出结果是()
main()120
{inti=010,j=10,k=0x10;
printf("%d,%d,%d\n",i,j,k);
}
A、8,10,16B、8,10,10C、10,10,10D、10,10,16
3、假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是()
A、7B、8C、6D、2
4、C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符()。
A、必须为字母
B、必须为下划线
C、必须为字母或下划线
D、可以是字母、数字和下划线中的任一种字符
5、执行语句:
printf("|%10.5f|\n",12345.678);的输出是()。
A、|2345.67800|B、|12345.6780|C、|12345.67800|D、|12345.678|
6、有以下程序
main()
{chara='a',b;
printf("%c,",++a);
printf("%c\n",b=a++);
}
程序运行后的输出结果是()
A、b,bB、b,cC、a,bD、a,c
7、有以下程序
main()
{inti=0,s=0;
for(;;)
{if(i==3||i==5)continue;
if(i==6)break;
i++;
s+=i;
};
printf("%d\n",s);
}
程序运行后的输出结果是()
A、10B、13C、21D、程序进入死循环
8、若w=1,x=2,y=3,z=4,则条件表达式ww:
yy:
z的值是()。
A.4B.3C.2D.1
9、putchar函数可以向终端输出一个()
A.整型变量表达式值
B.实型变量值
C.字符串
D.字符或字符型变量值
10、有如下程序段:
inta1,a2;
charc1,c2;
scanf(“%d%c%d%c”,&a1,&c1,&a2,&c2);
若要求a1,a2,c1,c2的值分别为10,20,A,B,正确的数据输入是()
A、10A20BB、10A20BC、10A20BD、10A20B
11、以下程序的执行结果是()
#include
main()
{inti=010,j=10;
printf(“%d,%d\n”,i,j);
}
A.11,10B.9,10C.010,9D.10,9
12、为了避免嵌套的if-else语句的二义性,C语言规定else总是与()组成配对关系。
A.缩排位置相同的ifB.在其之前未配对的if
C.在其之前未配对的最近的ifD.同一行上的if
13、能够完成如下函数计算的程序段是()
-1x<0
y=0x=0
1x>0
A.y=-1;
if(x!
=0)
if(x>0)y=1;
elsey=0;
B.if(x>=0)
if(x>0)y=1;
elsey=0;
C.y=0;
if(x>=0)
if(x>0)y=1;
elsey=-1;
D.y=-1;
if(x>0)y=1;
elsey=0;
14、下面有关for循环的正确描述是()。
A、for循环只能用于循环次数已经确定的情况
B、for循环是先执行循环体语句,后判断表达式
C、在for循环中,不能用break语句跳出循环体
D、for循环体语句中,可以包含多条语句,但要用华括号括起来
15、C语言中while和do-while循环的主要区别是()。
A、do-while的循环体至少无条件执行一次
B、while的循环控制条件比do-while的循环控制条件严格
C、do-while允许从外部转到循环体内
D、do-while的循环体不能是复合语句
16、以下程序段()
A、是死循环B、循环执行二次C、循环执行一次D、有语法错误
17、以下关于数组的描述正确的是()
A、数组的大小是固定的,但一个数组中可以有不同类型的数组元素。
B、数组的大小是可变的,但一个数组中所有元素的类型必须相同。
C、数组的大小是固定的,但一个数组中所有元素的类型必须相同。
D、数组的大小是可变的,但一个数组中可以有不同类型的数组元素。
18、以下对二维数组a进行正确初始化的是()
A、inta[2][3]={{1,2},{3,4},{5,6}};
B、inta[][3]={1,2,3,4,5,6};
C、inta[2][]={1,2,3,4,5,6};
D、inta[2][]={{1,2},{3,4}};
19、设chars[10];*p=s;以下不正确的表达式是()
A、p=s+5;B、s=p+s;C、s[2]=p[4];D、*p=s[0];
20、设有说明int(*ptr)[M];其中ptr是()
A、M个指向整型变量的指针
B、指向M个整型变量的函数指针
C、一个指向具有M个整型元素的一维数组的指针
D、具有M个指针元素的一维指针数组,每个元素都只能指向整型量
21、如下程序的执行结果是()
#include
main()
{inta[]={1,2,3,4,5,6};
int*p;
p=a;
*(p+3)+=2;
printf(“%d,%d\n”,*p,*(p+3));
}
A、1,3B、1,6C、3,6D、1,4
22、对于C语言的函数,下列叙述正确的是()
A、函数的定义不能嵌套,但函数调用可以嵌套
B、函数的定义可以嵌套,但函数调用不能嵌套
C、函数的定义和调用都不能嵌套
D、函数的定义和调用都可以嵌套
23、在说明一个结构体变量时,系统分配给它的存储空间是(),在说明一个共同体变量时,系统分配给它的存储空间是()
A、第一个成员所需存储空间
B、最后一个成员所需存储空间
C、占用最大存储空间的成员所需的存储空间
D、所有成员所需存储空间的总和
24、以下关于typedef的叙述不正确的是()
A、用typedef可以定义各种类型名,但不能用来定义变量
B、用typedef可以增加新类型
C、用typedef只是将已存在的类型用一个新的名称来代表
D、使用typedef便于程序的通用
二、填空题
1、算法的五个特性是
、、、、。
2、二维数组a[5][6]的第十个元素如何表示?
。
3、若x,i,j和k都是int型变量,则执行下面表达式后x的值为。
x=(i=4,j=16,k=32)
4、已知x=43,ch=’A’,y=0;则表达式(x>=y&&ch<’B’&&!
y)的值是_____。
5、什么是局部变量?
____________________。
什么是全局变量?
____________________。
6、若有定义和语句“intx[10],*p;p=x;”在程序中引用数组元素x[j]的4中形式是
______、、__、______。
7、在下列程序段中,枚举变量c1和c2的值分别是、。
main()
{enumcolor{red,yellow,blue=4,green,white}c1,c2;
c1=yellow;
c2=white;
printf(“%d,%d\n”,c1,c2);
}
三、判断题
1.’\0x41’这个转义字符代表大写字母’A’。
()
2.如果数组初始化时给出的初值个数小于数组长度,那么剩余的数组元素将被初始话化为给定的最后一个初值。
()
3.若有说明:
chara[]=“abcde”;那么字符数组a的长度是6。
()
4.有说明语句:
charb[10];,那么b=“china”;就把字符串“china”赋给了数组b。
()
5.若有定义:
chars[]="china";则TurboC系统为数组s开辟5个字节的内存单元。
()
6.在C语言中,指针变量有自己的地址。
()
7.通过return语句,函数可以带回一个或一个以上的返回值。
()
8.在一个函数里,不能声明全局变量。
()
9.没有返回值的函数一定没有参数。
()
10.break语句用在循环体中,可结束整个循环,continue语句用在循环体中,可结束本次循环。
()
四、读程序写结果
1.以下程序的输出结果是:
#include
main()
{intk=4,m=1,p;
p=func(k,m);
printf(“%d,”,p);
p=func(k,m);
printf(“%d”,p);
}
fun(inta,intb)
{intm=0,i=2;
i+=m+1;
m=i+a+b;
return(m);
}
结果:
2.以下程序运行后的输出结果是()。
#include
main()
{charstr[]="SSSWLIA",c;
intk;
for(k=2;(c=str[k])!
='\0';k++)
{switch(c)
{case'I':
++k;break;
case'L':
continue;
default:
putchar(c);continue;
}
putchar('*');
}
printf(“\n”);
printf(“k=%d”,k);
}
结果:
_____________________________
3.#include
main()
{inta[][4]={1,3,5,7,9,11,13,15,17,19,21,23};
int(*p)[4],i=1,j=2;
p=a;
printf(“%d\n”,*(*(p+i)+j));
}
结果:
五、程序设计题
1、随意输入两个数,求最大公约数和最小公倍数。
要求用到函数调用。
.
2、求20
∑n!
即求(1+2!
+3!
+4!
+……+20!
)
n=1
3、用选择法对十个整数排序。
4、写一个函数,使给定的一个3行3列的二维数组转置,即:
行列互换。
5、有一字符串,包含n个字符。
写一函数,将此字符串中从第m个字符开始的全部字