C語言程序設計教程(第二版)c第4章_第1頁
C語言程序設計教程(第二版)c第4章_第2頁
C語言程序設計教程(第二版)c第4章_第3頁
C語言程序設計教程(第二版)c第4章_第4頁
C語言程序設計教程(第二版)c第4章_第5頁
已閱讀5頁,還剩42頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

《C語言程序設計教程》

(第二版)Lizq98@李志球、劉昊編著第4章

循環結構程序設計

了解循環概念及“當型”和“直到型”循環結構概念◆

掌握while循環結構的執行過程和使用方法◆

掌握dowhile循環結構執行過程和的使用方法◆

熟練掌握for循環結構執行過程、使用方法及規定◆

掌握循環嵌套的概念和嵌套的應用◆

掌握break和continue語句的使用方法◆

熟練使用循環結構程序設計方法并解決實際問題《C語言程序設計教程》(第二版)Lizq98@第4章

循環結構程序設計

目錄

4.1while循環結構

4.2do-while循環結構

4.3for循環結構

4.4循環的嵌套

4.5break語句和continue語句

4.6程序舉例

小結

《C語言程序設計教程》(第二版)Lizq98@第4章

循環結構程序設計【例4.1】寫出計算s=1+2+3+...+99+100的算法。將整個算術表達式直接寫進程序中,但C表達式不能寫成“s=1+2+3+...+99+100;”,因為C語言不認識其中的省略號“...”。

s1=1s2=s1+2s3=s2+3...s100=s99+100

s=0;s=s+1;s=s+2;...s=s+100;《C語言程序設計教程》(第二版)Lizq98@第4章

循環結構程序設計【例4.1】寫出計算s=1+2+3+...+99+100的算法。101個語句中有100個語句形式相同,它們可用下面的式子表示:s=s+i;(i=1,2,3,...,100)

將該語句重復執行100次,就是循環的思路。算法中變量i和s的初值沒有確定,而且i也不能自動從1開始每次增加1逐步變化到100。所以,最后確定算法如下:(1)定義兩個實型變量i=1、s=0(2)重復(循環)執行下列賦值語句:{s=s+i;i=i+1;}(3)當i值超過100(i>100或i>=101),控制循環結束;當i值小于等于100轉向第2步。(4)輸出s的值。《C語言程序設計教程》(第二版)Lizq98@4.1while循環結構

1.while循環語句格式

while(表達式)語句塊2.執行過程

循環開始后,先計算表達式,當條件表達式為非0(真)時,執行循環體;當條件為0(假)時,循環結束,執行while循環的后續語句。while循環語句的流程如圖所示。

3.說明

語句塊稱為循環體,它可以是單個語句或復合語句,也可以一個空語句。為了提高程序的可讀性,通常將循環體用花括號“{}”括起來,即使是一條語句也用花括號,后面將要介紹的幾個循環語句也如此。

循環結構有“當型”和“直到型”兩種,while循環是一種“當型”循環(先判斷,后循環),也就是說先判斷條件滿足與否,決定是否繼續循環,如果一開始條件就不成立,則循環一次也不被執行。

《C語言程序設計教程》(第二版)Lizq98@4.1while循環結構

【例4.2】編程求s=1+2+3+...+99+100。

程序流程圖和N-S流程圖如圖所示。《C語言程序設計教程》(第二版)Lizq98@4.1while循環結構

程序如下:

main()

{

inti=1,sum=0;

while(i<=100)

{

sum=sum+i;

i=i+1;

}

printf("1+2+...+99+100=%d",sum);

}

程序運行結果如下:1+2+...+99+100=5050

【例4.2】編程求s=1+2+3+...+99+100。

注意:

交換sum=sum+i;i=i+1;兩個語句的先后順序,循環條件也要變化,應改為i<=99(或i<100),賦值語句i=1也不正確,編程者一定要進行正確分析。

《C語言程序設計教程》(第二版)Lizq98@4.1while循環結構

程序如下:

#include<stdio.h>

main()

{intc=0;

while(c<=255)

{

if(c%32==0)printf("\nASCII=%d",c);

printf("%c",c++);

}

}

【例4.3】輸出255個ASCII代碼所對應的字符。

說明:

(1)“printf("%c",c++);”語句中“%c”前最好留一空格,輸出時可以分隔ASCII字符,便于用戶閱讀。

(2)運行結果中前32個為ASCII控制字符,其中有些字符屏幕不可顯示。

