專業(yè)課參考-語言程序設(shè)計c2012-d04new_第1頁
專業(yè)課參考-語言程序設(shè)計c2012-d04new_第2頁
專業(yè)課參考-語言程序設(shè)計c2012-d04new_第3頁
專業(yè)課參考-語言程序設(shè)計c2012-d04new_第4頁
專業(yè)課參考-語言程序設(shè)計c2012-d04new_第5頁
免費預(yù)覽已結(jié)束,剩余67頁可下載查看

付費下載

下載本文檔

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

文檔簡介

循環(huán):讓程序轉(zhuǎn)起來共50頁第2

頁運算符-自增自減運算運算符(單目←)

++

自增 14

–– 自減 14說明

++

和––

為單目運算,只能作用于變量

只能對int、char、long和指針變量進行運算功能

++x <==>x=x+

1

––x <==>x=x–

1 (前綴)

x++ <==>x=x+1 x––

<==>x=x–

1 (后綴)共50頁第3

頁運算符-自增自減運算自增(自減)有前綴和后綴之分。

前綴:先自增(自減)再引用后綴:先引用再自增(自減)前綴與后綴的區(qū)別:

y=++x;<==>x=x+1;

y=x;

x先加

1

再賦值

y=x++;<==>y=x;

x=x+1;

x先賦值再加

1共50頁第4

頁運算符-自增自減運算實例:intx=1;(1)

++x;x++;

因為在表達式中沒有其它運算,結(jié)果一樣。(2)

y=++x;

在賦值運算之前,x先加1,然后將

x賦給

y

結(jié)果:y=++x;<==>x=x+1;y=x;

x=2,y=2(3)y=x++;

先將x

賦值給y,然后x

再加

1

結(jié)果:y=x++;<==>y=x;x=x+1;

x=2,y=1共50頁第5

頁注意,以下操作是錯誤的:

x=++(

i+j

)+1;j=++

(

5+x

);y=++x*++x;運算符-自增自減運算實例邏輯上雖然正確,但在實際編程中容易產(chǎn)生誤解,應(yīng)當(dāng)避免共50頁第6

頁運算符-賦值與賦值組合運算運算符(雙目←)

賦值運算: =2 賦值組合運算:e1

op=e22

等于于:e1=e1

op(e2) 其中:op為下列10個運算符之一+–*/%<<>>|&∧

e1為可以進行賦值操作的變量

e2為合法的表達式共50頁第7

頁運算符-賦值與賦值組合運算運算符(雙目←)

賦值運算: =2 賦值組合運算:e1

op=e22

等于于:e1=e1

op(e2)例:x+=2; <==>x=x+2; x*=y+1; <==>x=x*(y+1);

不等價

x=x*y+1; x>>=2; <==>x=x>>2;第8

頁循環(huán)嵌套循環(huán)嵌套在循環(huán)體中,又包含有循環(huán)語句。

例C3_5107.C:輸出下三角形乘法九九表。123456789------------------------------------124369481216510152025

......字符方式下屏幕顯示的特點:

屏幕上的字符只能從上到下逐行顯示,同一行內(nèi),只能從左到右逐字顯示。第9

頁循環(huán)嵌套顯示要求

屏幕上的字符只能從上到下逐行顯示,同一行內(nèi),只能從左到右逐字顯示。程序架構(gòu)(偽語言描述) while(控制顯示n行) {

行數(shù)計數(shù)器i++; }while(控制顯示一行中的m個字符){輸出一個需要的字符;

列計數(shù)器j++;}第10

頁循環(huán)嵌套例C3_5107.C:輸出下三角形乘法九九表。123456789-------------------------------------12436948121651015202561218243036714212835424981624324048566491827364554637281i=6j=5i*j(1<=i<=9)(1<=j<=i)則:第i

行中共要輸出i

個數(shù)據(jù),每個數(shù)據(jù)為

i*j

。假設(shè):行號i,列號j第11

頁循環(huán)嵌套 #include<stdio.h>main(){inti=1,j;/*i:行計數(shù)器j:列計數(shù)器*/

