C语言复习题解析

填空题

表达式“40>50>60”的值是 ,“70<58 && 58<40”的值是。

程序设计题

  1. 输入10个实数,去掉一个最大数,去掉一个最小数,输出剩下8个数的平均数。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #include <stdio.h>
    int main(){
    float a,maxx,minn,sum; // a 用来接收输入,maxx minn用来记录当前最大最小数,sum用来求输入数和
    scanf("%f",&a); // 输入第一个数
    maxx=minn=sum=a; // 当前最大 最小 和都等于这个数
    for(int i=1;i<10;i++){ //输入剩下9个
    scanf("%f",&a); // 输入一个数
    sum+=a; // 加上去
    maxx = maxx>a?maxx:a; // 如果当前数大于之前最大的了,则把它给maxx
    minn = minn<a?minn:a; // 如果当前数小于之前最小的了,则把它给minn

    }
    printf("%f",(sum-maxx-minn)/8); // 根据题目减去最大数 最小数 除8求平均
    return 0;
    }
  2. 的值。(答案:1.960785)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <stdio.h>
    // 根据计算式找规律,第n项分母就是1到n累加
    int main(){
    float S=0, mul=0; // S 记录总和,mul记录分母和
    for(int i=1; i<=50;i++){
    mul += i; // 每一项分母都是在前一项上+n
    S = S+1.0/mul;
    }
    printf("%f",S);
    return 0;
    }
  3. 打印200~400之间的素数,每行输出15个数,每个数占5列。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #include <stdio.h>
    // 首先要知道什么叫素数,除了1和本身都不能被整除的就是素数。
    bool is_prime(int a){ // 判断a是否是素数, 如果是则返回true不是则是false
    for(int i = 2; i*i <=a; i++){ //注意我这里的判别 i*i <a 即如果到了他的开方还不能被其他数整除,那么它本身也不会被整除
    if(a%i==0) // 被除尽了说明不是素数 直接return false 子程序结束
    return false;
    }
    return true; // for循环子程序都没结束说明都没除尽是素数

    }
    int main(){
    for(int i=200; i<=400;i++){ //从200 遍历到400
    if(is_prime(i)) // 如果是素数则打印
    printf("%d ",i);

    }
    return 0;
    }
  4. 求179869和196037的最大公约数。(答案:2021)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdio.h>
    // 首先要知道什么叫最大公约数,几个数同时能被整除的最大质数,求最大公约数方法很多,这里采用辗转相除法。
    int main(){
    int a=196037,b=179869,c; // a,b为输入数
    while(b!=0){
    c=b;
    b=a%b;
    a =c;
    }
    printf("%d",a);
    return 0;
    }
  5. 斐波那契(Fibonacci)数列的前两项是1、1,后面每一项是前两项的和。 求小于$10^7$的最大斐波那契数。(答案:9227465)
  6. 如果一个正整数数等于它各位数的立方之和,则称该数为水仙花数。 例如407= 43 +03 +73,407是一个水仙花数。打印100~999之间的所有水仙花数。 (答案:153, 370, 371, 407)
  7. 求解百钱买百鸡问题:鸡翁一,钱值五;鸡母一,钱值三;鸡雏三,钱值一。 欲百钱买百鸡,鸡翁、鸡母、鸡雏各几何(要求每个鸡种至少有一只)?
  8. 如果一个正整数n恰好等于它的1~n/2的因子之和,则称该数为完数。例如, 6 = 1 + 2 + 3,6是一个完数。打印1000以内的所有完数。(答案:6,28,496)
  9. 求分数序列$\frac{2}{1},\frac{3}{2},\frac{5}{3},\frac{8}{5},\frac{13}{8}$的前20项的和。(答案:32.660263)
  10. 的近似值,计算到时的。精确到16位小数。(答案:2.7182818284590455)

    以下程序都要求在主函数中输入输出。

  11. 输入一个整数k,用函数计算k以内最大的10个能被13或17整除的自然数之和。 (答案:若k = 500, 则函数值为4622。)
  12. 输入一个整数k,用函数计算k以内最大的10个素数之和。 (答案:若k = 100, 则输出732。)
  13. 已知数列a的前三项为0,0,1,后面各项都是其相邻的前三项之和。输入一个整数n,用函数计算该数列前n项的平方根之和。(答案:若n = 20,则sum = 529.781799)
  14. 入10个整数,用函数对其降序排序。
  15. 输入一个5×5矩阵A,用函数将A的主对角线以上的元全部置为0。
  16. 输入一个N×N矩阵A,N为符号常量,其值定义为5。用函数将A的第一行元素与倒数第一行元素对调,第二行与倒数第二行对调,……,其它依此类推。
  17. 输入一行字符(≤80个),用函数将其逆序存放。
  18. 输入一行字符,用函数实现将其中每个单词(以空格为界)的第一个字母改为大写。
  19. 输入一个字符串s,再输入一个字符c,用函数截取s中第1个与c相同的字符前面的字符串(不包括c)并返回,若s中不含c,则截取整个字符串。
  20. 输入一个字符串s,再输入一个字符c,用函数删除s中所有与c相同的字符,例如, 若s=”Do you see now?”,c=’o’,则返回”D yu see nw?”。

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!