(3)雖然程序設計成每輸出32個字符才換行,但第一行卻分成兩行輸出,原因是第一行中包含了一個ASCII編碼為10的換行符,因此分成了兩行輸出。

(4)循環控制變量c如果定義成char或unsignedchar類型,那么程序將是一個無限循環(死循環)。

程序運行《C語言程序設計教程》(第二版)Lizq98@4.1while循環結構

程序如下:

#include<stdio.h>

intmain(void){charc;

printf("輸入正文,按Ctrl-Z結束輸入:\n");while((c=getchar())!=EOF)putchar(c);

}

【例4.4】將從鍵盤上輸入的正文原樣在屏幕上顯示輸出。

從鍵盤上輸入字符使用getchar()函數,它不能輸入中文等ASCII編碼表不能表示的字符。正文輸入結束標志用組合鍵“Ctrl-Z”(“EOF”)表示。程序運行結果如下:輸入正文文本,按“Ctrl-Z”結束輸入:Iamastudent!<CR>Iamastudent!Hello,boy!<CR>Hello,boy!^z

程序說明:

(1)循環條件是一個集字符輸入、字符賦值及字符比較的復雜表達式。循環運行時,首先從鍵盤上輸入字符,然后將輸入字符賦給變量c,接著判斷變量c的值是否等于“EOF",如果不是,則繼續執行循環體。

(2)鍵入回車鍵并不結束程序,而是將前面輸入的正文內容顯示在屏幕上,只有輸入“Ctrl-Z”時循環才能中止,程序正常結束。

《C語言程序設計教程》(第二版)Lizq98@4.2dowhile循環結構

1.dowhile格式do{

語句塊;}while(表達式);2.執行過程循環開始后,先執行一次循環體(語句塊)。然后計算表達式,當條件表達式為非0(真)時,繼續執行循環體;當條件為0(假)時,循環結束。dowhile循環語句的流程圖如圖4.3所示。3.注意書寫或輸入程序時不要忘了while子句后邊的分號“;”。dowhile是“直到型”循環(先循環,后判斷)

《C語言程序設計教程》(第二版)Lizq98@4.2dowhile循環結構

將例4.2中“sum=sum+i;i=i+1;”兩語句交換順序并調整循環條件表達式、變量i、s賦初值語句。

程序如下:main(){inti=0,sum=0;do{i++;sum=sum+i;}while(i<100);

printf(“%d”,sum);}

【例4.5】用dowhile語句改寫例4.2。求s=1+2+3+...+99+100

請讀者分析變量i、s賦初值還有哪幾種形式?

《C語言程序設計教程》(第二版)Lizq98@4.2dowhile循環結構

所謂容錯,就是程序在運行時允許用戶輸入的數據非法或數據類型不匹配。

1)算法分析

用一個循環方法處理按鍵輸入,只有當用戶輸入字符為“y”、“Y”、“n”或“N”時循環才結束。

本程序要求很簡單,編寫實際應用程序時,當用戶輸入“Y”或“N”時,應該能分別執行不同的功能模塊(例如調用不同的函數)。

【例4.6】編一個容錯處理程序段,當用戶輸入的是字母“Y”和“N”兩個鍵時,系統接收數據,繼續執行后續程序;如果輸入的是其它字符時,系統要求用戶重新輸入,直到正確為止。《C語言程序設計教程》(第二版)Lizq98@4.2dowhile循環結構

【例4.6】編一個容錯處理程序段。

2)編程#include<stdio.h>main(){charc;do{

printf("請按確認鍵Y或取消鍵N:");c=getchar();

}while(c!==’Y’&&c!==’N’&&c!==’y’&&c!==’n’);

printf("輸入正確,程序可以繼續執行!\n");

}

3)程序運行說明

只有當按“Y”和“N”兩個鍵時,屏幕顯示如下信息:“輸入正確,程序可以繼續執行!”

否則,程序要求重新輸入,直到正確為止。但屏幕上會顯示兩個相同的輸入提示:

“請按確認鍵Y或取消鍵N:”

這是由語句“c=getchar();”造成的,因為每次用戶輸入字符后,getchar函數要等到用戶鍵入回車鍵后才將字符讀出,回車換行符被保留在輸入緩沖區中,下次循環時,就先將上次留在輸入緩沖區中的回車換行符讀出后,沒等用戶鍵入就直接再循環體一次。更改方法:在c=getchar()語句后再加一條語句“getchar();”把這個換行符讀走。

