C语言基础习题50例(五)21-25

简介: 代码如下

习题21

猴子吃桃问题:

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

实现思路:

采用逆向思维进行反推。

代码如下:

#include<stdio.h>
int main(){
    int sum = 1, i;
    for(i = 10; i > 1; i--){
      sum += 1;
    sum *= 2;
  }
  printf("Sum = %d\n", sum);
    return 0;
}

打印:

Sum = 1534

习题22

两个乒乓球队进行比赛,各出三人,甲队为 a、b、c 三人,乙队为 x、y、z 三人。已抽签决定比赛名单,有人向队员打听比赛的名单,a 说他不和 x 比, c 说他不和 x、z 比,请编程序找出三对赛手的名单。

实现思路:

多层循环嵌套,遍历并判断。

代码如下:

#include<stdio.h>
int main(){
    char a, b, c;
    for(a = 'x'; a <= 'z'; a++){
      for(b = 'x'; b <= 'z'; b++){
        for(c = 'x'; c <= 'z'; c++){
          if(a != b && b!= c && a != c){
            if(a != 'x' && c != 'x' && c != 'z'){
              printf("a-%c\nb-%c\nc-%c\n", a, b, c);
          }
        }
      }      
    }
  }
    return 0;
}

打印:

a-z
b-x
c-y

习题23

打印出如下图案(菱形):

2345_image_file_copy_90.jpg

实现思路:

方式一——分成两部分:

先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列。

代码如下:

#include<stdio.h>
int main(){
    int i, j;
    for(i = 0; i < 4; i++){
      for(j = 0; j < 3 - i; j++){
        printf(" ");
    }
    for(j = 0; j < 2 * i + 1; j++){
        printf("*");
    }
    printf("\n");
  }
  for(i = 0; i < 3; i++){
    for(j = 0; j <= i; j++){
      printf(" ");
    }
    for(j = 0; j < 5 - 2 * i; j++){
      printf("*");
    }
    printf("\n");
  }
    return 0;
}

打印:

   *
  ***
 *****
*******
 *****
  ***
   *

方式二——看成一个整体:

用一个遍历来控制,使之成为一个整体,循环打印。

代码如下:

#include<stdio.h>
#include <math.h>
int main(){
    int i, j;
    for(i = -3; i < 4; i++){
      for(j = 0; j < abs(i); j++){
        printf(" ");
    }
    for(j = 0; j < 7- 2 * abs(i); j++){
        printf("*");
    }
    printf("\n");
  }
    return 0;
}

效果与前面相同。

习题24

有一分数序列:2/1、3/2、5/3、8/5、13/8、21/13…

求出这个数列的前20项之和。

显然,这个数列每个元素的分子和分母构成了斐波拉契数列,可循环求和。

代码如下:

#include<stdio.h>
int main(){
    float sum = 0, f1 = 1, f2 = 1, i, temp;
    for(i = 0; i < 20; i++){
      temp = f2;
      f2 += f1;
      f1 = temp;
      sum += f2 / f1;
  }
  printf("Sum = %8.4f\n", sum);
    return 0;
}

打印:

Sum =  32.6603

习题25

求1+2!+3!+…+20!的和。

实现思路:

使用循环求和。

代码如下:

#include<stdio.h>
int main(){
  float i, t = 1, sum = 0;
  for(i = 1; i < 21; i++){
    t *= i;
    sum += t;
  }
  printf("Sum = %.2f\n", sum);
    return 0;
}

打印:

Sum = 2561327455189073900.00
相关文章
TU^
|
6月前
|
存储 C语言
C语言习题~day35
C语言习题~day35
TU^
31 1
|
4月前
|
机器学习/深度学习 C语言
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
要保持最小的步数,每一次汉诺塔问题(无论是最初还是递归过程中的),如果此时初始柱盘子数为偶数,我们第一步是把最上面的盘子移动到中转柱,如果为奇数,我们第一步则是将其移动到目标柱。
96 0
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
TU^
|
6月前
|
编译器 C语言
C语言习题~day31
C语言习题~day31
TU^
24 2
TU^
|
6月前
|
算法 程序员 C语言
C语言习题~day36
C语言习题~day36
TU^
43 1
TU^
|
6月前
|
存储 C语言
C语言习题~day34
C语言习题~day34
TU^
34 1
TU^
|
6月前
|
算法 C语言
C语言习题~day33
C语言习题~day33
TU^
30 1
TU^
|
6月前
|
C语言
C语言习题~day32
C语言习题~day32
TU^
19 1
TU^
|
6月前
|
C语言
C语言习题~day30
C语言习题~day30
TU^
24 1
TU^
|
6月前
|
自然语言处理 C语言 C++
C语言习题~day29
C语言习题~day29
TU^
25 1
TU^
|
6月前
|
存储 C语言
C语言习题~day28
C语言习题~day28
TU^
21 1