1、第三讲 函数理论题2第三讲 函数(理论题)1)P20连续输入一批学生的成绩,直到输入成绩的数量超过50个或者输入的成绩不是有效成绩(有效成绩为0100),将输入的有效成绩存入数组mark中,在数组中查找并输出最高分。函数getmax(array,n)在有n个元素的一维数组array中找出并返回最大值。运行示例:Enter marks: 90 80 77 65 -1Max = 90【程序】#include #define MAXNUM 50int getmax( (5) ) int k, max; (6) for(k = 1; k n; k+) if(max 0) printf(Max = %d
2、n, getmax( (8) ); else printf(No marks!n); 【供选择的答案】(5) A、int n; int array B、void C、int *array D、int array,int n(6) A、max = 0; B、; C、max = array0; D、max = arrayn; (7) A、k =0 & x = 100 B、k =0 & x MAXNUM & x =0 | x MAXNUM | x =0 | x = 100 (8) A、mark, k B、mark C、mark D、mark, n#include #define MAXNUM 50i
3、nt getmax( (5) ) int k, max; (6) for(k = 1; k n; k+) if(max 0) /*表示输入的数组元素不为空,就是有元素合格,否则可能全部输入元素都不合格*/printf(Max = %dn, getmax( (8) ); else printf(No marks!n); 【供选择的答案】(5) A、int n; int array B、void C、int *array D、int array,int n这个题中(5)和(8)要对比来看。根据题目中的“函数getmax(array,n)”推断此处的答案是D,注意函数调用的顺序。(6) A、max
4、= 0; B、; C、max = array0; D、max = arrayn;给max赋初值,为第一个元素,然后与后面的比较。(7) A、k =0 & x = 100 B、k =0 & x MAXNUM & x =0 | x MAXNUM | x =0 | x = 100注意:题目中给出的条件:输入成绩的数量超过50个或者输入的成绩不是有效成绩(有效成绩为0100)这是循环结束的条件,而要循环进行的条件是B这里注意:#define MAXNUM 50(8) A、mark, k B、mark C、mark D、mark, nMark是处理以后的数组,根据题目中的“函数getmax(array,
5、n)”推断此处的答案是A(n是形式参数,k是实际参数,所以选A)2)P29阅读下列程序并回答问题,在每小题提供的若干可选答案中,挑选一个正确答案。【程序】#include main() int i, j, temp;int a33= 1,2,3,4,5,6,7,8,9;/*第3行*/ void f(int *x, int *y); for(i = 0; i 3; i+) for(j = 0; j 3; j+) if(i j) f(&aij, &aji); /* 第8行 */ for(i = 0; i 3; i+) for(j = 0; j 3; j+) printf(%2d, aij); vo
6、id f(int *x, int *y) int t; t = *x; *x = *y; *y = t; (17)程序的输出是 (17) 。 A、3 2 1 6 5 4 9 8 7 B、7 8 9 4 5 6 1 2 3 C、1 2 3 4 5 6 7 8 9 D、1 4 7 2 5 8 3 6 9 (18) 将第8行改为“f(&aij, &aji);”后,程序的输出是 (18) 。 A、3 2 1 6 5 4 9 8 7 B、7 8 9 4 5 6 1 2 3 C、1 2 3 4 5 6 7 8 9 D、1 4 7 2 5 8 3 6 9(19) 将第8行改为“if(i 2) f(&aij,
7、 &a2-ij);”后,程序的输出 是 (19) 。 A、3 2 1 6 5 4 9 8 7 B、7 8 9 4 5 6 1 2 3C、1 2 3 4 5 6 7 8 9 D、1 4 7 2 5 8 3 6 9(20) 将第8行改为“if(j 2) f(&aij, &ai2-j);”后,程序的输出 是(20) 。 A、3 2 1 6 5 4 9 8 7 B、7 8 9 4 5 6 1 2 3C、1 2 3 4 5 6 7 8 9 D、1 4 7 2 5 8 3 6 9阅读下列程序并回答问题,在每小题提供的若干可选答案中,挑选一个正确答案。【程序】#include main() int i, j
8、, temp;int a33= 1,2,3,4,5,6,7,8,9;/*第3行*/ void f(int *x, int *y); for(i = 0; i 3; i+) for(j = 0; j 3; j+) if(i j) f(&aij, &aji); /* 第8行 */ for(i = 0; i 3; i+) for(j = 0; j 3; j+) printf(%2d, aij); void f(int *x, int *y) int t; t = *x; *x = *y; *y = t; 说明,函数f实现变量的交换。/*第3行*/定义的数组是1,2,34,5,67,8,9(17)程序
9、的输出是 (17) 。 A、3 2 1 6 5 4 9 8 7 B、7 8 9 4 5 6 1 2 3 C、1 2 3 4 5 6 7 8 9 D、1 4 7 2 5 8 3 6 9 /*第8行*/实现数组对角线左下与右上元素的交换。数组变为:1,4,72,5,83,6,9(18) 将第8行改为“f(&aij, &aji);”后,程序的输出是 (18) 。 A、3 2 1 6 5 4 9 8 7 B、7 8 9 4 5 6 1 2 3 C、1 2 3 4 5 6 7 8 9 D、1 4 7 2 5 8 3 6 9两次交换,又复原了!所以数组没有变化。(19) 将第8行改为“if(i 2) f(
10、&aij, &a2-ij);”后,程序的输出 是 (19) 。 A、3 2 1 6 5 4 9 8 7 B、7 8 9 4 5 6 1 2 3C、1 2 3 4 5 6 7 8 9 D、1 4 7 2 5 8 3 6 9数组变为:7,8,94,5,61,2,3(20) 将第8行改为“if(j 2) f(&aij, &ai2-j);”后,程序的输出 是 (20) 。 A、3 2 1 6 5 4 9 8 7 B、7 8 9 4 5 6 1 2 3C、1 2 3 4 5 6 7 8 9 D、1 4 7 2 5 8 3 6 93)P30#include main() int i, x1, x2; in
11、t a5=1,2,3,4,5; void f1(int x, int y), f2(int *x, int *y );x1 = x2 = 0;for(i = 1; i ax1) x1 = i; if(ai ax2) x2 = i; /*语句11*/f2(&ax1, &a0);for(i = 0; i 5; i+) printf(%2d, ai);printf(n);f1(ax2, a1);for(i = 0; i 5; i+) printf(%2d, ai);printf(n);f2(&ax2, &a4);for(i = 0; i 5; i+) printf(%2d, ai);printf(n
12、);f1(ax1, a3);for(i = 0; i 5; i+) printf(%2d, ai);printf(n);void f1(int x, int y) int t; t = x; x = y; y = t;void f2(int *x, int *y) int t; t = *x; *x = *y; *y = t;(21) 程序运行时,第1行输出 (21) 。A、1 2 3 4 5 B、2 1 3 4 5C、1 2 3 5 4 D、5 2 3 4 1 (22) 程序运行时,第2行输出 (22) 。A、2 1 3 4 5 B、5 2 3 4 1C、2 5 3 4 1 D、1 2 3
13、4 5 (23) 程序运行时,第3行输出 (23) 。A、1 2 3 5 4 B、2 5 3 1 4C、1 2 3 4 5 D、5 2 3 4 1 (24) 程序运行时,第4行输出 (24) 。A、5 2 3 1 4 B、1 2 3 4 5 C、1 2 3 5 4 D、5 2 3 4 1 #include main() int i, x1, x2; int a5=1,2,3,4,5; void f1(int x, int y), f2(int *x, int *y );x1 = x2 = 0;for(i = 1; i ax1) x1 = i; if(ai ax2) x2 = i; /*语句11
14、*/f2(&ax1, &a0);for(i = 0; i 5; i+) printf(%2d, ai);printf(n);f1(ax2, a1);for(i = 0; i 5; i+) printf(%2d, ai);printf(n);f2(&ax2, &a4);for(i = 0; i 5; i+) printf(%2d, ai);printf(n);f1(ax1, a3);for(i = 0; i 5; i+) printf(%2d, ai);printf(n);void f1(int x, int y) int t; t = x; x = y; y = t;void f2(int *
15、x, int *y) int t; t = *x; *x = *y; *y = t;数组a的原始数据为:a5=1,2,3,4,5也就是:a0=1, a1=2, a2=3, a3=4, a4=5语句7到语句11实现这样的功能:在a1=2, a2=3, a3=4, a4=5找出最大和最小的数,所以x1=4但是,没有比a0更小的数,所以x2一直没有变,x2=0注意:函数f1是传值方式调用,没有实现交换。详细看课本P138.注意:函数f2是传址方式调用,实现交换。详细看课本P139.(21) 程序运行时,第1行输出 (21) 。A、1 2 3 4 5 B、2 1 3 4 5C、1 2 3 5 4 D、
16、5 2 3 4 1 函数f2是传址方式调用,交换a4和a0这时:a5=5,2,3,4,1(22) 程序运行时,第2行输出 (22) 。A、2 1 3 4 5 B、5 2 3 4 1C、2 5 3 4 1 D、1 2 3 4 5 函数f1是传值方式调用,没有交换这时:a5=5,2,3,4,1(23) 程序运行时,第3行输出 (23) 。A、1 2 3 5 4 B、2 5 3 1 4C、1 2 3 4 5 D、5 2 3 4 1 函数f2是传址方式调用,交换a0和a4这时:a5=1,2,3,4,5(24) 程序运行时,第4行输出 (24) 。A、5 2 3 1 4 B、1 2 3 4 5 C、1
17、2 3 5 4 D、5 2 3 4 1 函数f1是传值方式调用,没有交换这时:a5=1,2,3,4,55)P23阅读下列程序并回答问题,在每小题提供的若干可选答案中,挑选一个正确答案。【程序】#include int k = 1; /* 第2行 */void Fun();void main() int j; for(j = 0; j 2; j+) Fun(); /* 第8行 */ printf(k=%d, k); /* 第9行 */void Fun() int k = 1; /* 第11行 */ printf(k=%d, k); /* 第12行 */ k+; (17)程序的输出是 (17) 。
18、 A、k=1,k=2,k=3 B、k=1,k=2,k=1 C、k=1,k=1,k=2 D、k=1,k=1,k=1 (18)将第11行改为“static int k=1;”后,程序的输出是 (18) 。 A、k=1,k=1,k=1 B、k=1,k=1,k=2 C、k=1,k=2,k=1 D、k=1,k=2,k=3 (19) 将第11行改为“k=1;”后,程序的输出是 (19) 。 A、k=1,k=2,k=1 B、k=1,k=1,k=1 C、k=1,k=1,k=2 D、k=1,k=2,k=3 (20) 将第11行改为“;”后,程序的输出是 (20) 。 A、k=1,k=1,k=2 B、k=1,k=
19、2,k=3 C、k=1,k=1,k=1 D、k=1,k=2,k=1 阅读下列程序并回答问题,在每小题提供的若干可选答案中,挑选一个正确答案。【程序】#include int k = 1; /* 第2行 */void Fun();void main() int j; for(j = 0; j 2; j+) Fun(); /* 第8行 */ printf(k=%d, k); /* 第9行 */void Fun() int k = 1; /* 第11行 */ printf(k=%d, k); /* 第12行 */ k+; (17)程序的输出是 (17) 。 A、k=1,k=2,k=3 B、k=1,k
20、=2,k=1 C、k=1,k=1,k=2 D、k=1,k=1,k=1 函数fun()被主程序在第8行调用了2次。每次结果一样。第12行2次输出k=1。然后第9行1次输出k=1。(18)将第11行改为“static int k=1;”后,程序的输出是 (18) 。 A、k=1,k=1,k=1 B、k=1,k=1,k=2 C、k=1,k=2,k=1 D、k=1,k=2,k=3Static int k=1说明k是一个静态变量,其作用在函数fun()一直有效。当j=0第一次调用fun()时,第12行输出k=1;然后,K+,k=2,注意,此时K的值被保留。当j=1第2次调用fun()时,k=2保留,因此
21、第12行输出k=2;然后,函数fun()关闭,释放。因此在主函数中,k的值没有变化,第9行1次输出k=1。注意,在函数fun(),静态变量的值具有保留、继承的特点,但并不会影响主函数。关于静态变量的详细情况,可查看课本p145到p153。 (19) 将第11行改为“k=1;”后,程序的输出是 (19) 。 A、k=1,k=2,k=1 B、k=1,k=1,k=1 C、k=1,k=1,k=2 D、k=1,k=2,k=3当j=0第一次调用fun()时,第12行输出k=1;当j=1第2次调用fun()时,再次赋值k=1,因此第12行再次输出k=1;然后,执行,K+,k=2,函数fun()关闭。但是,因
22、为k是在第2行定义的全局变量,因此,k的值在全局有效,所以此时k=2,第8行1次输出k=2。本题的关键在于:原来第11行的int k = 1重新定义了变量k,因此在函数fun()中的K不再是第2行定义的全局变量,换句话说,这里的K可以当作一个其他变量,比如n。但是,当把int k = 1换成k = 1,则把一个变量定义语句换成了赋值语句,就不是新定义的变量(不能再当作一个其他变量,比如n),只是给了一个新值。关于全局变量的详细情况,可查看课本p145到p153。 (20) 将第11行改为“;”后,程序的输出是 (20) 。 A、k=1,k=1,k=2 B、k=1,k=2,k=3 C、k=1,k
23、=1,k=1 D、k=1,k=2,k=1 道理与上题相同,不过把一个变量定义语句换成了空语句。当j=0第一次调用fun()时,第12行输出k=1; 然后,执行,K+,k=2。当j=1第2次调用fun()时,因此第12行再次输出k=2; 然后,执行,K+,k=3。然后第9行1次输出k=3。4)P58int f1(int n) if(n = 1) return 1; else return f1(n-1) + n;int f2(int n) switch(n) case 1: case 2: return 1; default: return f2(n-1) + f2(n-2); void f3(
24、int n) printf(%d, n%10); if(n/10 !=0) f3(n/10);void f4(int n) if(n/10 != 0) f4(n/10); printf(%d, n%10); #include main() printf(%dn, f1(4); printf(%dn, f2(4); f3(123); printf(n); f4(123); printf(n);(17) 程序运行时,第1行输出 (17) 。 A. 10 B. 24 C. 6 D. 1 (18) 程序运行时,第2行输出 (18) 。 A. 1 B. 3 C. 2 D. 4(19) 程序运行时,第3行
25、输出 (19) 。 A. 123 B. 3 C. 321 D. 1(20) 程序运行时,第4行输出 (20) 。 A. 1 B. 123 C. 3 D. 321【程序】int f1(int n) if(n = 1) return 1; else return f1(n-1) + n;int f2(int n) switch(n) case 1: case 2: return 1; default: return f2(n-1) + f2(n-2); void f3(int n) printf(%d, n%10); if(n/10 !=0) f3(n/10);void f4(int n) if(
26、n/10 != 0) f4(n/10); printf(%d, n%10); #include main() printf(%dn, f1(4); printf(%dn, f2(4); f3(123); printf(n); f4(123); printf(n);(17) 程序运行时,第1行输出 (17) 。 A. 10 B. 24 C. 6 D. 1 f1(4)=4+f1(3)=4+(3+f1(2)= 4+(3+(2+f1(1)=4+3+2+1=10递归调用(18) 程序运行时,第2行输出 (18) 。 A. 1 B. 3 C. 2 D. 4f2(4)=f2(2)+f2(3)=1+(f2(1)+f2(2)=1+1+1=3(19) 程序运行时,第3行输出 (19) 。 A. 123
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1