第5講結構化程序設計(PartII)_第1頁
第5講結構化程序設計(PartII)_第2頁
第5講結構化程序設計(PartII)_第3頁
第5講結構化程序設計(PartII)_第4頁
已閱讀5頁,還剩80頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

第5講

結構化程序設計(PartII)周水庚2020年10月22日《程序設計》-2020年秋提要C程序簡介函數基礎知識文件的簡單用法簡單程序設計實例《程序設計》-2020年秋提要C程序簡介函數基礎知識文件的簡單用法簡單程序設計實例《程序設計》-2020年秋C程序簡介一個C程序可由若干個源程序文件組成一個源文件可以由若干個函數和預處理命令以及全局變量聲明部分組成一個函數由變量定義部分和執行語句組成每個源程序文件都是可獨立編譯的,所以C程序可以按源程序文件分別編寫、分別編譯《程序設計》-2020年秋《程序設計》-2020年秋C語句C語句是C程序的基本組成單元C語句可以分為以下5類空語句表達式語句復合語句控制語句函數調用語句《程序設計》-2020年秋C語句(續)控制語句有9種if()…

else…

(條件語句)switch(多分支選擇語句)for()

(循環語句)while()

(循環語句)do…

while()(循環語句)continue(結束本次循環語句)break(中止執行switch或循環語句)goto(轉向語句)return(從函數返回語句)《程序設計》-2020年秋C語句(續)函數調用語句由一次函數調用加一個分號構成表達式語句由一個表達式加一個分號構成,如賦值語句空語句只有一個分號的語句,它什么也不做復合語句用{}把一些語句括起來構成,又稱分程序《程序設計》-2020年秋C程序的三種基本結構順序結構條件控制結構if…[else…]循環結構while()do…while()for()《程序設計》-2020年秋提要C程序簡介函數基礎知識正文文件的簡單用法簡單程序設計實例《程序設計》-2020年秋函數基礎知識結構化程序設計中,將復雜的功能分解成若干簡單的子功能,用函數編碼實現子功能,通過調用函數實施子功能要求函數是一個實現指定功能、邏輯上獨立的代碼段對函數使用者來說,把它看作“黑盒”,只需知道要傳送給函數的數據(輸入),和函數執行后能得到什么結果(輸出)函數可以定義局部對象,使函數在邏輯上作為程序的一個相對獨立單位,不受主函數或其它函數的程序對象命名的影響《程序設計》-2020年秋函數基礎知識(續)函數可帶形參,函數執行時,操作對象、求值方式等可隨不同調用的需要而改變函數為程序的層次構造和開發提供支持,使設計新程序能在已有函數基礎上構造功能更強的函數和程序一個C程序以main()函數作為程序的主函數。程序運行時,從它開始執行在C語言中,函數不能嵌套定義,一個函數并不從屬于另一個函數除不能調用main()函數外,其它函數可以相互調用《程序設計》-2020年秋函數庫把一些公用的、基本的計算功能所對應的函數集中起來,構成一個庫,我們稱之為函數庫,相應的函數成為庫函數函數庫中的函數具有預先定義的、標準的輸入、輸入接口C語言中定義了一些基本的標準函數編程環境工具廠商(Microsoft、Borland等)往往提供更多的函數供編程者使用《程序設計》-2020年秋函數庫(續)C語言使用頭文(headerfile,即*.h文件)對函數庫中的函數進行定義和說明函數庫中的函數經編譯后,綁定在一起件,構成一個庫文件(libraryfile,即*.lib文件)C程序調用C語言或者編程環境提供的函數時,要在程序中包含(include)相應的頭文件;在產生執行文件時,需要與庫文件中相應的目標函數代碼連接為了使用方便,C語言按功能分類,提供了大量函數庫,每個函數庫都有自己的頭文件《程序設計》-2020年秋庫函數的使用使用相應庫函數的程序都要在使用之前寫上包含其頭文件的預處理命令常用的頭文件stdio.h(輸入輸出庫函數)math.h、stdlib.h、float.h(數學庫函數)time.h(時間庫函數)ctype.h(字符分類和轉換庫函數)string.h(內存緩沖區和字符串處理庫函數)graphics.h(圖形處理庫函數)malloc.h、stdlib.h(內存動態分配庫函數)signal.h、process.h(進程控制庫函數)《程序設計》-2020年秋實例實例1:時間函數使用實例2:隨機函數使用(1)實例3:隨機函數使用(2)《程序設計》-2020年秋#include<stdio.h>#include<time.h>voidmain(){structtm*tmNow;/*定義一個時間結構指針變量*/longsecsNow;/*定義以秒為單位的記錄時間的變量*/char*strNow;/*時間字符串表示的字符指針*/time(&secsNow);/*調用函數time(),得到當前時間*/strNow=ctime(&secsNow);/*獲得時間的字符串表示*/printf("自1970年1月1日至現在的時間(以秒為單位):%ld\n",secsNow);printf("當前時間的另一種表示:%s\n",strNow);tmNow=localtime(&secsNow);/*獲得結構形式的時間*/printf("存于tmNow所指結構中的時間有年中的日、年、月、日、時、分、秒:\n");printf("%d%d-%02d-%02d%02d:%02d:%02d\n",tmNow->tm_yday,tmNow->tm_year+1900,tmNow->tm_mon,tmNow->tm_mday,tmNow->tm_hour,tmNow->tm_min,tmNow->tm_sec);strNow=asctime(tmNow);/*得到字符串表示的時間*/printf("當前時間的另一種表示:%s\n",strNow);}《程序設計》-2020年秋#include<stdio.h>#include<time.h>#include<stdlib.h>voidmain(){intk;longnow;srand(time(&now)%60);/*用時間初始化隨機數發生函數的初態,使初態總不相同*/for(k=0;k<10;k++)/*產生10個隨機數輸出*/printf(”%d\n”,rand());/*調用隨機函數*/}《程序設計》-2020年秋#include<stdio.h>#include<time.h>#include<stdlib.h>voidmain(){inti;srand(time(NULL));for(i=1;i<=10000;i++){printf(”%10d”,1+rand()%6);if(i%5==0)printf(“\n”);}}《程序設計》-2020年秋函數定義函數定義的一般形式為

