c语言-期中21题

豆包进行总结—1 班和 2 班的课程资料围绕 C 语言编程展开,涵盖选择语句、循环语句的使用,以及各类算法问题的求解,包含大量练习题与示例代码。以下是 1 班和 2 班都学过的题目内容及答案:

  1. 判断整数相关特性

    • 判断整数能否被 3 和 5 整除:输入一个整数,判断它是否能同时被 3 和 5 整除。
      c

      int n;
      scanf("%d", &n);
      if(n % 3 == 0 && n % 5 == 0) {
      printf("YES");
      } else {
      printf("NO");
      }
    • 判断整数正负及零:输入一个整数,判断其是正数、负数还是零。
      c

      int n;
      scanf("%d", &n);
      if(n > 0) {
      printf("positive");
      } else if(n == 0) {
      printf("zero");
      } else {
      printf("negative");
      }
  2. 求整数绝对值或相反数:输入一个数,输出它的绝对值(浮点型版本)或相反数(整型版本)。

    • 浮点型求绝对值
      c

      double n;
      scanf("%lf", &n);
      if(n >= 0) {
      printf("%f", n);
      } else {
      printf("%.2f", -n);
      }
    • 整型求相反数
      c

      int a;
      scanf("%d", &a);
      if(a >= 0) {
      printf("%d", a);
      } else {
      printf("%d", -a);
      }
  3. 判断字符 ASCII 码奇偶性:输入一个字符,判断其 ASCII 码值是奇数还是偶数。
    c

    char c;
    int v;
    scanf("%c", &c);
    v = (int)c;
    if(v % 2!= 0) {
    printf("YES");
    } else {
    printf("NO");
    }
  4. 比较并输出数值

    • 输出三个数中的最大值:输入三个数,输出其中的最大值。
      c

      float a, b, c, m;
      scanf("%f%f%f", &a, &b, &c);
      m = a > b? a : b;
      m = m > c? m : c;
      printf("%.2f", m);
    • 对三个整数排序输出:输入三个整数,按从大到小的顺序输出。
      c

      int a, b, c, t;
      scanf("%d %d %d", &a, &b, &c);
      if(a < b) {
      t = a;
      a = b;
      b = t;
      }
      if(a < c) {
      t = a;
      a = c;
      c = t;
      }
      if(b < c) {
      t = b;
      b = c;
      c = t;
      }
      printf("%d %d %d", a, b, c);
  5. 成绩等第判断:输入一个学生的成绩,根据成绩输出对应的等第(90 分(含)至 100 分为 A,80 分(含)至 90 分为 B ,70 分(含)至 80 分为 C ,60 分(含)至 70 分为 D ,60 分以下为 E)。
    c

    float fenshu;
    scanf("%f", &fenshu);
    if(fenshu >= 90) {
    printf("A");
    } else if(fenshu >= 80 && fenshu < 90) {
    printf("B");
    } else if(fenshu >= 70 && fenshu < 80) {
    printf("C");
    } else if(fenshu >= 60 && fenshu < 70) {
    printf("D");
    } else {
    printf("E");
    }
  6. 根据温度选择着装:输入温度,根据不同温度范围输出相应着装(如温度大于等于 20 度穿短袖,15 - 20 度穿长袖等)。以温度范围 “大于等于 20 度穿短袖,15 - 20 度穿长袖,10 - 15 度穿毛衣,10 度以下穿羽绒服” 为例:
    c

    float t;
    scanf("%f", &t);
    if(t >= 20) {
    printf("我就穿短袖\n");
    } else if(t >= 15 && t < 20) {
    printf("我就穿长袖\n");
    } else if(t >= 10 && t < 15) {
    printf("我就穿毛衣\n");
    } else {
    printf("我就穿羽绒服\n");
    }
  7. 统计及格人数与平均分:输入 0 - 100 以内的 10 个分数,统计及格人数(分数大于等于 60)和及格同学的平均分。
    c

    float score, sum = 0;
    int i = 1, k = 0;
    while(i <= 10) {
    scanf("%f", &score);
    if(score >= 60) {
    k++;
    sum += score;
    }
    i++;
    }
    printf("k=%d,average=%f", k, sum / k);
  8. 统计不同分数段学生情况:输入 10 个从 0 到 100 之间的分数,分别统计成绩优良(大于等于 80 分)、及格(大于等于 60 分且小于 80 分)、不及格(小于 60 分)的学生数和平均分。
    c

    float score, sum = 0, sum1 = 0, sum2 = 0;
    int i = 1, k = 0, m = 0, l = 0;
    while(i <= 10) {
    scanf("%f", &score);
    if(score >= 80) {
    k++;
    sum += score;
    }
    if(60 <= score && score < 80) {
    m++;
    sum1 += score;
    }
    if(score < 60) {
    l++;
    sum2 += score;
    }
    i++;
    }
    printf("k=%d,average=%f", k, sum / k);
    printf("m=%d,average=%f", m, sum1 / m);
    printf("l=%d,average=%f", l, sum2 / l);
  9. 计算特定倍数的整数和

    • 计算 1 - 100 中 3 或 7 的倍数的整数和:找出 1 - 100 之间是 3 的倍数或 7 的倍数的整数,并统计其个数,按每行 10 个输出这些整数。
      c

      int i = 1, sum = 0;
      while(i <= 100) {
      if(i % 3 == 0 || i % 7 == 0) {
      printf("%d ", i);
      sum++;
      if(sum % 10 == 0) {
      printf("\n");
      }
      }
      i++;
      }
      printf("\n%d", sum);
    • 计算 m 到 n 之间奇数的和:计算非负整数 m 到 n(包括 m 和 n)之间的所有奇数的和,其中 m 不大于 n,且 n 不大于 300。
      c

      int m, n, p = 0;
      scanf("%d %d", &m, &n);
      while(m <= n) {
      if(m % 2!= 0) {
      p += m;
      }
      m++;
      }
      printf("%d", p);
  10. 计算整数因数相关值:输入一个正整数,求出它所有的因数(不包括本身)并输出,统计因数个数,并求出所有因数之和。
    c

    int n, sum = 0, k = 0;
    scanf("%d", &n);
    int i = 1;
    while(i < n) {
    if(n % i == 0) {
    k++;
    sum += i;
    }
    i++;
    }
    printf("因数的个数是%d,因数的和是%d", k, sum);
  11. 统计特定数字出现次数:给定 n(1 < n < 100)个正整数,其中每个数都大于等于 1,小于等于 10。统计这 n 个数中 1、5 和 10 出现的次数。
    c

    int n, s, i = 0, k = 0, j = 0, m = 0;
    scanf("%d", &n);
    while(i < n) {
    scanf("%d", &s);
    if(s == 1) {
    k++;
    } else if(s == 5) {
    j++;
    } else if(s == 10) {
    m++;
    }
    i++;
    }
    printf("1的数量是:%d , 5的数量是:%d, 10的数量是:%d", k, j, m);
  12. 查找特定四位数:在所有的四位数中,找出满足个位数上的数字减去千位数上的数字,再减去百位数上的数字,再减去十位数上的数字的结果大于零的四位数,并统计其个数。
    c

    int i = 1000, n, ge, shi, bai, qian, number = 0;
    while(i <= 9999) {
    n = i;
    ge = n % 10;
    n /= 10;
    shi = n % 10;
    n /= 10;
    bai = n % 10;
    n /= 10;
    qian = n % 10;
    if(ge - shi - bai - qian > 0) {
    printf("%d ", i);
    number++;
    }
    i++;
    }
    printf("\n number=%d ", number);
  13. 查找水仙花数:输出所有的水仙花数(一个三位数,其各位数字立方和等于该数本身),并统计水仙花数的个数。
    c

    int i = 100, n, ge, shi, bai, number = 0;
    while(i <= 999) {
    n = i;
    ge = n % 10;
    n /= 10;
    shi = n % 10;
    n /= 10;
    bai = n % 10;
    if(ge * ge * ge + shi * shi * shi + bai * bai * bai == i) {
    printf("%d ", i);
    number++;
    }
    i++;
    }
    printf("\n number=%d ", number);
  14. 查找回文数:输出大于 100 小于 200 中所有三位数中的回文数(个位与百位相同),并统计回文数的个数。
    c

    int i = 100, n, ge, shi, bai, number = 0;
    while(i <= 200) {
    n = i;
    ge = n % 10;
    n /= 10;
    shi = n % 10;
    n /= 10;
    bai = n % 10;
    if(ge == bai) {
    printf("%d ", i);
    number++;
    }
    i++;
    }
    printf("\n number=%d ", number);
  15. 统计字符类型个数:输入 10 个字符,分别统计其中英文字母、空格、数字和其它字符的个数。
    c

    int i = 1;
    char c;
    int zimu = 0, kongge = 0, shuzi = 0, qita = 0;
    while(i <= 10) {
    scanf("%c", &c);
    if((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
    zimu++;
    } else if(c =='') {
    kongge++;
    } else if(c >= '0' && c <= '9') {
    shuzi++;
    } else {
    qita++;
    }
    i++;
    }
    printf("%d %d %d %d", zimu, kongge, shuzi, qita);
  16. 计算数列和相关问题

    • 计算数列和并找特定值:计算 sum = 1 + 2 + 3 +… + n,求当 sum 第一次超过 100 时 n 的值,并输出 n 和 sum。
      c

      int i = 0, sum = 0;
      while(sum <= 100) {
      i++;
      sum += i;
      }
      printf("sum=%d,i=%d\n", sum, i);
    • 计算特定数列和:计算 1 - 1/2 + 1/3 - 1/4 +… + 1/10 的和。
      c

      float sum = 0, fuhao = 1;
      int i;
      for(i = 1; i <= 10; i++) {
      sum += fuhao * 1.0 / i;
      fuhao = -fuhao;
      }
      printf("%.3f", sum);
  17. 求最大公因数和最小公倍数:输入两个正整数 m 和 n,求它们的最大公因数和最小公倍数。
    c

    int m, n, min, max;
    scanf("%d%d", &m, &n);
    // 找最大公因数
    min = m >= n? n : m;
    for(int i = min; i >= 1; i--) {
    if(m % i == 0 && n % i == 0) {
    printf("%d就是%d,%d的最大公因数\n", i, m, n);
    break;
    }
    }
    // 找最小公倍数
    max = m >= n? m : n;
    for(int i = max;; i++) {
    if(i % m == 0 && i % n == 0) {
    printf("%d就是%d,%d的最小公倍数\n", i, m, n);
    break;
    }
    }
  18. 解决余数相同问题:已知三个正整数 a,b,c,找到一个大于 1 的整数 x,将其作为除数分别除 a,b,c,得到的余数相同,求 x 的最小值。例如输入 300、262、205,输出 19。
    c

    int a, b, c, i;
    scanf("%d%d%d", &a, &b, &c);
    if(a > b) {
    i = a;
    } else {
    i = b;
    }
    if(c > i) {
    i = c;
    }
    for(int k = 2; k <= i; k++) {
    if(a % k == b % k && b % k == c % k) {
    printf("%d", k);
    break;
    }
    }
  19. 求整数序列最值:输入一些整数(不超过 1000),求出它们的最小值、最大值。
    c

    int n, number, max, min;
    scanf("%d", &n);
    scanf("%d", &number);
    max = number;
    min = number;
    for(int i = 1; i <= n - 1; i++) {
    scanf("%d", &number);
    if(max < number) {
    max = number;
    }
    if(min > number) {
    min = number;
    }
    }
    printf("最大值%d", max);
    printf("最小值%d", min);
  20. 角谷猜想实现:对于任意一个正整数,如果是奇数,则乘 3 加 1,如果是偶数,则除以 2,将经过处理得到 1 的过程输出来。
    c

    int a;
    scanf("%d", &a);
    while(a!= 1) {
    if(a % 2 == 0) {
    a /= 2;
    } else {
    a = a * 3 + 1;
    }
    printf("%d ", a);
    }
  21. 分离整数各位数字:给定一个整数 n(1≤n≤100000000),从个位开始分离出它的每一位数字,按从低位到高位的顺序依次输出。
    c

    int i, n;
    scanf("%d", &i);
    n = i;
    while(n!= 0) {
    printf("%d ", n % 10);
    n /= 1