本题是中国海洋大学2022年研究生入学考试930程序设计基础简答题第1题。
题目:
1.什么是全局变量?什么是局部变量?两者的区别是什么?试通过实际案例说明两者各自的应用情况。(15分)
以下是本篇文章正文内容,欢迎朋友们进行指正,一起探讨,共同进步。——来自考研路上的lwj。QQ:2394799692
思路:
1,先分别答一下全局变量和局部变量各自的含义
2,再用文字说明一下两者的区别
3,举一个局部变量的例子,我举的是冒泡排序
4,举一个全局变量的例子,我举的是求一个字符串的小写字母个数和大写+小写字母的个数
局部变量,也称内部变量,是指在一个函数内部或复合语句内部定义的变量 。局部变量的作用域是定义该变量的函数或定义该变量的复合语句。局部变量的生存期是从函数被调用的时刻算起到函数返回调用处的时刻结束。
全局变量可以被本程序所有对象或函数引用,一般定义在库函数下面,一定要定义在主函数外部的上面,定义全局变量可以减去很多繁琐的定义,比如在多个函数都需要用到这个变量时,就不用定义这么多次(反正考试的时候这道题我写了3页,我现在也忘了怎么答的了)
1). 作用域不同:全局变量的作用域为整个程序,而局部变量的作用域为当前函数或循环等
2). 内存存储方式不同:全局变量存储在全局数据区中,局部变量存储在栈区
3). 生命期不同:全局变量的生命期和主程序一样,随程序的销毁而销毁,局部变量在函数内部或循环内部,随函数的退出或循环退出就不存在了
4). 使用方式不同:全局变量在声明后程序的各个部分都可以用到,但是局部变量只能在局部使用。函数内部会优先使用局部变量再使用全局变量
代码如下(示例):
#include<stdio.h>
代码如下(示例):
void sort(int a[], int n) { for (int i = 0; i < n - 1; i++)//原则上要进行n-1趟排序 { int f = 0;//用于做标识 for(int j=n-1;j>i;j--)//从最后一个到i遍历 if (a[j - 1] > a[j])//左边大于右边时交换 { int tmp = a[j - 1]; a[j - 1] = a[j]; a[j] = tmp; f = 1; } if (f == 0)break;//如果本趟排序未发送交换,说明表已有序 } } void main() { int a[] = { 1,4,7,3,6,9,2,5,8 }; int n = sizeof(a) / sizeof(int); sort(a, n); for (int i = 0; i < n; i++) printf("%d ", a[i]); }
冒泡排序中的局部变量f,作用是使当当前趟数已有序时,提前退出循环,优化了算法,f的作用域只限于外层for循环内使用,所以需要定义局部变量(考场上写了很多现在都忘了)
代码如下(示例):
#include<stdio.h>
int count; void small(char a[]) { while (*a) { if (*a >= 'a' && *a <= 'z') count++; a++; } } void total(char a[]) { while (*a) { if (*a >= 'A' && *a <= 'Z') count++; a++; } } void main() { char a[50] = "QQ2394799692,i like OUC!"; small(a); printf("小写字母个数:%d\n", count); total(a); printf("总共字母个数:%d\n", count); }
输入:
char a[50] = "QQ2394799692,i like OUC!";
输出:
小写字母个数:5 总共字母个数:10
难易程度:简单
这道题属于基础题,占了15分,相信大家都能拿到这15分,我写的答案只做为参考。当时在考场上记得用了差不多15分钟做这道题。