四川大学电气信息学院
四川大学电气信息学院
实验报告(本科)
学 号
姓 名
专
业
日 期
实验题目 变量的存储类别
实验内容: 1. 掌握外部变量、内部变量、静态变量和自动变量的定义
2. 了解外部变量、内部变量、静态变量和自动变量的作用域和生存期
3. 掌握使用全局变量(数组)在函数之间和源程序之间正确传送数据
4. 熟练掌握外部变量、内部变量、静态变量和自动变量的初始化
问 题 (算 法) 描 述
实训1 输入学生的学号(数字字符串),将其转换为整型数。
1) 运行实训1,分别输入一个数字字符串,观察输出结果。
2) 在第15行处设置断点,按F5启动调试,观察此时变量k的值和地址。
3) 按F10进行单步执行,查看当程序执行到第17、18、19、21行时,观察变量k的值和地址。
4) 根据步骤3和4,分析变量k的作用域。
实训2 求10个成绩中的最大值和最小值。
1) 运行实训2,观察输出结果。
2) 分析实训2程序中变量score、minScore和maxScore的作用域和存储类别。
3) 如果将第8、9行中变量定义时使用的static去掉,本程序的输出结果会有变化吗?为什么?
实训3 编写函数,计算20个数中最大值、最小值和平均值,由main()调用该函数,并输出结果。(要求:使用全局变量max和min返回最大值和最小值)。
实训3 NS图如下
实训4 编写函数,计算两个整数的最大公约数和最小公倍数。由main()调用该函数,并输出结果,两个整数由键盘输入。(要求:使用全局变量gysh和gbsh返回最大公约数和最小公倍数)。
实训4 NS图如下
实验结果(即执行界面截图)
实训1
1.输入数字字符串后输出字符串如下。
2.在15行设置断点,观察变量k的值和地址,如下图。此时k的值不存在,因为还没有定义。
3.单步执行,观察k值和地址的变化。
(1)执行到在17行时,k的值已经存在。
(2)执行至第 18行时,k的值变为2
(3)执行到19行时,k的值仍为2
(4)运行到21行时,k变为灰色,说明k已经不存在。
4.根据步骤2、3可知k的作用域为17~19行,即{}限制的范围内。
实训2
运行实训2,结果如下。
2.将断点设置在主函数的末尾,仍能观察到score、minScore、maxScore的值,说明它们的作用域为整个程序,存储类别为静态型。监视图如下。
取掉第8、9行的static,运行结果不变。因为去掉static后,score、minScore、maxScore为外部变量,存放在静态数据区,使这些数据一直存放直至整个程序运行结束。
实训3
实训3运行结果如下
实训4
实训4运行结果如下。
调试(出错信息、出错原因、修改方法)及总结
画NS图可简化程序,降低编程难度。
熟练掌握断点的使用方法,通过逐句调试快速查找到程序中的错误。
使用函数将程序模块化时,要符合语法,提高程序可读性。
应该定时检查语法,避免犯低级错误,同时节省时间。