C語言程序設(shè)計-實(shí)驗(yàn)課程實(shí)驗(yàn)報告_第1頁
C語言程序設(shè)計-實(shí)驗(yàn)課程實(shí)驗(yàn)報告_第2頁
C語言程序設(shè)計-實(shí)驗(yàn)課程實(shí)驗(yàn)報告_第3頁
C語言程序設(shè)計-實(shí)驗(yàn)課程實(shí)驗(yàn)報告_第4頁
已閱讀5頁,還剩108頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

等ザ科技火孚課程實(shí)驗(yàn)報告課程名稱: C語言程序設(shè)計 專業(yè)班級: 信息安全1302班學(xué)號: 姓名: 指導(dǎo)教師: 報告日期: 2014年6月16日計算機(jī)科學(xué)與技術(shù)學(xué)院目錄TOC\o"1-5"\h\z\o"CurrentDocument"1實(shí)驗(yàn)概述 22第一次實(shí)驗(yàn) 錯誤!未定義書簽。實(shí)驗(yàn)?zāi)康?錯誤!未定義書簽。實(shí)驗(yàn)內(nèi)容 錯誤!未定義書簽。\o"CurrentDocument"3實(shí)驗(yàn)小結(jié) 17\o"CurrentDocument"3第二次實(shí)驗(yàn) 18\o"CurrentDocument"實(shí)驗(yàn)?zāi)康?18\o"CurrentDocument"實(shí)驗(yàn)內(nèi)容 18\o"CurrentDocument"3實(shí)驗(yàn)小結(jié) 30\o"CurrentDocument"4第三次實(shí)驗(yàn) 31\o"CurrentDocument"實(shí)驗(yàn)?zāi)康?31\o"CurrentDocument"實(shí)驗(yàn)內(nèi)容 31\o"CurrentDocument"3實(shí)驗(yàn)小結(jié) 39\o"CurrentDocument"5第四次實(shí)驗(yàn) 40\o"CurrentDocument"實(shí)驗(yàn)?zāi)康?40實(shí)驗(yàn)內(nèi)容 40\o"CurrentDocument"3實(shí)驗(yàn)小結(jié) 616第五次實(shí)驗(yàn) 62實(shí)驗(yàn)?zāi)康?62實(shí)驗(yàn)內(nèi)容 62\o"CurrentDocument"3實(shí)驗(yàn)小結(jié) 72\o"CurrentDocument"7第六次實(shí)驗(yàn) 73實(shí)驗(yàn)?zāi)康?73實(shí)驗(yàn)內(nèi)容 73\o"CurrentDocument"3實(shí)驗(yàn)小結(jié) 1068實(shí)驗(yàn)總結(jié) 107108參考文獻(xiàn)108.實(shí)驗(yàn)概述作為ー種功能齊全的結(jié)構(gòu)式高級語言,它適用于多種操作系統(tǒng),也適用于多種機(jī)型,對編寫需要硬件進(jìn)行操作的場合,優(yōu)先于其他高級語言,有一些大型的應(yīng)用軟件也是用C語言編寫的。C語言的數(shù)據(jù)類型有:整型、實(shí)型、字符型、數(shù)組類型、指針類型、結(jié)構(gòu)體類型、共用體類型等。能用來實(shí)現(xiàn)各種復(fù)雜的數(shù)據(jù)結(jié)構(gòu)的運(yùn)算。并引入了指針概念,使程序效率更高。在本課程中,我們從最簡單基本的程序開始學(xué)習(xí)了C語言的概念,基本語句,循環(huán)條件結(jié)構(gòu),子函數(shù)的應(yīng)用,數(shù)組的應(yīng)用,以及C語言最大的特點(diǎn),指針的應(yīng)用,最后還學(xué)習(xí)了結(jié)構(gòu)與聯(lián)合的應(yīng)用。C語言具有龐大的運(yùn)算符集團(tuán),配合它的多種數(shù)據(jù)類型,組成了多種編譯表達(dá)方式。為了在實(shí)踐中更深入地了解C語言的原理,更靈活地運(yùn)用C語言解決日常生活中的問題,再到進(jìn)行大型應(yīng)用軟件的開發(fā),都需要我們熟悉掌握C預(yù)言的編譯特點(diǎn)和更方便簡易的編譯方式。在多次試驗(yàn)中,我們分版塊對所學(xué)北榮進(jìn)行了系統(tǒng)而又細(xì)致的鞏固,通過編程練習(xí)來實(shí)現(xiàn)。在每一個板塊,即一次上機(jī)實(shí)驗(yàn)中,通過多道練習(xí)題和課程設(shè)計教材上面的題目,由淺入深地對上課的內(nèi)容進(jìn)行理解和應(yīng)用,在編譯過程難免因?yàn)榇中幕驅(qū)χR點(diǎn)的不熟悉,或是對內(nèi)部機(jī)制的運(yùn)行了解不夠出現(xiàn)ー些這樣或那樣的錯誤,然而錯誤的解決卻是為我們提供了一次經(jīng)驗(yàn)與教訓(xùn),讓我們對編程有了更加通透的了解。這樣能幫助我們寫起代碼來更加熟練,類似的錯誤也會越來越少最終不會再犯。越到后來的實(shí)驗(yàn),知識點(diǎn)越是集中,通過一個程序幾種不同方法的實(shí)現(xiàn)可以讓我們橫向比較不同的結(jié)構(gòu)與設(shè)計的優(yōu)勢和劣勢,在寫大型程序時更好的選擇合適的編譯方式。.第一次實(shí)驗(yàn)C語言程序設(shè)計實(shí)驗(yàn)報告專業(yè) 計算機(jī)科學(xué)與技術(shù) 班級信安1302班日期2014.3.22成績實(shí)驗(yàn)組別第1次實(shí)驗(yàn) 表達(dá)式和標(biāo)準(zhǔn)輸入與輸出實(shí)驗(yàn)指導(dǎo)教師周時陽學(xué)生姓名 熊雅媛 學(xué)號 U201315156同組人姓名實(shí)驗(yàn)名稱 表達(dá)式和標(biāo)準(zhǔn)輸入與輸出實(shí)驗(yàn) 實(shí)驗(yàn)?zāi)康?熟練掌握各種運(yùn)算符的運(yùn)算功能,操作數(shù)的類型,運(yùn)算結(jié)果的類型及運(yùn)算過程中的類型轉(zhuǎn)換,重點(diǎn)是C語言特有的運(yùn)算符,例如位運(yùn)算符,問號運(yùn)算符,逗號運(yùn)算符等;熟記運(yùn)算符的優(yōu)先級和結(jié)合性。.掌握getchar,putchar,scanf和printf等函數(shù)的用法。.掌握簡單的C程序(順序結(jié)構(gòu)程序)的編寫方法。.完成老師布置的習(xí)題及課程設(shè)計上的題目。2.2實(shí)驗(yàn)內(nèi)容(一)輸出“王’’字源程序如下:shangjil\chengxulttinclude<stdio.h>intmainO{puts(***************);TOC\o"1-5"\h\zputsC ? つ;putsc ? つ;puts(***************);puts(" ? つ;puts(" ? つ;puts("*************つ;return0;}實(shí)驗(yàn)步驟:步驟ー:計算輸出過程中應(yīng)控制的空格數(shù),選擇星號作為輸出的標(biāo)記。步驟二:采用四ts函數(shù)實(shí)現(xiàn)對字符串的輸出。調(diào)試及編譯過程:試驗(yàn)中出現(xiàn)的不足及修改:無。調(diào)試:實(shí)現(xiàn)對王字的輸出。(二)編程將華氏溫度轉(zhuǎn)換為攝氏溫度源程序如下:shangiil\chengxu2#include<stdio.h>intmain()(doublex,y;printf("請輸入華氏溫度:”);scanff%げ,&x);v=(5*(x-32))/9;printf(M%.21f(F)=%.21f(C)M,x,y);return0;編輯步驟:步驟ー:定義兩個浮點(diǎn)型變量,分別用來存放華氏溫度和攝氏溫度步驟ニ:用輸入函數(shù)輸入ー個華氏溫度值并存入命名為X的單元中。步驟三:進(jìn)行華氏溫度與攝氏溫度之間的轉(zhuǎn)換,將得到的攝氏溫度值存入命名為y的單元中。步驟四:輸出得到的攝氏溫度值。調(diào)試及編譯過程:輸入數(shù)據(jù)100進(jìn)行測試出現(xiàn)的不足及修改:調(diào)試時發(fā)現(xiàn)輸出為〇,經(jīng)推斷得出原因?yàn)?/9為整型得出的結(jié)果為0將5/9*(x-32)改為(5*(x-32))/9,于是得出正確結(jié)果。(三)分別用三種方法實(shí)現(xiàn)對兩個數(shù)據(jù)的轉(zhuǎn)換源程序如下:shangji1\chengxu3.1shangji1\chengxu3.2shangji1\chengxu3.3#include<stdio.h>intmain()(inta,b,t;printf(Menternumbers:*1);scanf(M%d%dM,&a,&b);t=a;a=b;b=t;printf(**a=%d,b=%d**,a,b);return0;)程序32#include<stdio.h>intmain()(inta,b;printf(**enternumbers:**);scanf(**%d%dM,&a,&b);a=a+b;b=a-b;a=a-b;printf(Ma=%d,b=%dM,a,b);return0;程序3.3#include<stdio.h>intmain()(inta,b;printf("enternumbers:**);scanf(*'%d%d*\&a,&b);a=aAb;b=aAb;a=aAb;printf(Ma=%d,b=%d**,a,b);return0;實(shí)驗(yàn)步驟(實(shí)驗(yàn)ー):步驟ー:定義三個變量,其中兩個用來存放將要進(jìn)行轉(zhuǎn)換的數(shù)據(jù)。步驟ニ:將其中?個變量的值賦給中間變量,再將另?個變量的值賦給這個變量,最后將中間變量的值賦給另ー個變量。實(shí)驗(yàn)步驟(實(shí)驗(yàn)ニ):步驟ー:通過單純的計算關(guān)系,得知a=a+b;b=a?b;a=a-b可以得出最后的結(jié)果。步驟ニ:定義變量,進(jìn)行計算,輸出結(jié)果。實(shí)驗(yàn)步驟(實(shí)驗(yàn)三):步驟ー:查資料得知通過位運(yùn)算也可以完成要求。步驟ニ:通過位運(yùn)算計算得出需進(jìn)行的計算過程,上機(jī)完成并輸出。調(diào)試及編譯過程:測試數(shù)據(jù):12,23(第一個比第二個?。y試數(shù)據(jù):12,12(第一個和第二個ー樣大)