類型標識符函數名(形式參數說明表){

說明和定義部分語句序列

}《程序設計》-2020年秋函數定義(續)類型標識符用于標識函數執行結果返回值的類型當函數執行不返回值時,習慣用void來標記當函數返回int型值時,類型標識符int可以省略函數名是一個標識符,一個C程序有且只有一個main()函數,其它的函數名可以隨意命名《程序設計》-2020年秋函數定義(續)函數名之后括號內的形式參數說明表是按需要而定沒有形參的函數,也就沒有形參說明表,常用void代之,但函數名之后的一對圓括號不可省略當函數有多個形參時,形參說明之間用逗號分隔,每個形參說明指定形參的類型和形參名《程序設計》-2020年秋函數定義(續)最外層花括號“{”和“}”括住的部分是函數體在函數體的前面部分可有函數需要的程序對象的說明和定義函數體內定義的變量是局部變量,只能在函數體內引用它們說明和定義之后是由語句序列組成的執行代碼《程序設計》-2020年秋例子1求兩個數中最小值的函數min()doublemin(doublex,doubley)/*返回double型值,有兩個形參x,y,都為double型的*/{/*函數返回x和y中的小者的值*/returnx<y?x:y;}

return語句的執行將結束函數的執行

C語言的return語句有兩種形式:

return;用于不返回值的函數體中