while(i<=9)/*控制打印表頭*/

printf("%4d",i++);

printf("\n------------------------------------\n");

i=1;while(i<=9)

{

j=1;/*列計數(shù)器置1*/

while(j<=i)/*嵌套的二重循環(huán)。輸出第i行*/

{

printf("%4d",i*j

);

j++;/*列計數(shù)器+1*/}

printf("\n");/*一行輸出結(jié)束,輸出\n*/

i++;/*行計數(shù)器+1*/}}例C6_2107外層循環(huán)體執(zhí)行1次,內(nèi)層循環(huán)要完整執(zhí)行1次第12

頁循環(huán)嵌套例C6_3202.C:用for語句實現(xiàn)打印乘法九九表。#include<stdio.h>main(){inti,j; for(i=1;i<10;i++) printf("%4d",i);/*打印表頭*/

printf("\n-----------------------------------\n");

for(i=1;i<10;i++

)/*控制打印表體*/

for(j=1;

j<=i;

j++

)printf((j==i)?

"%4d\n"

:"%4d",i*j);}例C6_3202函數(shù)printf中使用“?”操作等價于:if(j==i)printf("%4d\n",i*j);

else printf("%4d",i*j);第13

頁for語句-實例例C6_3204.C: 草原上有一對小兔子,出生后的第1個月會長大,第2個月末生出一對小兔子。第3個月大兔子會繼續(xù)生一對小兔子,而第2個月出生的小兔子會長大。第4個月時,第1月出生的兔子會繼續(xù)生,第2月出生的小兔子也可以生一對小兔子了,第3月出生的小兔子則長大……

這些草原兔子非常長壽,請計算第N個月時將會有多少對兔子?第14

頁for語句-實例例C6_3204.C:數(shù)列1、1、2、3、5、8、13、21、…是著名的菲波那奇數(shù)列,其遞推通項公式為: U1=U2=1 Un=Un-1+Un-2 (n>=3)

為求出第N項的值,請編寫程序。

根據(jù)遞推通項公式,可用遞推法編寫程序,計算第N項的值。第15

頁for語句-實例遞推法 由初始的已知條件開始,先計算出第(N-1)步的結(jié)果,再利用已知的前(N-1)項結(jié)果,按遞推公式(或遵照遞推規(guī)則),推出第N

步結(jié)果。

遞推法是程序設(shè)計中最常用的方法之一,使用遞推法必須有明確的遞推初始值和遞推規(guī)則(遞推公式)。第16

頁for語句-實例程序main(){intn,i,un1,un2,un;

do

{printf("Inputn=?");scanf("%d",&n);

}while(n<3)/*輸入正確的N值*/

un=un2=1;/*設(shè)置遞推初始值*/

for(i=3;i<=n;i++)/*遞推*/

{

un1=un2;un2=un;un=un1+un2;

}printf("No.%dis%d\n",n,un);}例C6_3204第17

頁for語句-實例例C3_5204.C程序un=un2=1;for(i=3;i<=n;i++){

un1=un2;un2=un;un=un1+un2;}i<=n?向前傳遞前兩項nu1=un2un2=un成立不成立初始化:un=un2=1計算un=un1+un2遞推項:i=3i++數(shù)列對應(yīng)關(guān)系:

un1,nu2,un遞推計算第18

頁for語句-實例語句中的逗號(,)運算

逗號(,)運算常見的三種用途是:1.在變量說明表中用來分隔變量,起分隔符的作用。如:inti,

j,k,

m[3],*p;2.在函數(shù)的參數(shù)表中分隔參數(shù)。如:printf("n=%d,x=%d\n",n,x);3.在語句中使用。其形式是:表達式n1,表達式n2;用逗號分隔開的表達式從左到右進行計算,結(jié)果的類型和值是最右邊表達式的類型和值。第19

頁for語句-實例例C6_3205.C:用逗號運算輸出下列字符串。azbycxdwevfugthsirjqkplomn

分析:奇數(shù)位上的字符從'a'開始逐次遞增,偶數(shù)位上的字符從'z'開始逐次遞減。 #include<stdio.h>main(){chari,j; /*i:奇位字符

