掌握循环

时间:2018-12-09 04:35:05

标签: c loops

我是新手,我在处理一个简单程序时遇到了麻烦,确实我解决了它。但是我想问一个方法来掌握循环将执行多少次迭代,例如,我希望循环第一次重复10次,第二次重复8次,第三次重复6次,等等。

该程序很容易用星号(*)印刷钻石。

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

我做到了两种方式,我希望您的意见知道哪个更好。

选项1:

#include <stdio.h>

int main(){

int buff_j = 0, buff_k = 9;

    for(int i = 0; i <= 8 ; i++){
        if( i <= 4 ){

            int j = buff_j;
            while( j <= 3){
                printf(" ");    
                j++;
            }

            int k = buff_k;
            while(k <= 9){
                printf("*");
                k++;    
            }

            printf("\n");


            buff_j++;
            buff_k -= 2;    


        }else{

            int j = buff_j;
            while(j <= 5){
                printf(" ");
                j++;    
            }

            int k = buff_k;
            while(k <= 5){
                printf("*");
                k++;    
            }

            printf("\n");

            buff_j--;
            buff_k += 2;    

        }   
    } 

    return 0;
} 

选项2:

#include <stdio.h>

int main(){

int buff_j = 1, buff_k = 7;

    //top
    for(int i = 1 ; i <= 4 ; i++){

            int j = buff_j;
            while( j <= 4){
                printf(" ");    
                j++;
            }

            int k = buff_k;
            while(k <= 7){
                printf("*");
                k++;    
            }

            printf("\n");


            buff_j++;
            buff_k -= 2;    
    }

    //mid
    for(int i = 1 ; i <= 9 ; i++)
        printf("*");
    printf("\n");

    buff_j = 4;
    buff_k = 1;

    //buttom
    for(int i = 1 ; i <= 4 ; i++){

            int j = buff_j;
            while(j <= 4){
                printf(" ");
                j++;    
            }

            int k = buff_k;
            while(k <= 7){
                printf("*");
                k++;    
            }

            printf("\n");

            buff_j--;
            buff_k += 2;    
    }

    return 0;
} 

如您所见,顶部的内部循环将更改其迭代次数,即减少1或增加2,而底部则以另一种方式进行。 如果您向我展示了如何更好的例子,我将不胜感激。

1 个答案:

答案 0 :(得分:-1)

实际上,他们俩都不好。

我认为我的代码可以解决您的问题。

这是一个答案:

#include<stdio.h>

int main()
{
    int i, j, k;

    for (i = 0; i < 9; i++) {
        if (i < 5) {
            for (j = 0; j < 4 - i; j++) {
                printf(" ");
            }
            for (k = 0; k < (2 * i) + 1; k++) {
                printf("*");
            }
        }
        else {
            for (j = 0; j < i - 4; j++) {
                printf(" ");
            }
            for (k = 0; k < 17 - 2 * i; k++) {
                printf("*");
            }
        }
        printf("\n");
    }
    return 0;
}

加),如果您想通过输入来设置尺寸:

#include<stdio.h>

int main()
{
    int i, j, k, n;
    scanf_s("%d", &n);

    for (i = 0; i < n; i++) {
        if (i < n / 2 + 1) {
            for (j = 0; j < n / 2 - i; j++) {
                printf(" ");
            }
            for (k = 0; k < (2 * i) + 1; k++) {
                printf("*");
            }
        }
        else {
            for (j = 0; j < i - n / 2; j++) {
                printf(" ");
            }
            for (k = 0; k < n * 2 - 1 - 2 * i; k++) {
                printf("*");
            }
        }
        printf("\n");
    }
    return 0;
}