写一段C语言,不断重复输入三个非负整数p,q,r,请计算这三个数的最大公约数;然后记录在不断重复输入p,q,r的过程中,最大的最大公约数,以及其出现的次数;如果输入p,q,r中出现至少一个为0,则程序结束并输出最大的最大公约数和其出现的次数,否则程序继续执行。
时间: 2024-12-06 16:23:06 浏览: 11
下面是一个简单的C语言程序,它实现了上述要求:
```c
#include <stdio.h>
#include <math.h>
int gcd(int a, int b) {
if (b == 0)
return a;
else
return gcd(b, a % b);
}
int main() {
int p, q, r, max_gcd = 0, count = 0, current_max = 0;
while(1) {
printf("请输入三个非负整数(p, q, r): ");
scanf("%d %d %d", &p, &q, &r);
// 检查输入是否合法
if (p <= 0 || q <= 0 || r <= 0) {
printf("输入错误,请输入非负整数!\n");
break;
}
current_max = gcd(p, gcd(q, r));
if (current_max > max_gcd) {
max_gcd = current_max;
count = 1; // 如果当前最大公约数大于之前记录的,重置计数器
} else if (current_max == max_gcd) {
count++; // 如果当前最大公约数等于之前记录的,增加计数器
}
printf("当前最大公约数: %d, 出现次数: %d\n", max_gcd, count);
}
printf("程序结束,最大最大公约数: %d, 出现次数: %d\n", max_gcd, count);
return 0;
}
```
这个程序首先定义了一个计算两个整数最大公约数的gcd函数,然后在一个无限循环中反复请求用户输入三个数。当输入包含一个0时,循环结束,并打印出最大最大公约数和相应的次数。
阅读全文