谭浩强C语言设计习题答案(二)

目录

求两个数m和n的最大公约数

求方程式ax^2+bx+c=0的根。分别考虑

(1)有两个不等的实根

(2)有两个相等的实根

输出1900~2000年中闰年的年份,符合下面两个条件之一的年份是闰年:

(1)能被4整除但不能被100整除;

(2)能被100整除且能被400整除。


求两个数m和n的最大公约数


您可以使用辗转相除法(也称为欧几里德算法)来求两个数m和n的最大公约数,而不使用递归。以下是一个不使用递归的C语言程序示例:


#include <stdio.h>

// 函数用于计算最大公约数
int gcd(int m, int n) {
    while (n != 0) {
        int temp = n;
        n = m % n;
        m = temp;
    }
    return m;
}

int main() {
    int m, n;

    // 输入两个整数
    printf("请输入两个整数 m 和 n:");
    scanf("%d %d", &m, &n);

    // 调用gcd函数计算最大公约数
    int result = gcd(m, n);

    // 输出结果
    printf("最大公约数是:%d\n", result);

    return 0;
}

 

这个程序使用一个循环来计算最大公约数,直到其中一个数变为零。在每一步中,它交换m和n的值,并用m除以n的余数来更新n,直到n变为零。最后,m的值就是最大公约数,程序将其打印到屏幕上。

求方程式ax^2+bx+c=0的根。分别考虑

(1)有两个不等的实根

(2)有两个相等的实根

求解二次方程ax^2+bx+c=0的根可以根据判别式Δ(delta)的值来分情况讨论:

1. 如果Δ > 0,则有两个不等的实根。
2. 如果Δ = 0,则有两个相等的实根。
3. 如果Δ < 0,则没有实根,而是两个共轭复数根。

以下是一个C语言程序,根据Δ的值来计算并输出根:


#include <stdio.h>
#include <math.h>

int main() {
    double a, b, c;
    double delta, x1, x2;

    // 输入二次方程的系数
    printf("请输入二次方程的系数(a, b, c):\n");
    printf("a = ");
    scanf("%lf", &a);
    printf("b = ");
    scanf("%lf", &b);
    printf("c = ");
    scanf("%lf", &c);

    // 计算判别式Δ
    delta = b * b - 4 * a * c;

    if (delta > 0) {
        // 有两个不等的实根
        x1 = (-b + sqrt(delta)) / (2 * a);
        x2 = (-b - sqrt(delta)) / (2 * a);
        printf("有两个不等的实根:\n");
        printf("x1 = %.2lf\n", x1);
        printf("x2 = %.2lf\n", x2);
    } else if (delta == 0) {
        // 有两个相等的实根
        x1 = -b / (2 * a);
        printf("有两个相等的实根:\n");
        printf("x1 = x2 = %.2lf\n", x1);
    } else {
        // 没有实根,有共轭复数根
        double realPart = -b / (2 * a);
        double imaginaryPart = sqrt(-delta) / (2 * a);
        printf("没有实根,有共轭复数根:\n");
        printf("x1 = %.2lf + %.2lfi\n", realPart, imaginaryPart);
        printf("x2 = %.2lf - %.2lfi\n", realPart, imaginaryPart);
    }

    return 0;
}

 

这个程序首先计算判别式Δ的值,然后根据Δ的大小分情况讨论,计算并输出相应的根。

输出1900~2000年中闰年的年份,符合下面两个条件之一的年份是闰年:

(1)能被4整除但不能被100整除;

(2)能被100整除且能被400整除。

以下是一个C语言程序,用于输出1900~2000年之间的闰年:
#include <stdio.h>

int main() {
    printf("1900年到2000年之间的闰年有:\n");

    for (int year = 1900; year <= 2000; year++) {
        if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
            printf("%d\n", year);
        }
    }

    return 0;
}

 

这个程序使用一个循环遍历从1900年到2000年的每一年,然后根据两个条件中的任何一个来判断是否是闰年:1)能被4整除但不能被100整除,或2)能被100整除且能被400整除。如果满足其中一个条件,就输出年份,表示这是一个闰年。

猜你喜欢

转载自blog.csdn.net/qq_50942093/article/details/132954056
今日推荐