j:偶位字符

*//*i從’a’開始逐次遞增,j從’z’開始逐次遞減*/

for(i='a',j='z';i<j;i++,

j--) printf(”%c%c”,i,j);/*輸出兩個字符*/

printf("\n");}例C6_3205共50頁第20

頁字符型數(shù)據(jù)字符型的類型說明符:char

字符型常量:用單引號括起來的單個字符。

’A’

’g’

’#’

’0’

’2’

’+’

’;’

’(’

字符定界符:單引號

轉(zhuǎn)義符:\改變后續(xù)字符的原義?!痋n’

’\t’

’\’’

’\"’字符型變量的輸入charch;

scanf("%c",&ch);/*輸入1個字符

*/字符型變量的輸出

printf("%c",ch);/*輸出1個字符

*/共50頁第21

頁§3-2常數(shù)與常數(shù)定義-字符常數(shù)字符型常量:用單引號括起來的單個字符實例:’A’

’g’

’#’

’0’

’2’

’+’

’,’

’;’

’(’

’)’字符定界符:單引號’字符型數(shù)據(jù)的存儲格式:ASCII碼(見書附錄)65103354850如何表示不可顯示字符?回車/退格/TAB?如何表示定界符?’’’

產(chǎn)生歧異轉(zhuǎn)義符\:將\后面的字符轉(zhuǎn)換為其它含義共50頁第22

頁常數(shù)與常數(shù)定義-轉(zhuǎn)義符常數(shù)字符形式功能使用舉例

\0字符串結(jié)束標(biāo)志

\n換行(ASCII碼為10) printf("\n");

\t橫向跳格 printf("\t");

\b退格

\r回車(ASCII碼為13)

\f走紙換頁

\\字符\(ASCII碼為92)’\\’

表示字符

\

\’

單引號

’\’’表示字符’

\"雙引號 ’\"’表示字符"

\ddd用8進制表示字符 ’a’=’\141’

’A’=’\101’

換行符’\12’

\xhh用16進制表示字符’a’=’\x61’

’A’=’\x41’

換行符’\xa’共19頁第23

頁字符輸入/輸出字符輸入:ch=getchar()

從鍵盤讀入一個字符,存入變量ch

中。字符輸出:putchar(ch)

向顯示器上輸出變量ch。例:#include"stdio.h" main() {charc; c=getchar();

putchar(c);/*輸出字符*/

}共19頁第24

頁字符輸入函數(shù)getchar#include"stdio.h"main(){charch;ch=getchar();

putchar(ch);}接受一個字符=>ch輸出字符ch開始結(jié)束運行程序,如果從鍵盤輸入: a[ENTER] 則輸出為: a 如果從鍵盤輸入: abc[ENTER] 則輸出也為: a共19頁第25

頁數(shù)據(jù)的輸入與輸出例C2_7301.C:將從鍵盤輸入的一行字符復(fù)制(輸出)到顯示器。#include"stdio.h"intmain(){charch;ch=getchar();

while(ch!=’\n’)

{

putchar(ch); /*輸出該字符*/

ch=getchar();/*取下一輸入字符*/

}return0;}例C2_7301共19頁第26

頁數(shù)據(jù)的輸入與輸出#include"stdio.h"main(){charch;ch=getchar();

while(ch!=’\n’)

{

putchar(ch);

ch=getchar();

}

}接受一個字符=>ch輸出字符ch開始結(jié)束ch不是\n嗎?接受一個字符=>ch成立不成立程序功能:

逐個接受從鍵盤上輸入的一行字符,并顯示在屏幕上。第27

頁while語句-實例例C6_2103.C:從鍵盤中讀入一系列字符,直到讀入字母a時才停止。ch!=’a’?顯示ch成立不成立ch=讀入一個字符ch=讀入下一個字符開始結(jié)束while(ch!=’a’){}ch=getchar();putchar(ch);ch=getchar();分析:由于不知道要讀入的字符數(shù)量,只知停止條件是讀入字母a,則只能將循環(huán)控制條件設(shè)為

