查看全部128種考試
1
2
3
4
5
6
7
8
9
10
ak47  
【字體: 經(jīng)典的C程序案例
經(jīng)典的C程序案例
djks.exam8.com 來源:考試吧(Exam8.com) 更新:2004-8-16 22:43:00 計算機等級考試 考試論壇

1.繪制余弦曲線

在屏幕上用“*”顯示0~360度的余弦函數(shù)cos(x)曲線

*問題分析與算法設(shè)計

如果在程序中使用數(shù)組,這個問題十分簡單。但若規(guī)定不能使用數(shù)組,問題就變得不容易了。

關(guān)鍵在于余弦曲線在0~360度的區(qū)間內(nèi),一行中要顯示兩個點,而對一般的顯示器來說,只能按行輸出,即:輸出第一行信息后,只能向下一行輸出,不能再返回到上一行。為了獲得本文要求的圖形就必須在一行中一次輸出兩個“*”。

為了同時得到余弦函數(shù)cos(x)圖形在一行上的兩個點,考慮利用cos(x)的左右對稱性。將屏幕的行方向定義為x,列方向定義為y,則0~180度的圖形與180~360度的圖形是左右對稱的,若定義圖形的總寬度為62列,計算出x行0~180度時y點的坐標(biāo)m,那么在同一行與之對稱的180~360度的y點的坐標(biāo)就 應(yīng)為62-m。程序中利用反余弦函數(shù)acos計算坐標(biāo)(x,y)的對應(yīng)關(guān)系。

使用這種方法編出的程序短小精煉,體現(xiàn)了一定的技巧。

*程序說明與注釋

#include

#include

void main()

{

double y;

int x,m;

for(y=1;y>=-1;y-=0.1) /*y為列方向,值從1到-1,步長為0.1*/

{

m=acos(y)*10; /*計算出y對應(yīng)的弧度m,乘以10為圖形放大倍數(shù)*/

for(x=1;x for(;x<62-m;x++)printf(" ");

printf("*\n"); /*控制打印同一行中對稱的右側(cè)*號*/

}

}

2.繪制余弦曲線和直線

在屏幕上顯示0~360度的cos(x)曲線與直線f(x)=45*(y-1)+31的迭加圖形。其中cos(x)圖形用“*”表示,f(x)用“+”表示,在兩個圖形相交的點上則用f(x)圖形的符號。

*問題分析與算法設(shè)計

本題可以在上題的基礎(chǔ)上進行修改。圖形迭加的關(guān)鍵是要在分別計算出同一行中兩個圖形的列方向點坐標(biāo)后,正確判斷相互的位置關(guān)系。為此,可以先判斷圖形的交點,再分別控制打印兩個不同的圖形。

*程序注釋與說明

#include

#include

void main()

{

double y;

int x,m,n,yy;

for(yy=0;yy<=20;yy++) /*對于第一個y坐標(biāo)進行計算并在一行中打印圖形*/

{

y=0.1*yy; /*y:屏幕行方向坐標(biāo)*/

m=acos(1-y)*10; /*m: cos(x)曲線上y點對應(yīng)的屏幕列坐標(biāo)*/

n=45*(y-1)+31; /*n: 直線上y點對應(yīng)的列坐標(biāo)*/

for(x=0;x<=62;x++) /*x: 屏幕列方向坐標(biāo)*/

if(x==m&&x==n) printf("+"); /*直線與cos(x)相交時打印“+”*/

else if(x==n) printf("+"); /*打印不相交時的直線圖形*/

else if(x==m||x==62-m) printf("*"); /*打印不相交時的cos(x)圖形*/

else printf(" "); /*其它情況打印空格*/

printf("\n");

}

}

3.繪制圓

在屏幕上用“*”畫一個空心的圓

*問題分析與算法設(shè)計

打印圓可利用圖形的左右對稱性。根據(jù)圓的方程:

R*R=X*X+Y*Y

可以算出圓上每一點行和列的對應(yīng)關(guān)系。

*程序說明與注釋

#include

#include

void main()

{

double y;

int x,m;

for(y=10;y>=-10;y--)

{

m=2.5*sqrt(100-y*y); /*計算行y對應(yīng)的列坐標(biāo)m,2.5是屏幕縱橫比調(diào)節(jié)系數(shù)因為屏幕的

行距大于列距,不進行調(diào)節(jié)顯示出來的將是橢圓*/

for(x=1;x<30-m;x++) printf(" "); /*圖形左側(cè)空白控制*/

printf("*"); /*圓的左側(cè)*/

for(;x<30+m;x++) printf(" "); /*圖形的空心部分控制*/

printf("*\n"); /*圓的右側(cè)*/

}

}

[1] [2] [3] 下一頁

轉(zhuǎn)帖于:計算機等級考試_考試吧
文章搜索  
看了本文的網(wǎng)友還看了:
網(wǎng)友評論
昵 稱: *  評 分: 1分 2分 3分 4分 5分
標(biāo)題:   匿名發(fā)表    (共有條評論)查看全部評論>>
版權(quán)聲明 -------------------------------------------------------------------------------------
  如果計算機等級考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請與我們聯(lián)系,我們將會及時處理。如轉(zhuǎn)載本計算機等級考試網(wǎng)內(nèi)容,請注明出處。
關(guān)于本站  網(wǎng)站聲明  廣告服務(wù)  聯(lián)系方式  付款方式  站內(nèi)導(dǎo)航  客服中心  友情鏈接  考試論壇  網(wǎng)站地圖
Copyright © 2004-2008 考試吧計算機等級考試網(wǎng) All Rights Reserved    
中國科學(xué)院研究生院權(quán)威支持(北京) 電 話:010-62168566 傳 真:010-62192699
百度大聯(lián)盟黃金認(rèn)證  十佳網(wǎng)絡(luò)教育機構(gòu)  經(jīng)營許可證號:京ICP060677