return表達式;用于有返回值的函數體中《程序設計》-2020年秋例子2求兩個正整數最大公因子的函數gcd()兩個正整數a和b的最大公因子有性質:gcd(a,b)=gcd(a-b,b),如a>b;gcd(a,b)=gcd(a,b-a),如a<b;gcd(a,b)=a,如a=b。《程序設計》-2020年秋intgcd(inta,intb){while(a!=b)if(a>b)a-=b;elseb-=a;returna;}第1解法《程序設計》-2020年秋步驟:[求余數]求a除b的余數r[判結束]如r等于0,b為最大公約數[替換]用b置a,r置b,并回到步驟[求余數]第2解法《程序設計》-2020年秋

intgcd(inta,intb){intr;while(1){if((r=a%b)==0)break;a=b;b=r;}returnb;}《程序設計》-2020年秋

intgcd(inta,intb){intr=a;do{a=b;b=r;r=a%b;}while(r);returnb;}《程序設計》-2020年秋函數定義(續)C語言也允許在函數名后的圓括號內只給出各形參的名,隨后才指定各形參的類型,但這種寫法在C++中已不允許doublemin(x,y)doublex,y;{returnx<y?x:y;}C語言還允許函數體為空的函數dummy()/*或dummy(void)*/{}《程序設計》-2020年秋函數調用函數被定義以后,凡要實現函數功能的地方,就可簡單地通過函數調用來完成函數調用的一般形式為函數名(實在參數表)實在參數,簡稱實參。函數調用時,實參按它們出現的順序與函數定義中的形參一一對應,并要求實參類型與其對應的形參類型相一致《程序設計》-2020年秋函數調用(續)函數調用有兩種方式傳值調用(callbyvalue)把實參的值傳給被調用函數的參數(形參)。這時,被調用函數對參數的改變,不影響調用函數實參的原始值傳引用調用(callbyreference)把實參的地址傳給被調用函數的參數(形參)地址。這時,被調用函數對參數的改變,將影響到調用函數實參的原始值《程序設計》-2020年秋函數調用(續)對doublemin(doublex,doubley)的函數調用w=min(u,v);函數調用min(u,v)就是對函數min()的調用,它提供了兩個實參u和v,分別對應形參x和y如果調用無形參的函數,這時函數的調用形式變為函數名()其中函數名之后的一對圓括號是不能省略的