。程序主體ch!=’a’第28

頁while語句-實例#include<stdio.h>main(){charch;ch=getchar();while(

ch!='a')

{

putchar(ch); ch=getchar();

}}ch!=’a’?顯示ch成立不成立ch=讀入一個字符ch=讀入下一個字符開始結(jié)束用do-while語句如何實現(xiàn)?第29

頁while語句-實例例C6_2104.C:對輸入的行和字符進行計數(shù)。

分析:\n作為行結(jié)束標(biāo)記的,DOS中有[CTRL+Z]作為文件結(jié)束標(biāo)記 #defineEOF-1

#include<stdio.h>main(){ intc,nl=0,nc=0;

while((c=getchar())!=EOF) {

++nc;

if(c=='\n'

) ++nl; }

printf("chars=%d,lines=%d\n",nc,nl);}

定義文件結(jié)束標(biāo)記

nl行計數(shù)器,nc字符計數(shù)器

進行字符計數(shù)

如果找到\n,則行計數(shù)第30

頁§6.2while語句-實例nl=0,nc=0;while((c=getchar())!=EOF){

++nc;

if(c=='\n'

)

{ ++nl;

}}例C6_2104c!=EOF?字符計數(shù)nc=nc+1成立不成立c=讀入一個字符行計數(shù)

nl=nl+1c==’\n’?成立不成立第31

頁for語句-實例語句中的逗號(,)運算

逗號(,)運算常見的三種用途是:1.在變量說明表中用來分隔變量,起分隔符的作用。如:inti,

j,k,

m[3],*p;2.在函數(shù)的參數(shù)表中分隔參數(shù)。如:printf("n=%d,x=%d\n",n,x);3.在語句中使用。其形式是:表達式n1,表達式n2;用逗號分隔開的表達式從左到右進行計算,結(jié)果的類型和值是最右邊表達式的類型和值。第32

頁for語句-實例例C6_3205.C:用逗號運算輸出下列字符串。azbycxdwevfugthsirjqkplomn

分析:奇數(shù)位上的字符從'a'開始逐次遞增,偶數(shù)位上的字符從'z'開始逐次遞減 #include<stdio.h>main(){chari,j; /*i:奇位字符

j:偶位字符

*//*i從’a’開始逐次遞增,j從’z’開始逐次遞減*/

for(i='a',j='z';i<j;i++,

j--) printf(”%c%c”,i,j);/*輸出兩個字符*/

printf("\n");}例C6_3205第33

頁do-while語句-實例例C6_4301.C:輸入一個>=0

的整數(shù),要求以相反的順序輸出該數(shù)。例如:輸入12345,則輸出為54321。

基本思路:可以從個位開始,按位輸出整數(shù)的每一位

main(){unsignedintnumber;printf("Inputthenumber:");scanf("%d",&number); do{printf("%d",number%10);

number/=10;/*number縮小10倍*/ }while(number!=0);}例C6_4301思考:使用while或for語句,如何實現(xiàn)?例C6_43011兩個程序有何區(qū)別?前面的程序可以處理數(shù)字0,后面的程序不能處理第34

頁do-while語句-實例例C6_4302.C從鍵盤輸入任意的字符,按下列規(guī)則進行分類計數(shù)。第一類’0’,’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’第二類

’+’,’-’,’*’,’/’,’%’,’=’第三類其它字符當(dāng)輸入字符’\’

時先計數(shù)然后停止接收輸入。第35

頁do-while語句-實例

main(){intclass1=0,class2=0,class3=0;charch; do{

putchar(ch=getch());/*函數(shù)的嵌套調(diào)用*/

switch

(ch)

{case

’0’:case

’1’:case

’2’:case

’3’:

case

’4’:case’5’:case

’6’:case’7’:

case

’8’:case

’9’:class1++;break;/*對分類1計數(shù)*/

case

’+’:case’-’:case

’*’:case

’/’:

case’%’:case

’=’:class2++;break;/*對分類2計數(shù)*/

default:class3++;break;/*對分類3計數(shù)*/

}}while(ch!=’\\’);

printf("class1=%d,class2=%d,class3=%d\n",class1,class2,class3);}例C6_4302第36