《C語言程序設計教程》(第二版)Lizq98@4.3for循環結構4.3.1for循環結構

for循環也是一種“先判斷,后循環”的當型結構。1.for語句格式

for(表達式1;表達式2;表達式3)語句塊;

2.執行過程

循環開始,計算表達式1(只在進入循環時計算一次),接著計算表達式2,如果其值為真,則執行循環體,然后計算表達式3,返回循環開始繼續判斷表達式2;若表達式2為假,則結束循環。for循環執行過程如圖所示。

3.說明

(1)表達式1、表達式2和表達式3之間用分號分隔。

(2)表達式1是循環初始賦值,用來給循環變量和循環體中其它變量賦初值;表達式2是循環控制條件,根據這個條件決定是否執行循環體;表達式3用于循環變量增量(改變循環條件)。

(3)表達式1或表達式3可省略,但分號不能省略。當表達式1、3全省略后,for循環就退化成while循環。《C語言程序設計教程》(第二版)Lizq98@4.3for循環結構4.3.1for循環結構

【例4.7】求n!的值,n的值從鍵盤輸入。

1)程序分析

(1)求積變量t的初始值不能為0,否則運算結果還為0;

(2)循環變量i第一次進行乘法運算時值不能為0;

(3)n為每次運行程序時由用戶輸入的任意值;

(4)注意運算時數據溢出。變量t如果定義為int型,數據范圍為“-32768~32767”(8!=40320),當求8以上階乘時,應將變量t定義為長整型,但長整型也只能存放12!以內的數據(12!=479001600)。所以當求解13以上的階乘時,需要將變量t定義為實型數據。

(5)n是一個變量,變量n在使用之前,必須要有一個具體的值,可以使用scarf()函數從鍵盤得到一個值。《C語言程序設計教程》(第二版)Lizq98@4.3for循環結構4.3.1for循環結構

【例4.7】求n!的值,n的值從鍵盤輸入。

2)源程序。假設程序是在VC環境下編譯運行。#include<stdio.h>voidmain(){inti,n;

longintt=1;

printf("請輸入n!中的n值:\n");

scanf("%d",&n);

for(i=1;i<=n;i++)t=t*i;

printf("%ld!=",n,t);}3)程序運行結果請輸入n!中的n值:10<CR>10!=36288004)注意,本程序鍵盤輸入n時,n的值不能超過12。

《C語言程序設計教程》(第二版)Lizq98@4.3for循環結構【例4.8】從鍵盤上輸入整數m,判斷該數是否為素數。所謂素數(也稱質數)是指一個只能被1和自身整除的整數。判斷一個數是否為素數的算法是該數能否被從2開始一直到m-1之間的任何一個整數整除,如果全都不能整除,那么m就是素數。所以程序可用一個2到m-1的循環來實現。

算法(流程圖)

《C語言程序設計教程》(第二版)Lizq98@4.3for循環結構【例4.8】從鍵盤上輸入整數m,判斷該數是否為素數。程序如下:main(){intm,i;

scanf("%d",&m);for(i=2;m%i;i++);if(i==m)

printf("%d是一個素數\n",m);else

printf("%d不是素數\n",m);}

說明:程序中for循環的循環體是一個空語句,即空操作,每次循環i自增1后就判條件(m%i)余數是否為0。若非0表示不能整除,條件表示式(m%i)值為真,則繼續循環;當余數為0退出循環,它表示m能被i整除,而這時i值小于10。

當i值不斷自增直到等于m時(i==m)才退出循環,表示m不能被從2開始到m-1之間的所有整數整除,那么m是素數;當i<m時就退出循環,說明m在到達m之前就使條件m%c為零,因而m不是素數。《C語言程序設計教程》(第二版)Lizq98@4.3for循環結構

【例4.9】求Fibonacci數列:1、1、2、3、5、8…的前20項。

Fibonacci數列的通項公式為:F1=1F2=1Fn=Fn-1+Fn-2(n≥3)算法(流程圖)

《C語言程序設計教程》(第二版)Lizq98@4.3for循環結構

【例4.9】求Fibonacci數列:1、1、2、3、5、8…的前20項。

程序如下:main(){longf1=1,f2=1;

inti;for(i=1;i<=10;i++){printf("%12d%12d\n",f1,f2);f1=f1+f2;f2=f2+f1;}}

《C語言程序設計教程》(第二版)Lizq98@4.3for循環結構4.3.2for語句的多樣性

