C语言期末复习题(上)

Posted 康小庄

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言期末复习题(上)相关的知识,希望对你有一定的参考价值。

1. 输入两个正整数,m和n,求其最大公约数和最小公倍数。

test01() 
    int m, n;
    int gy = 0, gb = 0;
    printf("请输入输入两个正整数:(m,y)\\n");
    scanf("%d,%d", &m, &n);;
    for (gy = m; gy >= 1; --gy) 
        if (m % gy == 0 && n % gy == 0)
            break;
    
    gb = m * n / gy;
    printf("%d,%d的最小公倍数为:%d,最大公约数为:%d", m, n, gb, gy);

2. 输入一个正整数n,计算下列算式的前n项之和。s=1-1/3+1/5-1/7+…

test02() 
    int b, flag, i, n;//b分母,flag正负号标志
    double item, sum;//item项数
    printf("请输入计算到第几项的和n的值:\\n");
    scanf("%d", &n);
    b = 1;
    flag = 1;
    sum = 0;
    for (i = 1; i <= n; i++, b += 2) 
        item = flag * (1.0 / b);//1.0为分子
        sum = sum + item;
        flag *= -1;//改变每项的正负
    
    printf("Sum=%.2f\\n", sum);

3. 为鼓励居民节约用水,自来水公司采取按月用水量分段计费的办法

居民应交水费y(元)与月用水量x(吨)的函数关系式如下(设x≥0)。
y= x/3 0≤x≤15
y= 2.5x-10.5 x>15
输入用户的月用水量x(吨),计算并输出该用户应支付的水费y(元)(保留2位小数)。

float x;
    float y;
    printf("请输入月用水量\\n");
    scanf("%f", &x);
    if (x >= 0 && x <= 15) 
        y = x / 3;
     else if (x > 15.0) 
        y = 2.5 * x - 10.5;
     else 
        printf("您输入的数据有误请重新检查");
        return 0;
    
    printf("该用户应该支付的水费%.2f元", y);

4. 要求用switch语句编程设计一个简单的计算器程序

要求根据用户从键盘输入的表达式:
操作数1 运算符op 操作数2
计算表达式的值,指定的算术运算符为加(+)、减(-)、乘(*)、除(/)。

test04(float x, char op, float y) 
    float z;
    switch (op) 
        case '+':
            z = x + y;
            printf("%f + %f = %.2f\\n", x, y, z);
            break;
        case '-':
            z = x - y;
            printf("%f - %f = %.2f\\n", x, y, z);
            break;
        case '*':
            z = x * y;
            printf("%f * %f = %.2f\\n", x, y, z);
            break;
        case '/':
            if (y == 0) 
                printf("被除数不能为0");
             else 
                z = x / y;
                printf("%f / %f = %.2f\\n", x, y, z);
            
            break;
        default:
            printf("输出正确的运算符!\\n");
    



main() 
    float x, y;
    char op;
    printf("Please enter the expression:\\n");
    scanf("%f%c%f", &x, &op, &y);
    getchar();
    test04(x, op, y);

5. 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前10项之和。

test05() 
    int i;
    double temp[10], x[10] = 2, y[10] = 1, sum = 0;
    for (i = 0; i < 10; ++i) 
        temp[i] = x[i] / y[i];
        if (i < 9) 
            x[i + 1] = x[i] + y[i];
            y[i + 1] = x[i];
        
    
    for (i = 0; i < 10; ++i) 
        printf("%.0f/%.0f\\t", x[i], y[i]);
        sum += temp[i];
    
    printf("\\n%.2f", sum);

6. 给定10个整数,求最大值。

test06() 
    int arr[10];
    printf("输入十个整数 Enter输入下一个\\n");
    for (int i = 0; i < 10; ++i) 
        scanf("%d", &arr[i]);
    
    int len = sizeof(arr) / sizeof(arr[0]);
    for (int i = 0; i < len; ++i) 
        for (int j = 0; j < len - i - 1; ++j) 
            if (arr[j] > arr[j + 1]) 
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            
        
    
    printf("最大的数为%d",arr[9]);

7. 输入4个整数,要求按由大到小的顺序输出

test07() 
    int arr[4];
    for (int i = 0; i < 4; ++i) 
        scanf("%d", &arr[i]);
    
    int len = sizeof(arr) / sizeof(arr[0]);
    for (int i = 0; i < len; ++i) 
        for (int j = 0; j < len - i - 1; ++j) 
            if (arr[j] > arr[j + 1]) 
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            
        
    
    for (int i = len - 1; i >= 0; --i) 
        printf("%d ", arr[i]);
    

8. 求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字。

例如:2+22+222+2222+22222(n=5),n由键盘输入。

test08() 
    int a, n;
    printf("请输入原始的数字和输入要相加的个数\\n");
    scanf("%d %d", &a, &n);
    int temp = 0;
    int sum = 0;
    for (int i = 0; i < n; i++) 
        temp += a * pow(10, i);
        sum += temp;
    
    printf("%d\\n", sum);

9. 求1!+2!+3!+4!+5!+…+10!要求利用递归函数完成

int factorial(int n) 
    if (n == 1) 
        return 1;
    
    return n * factorial(n - 1);

test09() 
    int sum=0;
    for (int i = 1; i <= 10; ++i) 
        sum+=factorial(i);
    
    printf("%d",sum);

10. 打印出所有"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该本身。例如:153是一个水仙花数,因为153=13+53+33

test10() 
    for (int i = 1; i <= 999; ++i) 
        int a = i / 100;
        int b = i % 100 / 10;
        int c = i % 10;
        if (pow(a, 3) + pow(b, 3) + pow(c, 3) == i) 
            printf("%d\\n", i);
        
    

11. 一球从100米高度自由下落,每次落地后返回原高度的一半,再落下。求它在第10次落地时共经过多少米?第10次反弹多高?

test11()
    double total_m = 100.0;
    double total_sum = 0.0;
    for (int i = 0; i < 10; i++)
    
        total_sum += total_m;
        total_m /= 2;
        total_sum += total_m;
    
    total_sum -= total_m;
    printf("小球总共经历%lf米, 第10次反弹%lf米\\n", total_sum, total_m);
    return 0;

12. 猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。

test12() 
    int i;

    int x = 1;

    for (i = 9; i >= 1; i--) 

        x = (x + 1) * 2;

    
    printf("第一天共摘了桃子为:%d", x);

13. 求100之内的素数

test13() 
    int num = 2;
    while (num <= 100) 
        int flag = 1;
        int i = 2;
        while (i < num) 
            if (num % i == 0) 
                flag = 0;
                break;
            
            i++;
        
        if (flag) 
            printf("素数为:%d\\t", num);
        
        num++;

    

以上是关于C语言期末复习题(上)的主要内容,如果未能解决你的问题,请参考以下文章

计算水费问题

分段计算居民水费 (10 分)

C语言期末复习题(上)

16 分段计算居民水费

PAT-分段计算居民水费

[PTA]7-11 分段计算居民水费