C语言学习笔记(5)—— 语句(2)

  在介绍过顺序结构和选择结构以后,我们能通过c语言做的事依旧很少,比如换硬币问题。将一元的人民币换成一分,两分,五分的硬币共50枚。如何解决这样的问题呢?我们可以把它化解成一个求解线性方程组的问题。

  可以设需要一分的硬币x枚,两分的硬币y枚,五分的硬币z枚。于是,我们可以得到一个方程组,像这样:x+y+z = 50,0.01x+0.02y+0.05z = 1。我们知道,计算机在计算浮点数的时候可能会出现精度问题。所以,我们

     把方程组改写成x+y+z = 50,x+2y+5z = 100。

  那么问题来了,如何用C语言来求解这样的一个方程组呢??我们知道x,y,z的取值范围,x不能超过100,y不能超过50,z不能超过20,并且它们都是自然数,即它们大于0且它们都是整数。我们可以在x,y,z的取值

范围里逐个枚举。当x+y+z = 50,x+2y+5z = 100时,输出x,y,z的值,这样,我们就得到了方程组的一个解。我们把这一过程用代码来实现。

 1 #include <stdio.h>
 2 
 3 int main(){
 4     printf("符合条件的x,y,z的取值如下:\n");
 5     for (int x = 0;x < 100;x++) {
 6         for (int y = 0;y < 50;y++) {
 7             for (int z = 0;z < 20;z++) {
 8                 if(x+y+z == 50 &&
 9                             x+2*y+5*z == 100){
10                     printf("\n一分硬币%d枚,两分硬币%d枚,五分硬币%d枚\n",x,y,z);
11                 }
12             }
13         }
14     }
15     return 0;
16 }

  代码中,形如这样的语句被称为for语句,它后面的()内部的内容可以抽象为(表达式1;表达式2;表达式3)。其中表达式1为循环开始前要做的事情,

表达式2为循环的终止条件,表达式3为改变循环条件变量的语句。整个循环可以这样用算法框图表示。

在我们的代码内,出现的是一个三重循环,对于三重循环,我们可以这样理解,将第一重循环的循环体换成一个循环,在将第二重循环的循环体换成一个循环。嵌套循环可以这样用算法框图表示。

  这里,我们用算法框图表示了一个二重循环。如果想要把它改为一个三重循环。只需要将内循环的循环体改成一个循环,这样就是一个三重循环了。

  了解了for循环以后,循环语句有什么用呢??我们知道,计算机做的事情,一般都是可重复的,可重复的过程,一般都可以让计算机代劳。解方程的过程可以通过枚举,从而得到方程的解。所以,循环在计算机科学里的地位是不可忽视的,大部分的算法都基于循环,所以

如何使用循环解决问题。是一件值得多多研究的事情。现在。我们用循环来解决打印乘法表的问题,要求是:在控制台打印出九九乘法表。像这样:

 

  这样一个操作对应的代码段可以是这样:

  

#include <stdio.h>

int main(){

    for (int i = 1;i <= 9;i++) {
        for    (int j = 1;j<= i;j++) {
            printf("%d x %d = %d\t",j,i,i*j);
        }
        printf("\n");
    }
    printf("--------------------------------------我是分割线------------------------------------\n");
    for (int i = 9;i >= 1;i--) {
        for    (int j = 1;j<= i;j++) {
            printf("%d x %d = %d\t",j,i,i*j);
        }
        printf("\n");
    }
    return 0;
}

  乘法表的打印是逐行打印的,一行一行的打印。每一行都需要打印,所以,循环应该是一个二重循环,外循环负责逐行打印。内循环负责在每一行进行打印。

  循环语句的功能是非常强大的,大部分程序都含有循环。使用,笔者也只能挑一部分常见的循环应用来描述循环。

猜你喜欢

转载自www.cnblogs.com/zhuxingtian/p/9900516.html