1.for語句的變化形式使用逗號運算符,構成逗號表達式,它可以給多個變量進行初始化。例如:for(x=0,y=0;x+y<10;++x)for循環開始時x和y均被初始化,并且用逗號隔開兩個初始化表達式,逗號表達式按自左到右的順序計算。for循環的其它變形有:允許存在兩個或多個循環控制變量;for循環語句中三個表達式中的每一個都可以由有效的C表達式組成等。

《C語言程序設計教程》(第二版)Lizq98@4.3for循環結構4.3.2for語句的多樣性

2.永久循環

for(;;)或while(1)形式的循環都是永久循環,永久循環是有意設計的。

永久循環用來處理循環次數不確定等場合,但循環體中應該配合使用break等語句跳出循環。例如:

ch=’\0’;

for(;;)

{ch=getchar();

if(ch==’A’)break;}

printf("youtypedanA");《C語言程序設計教程》(第二版)Lizq98@4.3for循環結構4.3.2for語句的多樣性

3沒有循環體的for循環

沒有循環體的循環稱為空循環,程序設計時可以利用它設計時間延遲,用于觀察屏幕信息等場合,例如:

for(t=0;t<time;t++);《C語言程序設計教程》(第二版)Lizq98@4.4循環的嵌套一個循環體內又包含另一個完整的循環結構稱為循環嵌套,而包含多層內嵌循環的循環結構稱為多重循環。while、dowhile和for三種循環都可以進行嵌套。注意,循環嵌套只能是包含關系,不能發生交叉。

【例4.10】編程輸出“九九乘法表”。

“九九乘法表”是一個典型的循環嵌套問題,外循環變量i控制行的變化,共9行,所以外循環需循環9次。由于每行有9次乘法運算,所以外循環每執行一次,內循環每次都是用i乘以1~9,即內循環每行也都需要執行9次。《C語言程序設計教程》(第二版)Lizq98@4.4循環的嵌套程序如下:

main(){inti,j;for(i=1;i<=9;i++){

for(j=1;j<=9;j++)

printf("%1d*%1d=%2d",j,i,i*j);

printf("\n");}}

1*1=12*1=23*1=34*1=45*1=56*1=67*1=78*1=89*1=91*2=22*2=43*2=64*2=85*2=106*2=127*2=148*2=169*2=181*3=32*3=63*3=94*3=125*3=156*3=187*3=218*3=249*3=271*4=42*4=83*4=124*4=165*4=206*4=247*4=288*4=329*4=361*5=52*5=103*5=154*5=205*5=256*5=307*5=358*5=409*5=451*6=62*6=123*6=184*6=245*6=306*6=367*6=428*6=489*6=541*7=72*7=143*7=214*7=285*7=356*7=437*7=498*7=569*7=631*8=82*8=143*8=244*8=325*8=406*8=487*8=568*8=649*8=721*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81程序運行結果

內層循環執行的次數等于該循環嵌套結構中每一層循環次數的乘積。本例中,外循環循環9次,內循環也為9次,則內層循環執行的總次數為9×9=81次。

本程序輸出結果為矩形,其中不到一半的計算是重復計算。請讀者修改程序,實現以三角形形式輸出結果。即:

1*1=1

1*2=22*2=4

1*3=32*3=63*3=9

1*4=42*4=83*4=124*4=16

1*5=52*5=103*5=154*5=205*5=25

1*6=62*6=123*6=184*6=245*6=306*6=36

1*7=72*7=143*7=214*7=285*7=356*7=427*7=49

1*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=64

1*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81作業五(5)《C語言程序設計教程》(第二版)Lizq98@4.4循環的嵌套

【例4.11】制作一個在屏幕上顯示時、分、秒的電子表。

1)算法分析

這也是一個典型的循環嵌套問題,可以采用三重循環來處理,最里層的循環控制秒從0~59的變化,中間層循環控制分鐘從0~59的變化,最外層的循環控制小時從0~23的變化。設小時變量為h、分鐘變量為m、秒變量為s,它們都為整型。

由于計算機的運行速度很快,內循環中每秒的顯示時間比實際生活中的一秒時間長度要短得多。所以程序中的每一秒變化都要設置時間延遲,在循環的最內層再嵌套一個控制時間延遲的空循環來實現。因此,本程序是個四重循環。

《C語言程序設計教程》(第二版)Lizq98@4.4循環的嵌套

【例4.11】制作一個電子表。