測試數(shù)據(jù):23,12(第一個數(shù)據(jù)比第二個大)C:\Users\hg123\Desktop\Ci§S_t^l\shangji1\chengxu3.1\bin\Debug\5S...■enternumbers:2312|a=12?b=23■Processreturned0<0x0> executiontime:1.807s■Pressanykeytocontinue.出現(xiàn)的不足及修改:無調(diào)試結(jié)果:出現(xiàn)預(yù)期的結(jié)果。(四)將輸入的數(shù)反向輸出。源程序如下:shangiil\chengxu4#include<stdio.h>intmain()(intx;printf("inputscanf("%d",&x);doputchar(x%!O+'O');while((x/=10)!=0);printf(,,\nH);return0;實(shí)驗(yàn)步驟:步驟ー:畫出流程圖,首先輸入?個數(shù),選擇將它的各位數(shù)以字符的形式輸出。步驟ニ:實(shí)現(xiàn)輸出它的個位數(shù)字,即可取此數(shù)除以10后的余數(shù)。步驟三:將其余各位數(shù)字按這種方式進(jìn)行輸出。并控制循環(huán)條件為除以10后的余數(shù)為0時退出循環(huán),循環(huán)過程中將該數(shù)已輸出的位數(shù)上的數(shù)字拋去,即令x=x/10.步驟四:循環(huán)結(jié)束后,由輸出的字符組成的數(shù)字即為所求。調(diào)試及編輯過程:測試數(shù)據(jù):12(兩位數(shù))広C:\Users\hg123\Desktop\Ci§H±Vl\shangji1\chengxu4\bin\Debug\&75...-0input:12f1[Processreturned0<0x0>executiontine:3.516sanukeytocontinue.測試數(shù)據(jù):123(三位數(shù))測試數(shù)據(jù):1234(四位數(shù))出現(xiàn)的不足及修改:本來將x=x/10寫在循環(huán)過程中且用while循環(huán),后來改成dowhile,使得第一次的輸出更方便簡潔,并且將控制x/=10寫進(jìn)控制循環(huán)的括號中,既完成了循環(huán)的控制,又實(shí)現(xiàn)了對x值的修改,是程序簡潔易懂。(五)用兩種方法輸出三個數(shù)中的最大者程序5.1shangji1\chengxu5.1shaxgiiI\chengxu5.2#include<stdio.h>intmain()(inta,b,c,max;printf("internumbers:");scanf("%d%d%d”,&a,&b,&c);max=(a>b)?((a>c)?a:c):((b>c)?b:c);printf("max=%d”,max);return0;}程序5.2include<stdio.h>intmain()(inta,b,c,max;printf("enternumbers:0);scanf(,'%d%d%d",&a,&b,&c);if(a>=b)if(a>=c)max=a;elsemax=c;else{if(b>=c)max=b;elsemax=c;)printf("max=%dM,max);return0;實(shí)驗(yàn)步驟(實(shí)驗(yàn)ー):步驟ー:首先用條件語句判斷出其中兩個數(shù)的大小。步驟二:在條件語句的選擇結(jié)果中再嵌套地用另外兩個條件語句分別表示出前面兩個數(shù)中較大的那個于第三個數(shù)的比較結(jié)果。實(shí)驗(yàn)步驟(實(shí)驗(yàn)ニ):步驟ー:準(zhǔn)備用兩層if語句實(shí)現(xiàn)實(shí)驗(yàn)ー中的過程。步驟ニ:將實(shí)驗(yàn)一中的條件語句轉(zhuǎn)換為if語句。調(diào)試及編譯過程:測試數(shù)據(jù):1,2,3(按從小到大順序)測試數(shù)據(jù):1,3,2(第二種順序)測試數(shù)據(jù):2,1,3測試數(shù)據(jù):2,3,1

