C语言 基于流程图实现循环

ruarlubt  于 2023-02-03  发布在  其他
关注(0)|答案(1)|浏览(201)

我在选择初始化和大致理解此程序的目的时遇到问题:

我试着跟随:

void main() {
    int a, b, i = 0;
    printf("a\n");
    scanf("%i",&a);
    printf("b\n");
    scanf("%i\n",&b);
}

但是选择什么样的循环呢?

cfh9epnr

cfh9epnr1#

当您在检查z < 0之前执行步骤z = z - b时,do-while循环将最自然地Map:

#include <stdio.h>

int main() {
    int a;
    int b;
    if(scanf("%d%d", &a, &b) != 2) {
         printf("scanf() failed\n");
         return 1;
    }
    if(b == 0) {
         printf("b cannot be 0\n");
         return 0;
    }
    int i = 0;
    int z = a;
    do {
       z -= b; 
       i++;
    } while(z >= 0);
    int E = i - 1;
    int R = z + b;
    printf("E = %d, R = %d\n", E, R);
}

正如@Fe2O3所指出的,E和R赋值撤销了最后一步,所以我将重写为for-循环,测试我们是否需要在做下一步之前进行下一步。

#include <stdio.h>

int main() {
    int a;
    int b;
    if(scanf("%d%d", &a, &b) != 2) {
        printf("scanf() failed\n");
        return 1;
    }
    if(!b) {
         printf("b cannot be 0\n");
         return 0;
    }
    size_t i = 0;
    for(; a - b >= 0; a -= b, i++);
    printf("E = %d, R = %d\n", i, a);
}

或者简单地实现算法的功能并直接实现它:

#include <stdio.h>

int main() {
    int a;
    int b;
    if(scanf("%d%d", &a, &b) != 2) {
        printf("scanf() failed\n");
        return 1;
    }
    if(!b) {
         printf("b cannot be 0\n");
         return 0;
    }
    printf("%d %d\n", a/b, a%b );
}

相关问题