2)源程序

main()

{inth,m,s;

longi;

for(h=0;h<=23;h++)

for(m=0;m<=59;m++)

for(s=0;s<=59;s++)

{printf("\n%2d:%2d:%2d",h,m,s);

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

/*空循環用于延時,循環次數需調試*/

}

}

3)說明:

(1)本程序需運行24小時才能結束,如果要停止程序運行,可以按Ctrl-C或連續按兩次Ctrl-Break強制中斷程序運行。

(2)控制時間延遲的循環變量i的終值200000000,需要用戶進行調試修改再確定,計算機運行速度越快,則這個數值越大。

(3)本程序還存在兩個問題需解決,一是程序每次運行都從0點0分0秒開始,不能從當前實際時間開始運行。第二個問題是顯示時間時屏幕以滾(卷)動方式顯示,這讓人感覺不像一個電子表。

3)說明:

解決第一個問題的辦法可以在程序運行循環開始時設置一次當前時間。第二個問題可以在每變化一個時間調用清屏函數clrscr()一次(或使用system(“cls”);)。也可以直接使用gotoxy(x,y)函數定位時間顯示位置,函數中x為列號、y為行號。

(5)使用clrscr()函數和printf函數配合,也可以達到gotoxy函數的同樣效果。

(6)本程序只能運行24小時,讀者可將程序進一步改進,使它能顯示年、月、日、星期、時、分、秒等數據的電子表。《C語言程序設計教程》(第二版)Lizq98@4.4循環的嵌套

程序改進如下:

#include<conio.h>/*clrscr、gotoxy包含在conio.h中*/

main()

{inth,m,s,first=0;

longi;

for(h=0;h<=23;h++)

for(m=0;m<=59;m++)

for(s=0;s<=59;s++)

{if(first==0)

{printf("\n請輸入當前時間,格式為時:分:秒:");

scanf("%d:%d:%d",&h,&m,&s);

first=2;

}

else

{gotoxy(35,12);

printf("%2d:%2d:%2d",h,m,s);

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

}

}

}《C語言程序設計教程》(第二版)Lizq98@4.5break語句和continue語句4.5.1break中斷語句

在switch-case語句中為了終止某個case,曾使用過break語句。在循環結構中也能使用break語句跳出循環,迫使一個循環提前結束。但要注意,循環嵌套中使用break語句只退出當前循環。《C語言程序設計教程》(第二版)Lizq98@4.5break語句和continue語句4.5.1break中斷語句

break語句也常用于通過一個特殊的條件使循環提前終止。例如:main(){intt;

for(t=0;t<100;t++){printf(“%d”,t);if(t==10)break;}}

程序運行后在屏幕上只顯示數字0到10,這是因為break語句的使用,導致從一個循環中提前退出(雖然t<100仍然成立)。《C語言程序設計教程》(第二版)Lizq98@4.5break語句和continue語句4.5.1break中斷語句

break只能跳出本層循環。例如:

for(t=0;t<100;+=t)

{count=1;

for(;;)

{printf(“%d”,count);count++;

if(count==10)break;}

}

程序段在屏幕上顯示數字1到10共100次。每當執行到break語句時,控制就回到for循環的外層。《C語言程序設計教程》(第二版)Lizq98@4.5break語句和continue語句4.5.2continue條件繼續語句

continue語句的工作方式類似于break。break是終止循環的執行,而continue能結束本次循環的執行,執行本循環結構中的下一次循環條件判斷,并根據條件判斷決定是否繼續進行循環。例如:

do{

scanf(“%d”,&x);

if(x<0)continue;

printf(“%d”,x);

}while(x!=100);

continue語句使得控制直接回到循環條件判斷。本程序運行后僅顯示正數,若輸入的是負數,continue語句將流程轉到循環條件判斷。《C語言程序設計教程》(第二版)Lizq98@4.5break語句和continue語句4.5.2continue條件繼續語句

在for循環語句中,遇到continue后,首先執行循環的增量部分,然后執行條件測試,最后根據判斷決定是否繼續執行循環。改寫上面的程序片段,使它僅顯示所輸入100個數中的正數。

for(t=0;t<100;++t)

{scanf(“%d”,&x);

if(x<=0)continue;

printf(“%d”,x);

}

continue語句能使循環次數減少,縮短程序運行時間。《C語言程序設計教程》(第二版)Lizq98@4.6程序舉例【例4.12】求1到99之間奇數之和。main(){inta,b;a=-1,b=0;do{a+=2;b+=a;}while(a<=99);

printf(“1+3+5+...+99=%d\n”,b);}運行結果1+3+5+...+99=2500

