单片机C语言中的全局变量可以被修改吗

单片机C语言中的全局变量可以被修改吗,第1张

定义了全局变量就表示在这个函数a都为10.如果在主函数里或是其他自定义函数把a的值改变,则a变为了局部变量,则主函数里或是其他自定义函数中的a会覆盖掉全局变量中的a,也就是说在主函数里或是其他自定义函数中的a只是临时变量,当函数运行完,这个函数中的a寿命就终止了。当退出了这个函数后,a的值恢复到全局变量的10,全局变量是伴随着整个程序的。最好还是自己写程序实验,这样印象深刻。

对于第一个程序,有几点错误:

1、g是子程序中的变量,不会对c的值有影响,换句话说,c的值衡为0。

2、对于完全平方数(即4、9、16等),会输出两个相同解。

我认为更改为以下程序:

program z1(input,output)

var a,b,c:longint

procedure check(f:longint)//去掉一个参数

var h:longint

begin

if f=2 then begin c:=0exit end

if f=1 then begin c:=3exit end //把下面两句移到上面更清晰

for h:=2 to trunc(sqrt(f)) do

begin

if h*h=f then

begin write(h,' ',f div h,' ')c:=1break end //此处换用楼上语句可行

if f mod h=0

then begin write(h,' ',f div h,' ')c:=1 end

else c:=c+0

//针对问题1,将原程序中的g改为c可行,子程序中可直接修改主程序中的变量

end

begin

writeln ('input to check if the number is ')

readln(b)

writeln ('It has')

check(b)//此处改动针对问题1,没有必要用两个参数

writeln

if c=1

then writeln('no')

else writeln('yes or 1')

readln

readln

end.

对于该程序的分析:

1、时间复杂度为根号n。(较优)

2、打印顺序参差不齐错落有致...可先将大数储存在数组中最后倒叙输出。

对于第二个程序,问题同程序一中第1个问题(这种算法不存在前面的第二个问题)

应做以下改动:

program z1(input,output)

var a,b,c:integer

procedure check(f:integer)//去掉一个参数

var h:integer

begin

if f=2 then begin c:=0exit end

if f=1 then begin c:=3exit end //把下面两句移到上面更清晰

for h:=2 to f-1 do

if f mod h=0

then begin write(h,' ')c:=1 end

else c:=c+0 //针对问题1,同上

end

begin

writeln ('input to check if the number is ')

readln(b)

writeln ('It has')

check(b) //同上

writeln

if c=1

then writeln('no')

else writeln('yes or 1')

readln

readln

end.

对于该程序的分析:

1、时间复杂度为n。 (一般)

2、打印顺序正常。

请给分O(∩_∩)O~

你想说主窗体和d出来的子窗体么。这个有很多方法,在子窗体写个变量,public的,再写个get ,方法,等关闭子窗体的时候让主窗体去读就行了。子窗体关闭时有一个方法 ShowDialog() == DialogResult.OK,你就可以拿值了。还有别的。看你要什么喽


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11657393.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存