頁循環(huán)語句小結(jié)C語言提供三種循環(huán):for、while、do-while:

1、for和while先判斷循環(huán)條件后執(zhí)行循環(huán)體,do-while語句先執(zhí)行循環(huán)體后判斷循環(huán)條件。 2、while和do-while語句的條件表達式只有1個;for語句有3個表達式,表達式2是條件表達式。 3、while、do-while、for可以相互替換使用。 4、while語句多用于不需要賦初值的或循環(huán)次數(shù)不定的情況。

for語句多用于要賦初值或循環(huán)次數(shù)固定的情況。

do-while語句多用于至少要運行一次的循環(huán)。 5、循環(huán)語句可以嵌套,可以并列,但不能交叉。第37

頁循環(huán)語句小結(jié)為了保證循環(huán)體正常運行,應(yīng)該特別注意:循環(huán)控制條件控制條件的初始狀態(tài)(初始值)循環(huán)體內(nèi)部對控制條件的影響以上三個方面相互配合,相互影響,共同完成循環(huán)控制逐步求精:羅馬不是一天建成的第39

頁典型非數(shù)值(圖型)問題-例1例1:在一行中輸出m個*號。

要求:從鍵盤輸入m值,輸出一行m個*號。 例:輸入m=4,輸出的圖形如下:****基本語句: 輸出一個*號:printf("*"); 或putchar(’*’);基本算法:

1.輸入m 2.重復(fù)m次:輸出一個*;

3.輸出一個\nscanf("%d",&m);while(m>0){printf("*");m--;}printf(”\n”);第40

頁典型非數(shù)值(圖型)問題-例1#include<stdio.h>intmain(){intm;scanf("%d",&m);while(m>0)

{printf("*");m--;

}printf("\n");return0;}#include<stdio.h>voidmain(){intm;scanf("%d",&m);for(;m>0;m--)

{printf("*");

}printf("\n");return;}C語言中的一行都是以\n

為標(biāo)志例C3_1第41

頁典型非數(shù)值(圖型)問題-例2例2:輸出邊長為m的正方型

要求:從鍵盤輸入m值,輸出m行每行m個*號。 例:輸入m=4,輸出的圖形如下:****************算法分析與設(shè)計:

1.輸入m, 2.輸出m行,每行輸出m個*; 加細1:

1.輸入m; 2.for(k=1;k<=m;k++)

輸出一行:m

個*;第42

頁典型非數(shù)值(圖型)問題-例2 加細2:

1. 輸入m; 2. for(k=1;k<=m;k++) { 輸出

m個*;

換新行; } 加細3:

1. 輸入m; 2. for(k=1;k<=m;k++) { for(j=1;j<=m;j++) printf("*");

printf("\n");

}第43

頁典型非數(shù)值(圖型)問題-例2整理,得到程序如下:

#include<stdio.h>voidmain(){ intk,m,j; scanf(”%d”,&m);

for(k=1;k<=m;k++) /*控制輸出m行*/

{

for(j=1;j<=m;j++)/*輸出一行中的m個*號*/

printf(”*”);

printf(”\n”);

}}分析方法——逐步求精法

對于比較復(fù)雜問題,不可能一步得到程序,可以先將簡單的部分明確出來,再逐步對復(fù)雜部分進行細化,逐步推出完整程序。例C3_2第44

頁典型非數(shù)值(圖型)問題-例3例3:輸出邊長為m的平行四邊形 例:輸入m=4,輸出的圖形如下:****************算法分析與設(shè)計

在正方型每行*號的前面先輸出若干個空格。

對于第k行,1<=k<=m,則先輸出

個空格。

▋▋▋

▋▋

▋m-k第45

頁典型非數(shù)值(圖型)問題-例2輸出正方型程序

#include<stdio.h>intmain(){ intk,m,j; scanf(”%d”,&m);

for(k=1;k<=m;k++) /*控制輸出m行*/