《C語言程序設計教程》(第二版)Lizq98@4.6程序舉例例4.13】有這樣兩個數,滿足ij+ji=154,求i,j的值(i,j為不同數字)。main(){inti,j,x;for(i=1;i<=9;i++)for(j=1;j<=9;j++){if(j==i)continue;x=10*i+j+10*j+i;

if(x==154)printf(“%d%d+%d%d=%d\n”,i,j,j,i,x);}}

程序運行結果:68+86=154

《C語言程序設計教程》(第二版)Lizq98@4.6程序舉例【例4.14】編寫菜單選擇函數模塊。

menu(){charch;

printf("1.append\n");

printf("2.modify\n");

printf("3.delete\n");

printf("Entreyourchoice:");

do

{ch=getchar();/*鍵盤輸入一個字符*/

switch(ch)

{case‘1’:append();break;

case‘2’:modify();break;

case‘3’:delete();}

}while(ch!=‘1’&&ch!=‘2’&&ch!=‘3’);

}

append()、modify()、delete()為增加、修改和刪除三個功能模塊函數,這里沒有給出程序。《C語言程序設計教程》(第二版)Lizq98@4.6程序舉例【例4.15】鍵盤輸入n個學生的m門課程成績,分別統計每個學生的平均成績。#include<stdio.h>main(){inti,j,n,m;floatc,sum,ave;

printf("請輸入學生總人數和課程門數:");scanf("%d,%d\n",&n,&m);for(i=1;i<=n;i++){sum=0;for(j=1;j<=m;j++)

{printf(“\n請輸入第%d個學生%d門課程成績:",i,m);

scanf("%f",&c);

sum+=c;}

ave=sum/m;

printf(“第%d個學生平均成績為:%5.2f\n",i,ave);}}《C語言程序設計教程》(第二版)Lizq98@4.6程序舉例【例4.16】求1!+2!+3!+……+n!

本例和例4.7一樣,需要考慮計算溢出問題,變量的數據類型一定要定義正確。本例假設n的值不超過10。設計一個二重循環,外循環計算累加和,內循環計算每個數的階乘。i!的值存放在變量t中,累加值存放在變量sum中。將t和sum定義為長整型。《C語言程序設計教程》(第二版)Lizq98@4.6程序舉例main(){intn,j,i;longt,sum=0;/*變量t保存j!*/

printf("\n請輸入n的值:");scanf("%d",&n);for(j=1;j<=n;j++){t=1;for(i=1;i<=j;i++)t*=i;sum+=t;}

printf("1!+2!+3!+……+%d!=%ld",n,sum);}

【例4.16】求1!+2!+3!+……+n!

程序改進:

本程序可用單重循環就能實現,且計算次數大大減少。main(){intn,j,i;longt=1,sum=0;/*變量t保存j!*/

printf("\n請輸入n的值:");

scanf("%d",&n);for(i=1;i<=n;i++){t*=i;sum+=t;}

printf("1!+2!+3!+……+%d!=%ld",n,sum);}《C語言程序設計教程》(第二版)Lizq98@4.6程序舉例【例4.17】列出整數3~100中的所有素數。1)算法分析:例4.8只判斷某個整數是否為素數,為了檢查某數n是否是素數,可以用2~n-1(或2~)之間的每個數去除n,只要其中有一個數能整除,說明該數不是素數,算法可以用用循環結構實現,判斷某整數是否為素數的程序段作為一個內循環。因為要判斷3~100之間的所有整數,所以設置外循環從3逐次加1遞增到100,以掃描3~100之間的全部整數。內循環處理3~100之間的每一位整數N時,當發現該數不是素數,使用break語句結束內循環。《C語言程序設計教程》(第二版)Lizq98@4.6程序舉例【例4.17】列出整數3~100中的所有素數。

#include<math.h>#include<stdio.h>voidmain(){intn,i,j,sum=0;for(n=3;n<=100;n++){for(j=2;j<=n-1;j++){if((n%j)==0)break;if(j>=n-1)

{printf("%d\t",n);sum=sum+1;}}}

printf("\素數總數有%d個\n",sum);}3)程序運行結果3571113171923293137414347535961677173798389973~100之間的素數有24個。《C語

溫馨提示

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

評論

0/150

提交評論