1、 一、 选择题 1. 在下面的(C)函数声明语句存在语法错误。 A.AA(int a,int b); B.AA(int ,int) C.AA(int a;int b) D.AA(int a,int) 2.在下面的(C)不能作为函数的返回类型。 A.void B.int C.new D.long 3.下面正确的函数原型语句是(B)。 A.int Function(void a); B.void Function(int); C.int Function(a); D.void int(double a)
2、 4.函数调用func(exp1,exp2),exp3*exp4-exp5)中所含实参的个数为(B)个。 A.1 B.2 C.4 D.5 5.下面的标识符中,(C)是文件级作用域。 A.函数形参 B.语句标号 C.外部静态类标识符 D.自动类标识符 6.下面的标识符中,(B)具有全局级作用域。 A.函数形参 B.全局变量 C.内部静态类标识符 D.自动变量符 7.假定p是一个指向float型数据的指针,则p+1所指数据的地址比p所指数据的地址大( C )字节。 A.1 B.2 C.4
3、 D.8 8.假定a为一个字符数组名,则a[8]的地址比该数组的首地址大( B )个字节。 A.4 B.8 C.16 D.32 9.假定a为一个数组名,则下面的( B )表示有错误。 A.a[i] B.*a++ C.*a D.*(a+1) 10.用calloc函数创建具有10个整型元素的一维数组的正确语句是( C )。 A.int *p=calloc(10,2); B.int *p=callo(10; C.int *p=calloc(10,4); D.int *p=malloc(10)
4、 11.假定变量m定义为“int m=7;”,则定义p的正确语句为( B )。 A.int p=&m; B.int *p=&m; C.int &p=*m; D.int *p=m; 12.假定k是一个double类型的变量,则定义指向k的应加入此4字,否则D亦对 变量p的正确语句为( B )。 A.double p=&k; B.double *p=&k; C.double &p=*k; D.char *p=”Thank you!”; 13.假定一条定义语句为“int a[10],x,*pa=a;”,若要把数组a中
5、下标为3的元素赋值给x,则不正确的语句为( D )。 A.x=pa[3]; B.x=*(a+3); C.a=a[3]; D.x=*pa+3; 14.假定有定义“int b[10];int *pb;”,则不正确的赋值语句为( C )。 A.pb=b; B.pb=&b[0]; C.pb=b+2; D.pb=b[5]; 15.假定指针变量p定义为“int *p=new int(100);”,要释放p所指向的动态内存,应使用语句( D )。 A.delete[p]; B.delete *p; C.delete
6、p; D.delete []p; 16.假定指针变量p定义为“int *p=calloc(30,sizeof(int));”,要释放p所指向的动态内存,应使用语句( D )。 A.delete[p]; B.deldete(p); C.free[]p; D.free(p); 二、填空题 1.在C语言中,一个函数由函数头和___函数体_______组成。 2.在函数外定义的变量称为全局变量,若没有被初始化则系统隐含对它所赋的初值为___0______。 3.如果一个函数只允许同一程序文件中的函数调用,则应在访函数定义前
7、加上的C保留字为为___static______。 4.如果一个函数直接或间接地调用自身,这样的调用被称为__递归_____调用。 5.调用系统函数时,要先使用#include命令包含该函数的原型语句所在__头___文件。 6.函数形参的作用域是该函数的__内部___。 7.假定p所指对象的值为25,p+1所指对象的值为46,则*p++的值为__25______。 8.假定p所指对象的值为25,p+1所指对象的值为46,则*++p的值为__46______。 9.假定p所指对象的值为25,p+1所指对象的值为46,则执行“*(p++);”语句后,p所指对象的值为__46______
8、 10.假定a是一个指针数组,则a+1所指对象的地址比a地址大__4___字节。 11.若要把一个整型指针p转换为字符指针,则采用的强制转换表达式为___(char*)p______。 12.假定一个数据对象为int*类型,则指向该对象的指针类型为__int**______。 13.假定p是一个指向整数对象的指针,则用___&p___表示指针变量p的地址。 14.若p指向x,则___*p___与x的等价的。 15.NULL是一个符号常量,通常作为空指针值,它值为__ ’\0’ (ASCII码0)___。 三、写出下列每个程序运行后的输出结果 1. #include
9、
10、n");
}
输出结果为:
GGPPBBWW
Press any key to continue
2. #include
11、"运算符错!\n");exit(1);}
}
return x;
}
void main(){
int x=20,y=8;
printf("%3.2lf ",SD(x,y,'-'));
printf("%3.2lf ",SD(x,y,'*'));
printf("%3.2lf ",SD(x,y,'/'));
}
输出结果为:
12.00 160.00 2.50
Press any key to continue
3. #include
12、f("subs:x,y=%d,%d\n",x,y);
}
void main(){
int x=18,y=23;
printf("main:x,y=%d,%d\n",x,y);
WF(x,y);
x=2*x;
printf("main:x,y=%d,%d\n",x,y);
}
输出结果为:
main:x,y=18,23
subs:x,y=41,64
main:x,y=36,23
Press any key to continue
4. #include
13、);
void main(){
char s[15]="567891234";
fun(s);
printf("%s\n",s);
}
void fun(char ss[]){
int i,n=strlen(ss);
for(i=0;i
14、nt n)
{
int i,j,x;
for(i=1;i
15、出结果为:
47 36 32 28 20 15
Press any key to continue
6. #include
16、ontinue
7. #include
17、t *a,int n){
int i,s=1;
for(i=0;i 18、)
if(a[i]==x)return 1;
return 0;
}
函数功能为:
根据整型数组元素中是否能找到整数x,返回1或0
2. #include 19、nt N=10;
int ff(int x,int y){
int z;
printf("%d + %d = ",x,y);
scanf("%d",&z);
if(x+y==z)return 1;else return 0;
}
void main()
{
int i,a,b,c=0;
srand(time(0)); //初始化随机数系列
for(i=0;i 20、printf("得分:%d\n",c*10);
}
函数功能为:
函数ff让两个数相加,要求输入其和,判断结果是否正确。在主函数中用随机函数产生两个20以内的随机整数,通过10次调用这个函数,算对一次得10分,计算所得分
4. int fun6(int m,int n,int b=2)
{
if(m 21、用,返回前2参数的最小公倍数;
不使用默认值时,若最后一个参数不小于前2个参数,则返回前2参数之乘积;
否则,通过递归调用,返回前2参数最小公倍数的n倍数。
5. #include