{

for(j=1;j<=m;j++)/*輸出一行中的m個*號*/

printf(”*”);

printf(”\n”);

}

return0;}for(i=1;i<=m-k;i++)printf(””);inti;第46

頁典型非數(shù)值(圖型)問題-例2輸出平行四邊形程序

#include<stdio.h>intmain(){ intk,m,j,i; scanf(”%d”,&m);

for(k=1;k<=m;k++) /*控制輸出m行*/

{

for(i=1;i<=m-k;i++)/*控制輸出m-k個空格*/printf(”

”);

for(j=1;j<=m;j++)/*輸出一行中的m個*號*/

printf(”*”);

printf(”\n”);

}

return0;}控制輸出行內(nèi)格式第47

頁典型非數(shù)值(圖型)問題-例3例3:從鍵盤輸入h值,輸出h行用*號組成等腰三角形。例:輸入h=4,輸出的圖形如下:****************1

*2

***3

*****4*******要輸出

個空格

*分析:1、按行輸出。輸出h行。2、程序的關(guān)鍵是:找出每一行中要輸出空格的數(shù)量和*的數(shù)量3、對于圖形中的第k

行(1<=k<=h):h-k2k-1第48

頁典型非數(shù)值(圖型)問題-例3分析: 要輸出h-k

個空格

和2k-1個*算法設(shè)計1.輸入h;2.輸出h行;對第

k行,每行輸出h-k

個空格和2k-1個*

對第2步進行加細:2.0

for(k=1;k<=h;k++)

{輸出h-k

個空格;

輸出2k-1個*;換行;}第49

頁典型非數(shù)值(圖型)問題-例3程序:#include<stdio.h>voidmain(){inth,k,j;scanf("%d",&h);

for(k=1;k<=h;k++)/*控制打印h行*/

{

for(j=1;j<=h-k;j++)/*打印空格*/

printf("

");

for(j=1;j<=2*k-1;j++)/*打印*號*/

printf("*");

printf("\n");

}}例C3_7302怎樣輸出一個等腰梯型?第50

頁典型非數(shù)值(圖型)問題-例3****************h=4換一個思路分析:對于第k行(1<=k<=h):需要輸出

個字符(空格或*號)對第k

行的第j

個字符:

輸出空格

其它情況

輸出*h+k-1j<=h-k第51

頁典型非數(shù)值(圖型)問題-例3換一個思路分析:對于第k行(1<=k<=h):需要輸出h+k-1

個字符(空格或*號)對第k行的第j個字符,若

j<=h-k輸出空格

其它情況

輸出*算法設(shè)計

for(k=1;k<=h;k++)/*輸出h行*/

{

for(j=1;j<=h+k-1;j++)/*行內(nèi)字符*/if(j<=h-k)打印空格;

else打印

*

號;換行;

}第52

頁典型非數(shù)值(圖型)問題-例3程序:#include<stdio.h>voidmain(){inth,k,j;scanf("%d",&h);

for(k=1;k<=h;k++)/*輸出h行*/

{

for(j=1;j<=h+k-1;j++

)/*輸出行內(nèi)字符*/

if(

j

<=

h-k

)printf("");

else

printf("*");

printf("\n");

}}例C3_73021第53

頁典型非數(shù)值(圖型)問題-例4例4:從鍵盤輸入h

值,輸出用*號組成的菱形。例:輸入h=4

,輸出的圖形如下:* *** ***** ******* ***** *** *分析:1.h為上三角形的高度,總行數(shù)為

2.對于第j行,若要輸出m個空格和n個*號。3.當(dāng)j<=h時,為上三角,則:m=,n=4.當(dāng)時,為下三角,則:

m=

n=1234567空格數(shù)量3*號數(shù)量1 23 15 07 15 23 31

2h-1

h-j

2j-1

h<j<=2h-1

j-h總寬度-空格=2h-1-2(j-h)=4h-1-2j第54

頁典型非數(shù)值(圖型)問題-例4算法設(shè)計for(j=1;j<=2*h-1;j++)