《程序設計》-2020年秋函數調用(續)按函數調用在程序中的作用,有兩種不同類型的應用函數調用只是利用函數所完成的功能。此時,將函數調用作為一個獨立的語句。這種應用不要求或無視函數的返回值如程序中經常使用的調用格式輸入函數scanf()和格式輸出函數printf()等。函數調用是利用函數的返回值:或用這返回值繼續進行表達式的計算,或輸出函數返回值等《程序設計》-2020年秋函數調用的執行過程為形參分配內存空間計算實參表達式的值,并將值賦給對應的形參為函數的局部變量分配內存空間執行函數體內的語句序列函數體執行完,或執行了return語句后,釋放為這次函數調用分配的全部內存空間將函數值(如果有)返回到函數調用處繼續執行《程序設計》-2020年秋#include<stdio.h>doublex,y,d,min(double,double);voidmain(){printf(“Enterx,y.\n”);scanf(“%lf%lf”,&x,&y);d=min(x,y);printf(“MIN(%.3f,%.3f)=%.3f\n”,x,y,d);}doublemin(doublea,doubleb){doubletemp;temp=a>b?b:a;returntemp;}《程序設計》-2020年秋對函數調用的說明當函數執行return語句或執行完函數體的語句序列后,函數的這次調用就結束,隨之將控制返回到函數調用處繼續執行函數的返回值是通過執行return語句時,計算return之后的表達式值而獲得的。如果函數不提供返回值,則return語句不包含表達式。如果函數有返回值,則應有確定的類型,并在函數定義時指明。若函數定義時不指明返回值類型,且函數有返回值,C語言約定該函數的返回值類型為int型《程序設計》-2020年秋對函數調用的說明(續)為了明確指明函數不提供返回值,建議在函數定義時,在函數名之前寫上void。并在這樣的函數體內,所有的return語句都不帶表達式當函數執行不帶表達式的return語句返回時,函數并不是一定不帶回值,而是返回一個不確定的值。這時,不應該利用函數返回值進行再計算,否則會產生錯誤結果函數定義中的return語句的表達式類型應與函數定義中指明的返回值類型相一致。如果return語句中的表達式類型與函數定義指明的返回值類型不一致時,對于基本類型情況,則以函數的返回值類型為準,系統會自動進行類型轉換《程序設計》-2020年秋實參向形參單向傳遞數據在函數未被調用時,函數定義中的形參和函數體中定義的局部變量并不占用存儲單元在函數定義中,必須為函數的形參指定數據類型函數體中所使用的形參的初值是由函數調用時對應的實參表達式給定的C語言規定,實參表達式對形參的數據傳遞是“值傳遞”的,即單向傳遞對于有多個實參的函數調用情況,C語言不規定實參的求值次序《程序設計》-2020年秋提要C程序簡介函數基礎知識文件的簡單用法簡單程序設計實例《程序設計》-2020年秋文件的簡單用法介紹這部分內容的目的學習編寫從文件輸入數據和把結果輸出到文件的程序了解使用文件程序的結構掌握文件的一般使用方法熟悉一些和文件操作有關的庫函數的用法涉及一些較深的概念先暫且接受!《程序設計》-2020年秋定義文件變量在程序的開始處定義文件指針變量,和存儲文件名的字符數組#include<stdio.h>FILE*fp;/*定義文件指針變量fp*/charfname[40];/*存儲文件目錄路徑和文件名的字符數組*/《程序設計》-2020年秋輸入文件名printf(”輸入文件名(包括目錄路徑、擴展名)\n”);scanf(”%s%*c”,fname);/*輸入文件名及回車符*/《程序設計》-2020年秋打開文件程序從正文文件輸入數據程序向正文文件輸出結果若被打開文件不存在,則建立一個新文件;若被打開文件已存在,則該文件中的數據被刪除if((fp=fopen(fname,”r”))==NULL){printf(”%s文件不能打開\n”,fname);return;}fp=fopen(fname,”w”);/*為寫打開文件*/讀打開時,要求被打開文件已存在《程序設計》-2020年秋關閉文件文件使用結束后,要及時關閉fclose(fp);/*以后fp又可用于打開文件*/《程序設計》-2020年秋文件輸入輸出調用函數fgetc()從文件輸出下一個字符ch=fgetc(fp);/*將輸入字符存于變量ch*/調用函數fscanf()從文件按指定格式輸出數據fscanf(fp,”%d%d”,&k,&j);/*從文件輸出整數*/調用函數fputc()向文件輸入一個字符fputc(ch,fp);/*將變量ch中的字符輸出到文件*/調用函數fprintf()向文件按指定格式輸入數據fprintf(fp,”%d%d\n”,k,j);/*向文件輸入整數*/《程序設計》-2020年秋從文件逐一輸出字符intc;/*不能為char類型*/FILE*fp;…/*說明有關變量和設置初值等*/

if((fp=fopen(文件名,”r”))==NULL){printf(”不能打開文件%s。\n”,文件名);return;}while((c=fgetc(fp))!=EOF){…/*對剛讀入的字符信息c作某種處理*/}fclose(fp);…/*輸出處理結果*/《程序設計》-2020年秋字符逐一輸入形成新文件intc;/*也可以是char類型*/FILE*fp;…/*說明有關變量和設置初值等*/fp=fopen(文件名,”w”);while(還有字符){

…/*生成字符(或字節)存于變量c*/fputc(c,fp);/*將生成的字符輸出*/}fclose(fp);…/*輸出程序結束報告*/《程序設計》-2020年秋例子將鍵盤輸入的字符流復制到指定的文件逐行復制從鍵盤輸入字符到指定文件,直至輸入空行結束《程序設計》-2020年秋#include<stdio.h>FILE*fp;voidmain(){intch;charfname[40];printf(”輸入文件名!\n”);scanf(”%s%*c”,fname);fp=fopen(fname,"w");/*以寫方式打開正文文件*/while((ch=getchar())!=‘\n’){/*逐行處理,至空行結束*/dofputc(ch,fp);/*行內字符逐一復制*/while((ch=getchar())!=‘\n’);/*處理當前行*/fputc(ch,fp);/*輸出換行符*/}fclose(fp);printf(”程序復制鍵盤輸入字符結束。\n”);}《程序設計》-2020年秋提要C程序簡介函數基礎知識正文文件的簡單用法簡單程序設計實例【例1】輸入整數n,輸出由2*n+1行2*n+1列,以下形式(n=2)的圖案。

