C語(yǔ)言圖形輸出習(xí)題_第1頁(yè)
C語(yǔ)言圖形輸出習(xí)題_第2頁(yè)
C語(yǔ)言圖形輸出習(xí)題_第3頁(yè)
C語(yǔ)言圖形輸出習(xí)題_第4頁(yè)
C語(yǔ)言圖形輸出習(xí)題_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

...wd......wd......wd...【4.4】輸入n值,輸出如以以下列圖矩形?!?.5】輸入n值,輸出如以以下列圖平行四邊形?!?.6】輸入n值,輸出如以以下列圖高為n的等腰三角形?!?.7】輸入n值,輸出如以以下列圖高為n的等腰三角形?!?.8】輸入n值,輸出如以以下列圖高和上底均為n的等腰梯形。【4.9】輸入n值,輸出如以以下列圖高和上底均為n的等腰空心梯形?!?.10】輸入n值,輸出如以以下列圖邊長(zhǎng)為n的空心正六邊型?!?.11】輸入n值,輸出如以以下列圖圖形。【4.12】輸入n值,輸出如以以下列圖圖形?!?.13】輸入n值,輸出如以以下列圖圖形?!?.14】輸入n值,輸出如以以下列圖圖形。【4.15】輸入n值,輸出如以以下列圖圖形?!?.16】輸入n值,輸出如以以下列圖圖形?!怖秊閚=6時(shí)〕

【4.17】編寫(xiě)程序,輸出如以以下列圖sin(x)函數(shù)0到2π的圖形。

【4.18】編寫(xiě)程序,在屏幕上輸出一個(gè)由*號(hào)圍成的空心圓。

【4.19】編寫(xiě)程序,在屏幕上繪制如圖余弦曲線(xiàn)和直線(xiàn)。假設(shè)屏幕的橫向?yàn)閤軸,縱向?yàn)閥軸,在屏幕上顯示0~360度的cos(x)曲線(xiàn)與直線(xiàn)x=f(y)=45*(y-1)+31的迭加圖形。其中cos圖形用"*"表示,f(y)用"+"表示,在兩個(gè)圖形的交點(diǎn)處那么用f(y)圖形的符號(hào)?!?.20】編寫(xiě)程序,輸出如以以下列圖高度為n的圖形。【4.21】編寫(xiě)程序,輸出如以以下列圖高度為n的圖形。

【4.22】輸入n值,輸出如以以下列圖圖形。

【4.23】輸入n值,輸出如以以下列圖的n×n(n<10)階螺旋方陣。

12345

161718196

152425207

142322218

131211109

圖4.19n=5時(shí)的螺旋方陣

【4.24】輸入n值,輸出如以以下列圖回型方陣?!?.25】輸出如以以下列圖的數(shù)字金字塔【4.26】輸入n值,輸出如以以下列圖圖形?!?.27】輸入頂行字符和圖形的高,輸出如以以下列圖圖形?!?.28】輸入首字符和高后,輸出如以以下列圖回型方陣。

AAAAAABBBAABCBAABBBA

AAAAA圖4.24首字符為'A'、高為5的方陣

【4.29】輸入中心字符和高后,輸出如以以下列圖回型方陣。

XXXXXXYYYXXYZYXXYYYY

XXXXX

圖4.25中心字符為'Z'、高為5的方陣

