
在Visual C++ 2010环境下输入并运行下面的程序,观察分析运行结果
在Visual C++ 2010环境下输入并运行下面的程序,观察分析运行结果

关注引自免费微信小程序:皆我百晓生
首先,让我们分析给定的C语言程序。这个程序定义了一个名为bjg的函数,它接受一个整数数组和一个整数作为参数,并尝试增加数组中的某个元素。然后,在主函数main中,我们初始化一个整数数组score,设置一个索引变量i,打印初始值,调用bjg函数,再打印更新后的值。
以下是详细的程序分析:
// 包含必要的头文件
#include "stdio.h"
#include "stdlib.h"
// 定义函数bjg
void bjg(int a[], int i) {
for (; i > 0; i--) { // 循环从i到1
if (a[i] < 60) { // 如果当前元素小于60
a[0]++; // 增加数组的第一个元素
}
}
}
int main() {
// 初始化整数数组score和索引变量i
int score[10] = {0, 89, 65, 54, 39, 87, 77, 45, 60, 81};
int i = 9;
// 打印初始值
printf("score[0]=%d, i=%d\n", score[0], i);
// 调用函数bjg
bjg(score, i);
// 打印更新后的值
printf("score[0]=%d, i=%d\n", score[0], i);
// 暂停程序执行
system("PAUSE");
return 0;
}
运行结果: 运行此程序后,你会看到以下输出:
score[0]=0, i=9
score[0]=2, i=9
程序分析:
bjg() 函数有两个形参:int a[] 和 int i。这里,a[] 实际上是指向整数数组的指针,因此传递的是引用类型。对于 int i,它是一个整数变量,传递方式也是值传递。bjg(score, i) 时,传递给 a[] 的实际上是 score 数组的地址,因此函数内部可以修改数组中的元素。而对于 i 参数,由于是值传递,所以在 bjg() 函数内部对 i 的任何改变不会影响外部的 i 变量。bjg() 函数的作用是遍历数组 score 从索引 i 到 1,如果找到元素小于 60,就将 score[0] 加一。在这个例子中,score[9] = 81 不满足条件,但 score[8] = 45 小于 60,因此 score[0] 会加一变为 1。接着,score[7] = 45 也小于 60,再次使 score[0] 加一变为 2。总结来说,bjg() 函数通过引用传递改变了数组 score 中的第一个元素,但是通过值传递的 i 变量保持不变。