*************圖案分成兩部分,上面由n+1行,下面有n行圖案中,同一行上的兩個星號字符之間有一個空格符對于上半部分,設第一行的星號字符位于屏幕的中間,則后行圖案的起始位置比前行起始位置提前兩個位置對于下半部,第一行的起始位置比上半部最后一行起始位置前進兩個字符位置,以后各行也相繼進兩個位置《程序設計》-2020年秋#include<stdio.h>voidmain(){intn,j,k;printf("Entern!\n");scanf("%d",&n);for(j=0;j<=n;j++){printf("%*c",40-2*j,’’);for(k=1;k<=2*j+1;k++)printf("*");printf("\n");}for(j=n-1;j>=0;j--){printf("%*c",40-2*j,’’);for(k=1;k<=2*j+1;k++)printf("*");printf("\n");}}《程序設計》-2020年秋

“%*c”中的*表示輸入寬度由后面的參量值確定【例2】試編制一個程序輸出以下形式的乘法表。

12345678911224336944812165510152025661218243036771421283542498816243240485664991827364554637281《程序設計》-2020年秋#include<stdio.h>voidmain(){inti,j;

printf("\n\t123456789\n");for(i=1;i<=9;i++){printf("\t%d",i);for(j=1;j<=i;j++)printf("%4d",i*j);printf("\n");}printf("\n\n\n");}《程序設計》-2020年秋【例3】編制一個程序,實現輸入n(>2)個整數,輸出其中的次最大數。為求次最大,程序在循環過程中需保留兩個數,當前暫時最大數max1和當前暫時次最大數max2。程序將輸入的第一個數暫時保留,待輸入第二個數后,確定max1和max2。從第三個輸入數x開始,根據x調整max1和max2。調整過程需考慮以下幾種可能:x>max1,則以max1作為新的max2,x作為新的max1;max1>x>max2,則以x作為新的max2;x<max2,則不調整。《程序設計》-2020年秋#include<stdio.h>voidmain(){intn,i,max1,max2,x,temp;printf("輸入n(>=2)!\n");scanf("%d",&n);if(n<2)return;printf("輸入第%d個整數.",1);scanf("%d",&temp);printf("輸入第%d個整數.",2);scanf("%d",&x);if(temp<x){max1=x;max2=temp;}《程序設計》-2020年秋else{max1=temp;max2=x;}for(i=3;i<=n;i++){printf("輸入第%d個整數.",i);scanf("%d",&x);if(x>max1){max2=max1;max1=x;}elseif(x>max2)max2=x;}printf("次最大是%d\n\n",max2);}《程序設計》-2020年秋【例4】編制對給定的整數,判該整數是否是質數的函數,若是質數,函數返回1,否則函數返回0。

