F3.下列给定程序中,函数fun的功能是:从n个学生的成绩中统计出低于平均分的学生人数,此人数由函数值返回,平均分存放在形参aver所指的存储单元中。例如,若输入8名学生的成绩:
80.5 60 72 90.5 98 51.5 88 64 则低于平均分的学生人数为4(平均分为:75)。 #include
int fun (float *s,int n,float *aver) {float ave,t=0.0; int count=0,k,i; for (k=0;k for (i=0;i if (s[i]; } main() {float s[30],aver; int m,i; printf(\ printf(\ for (i=0;i printf(\ printf(\) N4.下列程序用递归算法实现,输入任意一个整数,然后按从高到低输出各个位上的数字。 #include long int n; void func(long); scanf(\ void func( long m ) { if(m>=10) } R5下面函数的功能是从键盘输入一组小写字母,并保存在字符数组str 中。通过fun()函数把字符数组str中ASCII码为奇数的小写字母转换成对应的大写字母,结果仍保存在原数组中。例如,输入”abcdefg”,输出“AbCdEfG”。 vodi fun(char s[]) { int i; for(_i = 0; s[i] != '\\0' ;i++) { if(s[i]>=’a’<&&>s[i]<=’z’) s[i] =s[i]<-> 32; } } F6.以下函数返回数组s中最大元素的下标,数组中元素的个数由t传入。 Findmax(int s[],int t) { int m,n; for(n=0,m=n;n F7、下面程序的功能是:主函数调用了sub函数,实现在3行4列的二维数组中,找出每一行上的最小值,请填空。 void sub(int b[3][4]) {int i,j,t,min; for(i=0;i<3;i++) {t=0; for(j=1;j<4;j++) if(b[i][j]<<>b[i][t]) t=j; printf(“i=%d,min=%d\\n”,i,); } } main() {int a[3][4]={1,7,5,4,9,10,8,15,43,24,25,17}; sub(a); } F8、以下程序中,select函数的功能是:在N行M列的二维数组中,选出一个最大值作为函数值返回,并通过形参传回此最大值所在的行下标,请填空。 #define N 3 #define M 3 select(int a[N][M],int *n) { int i,j,row=1,colum=1; for(i=0; i if(a[i][j]>a[row][colum]) { row=i; colum=j; } *n= return ; } main() { int a[N][M]={9,11,23,6,1,15,9,17,20},max,n; max=select(a,&n); printf(“max=%d,line=%d\\n”,max,n); } R9、mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返回,请填空。 int mystrlen(char *str) { int i; for(i=0; str[i]'\\0';i++); return(); } F10、下面的程序通过函数average 计算数组中各元素的平均值,请填空。 float average(int *pa,int n) { int i; float avg=0.0; for(i=0;i avg =+ pa[i]; avg =; return avg; } main( ) { int i; a[5]={2,4,6,8,10}; float mean; mean=average(a,5); printf(“mean=% f \\n”,mean); } 第五章 指针 一、 判断题 R1.变量的指针,其含义是指该变量的地址。 N2.有以下语句 static int a[]={0,1,2,3,4},*p; p=&a[2]; 则表达式(*p)++执行后,指针p指向的元素值是2。( f ) R3.变量的指针,其含义是指该变量的数值。( ) 4. 有以下语句 static int a[]={0,1,2,3,4},*p; p=&a[1]; 则表达式(*p)++执行后,指针p指向的元素值是2。( ) 5.若 p 是指向结构体 s 的指针,则 (*p).n 和 (&s)->n 等效。() 6、char *p[10];p是指向数组的指针。 (9)设:char *px;则赋值表达式px=\正确 N(10)设:int a[3]={1,2,3},*pa;则赋值表达式px=&a正确 7. int *p[5]定义的是一个指针数组。( ) 8. int (*p)[5]定义的是一个指针数组。( ) 9.当main函数带有形参时,传给形参的值只能从命令行中得到。() 下列说法中不正确的是( ) R10.指针是一个变量 11.指针中存放的是地址值 12.指针可以进行加、减等算术运算 13.指针变量不占用存储空间 设变量定义为“int x, *p=&x;”,则&*p相当于___________。 N18)p 19)*p 20)x 21)*&x 设变量定义为“int a[4];”,则表达式 不符合C语言语法。 22)*a 23)a[0] 24)a 25)a++ 已知:int *p, a;则语句“p=&a; ”中的运算符“&”的含义是( ) 26、位与运算 27、逻辑与运算 28、取指针内容 29、取变量地址 int n=0,*p=&n,**q=&p;则正确的赋值语句是 30 p=1; 31) *q=2; 32) q=p; 33) *p=5; 二、 单项选择题 1有以下程序(设其文件名为2-5.c) #include void main(int argc,char *argv[]) { int i; char *p; printf(\ if(argc>2) p=argv[1]; puts(p+1); } 若运行该程序时,在命令行提示符后输入 2-5 file1 file2 file3 则执行printf(“%d”,argc);时,输出结果为( 4) A 1 B 2 C 3 D 4 2有以下程序(设其文件名为2-5.c) #include void main(int argc,char *argv[]) { int i; char *p; printf(\ if(argc>2) p=argv[1]; puts(p+1); } 若运行该程序时,在命令行提示符后输入 2-5 file1 file2 file3 则执行puts(p+1);时,输出结果为( ile1) A file1 B file2 C ile1 D ile2 R3. 变量I的值为3,I的地址为1000,若欲使p为指向I的指针变量,则下列赋值正确的是___________。 A)&I=3 B)*p=3 C)*p=1000 D)p=&I 4. 有如下程序 #include void fun1(int *x,int *y) { int *z; z=x;x=y;y=z; } void fun2(int *x,int *y) { int z; z=*x; *x=*y; *y=z;