分别编与求园面积和圆周长的丽数,另编写一主函数调用之,要求主函效能输人多个圆半径,且显示相应的圆面积和周长
#include <iostream>
#include <string>
using namespace std;
#define pi 3.1416
double area(double r)
{
return r * r * pi;
}
double round(double r)
{
return r * 2 * pi;
}
int main()
{
double r;
while (1)
{
cout << "r = ? enter 0 to quit:";
cin >> r;
if (r < 0.00001)
break;
cout << area(r) << " " << round(r) << endl;
}
return 0;
}
r = ? enter 0 to quit:1
3.1416 6.2832
r = ? enter 0 to quit:2
12.5664 12.5664
r = ? enter 0 to quit:3
28.2744 18.8496
r = ? enter 0 to quit:0
我们先来谈谈为什么单片机有时候会丢失事件。首先,我们知道单片机程序是轮询模式,是一个语句执行完以后,再执行下一条语句,整个主函数就是一个进程,进程里面就只有一个线程。那么在这种模式下,我们完成一个项目会写很多的任务,这些任务都是有顺序的执行的。那么丢失事件是如何发生的呢?我用 图一 比较简易的代码来解释。
图一
程序分析:从图一的代码来看,一开始,没有检测到开盖事件,然后我的程序就一直往下跑。假如我的程序正在执行任务二,如果这时候,有开盖事件发生,但此时我正在执行任务二,那么我们是无法及时响应开盖事件的相应的动作。这时候,我们就丢失了一次开盖事件。
如果需要一个计算圆面积和圆周长的程序,则可以使用C语言编写一个函数,该函数有一个可变参数列表,可以接收多个圆的半径,计算出圆的面积和周长,最终返回结果。
下面是实现该函数的代码示例:
#include <stdio.h>
#include <stdarg.h>
#include <math.h>
// 圆面积计算函数
double circle_area(double radius) {
return M_PI * radius * radius;
}
// 圆周长计算函数
double circle_perimeter(double radius) {
return 2 * M_PI * radius;
}
// 计算多个圆面积和周长的函数
void calculate_circles(int count, ...) {
va_list args;
va_start(args, count);
for (int i = 0; i < count; i++) {
double radius = va_arg(args, double);
double area = circle_area(radius);
printf("圆的半径为 %.2f 时,面积为:%.2f\n", radius, area);
double perimeter = circle_perimeter(radius);
printf("圆的半径为 %.2f 时,周长为:%.2f\n", radius, perimeter);
}
va_end(args);
}
// 测试用例
int main() {
calculate_circles(3, 2.5, 3.0, 4.2);
return 0;
}
上述代码中,circle_area()
函数和 circle_perimeter()
函数分别用于计算圆的面积和周长,利用传入的圆的半径进行计算并返回结果。calculate_circles()
函数接收可变参数列表,在 for
循环中使用 va_arg()
函数逐个获取圆的半径,并调用 circle_area()
和 circle_perimeter()
函数计算面积和周长并打印出来。
最后在 main()
函数中调用 calculate_circles()
函数并传入多个圆的半径,即可计算出所有圆的面积和周长并输出结果