判一個整數n是否是一個質數有許多方法:如n=2,則n是質數;若n是其它偶數,則n不是質數;讓整數變量k自3開始,每次增2,直至k的平方超過n為止,若其中某個k能整除n,則n不是質數。若所有這樣的k都不能整除n,則n是質數。《程序設計》-2020年秋《程序設計》-2020年秋intisPrime(longn){longk;if(n==2L)return1;if(n%2==0)return0;for(k=3L;k*k<=n;k+=2L)if(n%k==0)break;if(k*k>n)return1;return0;}【例5】編制輸入整數,輸出小于等于該整數的全部質數的程序。程序首先輸出質數2,之后對指定范圍內的奇數采用例4的方法判其是否是質數。#include<stdio.h>voidmain(){longm,n;intj;/*j控制每行輸出10個質數*/printf(”輸入整數\n”);scanf(”%ld”,&m);printf(”%6d”,2);j=1;for(n=3L;n<=m;n+=2)if(isPrime(n)){if(j++%10==0)printf(”\n”);printf(”%6ld”,n);}printf(”\n”);}《程序設計》-2020年秋【例6】輸入x,求級數s(x)的近似值。約定求和的精度為0.000001。

x3x5x7s(x)=x++++…3*1!5*2!7*3!一般地,設級數為

s(x)=t0+t1+t2+┅+tk《程序設計》-2020年秋求級數部分和的算法可描述如下:{s=0;/*級數的部分和變量s,置初值0*/t=首項值;/*置通項變量t為級數的首項值*/k=0;/*置項序號變量k為0*/while(fabs(t)>=Epsilon){s+=t;/*累計當前項tk到部分和*/t=f(t,k);/*由當前項t和k計算下一個當前項的值*/k++;/*項序號增1*/}}《程序設計》-2020年秋對于本題,首項值為x,級數第k(>=0)項tk的算式為

(-1)k*x(2*k+1)/((2*k+1)*k!)k+1項tk+1與k項tk有關系

tk+1=-tk*x*x*(2*k+1)/((2*k+3)*(k+1))tk是通項t的當前項值,tk+1是通項t的下一個當前項值。由當前項t和k計算t的下一個當前項值t’,可用以下表達式實現:

t’=-t*x*x*(2.0*k+1.0)/((2.0*k+3)*(k+1))把以上式子代入上述算法,并令x的值由輸入給定,寫出程序如下:《程序設計》-2020年秋#include<stdio.h>#include<math.h>#defineEpsilon0.000001voidmain(){intk;doubles,x,t;printf(“Enterx.\n”);scanf(“%lf”,&x);s=0.0;/*級數的部分和變量s置初值0*/t=x;/*置通項變量t為級數的首項值*/k=0;/*置項序號變量k為0*/while(fabs(t)>=Epsilon){s+=t;t=-t*x*x*(2.0*k+1)/((2.0*k+3)*(k+1));k++;/*項序號增1*/}printf(“s(%f)=%f\n”,x,s);}《程序設計》-2020年秋【例7】編制從鍵盤輸入整數序列,并按輸入順序輸出到指定的文件中的程序。程序循環地從鍵盤輸入整數,將整數輸出到指定的文件中。當程序發現不能從鍵盤輸入整數時結束循環。《程序設計》-2020年秋#include<stdio.h>FILE*fp;intmain(){intx,k;charfname[40];printf(”輸入文件名!\n”);scanf(”%s%*c”,fname);if((fp=fopen(fname,"w"))==NULL){printf("不能打開文件%s。\n",fname);return0;}k=1;while(scanf(”%d”,&x)==1){fprintf(fp,”%d\t”,x);if(k++%5==0)fprintf(fp,”\n”);}fclose(fp);printf(”\n輸出了%d個整數.\n”,k-1);return1;}《程序設計》-2020年秋/*scanf返回值表示輸入參數的個數*/【例8】編制從指定的文件中輸出整數,并按輸出順序輸出到顯示屏上。程序從文件循環地輸入整數,將整數輸出到顯示屏。當程序發現不能從文件輸入整數時結束循環。《程序設計》-2020年秋#include<stdio.h>FILE*fp;intmain(){intx,k;charfname[40];printf(”輸入文件名!\n”);scanf(”%s%*c”,fname);if((fp=fopen(fname,"r"))==NULL){printf("不能打開文件%s。\n",fname);return0;}k=1;while(fscanf(fp,”%d”,&x)==1){printf(”%d\t”,x);if(k++%5==0)printf(”\n”);}fclose(fp);printf(”\n從文件%s輸入了%d個整數.\n”,fname,k-1);return1;}《程序設計》-2020年秋《程序設計》-2020年秋【例9】求Sn=a+aa+aaa+…+aa…a(n個a之值),其中a是一個十進制數字。#include<stdio.h>main(){longsn;inti,a,t,n;printf(“Inputnanda:”);scanf(“%d%d”,&n,&a);t=a;sn=0;i=1;do{sn+=t;i++;t=t*10+a;}while(i<n);

