读程序写结果
1
c
先进入fun函数,3-8行找到最大最小值,注意坑点max和min实际是交换的,第一次输出:
min = 8, max = :0
接下来,10-12行完成交换,第二次输出:
min = 0, max = :8
跳出循环后,main函数中的min和max值显然不变,第三次输出:
min = -1, max= :-1
注意
max后的冒号
2
c
首先直接进入fun函数,*p实际就是x,进入if后指向y,第一次输出:
A: 5 10
然后赋值,x变为7,y变为7,返回main函数,第二次输出:
B: 7
再次进入fun函数,静态变量不重新赋值,*p指向x,第三次输出:
A: 7 7
然后赋值,x变为9,y变为4,返回main函数,第四次输出:
C: 9
3
c
p指向s[0]的[0],p+2则对应s[0][2],第一次输出:
A: c
然后p指向s[2]的[0],第二次输出:
B: h
然后第三次输出,对应s[1][1]:
C: y
接着赋值,s[1]指向s[0],p实际对应s[0][1],第四次输出:
D: b
4
c
多维指针p指向a,第一次输出:
A: 5
第二次输出,等价于p[1][2]:
B: 6
p++,则p指向a[1],第三次输出,等价于p[1][0]:
C: 4
q+=4,等价于后数四位,指向5:
D: 5
5
c
首先看p1,fun函数内p值为3,走else,返回a地址;再看p2,fun函数内p值为15,走if,返回b地址,所以第一次输出:
A: 7 20
交换p1指针和p2指针,第二次输出:
B: 20 7
程序填空
1
求数组中最大元素的值和下标
c
第一空根据下面的函数体,可知为:
c
int max_grade(int a[], int size);
第二空根据提示,应当调用函数,显然应当赋值给index:
c
index = max_grade(grade, 10);
第三空和第四空应当比较后的赋值:
c
max = a[i];
index = i;
返回值很显然应当是index了:
c
return index;
2
下面程序的功能是:将无符号八进制数字字符串转换为十进制数,例如,输入的字符串是556,则输出的十进制整数为366。
c
第一空显然应当是输入,注意字符串不需要加&符号:
c
scanf("%s", s);
第二空应当是初始值的赋值,p指向s[0],n中此时储存s[0]的十进制值,即为转换过程:
c
'0'
第三空是停止条件,应当是读到休止符:
c
*(p + 1) != '\0'
注意
之所以加1,是因为下面赋值过程中本身是对p+1进行处理
第四空是核心的赋值,转换:
c
n * 8 + *(++p) - '0';
3
以下程序的功能是用冒泡法对数组a进行由小到大的排序。
c
标准冒泡排序,不多说了:
c
//1.
j < n
//2.
i < n - j - 1
//3.从小到大,逆序对是>
a[i] > a[i + 1]
//4.调用
fun(a, 10)
4
以下函数实现计算斐波那契数列第n项值。
c
int fib(int iN1) {
int iF1;
if (/*1.*/)
iF1 = 1;
else
iF1 = /*2.*/ + fib(iN1 - 2); /*递归调用fib函数*/
return iF1;
}
第一空是递归终止条件:
c
iN1 == 1 || iN1 == 2
第二空是递归调用:
c
fib(iN1 - 1)
5
以下程序实现将字符串a复制为字符串b
c
第一空是拷贝:
c
a[i]
第二空是补足终止符:
c
'\0'