【4.30】編寫(xiě)程序,輸出如以以下列圖上三角形式的乘法九九表?!?.31】編寫(xiě)程序,輸出如以以下列圖下三角乘法九九表。【4.4】分析:打印此圖形用兩重循環(huán)實(shí)現(xiàn)。圖形要重復(fù)n行,故采用循環(huán)構(gòu)造實(shí)現(xiàn)循環(huán)n次,循環(huán)體內(nèi)部打印一行'*'號(hào),把上述思路表示為:for(i=1;i<=n;i++)打印一行'*'號(hào);每行有n個(gè)'*'號(hào),再采用循環(huán)構(gòu)造實(shí)現(xiàn)n次循環(huán),循環(huán)內(nèi)部用格式輸出語(yǔ)句打印一個(gè)'*'號(hào),即:for(j=1;j<=n;j++)printf("*");按照上述思路,實(shí)現(xiàn)打印矩形。參考答案:main(){inti,j,n;printf("\nPleaseEntern:");scanf("%d",&n);for(i=1;i<=n;i++){for(j=1;j<=n;j++)printf("*");printf("\n");}}【4.5】分析:此圖形和上題的區(qū)別在于在每一行先要打印空格,然后再打印n個(gè)'*'號(hào),在上題第一層循環(huán)體內(nèi)打印'*'號(hào)的循環(huán)前面增加一個(gè)循環(huán)打印空格。每行空格的個(gè)數(shù)是逐行減少的,由于第一層循環(huán)的控制變量i是逐行增1,所以用一個(gè)固定值的數(shù)減去i就可實(shí)現(xiàn)對(duì)空格個(gè)數(shù)的控制,在此題中固定值可使用變量n。參考答案:main(){inti,j,n;printf("\nPleaseEntern:");scanf("%d",&n);for(i=1;i<=n;i++){for(j=1;j<=n-i;j++)printf("");for(j=1;j<=n;j++)printf("*");printf("\n");}}【4.6】分析:此題和上題的區(qū)別在于每行'*'的數(shù)量逐行減少,可以使用上題控制空格個(gè)數(shù)的思路來(lái)控制'*'號(hào)的個(gè)數(shù),請(qǐng)注意每行'*'的個(gè)數(shù)都是奇數(shù)。參考答案:main(){inti,j,n;printf("\nPleaseEntern:");scanf("%d",&n);for(i=1;i<=n;i++){for(j=1;j<=n-i;j++)printf("");for(j=1;j<=2*i-1;j++)printf("*");printf("\n");}}【4.7】分析:此題圖形是第3題圖形的垂直反轉(zhuǎn),在編程上我們可以變換一個(gè)思路。對(duì)于圖形中的第i行〔1≤i≤n〕,共需要輸出2n-i個(gè)字符,其中前面的i-1個(gè)字符為空格,后面的字符為'*'號(hào)。按照這一思路可以編寫(xiě)出如下程序。參考答案:main(){inti,j,n;printf("\nPleaseEntern:");scanf("%d",&n);for(i=1;i<=n;i++)/*重復(fù)輸出圖形的n行*/{for(j=1;j<=2*n-i;j++)/*重復(fù)輸出圖形一行中的每個(gè)字符*/if(j<=i-1)printf("");/*輸出前面的空格*/elseprintf("*");/*輸出后面的*號(hào)*/printf("\n");}}【4.8】分析:此題和第3題的區(qū)別僅是每行的'*'個(gè)數(shù)增加n-1個(gè)。參考答案:main(){inti,j,n;printf("\nPleaseEntern:");scanf("%d",&n);for(i=1;i<=n;i++){for(j=1;j<=n-i;j++)printf("");for(j=1;j<=2*i-1+(n-1);j++)printf("*");printf("\n");}}【4.9】分析:對(duì)于空心圖形,我們可以在上題的根基上,對(duì)于打印'*'號(hào)的循環(huán)進(jìn)展修改,僅在循環(huán)開(kāi)場(chǎng)值(j=1)和循環(huán)完畢值(j=2*(i-1)+n)時(shí)打印'*'號(hào),其它位置都打印空格。另一種思路是將每行打印的空格和'*'的兩個(gè)循環(huán)合為一體考慮,在判斷出需要打印'*'的兩個(gè)位置及第一行和最后一行相應(yīng)位置外,其余位置都打印空格。參考答案:main(){inti,j,n;printf("\nPleaseEntern:");scanf("%d",&n);for(i=1;i<=n;i++){for(j=1;j<=2*n+i-3;j++)if(j==n-i+1||j>n-i+1&&(i==1||i==n))printf("*");elseprintf("");printf("*\n");}}【4.10】分析:此圖形可以理解為兩個(gè)空心梯形反向連接而成,因此可以利用上題的思路進(jìn)展輸出。參考答案:main(){inti,j,n;printf("\nPleaseEntern:");scanf("%d",&n);for(i=1;i<=n;i++)/*輸出圖形的上半局部(含中心行)*/{for(j=1;j<=2*n-i-1;j++)if(j==i)printf("*");elseprintf("");printf("*\n");}for(i=1;i<n;i++)/*輸出圖形的下半局部〔不含中心行〕*/{for(j=1;j<=n+i;j++)if(j==n-i)printf("*");elseprintf("");printf("*\n");}}【4.11】分析:此題與上題的區(qū)別在于打印'*'號(hào)的位置不同,編程時(shí)要找出應(yīng)打印'*'號(hào)的位置和兩個(gè)循環(huán)變量i、j以及行數(shù)n的關(guān)系。參考答案:main(){inti,j,n;printf("\nPleaseEntern:");scanf("%d",&n);for(i=1;i<=n;i++)/*輸出圖形的上半局部(含中心行)*/{for(j=1;j<=2*n-i;j++)if(j==n-i+1||j>n-i+1&&i==1)printf("*");elseprintf("");printf("*\n");}for(i=1;i<n;i++)/*輸出圖形的下半局部〔不含中心行〕*/{for(j=1;j<=3*(n-1)-i;j++)if(j==i+1||j>i+1&&i==n-1)printf("*");elseprintf("");printf("*\n");}}【4.12】參考答案:main(){inti,j,n;printf("\nPleaseEntern:");scanf("%d",&n);for(i=1;i<=n;i++){for(j=1;j<=n;j++)if(j==n-i+1||i==1||i==n)printf("*");elseprintf("");printf("\n");}}【4.13】參考答案:main(){inti,j,n;printf("\nPleaseEntern:");scanf("%d",&n);for(i=1;i<=n;i++)/*輸出圖形的上半局部(含中心行)*/{for(j=1;j<=n-i;j++)if(j==1||j==n-i+1)printf("*");elseprintf("");printf("\n");}for(i=1;i<n;i++)/*輸出圖形的下半局部〔不含中心行〕*/{for(j=1;j<=i+1;j++)if(j==1||j==i+1)printf("*");elseprintf("");printf("\n");}}【4.14】參考答案:main(){inti,j,n;printf("\nPleaseEntern:");scanf("%d",&n);for(i=1;i<=n;i++){for(j=1;j<=n;j++)if(j==1||j==i||j==n)printf("*");elseprintf("");printf("\n");}}【4.15】參考答案:main(){inti,j,n;printf("\nPleaseEntern:");scanf("%d",&n);for(i=1;i<=n;i++){for(j=1;j<=n+i-1;j++)if(j>n-i)printf("*");elseprintf("");printf("\n");}for(i=1;i<n;i++){for(j=1;j<=2*n-i-1;j++)if(j>i)printf("*");elseprintf("");printf("\n");}}【4.16】參考答案:main(){inti,j,n;printf("\nPleaseEntern:");scanf("%d",&n);for(i=1;i<=n;i++){for(j=1;j<=n+i-2;j++)if(j==n-i+1)printf("*");elseprintf("");printf("*\n");}}【4.17】分析:首先對(duì)圖形進(jìn)展設(shè)計(jì),坐標(biāo)的X軸和Y軸分別對(duì)應(yīng)屏幕的列和行,一個(gè)正弦函數(shù)的周期為0~360度,我們把一個(gè)步長(zhǎng)定義為10度,打印時(shí)每換一行等于函數(shù)的自變量增加10度;屏幕的列寬為80,函數(shù)值為0對(duì)應(yīng)屏幕的第40列,sin(x)的值在-1~1,變換成列數(shù)為以0為中心的-30~30,對(duì)應(yīng)屏幕上第10~70列。設(shè)計(jì)程序時(shí),控制換行的自變量i乘以10得到正弦函數(shù)的X值,調(diào)用庫(kù)函數(shù)sin()求出函數(shù)值再乘以30輸出的列寬,因?yàn)槲覀円云聊坏牡?0列為0點(diǎn),故再加上40得到應(yīng)在屏幕上顯示的點(diǎn)。參考答案:#definePAI3.14159#include<math.h>main(){doublex;inty,i,yy;for(i=1;i<80;i++)/*打印圖形的第一行*/if(i==40)printf("*");/*i控制打印的列位置*/elseprintf("-");printf("\n");for(x=10.0;x<=360.0;x+=10.)/*從10度到360度*/{y=40+30*sin(x*PAI/180.0);/*計(jì)算對(duì)應(yīng)的列*/yy=40>y?40:y;/*下一行要打印的字符總數(shù)*/for(i=1;i<=yy;i++)/*控制輸出圖形中的一行*/{if(i==y)printf("*");/*i控制打印的列位置*/elseif(i==40)printf("|");/*打印中心的豎線(xiàn)*/elseprintf("");}printf("\n");}}【4.18】分析:首先設(shè)計(jì)屏幕圖形,如果預(yù)計(jì)圓形在屏幕上打印20行,所以定義圓的直徑就是20,半徑為10,圓的方程是X2×Y2=R2,因?yàn)閳D形不是從中心開(kāi)場(chǎng)打印而是從邊沿開(kāi)場(chǎng),所以Y從10變化到-10,根據(jù)方程求出X,對(duì)求得的X值再根據(jù)屏幕行寬進(jìn)展必要的調(diào)整得到應(yīng)打印的屏幕位置。參考答案:#include<math.h>main(){doubley;intx,m;for(y=10;y>=-10;y--)/*圓的半徑為10*/{m=2.5*sqrt(100-y*y);/*計(jì)算行y對(duì)應(yīng)的列坐標(biāo)m*/for(x=1;x<30-m;x++)printf("");/*輸出圓左側(cè)的空白*/printf("*");/*輸出圓的左側(cè)*/for(;x<30+m;x++)printf("");/*輸出圓的空心局部*/printf("*\n");/*輸出圓的右側(cè)*/}}【4.19】參考答案:#include<stdio.h>#include<math.h>main(){doubley;intx,m,n,yy;for(yy=0;yy<=20;yy++){y=0.1*yy;m=acos(1-y)*10;n=45*(y-1)+31;for(x=0;x<=62;x++)if(x==m&&x==n)printf("+");elseif(x==n)printf("+");elseif(x==m||x==62-m)printf("*");elseprintf("");printf("\n");}}【4.20】分析:編程的關(guān)鍵為兩點(diǎn),一是使用控制輸出的行和列,這方面的內(nèi)容在前面已經(jīng)表達(dá),另一點(diǎn)是輸出的數(shù)字和所在行、列關(guān)系。此題第一行輸出的數(shù)字恰好是列數(shù),從第二行起每行的數(shù)字均比上一行增n。參考答案:main(){inti,j,n;printf("\nPleaseEntern:");scanf("%d",&n);for(i=1;i<=n;i++){for(j=1;j<=n;j++)printf("%4d",(i-1)*n+j);printf("\n");}}【4.21】分析:此題的關(guān)鍵是找到輸出數(shù)字和行、列數(shù)的關(guān)系。審查圖形中每行中數(shù)字的關(guān)系發(fā)現(xiàn),右邊數(shù)字和前面數(shù)字之差逐次增1;同列數(shù)字依然是這樣的關(guān)系,編程的關(guān)鍵轉(zhuǎn)換為找到每一行左方的第一個(gè)數(shù)字,然后利用行和列的循環(huán)變量進(jìn)展運(yùn)算就可得到每個(gè)位置的數(shù)字。用ai,j此表示第i行第j列的數(shù)字,那么a11=1;由第i行第一列的數(shù)字推出第i+1行第一列的數(shù)字是ai+1,1=ai,1+i;同樣由第j列推出第j+1列的數(shù)字是ai,j+1=ai,j+i+j。另外只有當(dāng)j<i時(shí)才輸出數(shù)字。參考答案:main(){inti,j,m,n,k=1;/*k是第一列元素的值*/printf("Pleaseenterm="");scanf("%d",&m);for(i=1;i<=m;i++){n=k;/*n第i行中第1個(gè)元素的值*/for(j=1;j<=m-i+1;j++){printf("%3d",n);n=n+i+j;/*計(jì)算同行下一個(gè)元素的值*/}printf("\n");k=k+i;/*計(jì)算下一行中第1個(gè)元素*/}}【4.22】參考答案:main(){inti,j,n;printf("\nPleaseEntern:");scanf("%d",&n);for(i=1;i<=n;i++){for(j=1;j<=n;j++)if(j<=i)printf("1");elseprintf("%3d",j-i+1);printf("\n");}}【4.23】分析:可用不同的方案解決此問(wèn)題,為了開(kāi)闊讀者的思路,這里給出了兩個(gè)參考答案,其中第二個(gè)答案是使用了遞歸方法。方案一:首先尋找數(shù)字輸出數(shù)字和行列的關(guān)系。每圈有四個(gè)邊,把每邊的最后一個(gè)數(shù)字算為下邊的開(kāi)場(chǎng),最外圈每邊數(shù)字個(gè)數(shù)是n-1個(gè),以后每邊比外邊一邊少兩個(gè)數(shù)字。因?yàn)閿?shù)字是一行一行輸出的,再分析每行數(shù)字的規(guī)律。實(shí)際沒(méi)有的數(shù)字有三種規(guī)律:位于對(duì)角線(xiàn)之間的數(shù)字是上半圖增一,下半圖減一。對(duì)角線(xiàn)左側(cè)的各列,右側(cè)比左側(cè)增加了一圈數(shù)字,例如數(shù)字39和它左側(cè)的22對(duì)比,數(shù)字39所在的圈每邊4個(gè)數(shù)字,左側(cè)22加上一圈16個(gè)數(shù)字在加1就是39。同理,對(duì)角線(xiàn)右側(cè)的各列,那么減少一圈的數(shù)字個(gè)數(shù)。根據(jù)以上分析,用兩個(gè)對(duì)角線(xiàn)將圖形分為四個(gè)區(qū)域,如以以下列圖所示,圖中黑斜體字為對(duì)角線(xiàn)上的數(shù)字。12345672425262728298234041424330922394849443110213847464532112037363534331219181716151413為表達(dá)方便我們稱(chēng)四個(gè)區(qū)域?yàn)樯?、下、左、右區(qū)。設(shè)i、j為行列號(hào),n為圖形的總行數(shù),那么滿(mǎn)足各區(qū)的范圍是,上區(qū):j>=i且j<=n-i+1;下區(qū):j<=i且j>=n-i+1;左區(qū):j<i且j<n-i+1;右區(qū):j>i且j>n-i+1?,F(xiàn)在問(wèn)題是,如果知道一行在不同區(qū)域開(kāi)場(chǎng)第一個(gè)位置的數(shù)字,然后該區(qū)后續(xù)的數(shù)字就可利用前面分析的規(guī)律得到。對(duì)于右區(qū)開(kāi)場(chǎng)各行第一個(gè)數(shù)字最易求出,為4*(n-1)-i+1。后續(xù)一個(gè)和同行前一個(gè)數(shù)字之差是4*[n-1-(j-1)*2]+1,其中方括號(hào)內(nèi)是每邊的數(shù)字個(gè)數(shù)。對(duì)角線(xiàn)上的數(shù)字是分區(qū)點(diǎn),對(duì)角線(xiàn)上相臨數(shù)字仍然相差一圈數(shù)字個(gè)數(shù),讀者自行分析得到計(jì)算公式。右區(qū)開(kāi)場(chǎng)的第一個(gè)數(shù)字可以從上區(qū)完畢時(shí)的數(shù)字按規(guī)律求出。下述程序用變量s保存分區(qū)對(duì)角線(xiàn)上的數(shù)字。參考答案一:main(){inti,j,k,n,s,m,t;printf("Pleaseentern:");scanf("%d",&n);for(i=1;i<=n;i++){s=(i<=(n+1)/2)?1:3*(n-(n-i)*2-1)+1;m=(i<=(n+1)/2)?i:n-i+1;/*m-1是外層圈數(shù)*/for(k=1;k<m;k++)s+=4*(n-2*k+1);for(j=1;j<=n;j++){if(j>=n-i+1&&j<=i)/*下區(qū)*/t=s-(j-(n-i))+1;if(j>=i&&j<=n-i+1)/*上區(qū)*/t=s+j-i;if(j>i&&j>n-i+1)/*右區(qū)*/t-=4*(n-2*(n-j+1))+1;if(j<i&&j<n-i+1)/*左區(qū)*/{if(j==1)t=4*(n-1)-i+2;elset+=4*(n-2*j+1)+1;}printf("%4d",t);}printf("\n");}}方案二:根據(jù)此題圖形的特點(diǎn),我們可以構(gòu)造一個(gè)遞歸算法。我們可以將邊長(zhǎng)為N的圖形分為兩局部:第一局部最外層的框架,第二局部為中間的邊長(zhǎng)為N-2的圖形。對(duì)于邊長(zhǎng)為N的正方型,假設(shè)其中每個(gè)元素的行號(hào)為i〔1≤i≤N〕,列號(hào)為j〔1≤j≤N〕,第1行第1列元素表示為a1,1〔a11=1〕,那么有:對(duì)于最外層的框架可以用以下數(shù)學(xué)模型描述:上邊:a1,j=a1,1+j-1(j≠1)右邊:ai,N=a1,1+N+i-2(i≠1)下邊:ai,1=a1,1+4N-i-3(i≠1)左邊:aN,j=a1,1+3N-2-j(j≠1)對(duì)于內(nèi)層的邊長(zhǎng)為N-2的圖形可以用以下數(shù)學(xué)模型描述:左上角元素:ai,i=ai-1,i-1+4(N-2i-1)(i>1)假設(shè)令:ai,j=fun(ai-1,i-1+4(N-2i-1),當(dāng):i<(N+1)/2且j<(N+1)/2時(shí),min=MIN(i,j),那么有:a2,2=fun(a1,1,min,min,n)ai,j=fun(a2,2,i-min+1,j-min+1,n-2*(min-1))我們可以根據(jù)上述原理,分別推導(dǎo)出i和j為其它取值范圍時(shí)的min取值。根據(jù)上述遞歸公式,可以得到以下參考程序。參考答案二:#include<stdio.h>#defineMIN(x,y)(x>y)?(y):(x)fun(inta11,inti,intj,intn){intmin,a22;if(i==j&&i<=1)return(a11);elseif(i==j&&i<=(n+1)/2)return(fun(a11,i-1,i-1,n)+4*(n-2*i+3));elseif(i==1&&j!=1)return(a11+j-1);elseif(i!=1&&j==n)return(a11+n+i-2);elseif(i!=1&&j==1)return(a11+4*n-3-i);elseif(i==n&&j!=1)return(a11+3*n-2-j);else{if(i>=(n+1)/2&&j>=(n+1)/2)min=MIN(n-i+1,n-j+1);elseif(i<(n+1)/2&&j>=(n+1)/2)min=MIN(i,n-j+1);elseif(i>=(n+1)/2&&j<(n+1)/2)min=MIN(n-i+1,j);elsemin=MIN(i,j);a22=fun(a11,min,min,n);return(fun(a22,i-min+1,j-min+1,n-2*(min-1)));}}main(){inta11=1,i,j,n;printf("Entern=");scanf("%d",&n);for(i=1;i<=n;i++){for(j=1;j<=n;j++)printf("%4d",fun(a11,i,j,n));printf("\n");}}【4.24】分析:此題的關(guān)鍵還是要找到輸出數(shù)字aij和行列數(shù)i、j的關(guān)系。為此將圖形分為四個(gè)區(qū)域如以以下列圖:3333332223321233222333333(此圖n為5)在左上區(qū)域,即i<=(n+1)/2、j<=(n+1)/2時(shí),輸出數(shù)字為(n+1)/2-i+1和(n+1)/2-j+1中的大者,記為max{(n+1)/2-i+1,(n+1)/2-j+1};在右上區(qū),即i<=(n+1)/2、j>(n+1)/2時(shí),輸出數(shù)字為max{(n+1)/2-i+1,j-n/2};在左下區(qū),即i>(n+1)/2、j<=(n+1)/2時(shí),輸出數(shù)字為max{i-n/2,(n+1)/2-j+1};在右下區(qū),即i>(n+1)/2、j>(n+1)/2時(shí),輸出數(shù)字為max{i-n/2,j-n/2}。參考答案:#definemax(x,y)((x)>(y)?(x):(y))main(){inti,j,n;printf("\nPleaseEntern:");scanf("%d",&n);for(i=1;i<=n;i++){for(j=1;j<=n;j++)if(i<=(n+1)/2)if(j<=(n+1)/2)printf("%4d",max((n+1)/2-i+1,(n+1)/2-j+1));elseprintf("%4d",max((n+1)/2-i+1,j-n/2));elseif(j<=(n+1)/2)printf("%4d",max(i-n/2,(n+1)/2-j+1));elseprintf("%4d",max(i-n/2,j-n/2));printf("\n");}}【4.25】分析:前面我們已經(jīng)見(jiàn)到過(guò)上下對(duì)稱(chēng)的圖形,這是一個(gè)左右對(duì)稱(chēng)的圖形,垂直中心線(xiàn)上的數(shù)字恰好是行號(hào),在每行位于圖形垂直中心線(xiàn)左方的數(shù)字是逐漸增加的,而右方是逐漸減小的。j==i是分區(qū)的標(biāo)志,左方輸出數(shù)字就是列數(shù)j,而右方的數(shù)字從i開(kāi)場(chǎng)逐步減小1。參考答案:main(){inti,j;for(i=1;i<=9;i++){for(j=1;j<=9-i;j++)printf("");for(j=1;j<=i;j++)printf("%2d",j);for(j=i-1;j>=1;j--)printf("%2d",j);printf("\n");}}【4.26】分析:這類(lèi)輸出字符的圖形和輸出數(shù)字的圖形考慮是近似的,因?yàn)樽址腁SCII碼就是一個(gè)整數(shù)。在字符碼值的變化過(guò)程中,應(yīng)該注意應(yīng)該判斷碼值是否超出字符的范圍,進(jìn)展必要的處理,為了保持程序的簡(jiǎn)潔,此題沒(méi)有考慮這個(gè)問(wèn)題,在下題里對(duì)這個(gè)問(wèn)題進(jìn)展了處理。參考答案:main(){charc='Z';inti,j,n;printf("\nPleaseEntern:");scanf("%d",&n);for(i=1;i<=n;i++){for(j=1;j<=n+i-2;j++)if(j==n-i+1)printf("%c",c--);elseprintf("");printf("%c\n",c--);}for(i=1;i<n;i++){for(j=1;j<=2*(n-1)-i;j++)if(j==i+1)printf("%c",c--);elseprintf("");printf("%c\n",c--);}}【4.27】分析:此題與上題相近,區(qū)別在于輸出時(shí)字符的ASCII碼值的變化在圖形的中間一行為最大,同時(shí)一行的兩個(gè)字符是一樣的。程序考慮在輸入字符時(shí)設(shè)計(jì)了一個(gè)循環(huán),保證輸入的是英文字母。字符變化后進(jìn)展了處理,程序中使用條件運(yùn)算。在字符碼值增加的過(guò)程中,首先判斷是大寫(xiě)還是小寫(xiě)字符,然后判斷字符碼值是否超出英文字母z(或Z),如果超出那么重新賦為a(或A);在輸出圖象下半局部時(shí),ASCII碼值減少用同樣的思路進(jìn)展判斷。在判斷字符大小寫(xiě)〔條件語(yǔ)句的第一個(gè)判斷〕時(shí),用的是兩個(gè)不同的值,請(qǐng)讀者自行思考為什么,用同一個(gè)值是否可以參考答案:main(){charc;inti,j,n;do{printf("\nPleaseEntern,char:");scanf("%d,%c",&n,&c);}while(c<'A'||c>'Z'&&c<'a'||c>'z');for(i=1;i<=n;i++){for(j=1;j<=n+i-2;j++)if(j==n-i+1)printf("%c",c);elseprintf("");printf("%c\n",c++);c=c<'a'?(c>'Z'?'A':c):(c>'z'?'a':c);}c-=2;c=c<'Z'?(c<'A'?'Z':c):(c<'a'?'z':c);for(i=1;i<n;i++){for(j=1;j<=2*(n-1)-i;j++)if(j==i+1)printf("%c",c);elseprintf("");printf("%c\n",c--);c=c<'Z'?(c<'A'?'Z':c):(c<'a'?'z':c);}}【4.28】參考答案:#definemax(x,y)(

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論