printf(“Sn=%l\n”,sn);}《程序設計》-2020年秋【例10】有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13,…

求出這個數列的前n項之和分析:假設這個序列的第k項為tk=ak/bk,有tk+1=(ak+bk)/ak=1+1/tka1=2;b1=1《程序設計》-2020年秋#include<stdio.h>main(){inti=1,n,floatt,sprintf(“Inputn:”);scanf(“%d”,&n);s=0.0;t=2.0while(i<=n){s+=t;t=1.0+1.0/t;i++}printf(“Thesumis:%f”,s);}《程序設計》-2020年秋【例11】用迭代法求。求平方根的迭代公式為要求前后兩次求出的x的差的絕對值小于10-5。#include<stdio.h>Main(){floata,x1,x2;printf(“Inputa’svalue:”);scanf(“%f”,&a);x2=a;do{x1=x2;x2=0.5*(x1+a/x1);}while(fabs(x2-x1)>=1e-5);printf(“=%f”,x2);}《程序設計》-2020年秋【例12】打印出所有的“水仙花數”,所謂“水仙花數”是指一個3位數,其各位數字立方和等于該數本身。例如,153是一水仙花數,因為153=13+53+33#include<stdio.h>main(){inti,first,second,third;for(i=100;i<=999;i++){first=i/100;second=(i/10)%10;third=(i%100)%10;if(i==first*first*first+second*second*second+third*third*third)printf(“%d\n”,i);}}《程序設計》-2020年秋【例13】一個數如果恰好等于它的因子之和,這個數就稱為“完數”。例如,6的因子為1、2、3,而6=1+2+3,因此6是“完數”。編程序找出1000之內的所有完數,并按下面格式輸出其因子:

6’sfactorsare1,2,3《程序設計》-2020年秋

#include<stdio.h>main(){inti,j,sum;for(i=1;i<=1000;i++){sum=0;for(j=1;j<i;j++)if(i%j==0)sum+=j;if(i==1)printf(“1’sfactoris1”)elseif(sum==i){printf(“%d’sfactorsare:”);for(j=1;j<i;j++)

if(i%j==0)printf(“%d,”,j);printf(“\n”);}}}猴子吃桃問題【例14】猴子第一天摘下若干個桃子,當即吃了一半,還不過癮,又多吃了一個。第二天早上又將第一天剩下的桃子吃掉一半,有多吃了一個。以后每天早上都吃了前一天剩下的一半零一個。到第10天早上想再吃時,發現只剩下一個桃子了。編寫程序求猴子第一天摘了多少個桃子。關鍵是:搞清楚第一天桃數和第二天桃子數之間的關系,即第二天桃子數加1的2倍等于第一天的桃子數。《程序設計》-2020年秋#include<stdio.h>intmain(){Intday,x1,x2;/*定義day、x1、x23個變董為基本整型*/day=9;x2=1;while(day>0){

x1=(x2+1)*2;/*第一天的桃子數是第二天桃子數加1后

的2倍*/

x2=x1;

day--;/*因為從后向前推所以天數遞減*/}printf("thetotalis%d\n",x1);/*輸出桃子的總數*/return

0;}《程序設計》-2020年秋漁夫打魚曬網問題【例15】如果一個漁夫從2011年1月1日開始每三天打一次漁,兩天曬一次網,編程實現當輸入20111月1日以后的任意一天,輸出該漁夫是在打漁還是在

溫馨提示

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

評論

0/150

提交評論