C:\Users\hg123\Desktop\Ci§s±^l\shangji1\chengxu5.1\bin\Debug\it...一lintel*numbers:231■nax=3iProcessreturned0<0x0>executiontime:2.009s(Pressanykeytocontinue.測試數(shù)據(jù):3,1,2測試數(shù)據(jù):3,1,2測試數(shù)據(jù):3,2,1C:\Users\hg123\Desktop\C語言上機(jī)、shangji1\chengxu5.1\bin\Debug、計…-internumbers:321max=3Processreturned0<0x0>executiontime:2.956sPressanykeytocontinue.出現(xiàn)的不足及修改:無運(yùn)行結(jié)果:輸出預(yù)期的結(jié)果。(六)輸出三個數(shù)中的居中的數(shù)源程序如下:shangiil\chengxu6#include<stdio.h>intmain()(inta,b,c;printf("enternumbers:");scanf("%d%d%d",&a,&b,&c);if(((a>=b)&&(b>=c))||((b>=a)&&(c>=b)))printf("居中的數(shù)為:%d”,b);elseif(((b>=a)&&(a>=c))||((c>=a)&&(a>=b)))printf("居中的數(shù)為:%d",a);elseprintf("居中ta的數(shù)為:%d",c);return0;實(shí)驗(yàn)步驟:步驟ー:輸入三個數(shù),選擇劃分的類型。步驟二:判斷處在中間的數(shù)需要滿足的條件,來運(yùn)用條件語句完成對所有情況的劃分,判斷輸入的三個數(shù)屬于哪ー種類型,進(jìn)而得出居中的數(shù)為多少。調(diào)試及編譯過程:測試數(shù)據(jù):1,2,3(第一種排列順序)測試數(shù)據(jù):1,3,2(第二種排列順序)測試數(shù)據(jù):2,1,3(第三種排列順序)測試數(shù)據(jù):2,3,1(第四種排列順序)測試數(shù)據(jù):3,1,2(第五種排列順序)測試數(shù)據(jù):3,2,1(第六種排列順序)出現(xiàn)的不足及改正:一:剛開始出現(xiàn)了a>=b>=c的寫法,是很典型的沒有弄清楚數(shù)學(xué)符號和機(jī)器語言之間差別的錯誤,報錯后改為((a>=b)&&(b>=c)二:之前沒有把等于號包括進(jìn)去,導(dǎo)致條件語句不能涵蓋所有的情況,導(dǎo)致錯誤。(七)輸入一元二次方程的三個系數(shù),輸出方程的根。源程序如下:shangiil\chengxu7#include<stdio.h>#include<math.h>intmain()(inta,b,c;floatt,xl,x2;printf("enternumbers:");scanf("%d%d%d",&a,&b,&c);if((b*b-4*a*c)<0)printf("該方程無實(shí)根");else(t=sqrt(b*b-4*a*c);xl=(t-b)/(2*a);x2=(-t-b)/(2*a);printf("x1=%.21f,x2=%.21f",xl,x2);)return0;實(shí)驗(yàn)步驟:步驟ー:分析輸入三個系數(shù)以后可能出現(xiàn)的兩個根,無實(shí)根的情況步驟ニ:將每種情況出現(xiàn)的條件及結(jié)果寫出,其中二次項(xiàng)系數(shù)不為0時情況較復(fù)雜,耍用到math中的函數(shù),可定義ー個變量用來存放特征根。步驟三:將各種情況的結(jié)果輸出,驗(yàn)證。調(diào)試及編譯過程:測試數(shù)據(jù):1,-2,2(無實(shí)根的情況)測試數(shù)據(jù):1,-2,1(兩相同實(shí)根的情況)□I測試數(shù)據(jù):1,ーか6(兩不同實(shí)根的情況)出現(xiàn)的不足及修改:無運(yùn)行的結(jié)果:出現(xiàn)預(yù)期的結(jié)果。(ハ)輸入三角形三邊的邊長,通過海倫公式計算三角形的面積并輸出。源程序如下:shangii1\chengxu8#include<stdio.h>#include<math.h>intmain()(doublea,b,c,t,s;printf("enter3numbers:11);scanf(n%lf%lf%lf;&a,&b,&c);if(((a+b)>c)&&((a+c)>b)&&((b+c)>a))(t=(a+b+c)/2;s=sqrt(t*(t-a)*(t-b)*(t-c));printf(1,s=%.21f1,s);)elseprintf(11error!11);return0;實(shí)驗(yàn)步驟:步驟一:輸入三邊的邊長,判斷能否圍成三角形,若不能,提示錯誤。步驟ニ:若可以圍成,則設(shè)置ー個中間變量用來存放周長的一半,以更方便地使用海倫公式。步驟三:計算并輸出面積值。調(diào)試及編譯過程:測試數(shù)據(jù):3,4,5(比較好計算正確答案)測試數(shù)據(jù):1,2,3(不能圍成三角形)出現(xiàn)的不足及修改:剛開始的時候沒有考慮到可能不能用成三角形的情況,但這是不科學(xué)的,因?yàn)樵谀承┹斎脲e誤的情況下,或是調(diào)試者沒有考慮充分的情況,有可能輸入三個不能圍成三角形的數(shù)。因此在計算前加上了檢驗(yàn)的過程并対不滿足條件的過程進(jìn)行報錯。(九)課程設(shè)計教材41面第二題輸入十個整數(shù)計算其和うhangji1\jiaocai41(2)#include<stdio.h>ttdefineN10intmainO(intsum(intx[],intn);inta[N],i,total;printfCinput%dnumbers:\n*,N);for(i=0;i<=N-l;i++)scanf("%d”,&a[i]);total=sum(a,N);printf(*thetotalis%d”,total);return0;}intsum(intx[],intn)(inti,s;for(i=0;i<=n-l;i++)s+=x[i];returns;}實(shí)驗(yàn)步驟:步驟ー:定義一個字函數(shù),其中一個形式參數(shù)為數(shù)組,另ー個為該數(shù)組中包含的數(shù)的個數(shù),此子函數(shù)用來計算數(shù)組中所有數(shù)的和。步驟二:在主函數(shù)中,采用循環(huán)控制的方式分別給實(shí)際參數(shù)數(shù)組中的每個變量進(jìn)行賦值。調(diào)用子函數(shù)計算所有數(shù)的值,并輸出。調(diào)試及翻譯過程:測試數(shù)據(jù):1到10出現(xiàn)的不足及修改:無運(yùn)行的結(jié)果:輸出預(yù)期的結(jié)果。(十)課程設(shè)計教材51面第一小題輸入一個字符,若為大寫字母則轉(zhuǎn)換為相應(yīng)的小寫字母,否則不變,輸出shangjil\jiaocai51(1)ttinclude<stdio.h>intmainO(charc;c=getchar();if(c>='A'&&cく;'Z')putchar(c-A'+'a');elseputchar(c);return0;}實(shí)驗(yàn)步驟:步驟ー:定義整型變量C,并通過輸入端給它賦值。步驟ニ:判斷它是不是大寫字母,是則轉(zhuǎn)換為小寫字母對應(yīng)的ASCn碼值,否則不改變C的值。輸出c。調(diào)試及編譯過程:測試數(shù)據(jù):A(大寫字母)測試數(shù)據(jù):t(不是大寫字母)出現(xiàn)的不足及修改:無運(yùn)行結(jié)果:輸出預(yù)期的結(jié)果。(十一)課程設(shè)計教材51面第二小題輸入無符號短型整數(shù)X,m,n,取出它從m位開始向左的n位shangjiハJiaocai51⑵ftinclude<stdio.h>intmainO(unsignedshortx,m>n,f;printfCinputnumbers:*);scanf("%hd%hd%hd=,&x,&m,&n);f=x?(m-n+1)?(15-n+l);printf("%d",f);return0;實(shí)驗(yàn)步驟:步驟一:定義短整數(shù)x,m,n用位運(yùn)算達(dá)到要求的數(shù)。調(diào)試及編譯過程:測試數(shù)據(jù):5,3,2出現(xiàn)的不足及修改:無運(yùn)行結(jié)果:輸出預(yù)期的結(jié)果。(十二)課程設(shè)計教材51面第三小題(處理IP地址的輸出)??include<stdio.h>shangjil\jioacai51(3)intmainOlongunsignedintx;intxl,x2,x3,x4;printfCinput*);scanf&x);xl=x&OxOOOOOOff;x2=(x&0x0000ff00)?8;x3=(x40x00ff0000)?16;x4=(x&0xff000000)?24;printf("%d.%d.%d.%d”,xl,x2,x3,x4);return0;)實(shí)驗(yàn)步驟:步驟ー:定義ー個整型變量用來存放ー個長整形數(shù),鍵入ー個數(shù)給此變量賦值。步驟ニ:分別取出這個數(shù)的四部分并向右靠齊,以%d的形式按規(guī)定的順序輸出。調(diào)試及編譯過程:測試數(shù)據(jù):676879571出現(xiàn)的不足及修改:無運(yùn)行結(jié)果:輸出預(yù)期的結(jié)果。3實(shí)驗(yàn)小結(jié).首先耍熟練掌握c語言中各種基本的輸入輸出函數(shù)等等的使用,和各種運(yùn)算符的含義,優(yōu)先級,結(jié)合性和使用。注意細(xì)節(jié)如引用頭文件時不能加分號。.要注意運(yùn)算式各項(xiàng)的類型,在某些特定的式子中對每個參與運(yùn)算的數(shù)的類型有要求,否則結(jié)果不同,如取余運(yùn)算,整形與浮點(diǎn)型就不同。.寫程序時要注意先理解題意,再構(gòu)建出合理的框架,想好用什么樣的語句和方式將程序正確地通過代碼我示出來再進(jìn)行編寫,寫完之后若有錯則根據(jù)錯誤提醒進(jìn)行查找改正。.通過本次實(shí)驗(yàn),實(shí)現(xiàn)比較有用的一項(xiàng)轉(zhuǎn)換即溫度之間的轉(zhuǎn)換,實(shí)現(xiàn)輸入ー計算ー輸出的流程,調(diào)試過程中發(fā)現(xiàn)了數(shù)據(jù)轉(zhuǎn)換的特殊性,以及類型轉(zhuǎn)換的方法。.位運(yùn)算是C語言具有低級語言特色的ー種特殊的運(yùn)算,難度較大,但用起來直接對計算機(jī)進(jìn)行操作,接近機(jī)器語ぎ。.通過將數(shù)據(jù)反向輸出的過程,了解到如何對數(shù)據(jù)的各位數(shù)字進(jìn)行順序上的改變,可根據(jù)具體情況取出需要的數(shù)字并進(jìn)行運(yùn)算。.將條件語句拆開,具有對初學(xué)者來說詳細(xì)明/的優(yōu)點(diǎn),但是用的代碼較多,看起來不夠簡潔。.ー個典型的設(shè)計算法并使之實(shí)現(xiàn)的例子,定義變量,分情況討論及運(yùn)行輸出結(jié)果,鍛煉了分析問題的周密度以及數(shù)據(jù)較多時對數(shù)據(jù)的處理。3.第二次實(shí)驗(yàn)C語言程序設(shè)計實(shí)驗(yàn)報告專業(yè) 計算機(jī)科學(xué)與技術(shù)班級信安1302班日期2014.3.29成績實(shí)驗(yàn)組別第2次實(shí)驗(yàn) 流程控制實(shí)驗(yàn) 指導(dǎo)教師周時陽學(xué)生姓名 熊雅媛 學(xué)號 U201315156同組人姓名實(shí)驗(yàn)名稱 流程控制實(shí)驗(yàn) 實(shí)驗(yàn)?zāi)康?掌握復(fù)合語句,if語句,switch語句的使用,熟練掌握for,while,do-while三種基本的循環(huán)控制語句的使用,掌握重復(fù)循環(huán)技術(shù),了解轉(zhuǎn)移語句與標(biāo)號語句。.掌握運(yùn)用for,while,do-while語句來編寫程序。.練習(xí)轉(zhuǎn)移語句和標(biāo)號語句的使用。.使用集成開發(fā)環(huán)境的調(diào)試功能:單步執(zhí)行,設(shè)置斷點(diǎn),觀察變量值。3.2實(shí)驗(yàn)內(nèi)容(-)計算個人所得稅。源程序如下:shangii2\chengxu9#include<stdio.h>intmain()(doublex,y;do{printf("請輸入工資數(shù):");scanf(M%lf',&x);}while(x<0);if(x<1000)y=0;elseif(x<2000)y=0.05*x;elseif(x<3000)y=0.1*x;elseif(x<4000)y=0.15*x;elseif(x<5000)y=0.2*x;elsey=0.25*x;printf("個人所得稅為:%.2ド,y);return0;實(shí)驗(yàn)步驟:步驟ー:輸入工資數(shù)。步驟二:用if條件句劃分好范圍,使輸入的數(shù)據(jù)能被計算機(jī)讀取并歸入到相應(yīng)的范圍步驟三:根據(jù)對應(yīng)范圍的計算公式計算出個人所得稅并進(jìn)行輸出。調(diào)試及編譯過程:測試數(shù)據(jù):1500(第二類范圍)測試數(shù)據(jù):3500(第四類范圍)測試數(shù)據(jù):6000(第六類范圍)出現(xiàn)的不足及修改:無運(yùn)行結(jié)果:輸出預(yù)期結(jié)果。(二)計算兩數(shù)的最大公約數(shù)和最小公倍數(shù)源程序如下:shangii2\chengxul()#include<stdio.h>intmain()(intx,y,m,n,r;do{printf(Hinputtwonumbers:**);scanf(**%d%d*,?&x,&y);}while((x<0)||(y<0));m=x;n=y;while((r=(x%y))!=0)x=y;

y=r;)printf("最大公約數(shù)為:%d\n”,y);printf("最小公倍數(shù)為:%d”,(m/y)*(n/y)*y);return0;實(shí)驗(yàn)步驟:步驟ー:定義兩個整型變量,并輸入兩數(shù)賦值到這兩個變量。步驟ニ:定義ー個中間變量,用來實(shí)現(xiàn)輾轉(zhuǎn)相除法的過程中對余數(shù)的控制,設(shè)置ー個循環(huán)語句用來尋求最大公約數(shù),其中循環(huán)結(jié)束的標(biāo)志為余數(shù)為〇即能整除。循環(huán)過程中不斷將y的值賦給x,再將r的值賦給y。步驟三:退出循環(huán)后得出最大公約數(shù),再通過最大公約數(shù)得到最小公倍數(shù),最后將這兩數(shù)分別輸出。調(diào)試及編譯過程:Jinputtwonumbers:1230除鑼黜。測試數(shù)據(jù):Jinputtwonumbers:1230除鑼黜。[Processreturned0<0x0>executiontime:61.176s[Pressanykeytocontinue.測試數(shù)據(jù):12,6(兩個成倍數(shù)的數(shù))測試數(shù)據(jù):7,13測試數(shù)據(jù):12,6(兩個成倍數(shù)的數(shù))測試數(shù)據(jù):7,13(兩個互質(zhì)的數(shù))出現(xiàn)的不足及修改:無運(yùn)行結(jié)果:輸出預(yù)期的結(jié)果。(三)判斷ー個數(shù)是否為素數(shù)。源程序如下:shangii2\chengxul1#include<stdio.h>#include<math.h>intmain()(intn,r,i;do(printf(Minputanumber:'1);scanf(M%d';&n);}while(n<2);fbr(i=2,r=1;i<=sqrt(n);i++)r=n%i;if(r)printf("%disaprime",n);elseprintf("%disnotaprime",n);return0;實(shí)驗(yàn)步驟:步驟ー:定義三個整型變量,分別用來存放該數(shù),控制循環(huán)的標(biāo)志數(shù),以及余數(shù)。步驟ニ:設(shè)置循環(huán),將i從2開始直到該數(shù)的算數(shù)平方根,若余數(shù)為〇或己到循環(huán)結(jié)束的標(biāo)志則退出循環(huán)。步驟三:在循環(huán)結(jié)束后判斷余數(shù)的值,若不為0,則判斷該數(shù)為素數(shù),否則該數(shù)不為素數(shù)。調(diào)試及編譯過程:測試數(shù)據(jù):2(特殊情況)測試數(shù)據(jù):7(質(zhì)數(shù))測試數(shù)據(jù):12(不是質(zhì)數(shù))(四)輸出2至U100間的素數(shù)。源程序如下:shangii2\chengxu12#include<stdio.h>#include<math.h>intmain()(intt=0;for(i=2;i<=100;i++)(for(j=2,r=l;(j<=sqrt(i))&&r;j++)r=i%j;if(r)(printf(M%4d",i);if(!(++t%5))printf(,'\nH);})return0;實(shí)驗(yàn)步驟:步驟ー:定義四個整型變量,分別控制內(nèi)層循環(huán),外層循環(huán),余數(shù)及保證一行5個的數(shù)。步驟ニ:外層循環(huán)為2到100間的數(shù),內(nèi)層循環(huán)為逐個檢查它們是否為素數(shù),若是,則輸出,且t+1,當(dāng)t為5的倍數(shù)是輸出換行符即可保證一行5個。調(diào)試及編譯過程:出現(xiàn)的不足及修改:編寫程序工程中if后沒有加花括號,導(dǎo)致輸出錯誤。后檢查并得知,if只控制一條語句,若要控制多條語句,需加上花括號形成復(fù)合語句。(五)輸出九九乘法表源程序如下:shangii2\chengxu13#include<stdio.h>intmain()(inti,j;for(i=l;i<=9;i++)(for(j=l;j<=i;j++)printf(,'%d*%d=%-4d,,,ij,i*j);printf(M\nH);)return0;實(shí)驗(yàn)步驟:步驟ー:定義兩個整形變量,分別用來控制外層循環(huán)和內(nèi)層循環(huán)。步驟ニ:輸岀當(dāng)前的乘法公式。調(diào)試及編譯過程:出現(xiàn)的不足及修改:最開始編寫時內(nèi)層循環(huán)里的結(jié)束標(biāo)志為j〈=9,于是輸出的不是九九乘法表,而是它的兩倍,即有了多余的乘法公式。調(diào)試出來后將標(biāo)志改為i<=i,于是多余的不被輸出。(六)課程設(shè)計教材52面3(3).輸出楊輝三角源程序如下:shangji2\jiaocai52.3(3)^include<stdio.h>intc(intm,intn);intmain()(inti,jl,j2;for(i=0;i<=9;i++)(for(jl=l;jl<=20-i;jl++)printfC");for(j2=0;j2<=i;j2++)(printf(*%d*.c(i,j2));if(c(i,j2)>=1&&c(i,j2)<=9)printf(" ");elseif(c(i,j2)>=10&&c(i,j2)<=99)printf(>つ;elseprintf("つ;}printf("\nつ;return0;}intc(intm,intn)(if(!n)return1;elsereturn(c(m,nT)*(nrn+1)/n);}實(shí)驗(yàn)步驟:步驟ー:定義一個子函數(shù)用來計算需要輸出的數(shù)的值步驟ニ:設(shè)置ー個循環(huán)用來控制前導(dǎo)空格的數(shù)目,通過條件語句的判斷在一位數(shù)后輸出三個空格,在兩位數(shù)后輸出兩個空格,在三位數(shù)后輸出ー個空格。調(diào)試及編譯過程:出現(xiàn)的不足及修改:為了使楊輝三角看起來比較整齊,需??刂瓶崭竦臄?shù)量,不斷調(diào)整每行前導(dǎo)空格減少的數(shù)量來調(diào)整整齊度。(七)教材52.(1)面源程序改錯源程序中scanf語句中n前沒有加&符號,且程序末尾的return0沒有放到花括號中去。修改后為:shangji2\jiaocai52.1#include<stdio.h>intmain()inti,n,s=l;printflpleaseentern:");scanf&n);for(i=l;i<=n;i++)s=s*i;printf("%d!=%cT,n,s);return0;調(diào)試及編譯過程:測試數(shù)據(jù):〇(特殊情況)測試數(shù)據(jù):8出現(xiàn)的不足及修改:無運(yùn)行結(jié)果:出現(xiàn)預(yù)期的結(jié)果。(ハ)教材52面2(1)分別用while和dowhile語句改寫程序下面是用while替換的情況:源程序如下:shangji2\jiaocai52.2(l)ttinclude<stdio.h>intmainO(inti=l,n,s=l;printfCpleaseentern:");scanf(=%d",&n);while(i<=n)s*=i;i++;printfC%d!=%d<,n,s);return0;}下面是用dowhile替換的情況:#include<stdio.h>intmainO(inti=l,n,s=l;printf(*pleaseentern:");scanf("%d",&n);do(s*=i;i++;}while(i<=n);printf("%d!=%d",n,s);return0;}調(diào)試及編譯過程:測試數(shù)據(jù):0(特殊情況)測試數(shù)據(jù):8出現(xiàn)的不足及修改:無 運(yùn)行結(jié)果:出現(xiàn)預(yù)期的結(jié)果。(九)教材52面2(2)輸出滿足n!>=s的最小n值,s由鍵盤端輸入。源程序如下:shangji2\jiaocai52,2(2)ttinclude<stdio.h>intj(intn);intmainOinti,s;printf(*enters:");scanf(*%d*,&s);for(i=0;;i++){if(j(i)>=s)break;}printf(*i=%d*,i);return0;}intj(intn){inti,s=l;for(i=l;i<=n;i++)s*=i;return(s);}調(diào)試及編譯過程:測試數(shù)據(jù):1(特殊情況)測試數(shù)據(jù):40310出現(xiàn)的不足及修改:無 運(yùn)行結(jié)果:出現(xiàn)預(yù)期結(jié)果。(十)教材52面3.(2)將一行字符復(fù)制輸出,其中一個以上的空格用ー個空格代替。源程序如下:shangji2\jiaocai52.3(2)#include<stdio.h>intmainOcharc,s[81];intr=l,i=O;printf("enter:\n");while((c=getchar())!='\n')(if(c!ソ‘)(r=l;s[i]=c;i++;}elseif(r==l)(r=O;s[i]=c;i++;}else}s[i]=>\O';puts(s);return0;調(diào)試及編譯過程:測試數(shù)據(jù):前導(dǎo)多個空格的情況:測試數(shù)據(jù):前導(dǎo)一個空格的情況:C:\Users\hg123\Desktop\C語言上機(jī)、shangji2\g^52面3(2)\bin\Debug...-lenter:ianagii*liamhappyiamagirliamhappyProcessreturned0<0x0〉executiontime:11.900sPressanykeytocontinue.測試數(shù)據(jù):前導(dǎo)沒有空格的情況:出現(xiàn)的不足及修改:無 運(yùn)行結(jié)果:出現(xiàn)預(yù)期的結(jié)果。3實(shí)驗(yàn)總結(jié).本次實(shí)驗(yàn)進(jìn)行流程控制的實(shí)踐,期間運(yùn)用到了順序語句,循環(huán)語句和條件語句,在高中時數(shù)學(xué)方面打下過一點(diǎn)基礎(chǔ),對設(shè)計算法方面也有一定的幫助。.通過本次實(shí)驗(yàn),主耍是解決數(shù)學(xué)問題,為以后解決實(shí)際問題做好鋪墊,期間用到的語句結(jié)構(gòu)雖然比較簡單,卻是寫大型應(yīng)用軟件不可缺少的基石。.在編寫這些程序的過程中,相比之前又是ー次大的進(jìn)步,由簡單的語句過渡到簡單的程序。.可以通過數(shù)學(xué)的推導(dǎo)簡化過程,如在楊輝三角里可以通過數(shù)學(xué)關(guān)系輕松的寫出程序..要熟練運(yùn)用for,while,do-while語句,通過反復(fù)的使用與組合可以實(shí)現(xiàn)一些復(fù)雜的算法.加強(qiáng)了對循環(huán)語句的運(yùn)用能力,即分析循環(huán)結(jié)束標(biāo)志的能力,選擇更好的循環(huán)條件和循環(huán)結(jié)束標(biāo)志,可以節(jié)省空間,也使得程序看上去更簡潔。.將循環(huán)語句嵌套使用,加強(qiáng)了對for語句的運(yùn)用能力,它作為while語句的進(jìn)化形式,具有簡潔優(yōu)美清晰方便的優(yōu)點(diǎn)4.第三次實(shí)驗(yàn)C語言程序設(shè)計實(shí)驗(yàn)報告專業(yè) 計算機(jī)科學(xué)與技術(shù) 班級信安1302班日期2014.4.12成績實(shí)驗(yàn)組別第3次實(shí)驗(yàn)流程控制實(shí)驗(yàn)指導(dǎo)教師周時陽學(xué)生姓名熊雅媛學(xué)號U201315156同組人姓名實(shí)驗(yàn)名稱 流程控制實(shí)驗(yàn) 實(shí)驗(yàn)?zāi)康?掌握復(fù)合語句,if語句,switch語句的使用,熟練掌握for,while,do-while三種基本的循環(huán)控制語句的使用,掌握重復(fù)循環(huán)技術(shù),了解轉(zhuǎn)移語句與標(biāo)號語句。.掌握運(yùn)用for,while,do-while語句來編寫程序。.練習(xí)轉(zhuǎn)移語句和標(biāo)號語句的使用。.使用集成開發(fā)環(huán)境的調(diào)試功能:單步執(zhí)行,設(shè)置斷點(diǎn),觀察變量值。.2實(shí)驗(yàn)內(nèi)容(一)在不用數(shù)組的情況下求n個數(shù)的最大值最小值和平均值源程序如下shangji3\chengxu14ftinclude<stdio.h>intmain()(intmax,min,n,x,i;floats;s=0;i=l;printf("entern:");scanf("%d",&n);printf("enterthefirstnumber:");scanf("%d",&x);s=s+x;max=x;min=x;do(scanf("%d",&x);s+=x;if(x>max)max=x;elseif(x<min)min=x;i++;}while(i<=n-l);printf("themax=%d\n",max);printf("themin=%d\n",min);printf("theaverageis%.2f\n",s/n);return0;}實(shí)驗(yàn)步驟:步驟ー:定義兩個整型變量分別存放最大值最小值,定義ー個整型變量用來存放輸出的數(shù)的和,定義ー個變量n用來存放應(yīng)該輸入的數(shù)的個數(shù),定義ー個變量i用來控制循環(huán)。步驟二:鍵入n的值,輸入第一個數(shù)的值,并將此值賦給最大值和最小值。在循環(huán)結(jié)束前,將后來輸入的數(shù)分別與當(dāng)前最大值和最小值比較,不斷將目前的最大值和最小值分別賦給兩個變量。在不斷輸入的過程中,將后來輸入的數(shù)加到s上。步驟三:循環(huán)結(jié)束,輸出最大值和最小值,并將和除以n得平均值。調(diào)試及編譯過程:測試數(shù)據(jù):n=5,輸入11,12,13,14,15測試數(shù)據(jù):n=5,輸入15,14,13,12,11(反向輸入)出現(xiàn)的不足及修改:1.如何控制輸入的數(shù)為n個時,本來將i的循環(huán)條件寫為iぐn,發(fā)現(xiàn)這樣寫得輸入n+1個數(shù)才能將輸入流中的數(shù)送入運(yùn)算器。這樣的錯誤時由于沒有完全弄明白dowhile循環(huán)的特點(diǎn),后改為iぐnT,這樣輸入倒數(shù)第二個數(shù)時還耍進(jìn)行最后一次循環(huán),于是輸入最后一個數(shù)。(二)依據(jù)下列格里高利公式,計算圓周率!T。要求最后ー項(xiàng)11111 TT13 57g 4源程序如下:shangji3\chengxul5ttinclude<stdio.h>ttdefineEPSle-6intmainOinti,j;doubles;for(s=0,i=l;(l.0/i)>EPS;i++)j=(i%2)?l:-l;s+=j*(1.0/(2*i-1));}printfCs=%.If*,4*s);return0;}實(shí)驗(yàn)步驟:步驟ー:在執(zhí)行函數(shù)前定義精確度,定義兩個整型變量分別控制循環(huán)和決定加上的數(shù)的正負(fù).步驟二:開始循環(huán),控制循環(huán)結(jié)束的條件為再次加上的數(shù)的絕對值小于精確值。步驟三:結(jié)束循環(huán),將累次相加的結(jié)果輸出。調(diào)試及編譯過程:出現(xiàn)的不足及修改:無運(yùn)行結(jié)果:輸出預(yù)期的結(jié)果。(三)完全數(shù)是ー些特殊的自然數(shù)。它所有的真因子(即除了自身以外的約數(shù))的和恰好等于它本身。試求出1T000范圍內(nèi)的所有完全數(shù)。源程序如下:shangji3\chengxul6??include<stdio.h>intwqs(intx);intmain()inti;for(i=l;i<=1000;i++)if(wqs(i))printfi);}return0;intwqs(intx)inti,s;s=0;for(i=l;i<=x/2;i++)if(!(x%i))s+=i;}if(s==x)return(1);elsereturn(0);}實(shí)驗(yàn)步驟:步驟ー:定義一個子函數(shù)用來判斷ー個數(shù)是否為完全數(shù),即將1到該數(shù)的一半的數(shù)進(jìn)行測試,若是此數(shù)的因子,則加到存放因子之和的變量中。步驟二:控制1到1000的循環(huán),對每?個數(shù)用子函數(shù)進(jìn)行測試,若是完全數(shù),則輸出。調(diào)試及編譯過程:出現(xiàn)的不足及修改:無運(yùn)行結(jié)果:輸出預(yù)期的結(jié)果。(四)水仙花數(shù)是指ー個3位數(shù),它的每個位上的數(shù)字的3次塞之和等于它本身。例如:グ+53+33=153〇試求出所有的水仙花數(shù)。源程序如下:shangji3\chengxul7ttinclude<stdio.h>intsxh(intx);intmainOinti;for(i=100;i<=999;i++)if(sxh(i))printfi);}return0;}intsxh(intx)(ints,r,xl;xl=x;s=0;do(r=x%10;s+=r*r*r;}while((x/=10)!=0);if(s=xl)return(1);elsereturn(0);}實(shí)驗(yàn)步驟:步驟ー:定義ー個子函數(shù)用來判斷ー個數(shù)是否為水仙花數(shù)。即在子函數(shù)中,通過控制循環(huán)將此數(shù)的三個位數(shù)上的數(shù)字的三次方相加,若等于這個數(shù)本身即為水仙花數(shù)。步驟ニ:建立一個循環(huán)過程將100到999之間的數(shù)試一遍,調(diào)用子函數(shù)逐個判斷哪些是水仙花數(shù)并輸出。調(diào)試及編譯過程:出現(xiàn)的不足及解決:央第一次編寫程序的過程中,在寫子函數(shù)的過程中,由于在控制循環(huán)時將x的值改變,于是在判斷x是否等于個位數(shù)字幕次方和時不能得出正確結(jié)果。因?yàn)樵谘h(huán)過程中X的值已經(jīng)改變。后來將X的值在循環(huán)前賦給另ー個整型變量X1,也就是說將X的值保存在命名為X1的單元中,后來只用比較X1和基次方和,即可判斷。運(yùn)行結(jié)果:修改后能夠輸出正確的結(jié)果。(五)一個的數(shù),其七進(jìn)制和九進(jìn)制均為3位數(shù),且3位數(shù)的數(shù)字正好相反。試求出這個數(shù)。源程序如下:shangji3\chengxul8#include<stdio.h>intq(intx);intj(inty);intp(intxl,intx2);intmainOinti;for(i=10;i<=1000;i++)(if(p(q(i),j(i)))printf("%4d”,i);}return0;}intq(intx)(intj,r,i=l;ints=0;do(r=x%7;for(j=l;j<=i-l;j++)r*=10;s+=r;i++;}while((x/=7)!=0);return(s);}intj(inty)(intj,r,i=l;ints=0;do(r=y%9;for(j=l;j<=i-l;j++)r*=10;s+=r;i++;}while((y/=9)!=0);return(s);}intrl,r2,r3;rl=xl%10;r2=(xl/=10)%10;r3=(xl/=10)%10;if((rl*100+r2*10+r3)=x2)return(1);elsereturn(0);實(shí)驗(yàn)步驟:步驟ー:定義兩個子函數(shù)分別用來求出ー個數(shù)的七進(jìn)制數(shù)和九進(jìn)制數(shù),再定義ー個子函數(shù)用來判斷兩個三位數(shù)是否為各位數(shù)字相反。步驟二:在每個子函數(shù)編譯過程中,控制循環(huán)使該數(shù)分別除以7和9直到除以后為0,再將此值返回到調(diào)用處。在用以判斷的子函數(shù)中,將已給的兩個形式參數(shù)中的ー個各位調(diào)換位置比較是否與另一個相同。步驟三:逐個檢測,找出符合要求的數(shù)。調(diào)試及編譯過程:出現(xiàn)的不足及修改:開始時沒有發(fā)現(xiàn)有范圍是三位數(shù),于是在轉(zhuǎn)換進(jìn)制的過程中以n為位數(shù),循環(huán)條件為除以后不為〇,加大了計算的繁瑣性,但具有一般性。運(yùn)行結(jié)果:輸出預(yù)期的結(jié)果,經(jīng)檢驗(yàn)此結(jié)果為正確的。(六)求解1ゴ3的尾數(shù)三位是多少。源程序如下:shangji3\chengxul9ttinclude<stdio.h>intremain(intx);intmainO(inti,s=13;for(i=2;i<=13;i++)(s*=13;s=remain(s);}printf("thelastthreenumbersare%d",s);return0;}intremain(intx)inti=l,j,r,s=0;dor=x%10;for(j=l;j<=i-l;j++)r*=10;s+=r;i++;x/=10;}while(i<=3);return(s);實(shí)驗(yàn)步驟:步驟ー:通過分析得知只要在計算過程中不斷保留計算結(jié)果的低三位即可得出結(jié)果,于是定義一個子函數(shù)用來計算ー個數(shù)保留低三位后的值。步驟二:控制循環(huán)將累次乘的積不斷乘以13,將結(jié)果調(diào)用子函數(shù)保留低三位,直到循環(huán)結(jié)束輸出セ口果。調(diào)試及編譯過程:出現(xiàn)的不足及修改:無運(yùn)行結(jié)果:輸出預(yù)期的結(jié)果。(七)解10〇!尾數(shù)有多少個。。源程序如下:shangji3\chengxu20ftinclude<stdio.h>intmainO(intr,s=0,r1=100;do(r=rl/5;s+=r;}while(rl/=5);printf(*thenumberof0is%d”,s);return0;實(shí)驗(yàn)步驟:步驟ー:通過查找資料并分析得,造成〇的原因?yàn)椹`對2和5的乘積,而在1到100的數(shù)中,有2的因子比有5的因子多得多,于是只用計算ー個數(shù)中5的因子有多少個,再把它們相加。步驟ニ:由于1到100中,每隔五個數(shù)就有一個數(shù)是5的倍數(shù),而在這些5的倍數(shù)中,又每隔5個數(shù)就會有一個是25的倍數(shù),只是5的倍數(shù)而不是25的倍數(shù)時,能得出1個零,是25的倍數(shù)時,能得出2個零。步驟三:將100除以5得出20個數(shù),再將20除以5得出4,4除以5為〇,因此計算得20+4+0=24.用算法實(shí)現(xiàn)上述過程即可。調(diào)試及編譯過程:現(xiàn)的不足及修改:開始時打算通過保留末尾零以及下一位(即87000保留7000)來計算結(jié)果,但這樣做會造成兩個結(jié)果,ー是會造成溢出,二是有些事25及更大的倍數(shù)如2500,若只保留500,在乘以4的時候會少算ー個零,這樣做無法確定合適的保留位數(shù)。于是通過查找資料等方式,尋求到了科學(xué)的解決方法。3實(shí)驗(yàn)總結(jié).通過此次實(shí)驗(yàn),了解到算法是以簡潔為靈魂的,在?個問題有多種解決辦法時應(yīng)首先采取簡潔的方法,而且在設(shè)計算法時不能只考慮理想情況,還要考慮到算法的時間復(fù)雜性和空間復(fù)雜性。.通過本次實(shí)驗(yàn),加強(qiáng)子函數(shù)調(diào)用和循環(huán)控制的練習(xí),并能夠通過運(yùn)行結(jié)果適當(dāng)修改循環(huán)因子的循環(huán)條件,來使程序運(yùn)行正確。.通過本次實(shí)驗(yàn),加強(qiáng)對多重循環(huán)的應(yīng)用能力,以及控制內(nèi)層循環(huán)和外層循環(huán)之間的聯(lián)系,在編譯過程中若發(fā)現(xiàn)循環(huán)次數(shù)不對,直接改變控制循環(huán)的條件可以發(fā)現(xiàn)問題。.通過此次實(shí)驗(yàn),引入了子函數(shù),加深對子函數(shù)方便性的理解。.通過此次實(shí)驗(yàn),加強(qiáng)了對循環(huán)語句的練習(xí),增加了一種新的控制循環(huán)結(jié)束的方式,引入預(yù)編譯的過程。.通過本次實(shí)驗(yàn),加深了對dowhile循環(huán)的理解,學(xué)會了控制循環(huán)的新方法。5.第四次實(shí)驗(yàn)C語言程序設(shè)計實(shí)驗(yàn)報告專業(yè)計算機(jī)科學(xué)與技術(shù)班級信安1302班日期2014.4.26成績實(shí)驗(yàn)組別第4次實(shí)驗(yàn) 函數(shù)與程序結(jié)構(gòu)實(shí)驗(yàn)&編譯預(yù)處理實(shí)驗(yàn)指導(dǎo)教師周時陽學(xué)生姓名 熊雅媛 學(xué)號 U201315156同組人姓名實(shí)驗(yàn)名稱 函數(shù)與程序結(jié)構(gòu)實(shí)臉&編譯預(yù)處理實(shí)驗(yàn) 4.1實(shí)驗(yàn)?zāi)康?熟悉和掌握函數(shù)的定義,聲明,調(diào)用函數(shù)與參數(shù)傳遞的方法,以及函數(shù)返回值類型的定義和返回值使用..熟悉和掌握不同存儲類型變量的使用..熟悉多文件編譯技術(shù)..掌握文件包含、宏定義、條件編譯、assert宏的使用。.練習(xí)帶參數(shù)的宏定義、條件編譯的使用。.練習(xí)assert宏的使用。.使用集成開發(fā)環(huán)境中的調(diào)試功能:單步執(zhí)行,設(shè)置斷點(diǎn),觀察變量值。4.2實(shí)驗(yàn)內(nèi)容(一)斐波那契數(shù)列F0=0,F產(chǎn)1,Fn=Fn.1+Fn.2(n>=2,neN*),求Fn。源程序如下:shangji4\chengxu21#include<stdio.h>intF(intn);intmain()(intx;do(printf("inputanumber:'1);scanf(n%d",&x);}while(x<0);printf("F%d=%d",x,F(x));return0;intF(intn)

if(!n)return(0);elseif(n==l)return(1);elsereturn(F(n?l)+F(n-2));實(shí)驗(yàn)步驟:步驟ー:定義一個子函數(shù)求出斐波拉切數(shù)列第n項(xiàng)的值,子函數(shù)的形式參數(shù)為n控制項(xiàng)數(shù),子函數(shù)中采用遞歸的思想求得結(jié)果。步驟ニ:在主函數(shù)中通過鍵盤輸入n的值,調(diào)用子函數(shù)將n的值傳給形式參數(shù),將計算得出的該項(xiàng)值返回到主函數(shù),并在屏幕上輸出。調(diào)試及編譯過程:測試數(shù)據(jù):1(第一項(xiàng))測試數(shù)據(jù):2(第二項(xiàng))測試數(shù)據(jù):7測試數(shù)據(jù):1(第一項(xiàng))測試數(shù)據(jù):2(第二項(xiàng))測試數(shù)據(jù):7(任意選取ー項(xiàng))3C:\Users\hg123\Desktop\C?B±^l\shangji4\chengxu21\bin\Debug\che...inputanumber:?ロ=13Processreturned0<0x0> executiontine:0.752s[Pressanykeytocontinue.不足及修改:剛開始時未注意到項(xiàng)數(shù)有要求為大于或等于〇,導(dǎo)致若輸入的n值不在此區(qū)間內(nèi),則無法輸出預(yù)期的結(jié)果。后改為控制一個循環(huán),若輸入的n值不符合要求,則重復(fù)提示輸入和接受數(shù)據(jù)的過程。結(jié)果:出現(xiàn)預(yù)期的實(shí)驗(yàn)結(jié)果。(二)計算多項(xiàng)式的值anxn+an.ixn'1+an-2Xn'2+...+a3x3+a2x2+aix1+a。源程序如下:shangji4\chengxu22#include<stdio.h>intmain()(intn,i,x,xl;inta[800];for(i=0;i<800;i++)a[i]=O;printf(Minputanumber:");scanf("%d",&n);printf("input%dnumbers:",n);for(i=0;i<n;i++)scanf(n%d",&a[i]);printf("inputx:");scanf("%d",&x);if(n==l)printf("thefinalresultis%d",a[O]);else{xl=x;x=a[O]*x+a[l];for(i=2;i<=n-l;i++)x=x*xl+a|i];printf("thefinalresultis%d",x);)return0;實(shí)驗(yàn)步驟:步驟ー:在鍵盤端輸入需要的項(xiàng)數(shù),并定義ー個數(shù)組用來存放各項(xiàng)系數(shù),從左至右,按照計算的順序,分別為最髙項(xiàng)系數(shù),依次往下,最后ー項(xiàng)為常數(shù)項(xiàng)系數(shù)。步驟二:將多項(xiàng)式采用拆分成多步乘積與相加的形式,通過控制循環(huán)改變與X相乘的因子,計算出最后結(jié)果并輸出。調(diào)試及編譯過程:測試數(shù)據(jù):系數(shù)個數(shù)為1,即只有常熟項(xiàng),此時分別輸入兩個不同的X的值如2和3應(yīng)得到的都是同一個值且為a的值。

C:\Users\hg123\Desktop\C語言上機(jī)、shangji4\chengxu22\bin\Debug\che...C:\Users\hg123\Desktop\C語言上機(jī)、shangji4\chengxu22\bin\Debug\che...一0input1numbers:3測試數(shù)據(jù):n=2,ti0=2,a1=1,x=3(任意數(shù)據(jù))測試數(shù)據(jù):n=3,aO=l,al=2,a2=3,x=4(任意數(shù)據(jù))inputx:3thefinalresultis3Processreturned0<0x0>executiontime測試數(shù)據(jù):n=2,ti0=2,a1=1,x=3(任意數(shù)據(jù))測試數(shù)據(jù):n=3,aO=l,al=2,a2=3,x=4(任意數(shù)據(jù))出現(xiàn)的不足及修改:最開始時、'in為?時不能輸出預(yù)期的結(jié)果,經(jīng)分析得出是因?yàn)槌?shù)項(xiàng)系數(shù)的排列規(guī)律與其他項(xiàng)系數(shù)不一樣,若按此排列方法,當(dāng)n=l時,應(yīng)作為另外一種情況討論,直接輸出a[。即常數(shù)項(xiàng)的值即可。實(shí)驗(yàn)結(jié)果:修改后可以輸出預(yù)期的結(jié)果。(三)設(shè)計ー個計算兩個x和y的最大值函數(shù)max(x,y),并利用該函數(shù)實(shí)現(xiàn)求n個數(shù)的最大值。源程序如下:shangji4\chengxu23#include<stdio.h>intmax(intx,inty);intmain()(inta[800];inti,n,m;printf("inputn:");scanf("%d",&n);printf("input%dnumbers:",n);for(i=0;i<n;i++)scanf("%d",&a[i]);m=a[O];for(i=1;i<n;i++)m=max(a[i],m);printf("themaxnumberis%d",m);return0;)intmax(intx,inty){return((x>y)?x:y);實(shí)驗(yàn)步驟:步驟ー:聲明求兩數(shù)較大值的子函數(shù),在主函數(shù)中定義一個整型數(shù)組存放需要比較的n個數(shù),在鍵盤端輸入需要比較的數(shù)的個數(shù),通過控制循環(huán)從鍵盤端輸入n個數(shù)并賦值到數(shù)組中。步驟二:通過預(yù)先定義的循環(huán)變量控制循環(huán),首先將a[0]設(shè)為最大值,再往后通過兩兩比較,不斷最大的數(shù)賦給變量max,在循環(huán)結(jié)束后輸出max。步驟三:定義子函數(shù),通過條件語句比較出兩數(shù)中的較大值并返回到主函數(shù)中。調(diào)試及編譯過程:測試數(shù)據(jù):n=1(只有一個數(shù)據(jù)時)測試數(shù)據(jù):n=5(任意選取n的個數(shù))出現(xiàn)的不足及修改:無實(shí)驗(yàn)結(jié)果:輸出預(yù)期的結(jié)果。(四)設(shè)計ー個判斷x是否是素數(shù)的函數(shù)prime(X),并利用該函數(shù)實(shí)現(xiàn)輸出2-100范圍內(nèi)的所有素數(shù)。源程序如下:shangji4\chengxu24#include<stdio.h>intP(intn);intmain()(inti,k=0;for(i=2;i<=100;i++)(if(P(i))(printf("%-4d",i);k++;if(!(k%5))printf("\n");return0;}intP(intn){inti,r=1;for(i=2;(i*i<=n)&&r;i++)r=n%i;if(r)return(1);elsereturn(0);實(shí)驗(yàn)步驟:步驟ー:聲明判斷素數(shù)的子函數(shù),該函數(shù)為整型,形式參數(shù)為要判斷的數(shù),當(dāng)此數(shù)是素數(shù)時輸出1,否則輸出〇步驟ニ:定義兩個整型變量分別用來控制循環(huán)和控制一行五個的輸出??刂蒲h(huán)過程中調(diào)用子函數(shù)對正在循環(huán)的數(shù)進(jìn)行判斷,若是素數(shù)則輸出,且另ー個計數(shù)變量加一。步驟三:控制另ー個循環(huán),若計數(shù)變量的值是5的倍數(shù)則輸出換行符實(shí)現(xiàn)換行。步驟四:定義子函數(shù),控制循環(huán)范圍為2到該數(shù)的平方根,若相除的過程中出現(xiàn)可以整除的情況,則該數(shù)不是素數(shù)并退出循環(huán),若退出循環(huán)時余數(shù)不為0,則該數(shù)是素數(shù)。調(diào)試及編譯過程:出現(xiàn)的不足及修改:在控制五個一行輸出的過程中,最開始把控制條件寫在/條件語句的外面,結(jié)果并不是按照五個一行輸出,經(jīng)分析發(fā)現(xiàn)是由于這樣的話,在k到達(dá)了5之后,每次循環(huán)進(jìn)行到這里都會輸出ー個換行符,于是將它改為把控制條件寫在了判斷素數(shù)的條件語句的花括號之內(nèi),這樣只有是素數(shù)時オ會執(zhí)行括號內(nèi)的內(nèi)容。實(shí)驗(yàn)結(jié)果:修改后輸出預(yù)期的結(jié)果。(五)課程設(shè)計教材55面4(1)實(shí)現(xiàn)遞歸函數(shù)求兩個數(shù)的最大公約數(shù)。源程序如下:shangji4\jiaocai55.4(1)#include<stdio.h>intmain()intx,y,r;do{printf("inputtwonumbers:");scanf("%d%d",&x,&y);}while((x<0)||(y<0));while((r=(x%y))!=O){x=y;y=r;}printf("%d",y);return0;實(shí)驗(yàn)步驟:步驟ー:定義兩個整型變量,當(dāng)從鍵盤端獲取的兩個數(shù)據(jù)均大于零時,將這兩個數(shù)分別賦給這兩個整型變量。步驟ニ:用輾轉(zhuǎn)相除法,實(shí)現(xiàn)對這兩個數(shù)最大公約數(shù)的求法,并輸出。調(diào)試及編譯過程:測試數(shù)據(jù):4,5(互質(zhì)的倆數(shù))(若輸入的數(shù)中有為負(fù)的,則需重新輸入)測試數(shù)據(jù):2430(一般情況)測試數(shù)據(jù):1224(一個可以被另ー個整除的倆數(shù))出現(xiàn)的不足及修改:無 實(shí)驗(yàn)結(jié)果:輸出預(yù)期的結(jié)果(六)課程設(shè)計教材55面4(2)驗(yàn)證哥德巴赫猜想,ー個大于或等于4的偶數(shù)都是兩個素數(shù)的和。源程序如下:shangji4\jiaocai55.4(2)#include<stdio.h>intp(intx);intmain()(intn,i,j;printf("entern:");scanf("%d",&n);for(i=2;i<n;i++)(for(j=2;j<=i;j++)(if(p(i)&&p(j)&&(i+j==n)){printf("%d+%d=%d\n",i,j,n);break;return0;)intp(intx){inti,r=1;for(i=2;(i*i<=x)&&r;i++)r=x%i;if(r)return(1);elsereturn(0);實(shí)驗(yàn)步驟:步驟ー:聲明一個子函數(shù)用來判斷素數(shù),定義ー個整型變量用來存放將被拆成兩個素數(shù)之和的偶數(shù)。從鍵盤端獲取這個偶數(shù)。步驟ニ:通過兩層循環(huán),分別定義來年各個整型變量從2到這個偶數(shù)間依次變化,當(dāng)它們都是素數(shù)且和為這個偶數(shù)的時候輸出。調(diào)試及編譯過程:測試數(shù)據(jù):4(起點(diǎn)的偶數(shù))

測試數(shù)據(jù):28(任意選取ー個偶數(shù))出現(xiàn)的不足及修改:無 實(shí)驗(yàn)結(jié)果:輸出預(yù)期的結(jié)果(七)課程設(shè)計教材55面4(3)通過宏定義,輸出在這兩個定義的常量之間所有偶數(shù)關(guān)于驗(yàn)證哥德巴赫猜想的式子。源程序如下:shangji4\jiaocai55.4(3)#include<stdio.h>#defineBEGIN10#defineEND100intp(intx);intmain()(inti,j,k;for(k=BEGIN;k<=END;k+=2)(for(i=2;i<k;i++)(for(j=2;j<i;j++)(if(p(i)&&p(j)&&(i+j==k))printf("%d+%d=%d\n",i,j,k);break;))return0;)intp(intx)(inti,r=l;for(i=2;(i*i<=x)&&r;i++)r=x%i;if(r)return(1);elsereturn(0);實(shí)驗(yàn)步驟:步驟ー:聲明ー個判斷素數(shù)的子函數(shù),定義三個控制循環(huán)的變量,分別控制要求驗(yàn)證哥德巴赫猜想的范圍和加法中的兩個相加的素數(shù)。步驟二:在循環(huán)過程中調(diào)用了?函數(shù)實(shí)現(xiàn)對相加兩數(shù)為素數(shù)的控制,若滿足兩素數(shù)的和為該數(shù),則將加法式輸出。步驟三:定義子函數(shù),通過控制循環(huán)判斷ー個數(shù)是否為素數(shù)。調(diào)試及編譯過程:出現(xiàn)的不足及修改:無 實(shí)驗(yàn)結(jié)果:輸出預(yù)期結(jié)果。(ハ)課程設(shè)計教材61面4⑴通過帶參數(shù)宏的定義實(shí)現(xiàn)計算三角形的面積。源程序如下:shangji4\jiaocai61.4(1)#include<stdio.h>#include<math.h>#defines(a,b,c)(((a)+(b)+(c))/2)#definearea(s,a,b,c)(sqrt((s)*((s)-(a))*((s)-(b))*((s)-(c))))intmain()(floats,a,b,c;printf(uentera,b,c:");scanf(n%f%f%f;&a,&b,&c);s=s(a,b,c);printf(ntheareais%.2f*,area(s,a,b,c));return0;)實(shí)驗(yàn)步驟:步驟ー:定義兩個帶參數(shù)宏,分別計算三角形周長的一半和三角形的面積。步驟二:在主函數(shù)中,通過鍵盤端輸入三角形三邊的邊長,通過宏定義計算出面積并輸出。調(diào)試及編譯過程:測試數(shù)據(jù):3,4,5(方便計算)出現(xiàn)的不足及修改:無實(shí)驗(yàn)結(jié)果:輸出預(yù)期的結(jié)果。(九)課程設(shè)計教材61面4(2)通過宏定義的條件運(yùn)算,分別按照客戶的需求,以兩種不同的形式輸出從鍵盤端得到的字符串.源程序如下:shangji4\jiaocai61,4(2)#include<stdio.h>#defineCHANGE1#defineCHANGE2intmain()(charc;while((c=getchar())!=EOF)(#ifCHANGE==1(if(c>='a'&&c<="z')printf("%c",c-"a'+'A');elseif(c>='A'&&c<="Z')printf("%c",c-"A'+'a');elseprintf("%c",c);}#elifCHANGE==2printtf("%c",c);#endif}return0;}實(shí)驗(yàn)步驟:步驟ー:定義兩個不帶參宏(具體使用時只需保留一個)分別用作兩種形式的標(biāo)志。步驟二:通過循環(huán)語句實(shí)現(xiàn)対輸入文本的“復(fù)制”,若是需要改變輸出的形式,則通過條件語句實(shí)現(xiàn)。調(diào)試及編譯過程:測試數(shù)據(jù):輸出大寫形式測試數(shù)據(jù):不翻轉(zhuǎn),即chan肥ヨ(十)教材53面源程序1改錯該程序出現(xiàn)的錯誤有:.沒有在主函數(shù)前聲明了?函數(shù)。.應(yīng)在輸入端輸入n的值。.return〇應(yīng)放在花括號里面。.在子函數(shù)中沒有對fac進(jìn)行初始化。.子函數(shù)中的for循環(huán)應(yīng)加上花括號構(gòu)成復(fù)合語句。修改后程序如下:shangji4\jiaocai53.1#include<stdio.h>longsumfac(intn);intmain(){intn;printf("entern:");scanf("%d",&n);printf("l!+2!+..+%d!=%ld”,n,sum_fac(n));return0;)longsum_fac(intn)|inti;longs=0;longfac=l;for(i=l;i<=n;i++){fac*=i;s+=fac;}return(s);}調(diào)試及編譯過程:測試數(shù)據(jù):1(第一個數(shù)據(jù))測試數(shù)據(jù):3(任意取?個數(shù))出現(xiàn)的不足及修改:無 運(yùn)行的結(jié)果:出現(xiàn)預(yù)期的結(jié)果。(H一)教材54面2(1)修改源程序中的sum_fac函數(shù),使其計算量最小源程序如下:shangji4\jiaocai54,2(1)ftinclude<stdio.h>intmainO(intn,i,fac=l,s=O;printf(*entern:");scanf(*%d*,&n);for(i=l;i<=n;i++)(fac*=i;s+=fac;}printfCl!+...+%d!=%d",n,s);return0;}調(diào)試及編譯過程:測試數(shù)據(jù):1(起始數(shù)據(jù))測試數(shù)據(jù):5(任意選取數(shù)據(jù))(十二)教材54面2(2)修改源程序中的sum_fac函數(shù),計算s=l+l/l!+l/2!+……1/n!源程序如下:shangji4\jiaocai54.2(2)#include<stdio.h>doublesum_fac(intn);intmainO{intn;printf(*entern:");scanf("%d",&n);printfCl!+2!+..+%d[=%.21f”,n,sum_fac(n));return0;}doublesum_fac(intn)(inti;doubles=0;longfac=l;for(i=l;i<=n;i++)(fad;s+=l.0/fac;}return(s);}調(diào)試及編譯過程:測試數(shù)據(jù):1(起始數(shù)據(jù))測試數(shù)據(jù):2(最后一個能除盡的)測試數(shù)據(jù):5(任意選取一個數(shù))(十三)教材59面源程序1改錯源程序中有這些錯誤:.定義SUM和DIF的方式錯誤。.定義交換的方式錯誤,且不能達(dá)到交換的H的.主函數(shù)中定義了t卻沒有使用,使用了a卻沒有定義。.scan「函數(shù)中,不需要加逗萬。修改后程序如下:shangji4\jiaocai59.1#include<stdio.h>#defineSUM((a)+(b))#defineDIF((a)-(b))#defineSWAP(a,b)a=a+b;b=a-b;a=a-b;intmain()(inta,b;printf("entera&b:");scanf(飛d%d”,&a,&b);printf("\nSUM=%d\nthedifferencebetweensquareofaandsquareofbis%d",SUM,SUM*DIF);SWAP(a,b);printf("\nNowa=%d,b=%d",a,b);return0;調(diào)試及編譯過程:測試數(shù)據(jù):1,2(任意選取一組數(shù)據(jù))測試數(shù)據(jù):2,1(將上一組數(shù)據(jù)翻轉(zhuǎn))出現(xiàn)的不足及修改:無運(yùn)行結(jié)果:出現(xiàn)預(yù)期的結(jié)果。(十四)教材59面2(1)修改源程序使它能完成求三數(shù)中最大者,計算兩數(shù)之和的功能。源程序的錯誤有:.未在主函數(shù)前聲明子函數(shù),且主函數(shù)類型應(yīng)為int。.在主函數(shù)的scanf函數(shù)調(diào)用中,雙引號內(nèi)不需要加逗號。源程序修改如下:shangji4\jiaocai59.2(l)??include<stdio.h>intmax(intx,inty,intz);floatsum(floatx,floaty);intmainO(inta,b,c;floatd,e;printf("entera&b&c:");scanf("%d%d%d"

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論