实验5 - 参考答案 选择题 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1. 以下程序的执行结果是()。#include <stdio.h> int main () { int w=1 ,x=2 ,y=3 ,z=4 ; w=(w<x)?x:w; w=(w<y)?y:w; w=(w<z)?z:w; printf ("%d" ,w); return 0 ; } A、2 B、4 C、3 D、1
答案:B
1 2 3 4 5 6 7 8 2. 下列程序段的输出结果是()。char c1=97 ,c2=98 ;printf ("%d %c" ,c1,c2);A、a b B、97 98 C、97 b D、a 98
答案:C
1 2 3 4 5 3. 如下选项中不属于C语言程序运算符的是()。A、!= B、sizeof C、printf D、&&
答案:C
1 2 3 4 5 4. 判断char 型变量c是否为大写字母的表达式是( )。A、'A' <=c<='Z' B、 ('A' <=c)AND('Z' >=c) C、 (c>='A' )&&(c<='Z' ) D、(c>='A' )&(c<='Z' )
答案:C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 5. 下面的程序片断所表示的数学函数关系是( )。y = 0 ; if (x != 0 ) y = 1 ; if (x > 0 ) y = 1 ; else y = 0 ; A、 y = 0 (x<0 ) y = 0 (x=0 ) y = 1 (x>0 ) B、 y = 1 (x<0 ) y = -1 (x=0 ) y = 0 (x>0 ) C、 y = -1 (x<0 ) y = 1 (x=0 ) y = 0 (x>0 ) D、 y = -1 (x<0 ) y = 0 (x=0 ) y = 1 (x>0 )
答案:A
1 2 3 4 5 6 7 8 9 10 6. int a=1 ,b=2 ,c=3 ; if (a>c) b=a;a=c; c=b; 则c的值为()。 A、不一定 B、2 C、3 D、1
答案:B
1 2 3 4 5 7. 以下描述中正确的是()。A、在 do -while 循环体中,一定要有能使 while 后面表达式的值变为零("假" )的操作 B、由于 do -while 循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句 C、do -while 循环中,根据情况可以省略 while D、do -while 循环由do 开始,用while 结束,在 while (表达式)后面不能写分号
答案:A
1 2 3 4 5 8. 如下有关 for 循环的描述中,正确的是()。A、for 循环只能用于循环次数已经确定的情况 B、for 循环是先执行循环循环体语句,后判断表达式 C、在 for 循环中,不能用 break 语句跳出循环体 D、for 循环的循环体语句中,可以包含多条语句,但必须用花括号括起来
答案:D
1 2 3 4 5 9. 对 for (表达式1 ; ;表达式3 ) 可理解为()。A、for (表达式1 ;1 ;表达式3 ) B、for (表达式1 ;表达式1 ;表达式3 ) C、for (表达式1 ;0 ;表达式3 ) D、for (表达式1 ;表达式3 ;表达式3 )
答案:A
1 2 3 4 5 6 7 10. char a1[]="abc" ,a2[80 ]="1234" ;能将a1串连接到a2串后面的语句是()。 A、strcat (a1,a2); B、strcat (a2,a1); C、strcpy (a2,a1); D、strcpy (a1,a2);
答案:B
1 2 3 4 5 11. 若二维数组a有m列,则在a[i][j]之前的元素个数为()。A、j*m+i B、i*m+j C、i*m+j+1 D、i*m+j-1
答案:B
1 2 3 4 5 12. 以下数组定义中不正确的是()。A、int a[2 ][3 ]; B、int b[][3 ]={0 ,1 ,2 ,3 }; C、int d[3 ][]={{1 ,2 },{1 ,2 ,3 },{1 ,2 ,3 ,4 }}; D、int c[100 ][100 ]={0 };
答案:C
1 2 3 4 5 13. 下列定义不正确的是()。A、#define PI 3.141592 B、#define S 345 C、static char c; D、int max (x,y) ; { }
答案: D
1 2 3 4 5 14. 与实际参数为实型数组名相对应的形式参数不可以定义为()。A、float a; B、float (*a)[3 ]; C、float a[]; D、float *a;
答案: A
1 2 3 4 5 15. 若用数组名作为函数的实参,传递给形参的是()。A、数组的首地址 B、数组元素的个数 C、数组中全部元素的值 D、数组第一个元素的值
答案: A
1 2 3 4 5 16. 以下正确的说法是A、如果形参与实参的类型不一致,以实参类型为准 B、如果函数值的类型与返回值的类型不一致,以函数值类型为准 C、定义函数时,形参的类型说明可以在函数体内 D、return 后面的表达式不能是函数
答案: B
1 2 3 4 5 6 7 8 9 17. 下列选项中正确的语句组是( )。A、char s[8 ]; s={"Beijing" }; B、char *s; s="Beijing" ; C、char s[8 ]; s="Beijing" ; D、char *s; s={"Beijing" };
答案: B
1 2 3 4 5 18. 若有说明:int i,j=2 ,*p=&i; 则能完成“i=j”功能的语句是( )。A、i=**p; B、i=*p; C、*p=j; D、i=&j;
答案: C
1 2 3 4 5 6 7 8 9 10 11 12 19. 下面程序的输出结果是#include <stdio.h> int main () { int a[10 ]={1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10 },*p=a; printf ("%d\n" ,*(p+2 )); return 0 ; } A、2 B、3 C、4 D、5
答案: B
1 2 3 4 5 20. 下列关于指针定义的描述,错误的是( )。A、指针变量的类型与它所指向的变量类型一致 B、指针是一种变量,该变量用来存放某个变量的地址 C、指针变量的命名规则与标识符相同 D、指针是一种变量,该变量用来存放某个变量的值
答案: D
程序填空 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 21. 本程序的功能是:利用顺序查找,在给定的数组中查找一个数是否存在,若存在,输出该数首次出现的位置,若不存在则输出-1 。 输入:21 输出:3 输入:100 输出:-1 #include <stdio.h> #define N 10 int main ( ) { int i,num; int a[N]={23 ,57 ,21 ,58 ,90 ,55 ,66 ,88 ,98 ,67 }; scanf ("%d" ,&num); for (___i=0 ___;i<=___N-1 ___ && a[i]!=num;i++); if (i>=N) printf ("-1\n" ); else printf ("%d\n" , ___i+1 ___); return 0 ; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 22. 本程序的功能是:将一维数组中的数据重新排序,排序结果是所有奇数按原顺序靠左,所有偶数按原顺序的逆序靠右。 假如原始数据为:3 1 6 7 9 7 2 6 8 9 则重新排序后为:3 1 7 9 7 9 8 6 2 6 #include <stdio.h> #include <string.h> int main () { int a[10 ]={3 ,1 ,6 ,7 ,9 ,7 ,2 ,6 ,8 ,9 }; int i=0 ,j=9 ,temp; while (i<=j){ if (____a[i]%2 ==0 ____){ temp=a[i]; for (int k=i;k<j;k++){ a[k]=____a[k+1 ]____; } a[j]=temp; j--; } else ____i++____; } for (int i=0 ;i<10 ;i++){ printf ("%2d" ,a[i]); } return 0 ; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 23. 本程序的功能是,判断由0 、1 、2 、3 、4 、5 六个数字能组成多少个互不相同且无重复数字的三位数(最高位不能为0 )?输出结果:100 找出程序中的3 处错误并直接修改,不得增删代码行。 #include <stdio.h> int main () { int i,j,k,n; for (i=0 ;i<=5 ;i++) for (j=0 ;j<=5 ;j++) for (k=0 ;k<=5 ;k++) if (i!=k||i!=j||j!=k) n++; printf ("%d\n" ,n); return 0 ; }
示例代码: 答案1:n=0 答案2:i=1 答案3:i!=k&&i!=j&&j!=k
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24. 本程序的功能是从键盘输入任意位数的正整数,输出其逆序数。输入:35896721 输出:12769853 找出程序中的3 处错误并直接修改,不得增删代码行。 #include <stdio.h> int main () { long n,s; scanf ("%ld" ,n); if (n<0 ) n=-n; do { s=s*10 +n/10 ; n=n/10 ; }while (n!=0 ); printf ("%ld\n" ,s); return 0 ; }
示例代码: 答案1:s=0; 答案2:&n 答案3:%10
程序设计 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 25. 本程序中,fun()函数的功能是判断一个数n是否为完数,若是,返回1 ,若不是返回0 。完数定义:其真因子之和等于该数本身。 程序运行后,在main()函数中调用fun()函数进行判断,输出1000 以内的所有完数。 输出: 6 28 496 #include "stdio.h" int fun (int n) { int s=0 ; for (int i=1 ;i<=n/2 ;i++){ if (n%i==0 ){ s=s+i; } } if (s==n) return 1 ; else return 0 ; } int main () { for (int i=1 ;i<=1000 ;i++){ if (fun(i)){ printf ("%4d" , i); } } void TestFunc () ; TestFunc(); return 0 ; } void TestFunc () { }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 26. 函数fun()的功能:计算1 +2 +3 +...+n的和。程序运行后,从键盘输入一个正整数,在main()函数中调用fun()函数验证其功能。 输入:100 输出:5050 #include "stdio.h" int fun (int n) { int s=0 ; for (int i=1 ;i<=n;i++){ s=s+i; } return s; } int main () { int m; scanf ("%d" , &m); printf ("%d\n" , fun(m)); void TestFunc () ; TestFunc(); return 0 ; } void TestFunc () { }
综合设计 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 27. 功能:有一个一维数组score,内放10 个学生的成绩,用一 个函数average()求平均成绩。 例如:如果10 个学生的成绩分别为92 ,87 ,68 ,56 ,92 ,84 , 70 ,65 ,90 ,60 则平均成绩为:76.400000 #include "stdio.h" float average (float array [],int n) { int i; float aver,sum=0 ; for (i=0 ;i<n;i++) sum=sum+array [i]; aver=sum/n; return aver; } int main () { float score[]={92 ,87 ,68 ,56 ,92 ,84 ,70 ,65 ,90 ,60 }; printf (" %f\n" ,average (score,10 )); void TestFunc () ; TestFunc(); return 0 ; } void TestFunc () { }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 28. 功能:用辗转相除法求两个整数的最大公约数。测试界面如下: 第1 行输入两个整数 第2 行显示运行结果, #include "stdio.h" int gcd (int m,int n) { int r; r=m%n; while (r!=0 ) { m=n; n=r; r=m%n; } return n; } int main () { int m,n,result; scanf ("%d%d" ,&m,&n); result=gcd(m,n); printf ("the gcd is %d\n" ,result); void TestFunc () ; TestFunc(); return 0 ; } void TestFunc () { }