循环中变量的作用域

循环中变量的作用域

背景:

输入某班学生某门课的成绩(最多不超过40人),

当输入为负值时,表示输入结束,

用函数编程统计成绩不低于平均分的学生人数。

要求:

(1)按如下函数原型进行编程:

int GetAboveAver(int score[], int n);

(2)在主函数中:

输入学生成绩,

然后调用函数GetAboveAver计算成绩不低于平均分的学生人数,

最后输出该人数。

要求:

(1)学生成绩和平均分均定义为int类型

(2)**无输入提示信息

**输入格式为:”%d”

**输出格式为:”Students of above average is %d\n”

程序运行示例:

88 75 86 67 59 66 -1↙

Students of above average is 3

代码实现:

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
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define MAX 40

int calculate(int*,int);

int main()
{ int a[MAX]={0},n=0;
while(10086){
scanf("%d",&a[n]);
if(a[n]<0){
break;
}
n++;
}
printf("Students of above average is %d",calculate(a,n));
return 0;
}

int calculate(int a[],int n){
int sum=0,ave,count=0;
for(int i=0;i<n;i++){
sum+=a[i];
}
ave=sum/(n);
for(int i=0;i<n;i++){
if(a[i]>=ave){
count++;
}
}
return count;
}

总结

  • for循环中括号内定义的变量只存于在循环中
    • 出了for循环,变量就死掉了
    • 解决方法,将定义的语句提出来到循环之前
  • while循环中定义的变量无效
    • 在while循环中定义变量,会导致每次循环的改变量会反复赋值为初始值
    • 如果定义全局变量,可以解决这个问题,但仍会导致出了这个循环,变量死掉
    • 解决方法,同上提出来
  • 注意for循环的三个表达式的执行顺序,尽量老老实实地通过break语句打破循环,而不是放到括号内去判断

这个题目看似简单,但要求对循环的运行机理有充分的认识


循环中变量的作用域
http://example.com/2025/12/06/循环中变量的作用域/
作者
王柏森
发布于
2025年12月6日
许可协议