控制打印行{若為上三角

j<=h

則:m

=h-j;

n=2j-1

否則:m

=j-h;n=4h-1-2j

輸出m

空格;輸出

n個*;換行;}加細循環(huán)體{if(j<=h){m=h-j;n=2*j-1;}

else

{m=j-h;n=4*h-1-2*j;} for(k=1;k<=m;k++)printf(""); for(k=1;k<=n;k++)printf("*"); printf("\n");}第55

頁典型非數(shù)值(圖型)問題-例4程序:#include<stdio.h>voidmain(){inth,k,j,m,n;scanf("%d",&h);

for(j=1;j<=2*h-1;j++)/*

輸出行數(shù)控制*/

{

if(j<=h){m=h-j;n=2*j-1;}

else

{m=j-h;n=4*h-1-2*j;} for(k=1;k<=m;k++)/*

輸出空格

*/

printf("");

for(k=1;k<=n;k++)/*輸出*

*/

printf("*"); printf("\n");

}}例C3_7303第56

頁典型非數(shù)值(圖型)問題-例4程序2:#include<stdio.h>voidmain(){inth,k,j,m,n;scanf("%d",&h);

for(j=1;j<=2*h-1;j++)/*

控制總行數(shù)*/

{

if(j<=h){m=h-j;n=2*j-1;}

else

{m=j-h;n=4*h-1-2*j;}

for(k=1;k<=m+n;k++)/*

輸出一行*/

if(k<=m)printf("");/*

輸出空格*/ elseprintf("*");/*輸出

*

*/

printf("\n");

}}例C3_73031第57

頁典型非數(shù)值(圖型)問題-例4例4:從鍵盤輸入h

值,輸出用*號組成的菱形。例:輸入h=4

,輸出的圖形如下:* *** ***** ******* ***** *** *分析1.h為上三角形的高度,行范圍。

2.對于第j行,若要輸出m

個空格和n個*號。3.則:m

=

,

n=-3-2-10123空格數(shù)量3*號數(shù)量1 23 15 07 15 23 31

-(h-1)~h-1

|j|

2(h-m)-1第58

頁典型非數(shù)值(圖型)問題-例4程序3:#include<stdio.h>voidmain(){inth,k,j,m,n;scanf("%d",&h);

for(j=-h+1;j<=h-1;j++)/*

行數(shù)控制*/

{

m=j<0?–j:j;

n=2*(h-m)-1;

for(k=1;k<=m+n;k++)/*

行內(nèi)格式*/

if(k<=m)printf(”

”);/*

空格*/ elseprintf(”*”);/*輸出**/

printf("\n");

}}例C3_73032第59

頁例5:打印數(shù)字魔方。要求:從鍵盤輸入m,輸出m行的數(shù)字方陣。例:輸入m=5

,輸出的圖形如下:

12345 23451 34512 45123 51234

分析:

1.輸出m

行。

典型非數(shù)值(圖型)問題-例52.第j行的第一個數(shù)字為j,之后依次遞增,但以m為模:

aij=(i

+j-2)%m+1輸出項aij與行i、列j的關(guān)系第60

頁典型非數(shù)值(圖型)問題-例5程序:#include<stdio.h>voidmain(){inti,j,m;printf("EnterM:");scanf("%d",&m);

for(i=1;i<=m;i++)/*控制輸出m

行*/

{

for(j=1;j<=m;j++)/*輸出行中的數(shù)字*/

printf("%d",(i+j-2)%m+1);printf("\n");

}}例C3_7304第61

頁例6:打印回形方陣

要求:從鍵盤輸入邊長m,輸出回形方陣。例:輸入m=5

,m=6,輸出的圖形如下:11111

1111111

222

1

1

2222

11232

1

12332

11222

1

m=5

1

23321

m=611111

12222

1

111111

分析:關(guān)鍵是找出aij與行i和列j的關(guān)系典型非數(shù)值(圖型)問題-例6第62

頁將圖形分為四個區(qū):111

11111

111122

21

122

221123

21

123

32112221

m=5

123

321

m=6111

11

122221

111

111

