pic单片机 C语言中断程序不能返回主程序?

pic单片机 C语言中断程序不能返回主程序?,第1张

程序不可能一直在中断内循环,如果硬件允许你可以设置一个小灯点亮程序,放在总循环中进行检验,这样程序是否死掉在中断内就一目了然了。
此外你的程序编写有错误,这个错误至少会导致你定时器函数是不可能执行的。错误点“tmr1_flg==1;”,双等号应该为单等号。

多个返回值有两种实现方法。
一是使用结构体。将所有需要返回的数据封装成一个结构体返回。比如你想返回两个 int 类型的值,可以声明:
struct node{ int x, y;};
然后将函数的返回值类型设置为 node。
第二种方法是在参数中使用指针或引用。在子函数中对指针指向的内存空间的修改,或者对引用类型变量的修改,都会直接反映到主函数中。

#include <stdioh>
double f(double x,double y)
{ if(x>=y)
return (x+y)/20;
else
return f(f(x+2,y-1),f(x+1,y-2)) //这里不知道怎么运算,求解答,是不是把5和7带入两个式子中,条件都满足,为什么结果是6而不是5,谢谢
}
int main()
{
printf("%1f",f(50,70));
}

来,开始了:主程序中,函数参数为 50,70看回函数体:

double f(double x,double y)//第一次从程序调用函数时,x=50,y=70
{ if(x>=y)   //x>y成立吗不成立,跳过下面一步,转到else部分
return (x+y)/20;
else  //执行这里
return f(f(x+2,y-1),f(x+1,y-2)) //这里返回什么返回函数f(f(x+2,y-1),f(x+1,y-2))的结果,将前面x=50,y=70代入,化简,即要返回f(f(70,60),f(60,50))这个结果包含两个函数参数:f(70,60),f(60,50)也就是说,这个结果要用这两个函数的结果去做参数进行调用自身,得出的结果才能返回给主程序
//先看第一个参数:f(70,60),将x70,y=60代入调用函数体,明显,符合x>y,执行if部分的内容返回(x+y)/20=65
//第二个参数:f(60,50),同样,满足x>y,执行if内容,返回(x+y)/20=55
//即第一次运行函数时,返回f(65,55)再代入函数体,又有x>y成立,执行if部分
//结果是,返回  (x+y)/20=(65+55)/20=60
}
//重点是递归函数建议好好理解一下递归的意义

把想
返回值
的变量的地址作为参数发送,然后到函数里再对参数赋值就可以了
比如,想改变
main函数
中a的值
函数定义:
void
f(int

pa,)
{

pa
=


}
调用函数时
f(&a,)
这样就可以“返回”多个值了,只不过无法用return语句返回

这不是一个流程图能表示出来的,可以分模块进行流程图设计
一、主程序
1循环开始
2显示主菜单
3输入选项
4根据选项调用相应的子模块,如果是退出,则退出循环,结束程序
5返回主菜单(循环开始)
二、各子程序
1、添加数据
输入数据
打开文件stutxt(追加模式)
写入数据
关闭文件
返回主程序
2、数据输出
打开文件stutxt(只读模式)
循环
读数据到变量中
如果无记录,则显示相应错误,关闭文件,返回主程序
如果读到文件尾,则结束循环
显示数据
循环读取下一条数据

退出循环: break

退出子程序: return 退出码;

退出主程序: exit(0);

睿腾编程网returnbc

其中exit(0);函数所在的头文件是: stdlibh


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存