今天翻資料的時候,無意間發現了一個文件,是剛接觸編程的時候用c++寫的一段程序,我稱之為"圖形打印機",想着把所有圖形都打印出來,后來發現其實每種圖形的代碼都是一個思路,就不想做重復勞動了。今天翻到了就把它記下來做個紀念吧。
#include<stdio.h> #include<stdlib.h> //功能選擇界面 void menu(); //使用聲明 void Statement(); //打印實心菱形 int Solid_diamond(); //打印空心三角形 int Hollow_triangle(); //打印十字形 int Cross(); //打印空心正方形 int Hollow_square(); //打印實心平行四邊形 int Solid_parallelogram(); //主函數 main(void) { int n; printf("\t\t\t歡迎體驗1.0版本圖形打印機\n\n\n"); while(1) { menu(); printf("Please select a funcyion:"); scanf("%d",&n); switch(n) { case 1:Statement();break; case 2:Solid_diamond();break; case 3:Hollow_triangle();break; case 4:Cross();break; case 5:Hollow_square();break; case 6:Solid_parallelogram();break; case 0:exit(0);break; } if(n<0||n>6) printf("\t\t\t---Input Error!---\n\n\n"); } } //聲明界面 void Statement() { printf("\n\n\n"); printf("1---Because the interface is too small,so,please enter a number less than 20\n"); printf(" (因為界面太小,所以請輸入小於20的數以便觀察)\n"); printf("2---The current version only supports the English language\n"); printf(" (因為目前水平有限,所以只支持英文模式)\n"); printf("3---If you find problem,please contact me in time,tkank you\n"); printf(" (如果你在使用過程中發現問題,請及時聯系我,謝謝)\n\n\n"); } //菜單界面 void menu() { printf("\n\n\n"); printf("\t\t\t1---Statement(使用聲明)\n"); printf("\t\t\t2---Solid diamond(實心菱形)\n"); printf("\t\t\t3---Hollow triangle(空心三角形)\n"); printf("\t\t\t4---Cross(十字形)\n"); printf("\t\t\t5---Hollow_square(空心正方形)\n"); printf("\t\t\t6---Solid_parallelogram(實心平行四邊形)\n"); printf("\t\t\t0---Exit the program(退出程序)\n\n\n"); printf("Important:《Only support English》\n\n\n"); } //實心菱形 int Solid_diamond() { int i,j,n; char m; printf("Please enter the order number(請輸入階數):"); scanf("%d",&n); fflush(stdin);//清空緩存區 printf("Please enter the character(請輸入字符):"); scanf("%c",&m); if(n<=0) printf("\t\t\tInput Error!\n"); for(i=1;i<=n;i++) { for(j=1;j<=n-i;j++) printf(" "); for(j=1;j<=2*i-1;j++) printf("%c",m); printf("\n"); } /*首先打n-1個空格后面接星號,隨后空格逐漸減少,星號以2*1形式增加, 只打印了左邊部分的空格 ,右邊空格未打印。 打印出最大階數*/ for(i=1;i<=n-1;i++) { for(j=1;j<=i;j++) printf(" "); for(j=1;j<2*(n-i);j++) printf("%c",m); printf("\n"); } //仿照上式,逆序打印,只是要注意要比上式少一階 } //空心三角形 int Hollow_triangle() { int i,j,n; char m; printf("Please enter the order number(請輸入階數):"); scanf("%d",&n); fflush(stdin);//清空緩存區 printf("Please enter the character(請輸入字符):"); scanf("%c",&m); if(n<=0) printf("\t\t\tInput Error!\n"); for(i=1;i<n+1;i++) { for(j=1;j<2*n;j++) { if(j==n-i+1||j==i+n-1||i==n&&j%2==1) printf("%c",m); //j=n-i+1打印左邊符號;j=n+i-1打印右邊符號;i=n&&j%2==1打印最后一層星號 else printf(" "); //除星號外其余全為空格 } printf("\n"); } } //十字形 int Cross() { int i,j,n; char m; printf("Please enter the order odd number(請輸入奇數階數):"); scanf("%d",&n); fflush(stdin);//清空緩存區 printf("Please enter the character(請輸入字符):"); scanf("%c",&m); if(n<=0) printf("\t\t\tInput Error!\n"); for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(j==n||i==(n+1)/2) /*按正常情況這是錯的,應該是(j==(n+1)/2||i==(n+1)/2),但是由於界面 的問題 ,為了美觀,我選擇擴大橫排的間距,把豎排的字符打印得更靠后*/ printf("%c ",m); else printf(" "); } printf("\n"); } } //空心正方形 int Hollow_square() { int i,j,n; char m; printf("Please enter the order number(請輸入階數):"); scanf("%d",&n); fflush(stdin);//清空緩存區 printf("Please enter the character(請輸入字符):"); scanf("%c",&m); if(n<=0) printf("\t\t\tInput Error!\n"); for(i=1;i<=n;i++) { for(j=1;j<=n-1;j++) if(i==1||j==1||i==n) printf(" %c",m); else printf(" "); printf(" %c\n",m); } } //實心平行四邊形 int Solid_parallelogram() { int i,j,k,n; char m; printf("Please enter the order number(請輸入階數):"); scanf("%d",&n); fflush(stdin);//清空緩存區 printf("Please enter the character(請輸入字符):"); scanf("%c",&m); if(n<=0) printf("\t\t\tInput Error!\n"); for(i=1;i<=n;i++) { for(j=1;j<=n-i;j++) printf(" "); for(k=1;k<=n;k++) printf("%c",m); printf("\n"); } }