用c语言编写一个程序,尽量简短,不启用C99标准模式也不添加编译选项。【问题描述】 编写程序,从控制台读入一个分数的分子和分母(分数无符号,并且分子小于分母,其大小不会超过int数据类型的表示范围),输出化简后分子和分母不含公约数的分数。 【输入形式】 从控制台输入两个正整数分别表示分子和分母,两整数之间以一个空格分隔。 【输出形式】 在标准输出上输出化简后的分子和分母,以一个空格分隔。 【输入样例1】 26664 479952 【输出样例1】 1 18 【样例1说明】 输入的分子为26664,分母为479952,分母可以被分子整除,输出化简后的分子为1,分母为18。
时间: 2023-06-20 12:06:03 浏览: 94
以下是一个简单的 C 语言程序实现,使用辗转相除法求最大公约数,然后将分子分母同时除以最大公约数即可得到化简后的分数:
```
#include <stdio.h>
int gcd(int a, int b) {
if (b == 0)
return a;
else
return gcd(b, a % b);
}
int main() {
int a, b, g;
scanf("%d %d", &a, &b);
g = gcd(a, b);
printf("%d %d\n", a / g, b / g);
return 0;
}
```
相关问题
用c语言编写输入n个整数存入一维数组,统计输出其中的正数、负数和零的个数的程序
下面是用C语言编写的输入n个整数存入一维数组,统计输出其中的正数、负数和零的个数的程序:
```c
#include <stdio.h>
int main() {
int n, i, num;
int positive = 0, negative = 0, zero = 0;
printf("请输入整数的个数:");
scanf("%d", &n);
int arr[n];
printf("请输入%d个整数:", n);
for (i = 0; i < n; i++) {
scanf("%d", &num);
arr[i] = num;
if (num > 0) {
positive++;
} else if (num < 0) {
negative++;
} else {
zero++;
}
}
printf("正数个数:%d\n", positive);
printf("负数个数:%d\n", negative);
printf("零的个数:%d\n", zero);
return 0;
}
```
程序的思路是先通过 `scanf` 获取输入的整数个数 `n`,然后定义一个长度为 `n` 的整型数组 `arr`,用一个循环将输入的整数存入数组中,并统计正数、负数和零的个数。最后,输出统计结果。
注意,由于数组的长度 `n` 是在运行时输入的,所以需要使用 C99 标准或者使用动态内存分配来定义数组。
用c语言编写一个程序,尽量简短,不启用C99标准模式也不添加编译选项【问题描述】 比较两组整数是否有相同的元素,每组整数个数不超过100。若有相同的元素,则按照由大到小的顺序输出相同的元素(重复出现的元素只输出一个)。如果没有相同元素,打印字符串:No Answer。 【输入形式】 首先从标准输入(键盘)输入第一组整数的个数,再输入第一组整数,以一个空格分割;然后输入第二组整数的个数,再输入第二组整数,以一个空格分割。 【输出形式】 按照由大到小的顺序向标准输出(显示器)输出两组整数中相同的元素,以一个空格分隔;如果没有相同元素,则打印"No Answer"。 【输入样例】 9 2 5 10 17 10 8 5 10 12 7 12 8 10 17 5 2 1009 【输出样例】 17 12 10 8 5 2 【样例说明】 输入两组整数 2 5 10 17 10 8 5 10 12 12 8 10 17 5 2 1009 由于这两个数组具有相同的元素,按照由大到小的顺序输出为:17 12 10 8 5 2。
以下是使用C语言编写的程序:
```c
#include <stdio.h>
int main()
{
int n1, n2, i, j, temp, flag;
int arr1[100], arr2[100], ans[100], ans_cnt = 0;
scanf("%d", &n1);
for(i = 0; i < n1; i++)
scanf("%d", &arr1[i]);
scanf("%d", &n2);
for(i = 0; i < n2; i++)
scanf("%d", &arr2[i]);
for(i = 0; i < n1; i++)
{
flag = 0;
for(j = 0; j < n2; j++)
{
if(arr1[i] == arr2[j])
{
flag = 1;
break;
}
}
if(flag)
{
ans[ans_cnt++] = arr1[i];
}
}
if(ans_cnt == 0)
{
printf("No Answer");
}
else
{
for(i = 0; i < ans_cnt - 1; i++)
{
for(j = i + 1; j < ans_cnt; j++)
{
if(ans[i] < ans[j])
{
temp = ans[i];
ans[i] = ans[j];
ans[j] = temp;
}
}
}
for(i = 0; i < ans_cnt; i++)
{
printf("%d ", ans[i]);
}
}
return 0;
}
```
该程序的思路是,先输入两组整数,然后依次遍历第一组整数,查找是否有与第二组整数相同的元素,如果有,则将该元素存入一个临时数组中。最后,如果临时数组中有元素,则按照从大到小的顺序输出,否则输出"No Answer"。