典型非數(shù)值(圖型)問題-例61.i<=(m+1)/2j<=(m+1)/2min(i,j)2.i<=(m+1)/2j>(m+1)/2min(i,m-j+1)3.i>(m+1)/2j<=(m+1)/2

min(m-i+1,j)4.i>(m+1)/2j>(m+1)/2min(m-i+1,m-j+1)第63

頁#definemin(x,y)((x)<(y)?(x):(y))voidmain(){intk,j,m;printf("EnterM:");scanf("%d",&m);

for

(k=1;k<=m;k++)/*控制打印m行*/

{

for(j=1;j<=m;j++)/*控制打印行中的數(shù)字*/

if

(k<=(m+1)/2)

if(j<=(m+1)/2)printf("%d",min(k,j));

else

printf("%d",min(k,m-j+1));

else

if(j<=(m+1)/2)printf("%d",min(m-k+1,j));

else

printf("%d",min(m-k+1,m-j+1)); printf("\n");

}}典型非數(shù)值(圖型)問題-例6例C3_7305第64

頁例7:打印數(shù)字三角形。輸入高m,輸出如下圖形:

m=6 136101521 2591420 481319 71218 1117 16

典型非數(shù)值(圖型)問題-例7分析:1.第i

行打印個數(shù)字;m-i+1

2.若:a1,1=1則:ai+1,1=(i>=1)

例:a21=a11+1=1+1=2, a61=a51+5=11+5=163.若:已知ai,1,則:ai,j+1=

ai,1+i例:a22=a21+2+1=2+2+1=5,a23=a22+2+2=5+2+2=9 a62=a61+6+1=16+6+1=23,a63=a62+6+2=23+6+2=31ai,j+i+j123456123456

遞推公式a1,1=1當(dāng):i,j>=1時

ai+1,1=ai,1+i

ai,j+1=ai,j+i+j第65

頁遞推公式:

a1,1=1 ai+1,1=ai,1+i(i,j>=1)

ai,j+1=ai,j+i+j程序voidmain(){inti,j,m,n,k=1;/*

k

是第一列元素的值*/

scanf("%d",&m);

for(i=1;i<=m;i++)

{

n=k;/*

i行中第1個元素的值*/

for(j=1;j<=m-i+1;j++)/*輸出行中的數(shù)字*/

{

printf("%3d",n);

n=n+i+j;/*計算同行下一個元素的值*/

}

printf("\n");

k=k+i;/*計算下一行中第1個元素*/

}}典型非數(shù)值(圖型)問題-例7例C3_7306第66

頁例8:打印0-360度的sin(x)曲線---------------------------------------*-------------------------------------|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*|*

*

*|

*|

*|

*|

*|

*|

*|

*|

*|

*|

*|

*|

*|

*|

*|

*

|

*|

*典型非數(shù)值(圖型)問題-例8程序的關(guān)鍵在于:設(shè)計圖形第67

頁算法分析:1、坐標(biāo)的x軸沿列自頂向下,y軸自左向右增加2、屏幕每行為80列,y軸以第40列為0點3、sin(x)的值在-1~1之間,圖形中對應(yīng)以40列為中心的10~70列4、將角度0~360度以10度為一個步長等分,只考察37個點sin(x)函數(shù)對應(yīng)點的位置,即圖形總共打印37行算法設(shè)計:設(shè)定義i、j分別控制行和列1、則行對應(yīng)的角度為:i*10/180*PAI2、每行打印四種字符:空格、|、*、\n3、行對應(yīng)的sin值的位置,及*的位置為:40+30*sin(i*10/180*PAI)|在40列

\n要視*、|的位置決定(取“最遠”的值)典型非數(shù)值(圖型)問題-例8第68

頁典型非數(shù)值(圖型)問題-例8#definePAI3.14159voidmain(){doublex;inty,i,yy;

for(i=1;i<80;i++)/*打印圖形的第一行*/

if(i==40)printf("*");

elseprintf("-");

printf("\n");

for(x=10.0;x<=360.0;x+=10.)

/*從10度到360度*/

{

y=40+

溫馨提示

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

最新文檔

評論

0/150

提交評論