首页 文章

掌握循环[暂停]

提问于
浏览
-1

我新手,我在处理一个简单的程序时遇到了麻烦,事实上我解决了它 . 但是我想问一个方法来掌握循环中有多少次迭代,例如我希望循环第一次重复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 回答

  • -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;
    }
    

相关问题