一、选择题(每题2 分,共10分)
1.以下叙述中正确的是( )
A) 构成C程序的基本单位是函数
B) 可以在一个函数中定义另一个函数
C) main()函数必须放在其它函数之前
D) 所有被调用的函数一定要在调用之前进行定义
2.设a和b均为double型变量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是( )
A)6.500000 B)6 C) 5.500000 D) 6.000000
3.已知i、j、k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为1、j的值为2、k的值为3,以下选项中正确的输入语句是( )
A) scanf(“%2d%2d%2d”,&i,&j,&k);
B) scanf(“%d %d %d”,&i,&j,&k);
C) scanf(“%d,%d,%d”,&i,&j,&k);
D) scanf(“i=%d,j=%d,k=%d”,&i,&j,&k);
4.若x 为unsigned int 型变量,则执行下列语句后x值为()
x = 65535;
printf(“%d\n”,x);
A)65535 B)1 C)无定值D)-1
5. 定义全局变量时,若变量的的存储类别缺省,则默认的存储类型是()。
A)auto B)register
C)extern D)static
二、判断题(每题1 分,共10分)
1、C程序中的函数不能嵌套调用,但可嵌套定义。
()。
2、当形式参数为指针变量名时,实际参数可为指针变量名、数组名或其它类型变量的首地址()。
3、若有说明:static int a[3][4];,则数组a中各数组元素可在程序的编译阶段得到初值0()。
4、若用数组名作为函数调用时的实参,则实际上传递给形参数组的是数组的第一个元素的值()。
5、共用体变量的地址和它的各成员的地址都是同一起始地址。()。
6、语句int (*p) (int,int);定义了一指针变量p,指向一个包含有两个int型形参的函数,其返回值
也为int型数据。()。
7、文件指针与文件内部位置指针意义相同。()。
8、在定义枚举类型数据时,枚举元素是变量。()。
9、continue语句只能冲破一层循环。()。
10、结构体类型数据可以嵌套定义。()。
第 1 页(共6 页)
三、写出程序运行结果(每题 5 分,共20分)
1.main()
{ int a=15,b=21,m=0;
switch(a%3)
{ case 0:m++;break;
case 1:m++;
switch(b%2)
{ default:m++;
case 0:m++;break;
}
}
printf(“%d\n”,m);
}
程序运行后的输出结果是:
2.float fun(int x, int y)
{return (x+y);}
main()
{ int a=2,b=5,c=8;
printf("%3.0f\n",fun((int)fun(a+c,b),a-c));}
程序运行后的输出结果是:
3.void fun(char *c,int d)
{ *c=*c+1;d=d+1;
printf("%c,%c,",*c,d);
}
main()
{ char a='A',b='a';
fun(&b,a); printf("%c,%c\n",a,b);
}
程序运行后的输出结果是:
4. struct stu
{ char num[10]; float score[3]; };
main()
{ struct stu s[3]={{"20021",90,95,85},
{"20022",95,80,75},
{"20023",100,95,90}},*p=s;
int i; float sum=0;
for(i=0;i<3;i++)
sum=sum+p->score[i];
printf("%6.2f\n",sum);
}
程序运行后的输出结果是:
第 2 页(共6 页)
四、程序改错(每题5分,共20分)
1.以下程序的功能是:按顺序读入10名学生4门课程的成绩,计算出每位学生的平均分并输出,程序如下:main()
{ int n,k;
float score ,sum,ave;
sum=0.0;
for(n=1;n<=10;n++)
{ for(k=1;k<=4;k++)
{ scanf("%f",&score); sum+=score;}
ave=sum/4.0;
printf("NO%d:%f\n",n,ave);
}
}
上述程序运行后结果不正确,调试中发现有一条语句出现在程序中的位置不正确。这条语句是哪条?并将其移到正确的位置。
2.以下函数的功能是计算s=1+1/2+1/3+……+1/n,程序运行后结果不正确,错误的语句是哪条?并改之。
main()
{float s=0.0;
int i;
for(i=1;i<=3;i++)
s=s+1/i;
printf("%f",s);
}
3. 以下函数的功能是:输出有10个元素的整型数组a的元素值。程序运行后结果不正确,只增加一条语句使其完成要求功能。
main( )
{ int a[10], *p=a , i;
for ( i=0; i<10; i++) scanf("%d",p++);
printf("\n");
for ( i=0; i<10; i++, p++) printf("%d ",*p);
}
4.以下函数的功能是:打印1到5的阶乘值。程序运行后结果不正确,只修改一条语句使其完成要求功能。
int fac(n)
int n;
{ int f =1;
f = f n ;
return( f );
}
main( )
{ int i;
for (i=1; i<=5; i++)
printf(“%d!=%d\n”, i, fac(i));
}
第 3页(共6页)
五、程序填空(在【】中填空,每题5 分,共20分)
1.fun函数的功能是:首先对a所指的N行N列的矩阵,找出各行中的最大的数,再求这N个最大值中的最小的那个数作为函数值返回。请填空。
#include
#define N 4
int fun(int(*a)[N])
{ int row,col,max,min;
for(row=0;row { for(max=a[row][0],col=1;col if(【】) max=a[row][col]; if( row==0) min=max; else if(【】) min=max; } return min; } 2.函数sstrcmp()的功能是对两个字符串进行比较。当s所指字符串和t所指字符串相等时, 返回值为0;当s所指字符串大于t所指字符串时,返回值大于0;当s所指字符串小于t所指字符串时,返回值小于0(功能等同于库函数strcmp())。请填空。 #include int sstrcmp(char *s,char *t) { while(*s&&*t&&(*s-*t)【==0 】) { s++;t++;} return 【*s-*t 】 } 3.下面的程序是用指针来交换两个数据,请将缺省语句填上。 void exchange( int *p ,int *q) { int t; t=*p; *p=*q; *q=t; } main() { int a,b,*x,*y; a=10;b=20; x=&a;【】 【】 printf(“%d %d\n”,*x, *y); } 4. 下面的程序是将字符串a按反向存入字符串b中并输出。(如 :串a为"12345 ",则串b为"54321 ") main() { char *a={"abcdefg"},b[80],*p=b; int n,m,k; k=strlen(a); n=k-1; m=0; while (n>=0) { *(p+m)=【*(a+n) 】 n--; 第 4 页(共 6 页)【m++ 】 } *(p+k)=*(a+k); printf("%s \n",a); printf("%s \n",b); } 六、编写函数完善下面程序(每题10分,共20分) 1.编写在字符串中寻找关键字符的子函数 #include char *search(char *tagstr, char *c) { } main() { char *string="I am a student",c; printf("Please enter the character:"); scanf("%c",&c); /*输入关键字符*/ if(search(string,&c)) printf("Found!!!",search(string,&c)); else printf("Not Found!!!\n"); } 2. 用指向函数的指针作形参,设计一个函数process, 每次实现不同的功能,当用不同的函数名作实参调用process时,process再去调用相应的函数。 #include main ( ) { int max( ), min( ), add( ),process(); int a, b; printf("enter a and b:"); scanf("%d, %d", &a, &b); printf("max="); process(a, b, max); printf("min="); process(a,b,min); printf("sum="); process(a, b, add); } 第 5 页(共6页) max(x, y) int x, y; { int z; if (x>y) z=x; else z=y; return(z); } min(x, y) int x, y; { int z; if (x z=x; else z=y; return(z); } add(x, y) int x, y; { int z; z=x+y; return(z); } process( ) { } 第6 页(共6 页)