1. 程式人生 > >C語言編程 兩種方法打印一個菱形(漸入顯示)

C語言編程 兩種方法打印一個菱形(漸入顯示)

nag 支持 一個 left c語言 stdio.h watermark char ()

<1>第一種方法,利用字符數組定義一個空格數組和一個符號數組,

然後找到數組中間的元素,操作空格字符從中間開始向兩邊與符號數組的元素互換,

每互換一次進行一次輸出,打印上半個菱形和下半個菱形需要兩個for語句的支持。

源代碼如下:

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>//為了使用延時語句Sleep而調用
int main()
{
    char suu1[] = "*****************************************";//符號語句
    char suu2[] = "                                                         ";//空格語句
    int right, left=0, mid;
    right = strlen(suu2)-1;
    mid = left + (right - left) / 2;
    for (left = mid , right = mid ; left >= 0&&right<=strlen(suu2)-1 ; left--, right++)//上半部分打印
    {
        suu2[left] = suu1[left];
        suu2[right] = suu1[right];
        printf("%s\n", suu2);
        Sleep(600);//延時操作
    }
    for (left = 0, right = strlen(suu1)-1; left <=mid && right >=mid; left++, right--)//下半部分打印
    {
        suu2[left] = ‘ ‘;
        suu2[right] = ‘ ‘;
        printf("%s\n", suu2);
        Sleep(600);
    }
    system("pause");
    return 0;
}

這種方法較為淺顯易懂,但缺點是菱形的大小是通過所定義的字符數組的長度來定義的,不是特別靈活。

<2>
第二種方法算法上相比第一種較為復雜,但是可操控性比較高,主要是通關觀察來得到所打印符號的行,列和符號個數之間的數學關系來打印。

源代碼如下:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int line = 0,m,k;
    scanf("%d", &line);//通過輸入來確定菱形的大小
    int i = 0;
    for (i = 0; i < line; i++)//上半部分打印
    {
        for (m = 0; m<line - 1 - i; m++)//觀察所得關系式
            printf(" ");
        for (m= 0; m <2 * i+ 1; m ++)
        {
                printf("*");
        }
        printf("\n");
    }
    for (i = 0; i < line-1; i++)//下半部分打印
    {
        for (m = 0; m<=i; m++)
            printf(" ");
        for (m = 0; m <2 * (line-i-1)-1; m++)//觀察得到的關系式
        {
            printf("*");
        }
        printf("\n");
    }
    system("pause");
    return 0;
}

運行結果實例:

技術分享圖片

C語言編程 兩種方法打印一個菱形(漸入顯示)