第12周项目一 程序阅读题(1)

本文通过两个C++程序实例,详细解析静态局部变量的工作原理及其在多次函数调用间如何保持状态不变。通过运行结果对比预期,帮助理解静态变量在内存中的存储特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

  阅读下列程序,写出程序的运行结果。上机时运行程序,与你的预期进行对
照、理解。如果对运行结果和其背后的原理仍不理解,请通过单步执行的手段跟踪理解。
(1)阅读下面两个有静态局部变量的程序,阅读中画出其中各变量的变化过程,以掌握静态变
量的存储特征,对照实际运行结果检验学习成果。必要时记得看书及课件。 

#include <iostream>
using namespace std;
int f(int n);
int main()
{
cout<<f(5)<<" ";
cout<<f(8)<<endl;
return 0;
}
int f(int n)
{
static int a=2;
int b=0;
a+=n;
b+=a;
return b;
}

预计运行结果是:7 10

实际运行结果是:

我没有注意到a是静态变量所以判断错误。

#include <iostream>
using namespace std;
int func (int a, int b)
{
static int m=0, i=2;
i+=m+1;
m=i+a+b;
return m;
}
int main()
{
int k=4, m=1, p;
p=func(k, m);
cout<<p<<endl;
p=func(k, m);
cout<<p<<endl;
return 0;
}

预计运行结果是:8 17

实际运行结果是:

有了上次的教训我这次终于对了!!!

今后要多多注意静态变量。

因为static变量也就是静态变量,在程序运行过程中被声明后就会一直保存在内存里,所以只能声明一次,第二次再访问那个函数时,给静态变量声明同时赋值的语句就不再执行了,而静态变量的值始终保存在内存里,也就是上次改变以后的值。
没有static修饰的函数中的变量,只在函数被执行时占用内存,函数执行完毕后就被销毁,数据也就不存在了,所以每次都要声明,值也就不会变。

《java程序设计》课程的库资料,由贺州学院整理,可供学生期末课程复习使用,也可以供相关任课教师出卷使用。 内容示例为: 9. 阅读下列程序片段,写出运行结果。 public class Test { public static void main(String[] args) { int percent = 10; tripleValue(percent); System.out.println(percent); } public static void tripleValue(int x) { x = 3 * x; } } 代码执行后输出的结果是______。 答案:10 [解析] static 关键字应用的场合有:①用来修饰类中定义的变量,这样的变量称为类变量或静态变量。②可以用来修饰类中定义的方法,这样的方法称为静态方法。③用来修饰初始化语句块,这样的语句块常称为静态初始化语句块。static 在这里表示这个方法为类方法,不属于任何对象实例,而是类所有,描述对象的共有动作,可以用类名直接调用。在调用了tripleValue函数之后,函数的值没有返回,所以percent的值还是10。 10. 阅读下列程序片段,写出运行结果。 class Shape { public Shape() { System.out.print("Shape"); } } class Circle extends Shape { public Circle() { System.out.print("Circle"); } } public class Test { public static void main(String[] args) { Shape d = new Circle(); } } 代码执行后输出的结果是______。 答案:ShapeCircle [解析] 继承是而向对象编程个主要优点之,它对如何设计Java类有着直接的影响。继承有如下几点好处: ①它可以利用已有的类来创建自己的类,只需要指出自己的类和已有的其他类有什么不同即可,而且还可以动态访问其他有 关类中的信息。 ②通过继承,可以利用Java类库所提供的丰富而有用的类,这些类都已经被很好地实现。 ③当设计很大的程序时,继承可以使程序组织得层次清晰,有利于程序设计相减少错误的发生。该程序首先编写了个Shape的类,然后又编写个类Circle去继承Shape类。由于子类拥有父类所有的属性和方法,所以输出的是ShappeCircle。
根据网络上的相关信息,以下是关于第十二届省赛第场比赛的详细资料整理: --- ### 关于第十二届省赛第场的比赛详情 #### 1. 比赛背景 第十二届省赛是项面向高校学生的科技创新竞赛活动,旨在提升学生的技术能力、团队协作能力和创新能力。比赛分为多个阶段,其中第场通常作为初赛或选拔赛。 #### 2. 参赛对象 主要面向省内各高等院校的学生,包括本科生和研究生。每支参赛队伍需由若干名队员组成,配备名指导教师。 #### 3. 比赛形式 第场比赛的形式可能因具体赛事而异,但般包括以下几个方面: - **理论测试**:考察选手的基础知识掌握程度,例如编程基础、算法设计等。 - **实践操作**:提供实际问场景,要求选手完成特定的任务,比如程序开发、硬件调试等。 - **案例分析**:给出个具体的业务需求或技术难,让选手提出解决方案进行演示。 #### 4. 报名方式 报名通常通过官方网站或指定平台进行,参赛者需要提交个人信息、团队成员名单以及初步方案(如有)。 #### 5. 时间安排 以过往经验为例,第场比赛的时间大致如下: - 报名截止日期:距离正式比赛前约个月左右。 - 初赛时间:每年春季学期中期至期末之间。 - 结果公布:赛后内发布晋级名单及相关通知。 #### 6. 注意事项 - 认真阅读官方发布的比赛规则和技术文档; - 准备好所需的软硬件环境,确保能够顺利完成各项任务; - 加强团队沟通与合作,合理分配工作职责; - 若遇到疑问及时联系组委会工作人员寻求解答。 --- ### 示例目解析 以下是道典型的第十二届省赛第场模拟及其解法: **目描述**:给定组整数数组nums=[3,5,-2,8],求出最大子序列之和。 **解决思路**:可以采用动态规划的方法来实现这目标。定义状态dp[i]表示以元素i结尾的最大连续子段和,则递推关系为`dp[i]=max(dp[i−1]+numsi,numsi)`。最终答案即为所有dp值中的最大者。 ```python def max_subarray_sum(nums): if not nums: return 0 dp = [0]*len(nums) dp[0] = nums[0] for i in range(1,len(nums)): dp[i] = max(dp[i-1]+nums[i], nums[i]) return max(dp) # 测试用例 print(max_subarray_sum([3,5,-2,8])) # 输出应为14 ``` --- ### 其他参考资料推荐 为了更好地备战第十二届省赛第场,建议参考以下资源: - 官方提供的历届真汇编及详解; - 各类开源项目代码库,如GitHub上类似主的仓库; - 相关领域的经典教材书籍或者在线课程视频教程。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值