版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、C課程設(shè)計教學(xué)大綱一、目的與任務(wù)根據(jù)高教委的要求,高校學(xué)生必須具備扎實的計算機基礎(chǔ)知識,具有較強的程序設(shè)計和軟件開發(fā)能力,特別對計算機專業(yè)及相關(guān)專業(yè)(如電子信息工程、通信工程、土木工程等)的學(xué)生要求更高。安排課程設(shè)計的目的,就是要通過一次集中的強化訓(xùn)練,使學(xué)生能及時地鞏固已學(xué)的基礎(chǔ)知識,補充未學(xué)的但又是必要的內(nèi)容,更進一步提高程序設(shè)計的能力。望同學(xué)們能珍惜此次課程設(shè)計的機會,不但要使自己的程序設(shè)計能力更上一個臺階,而且要提高與程序設(shè)計和軟件開發(fā)相關(guān)的各種綜合能力。二、時間安排1.課程設(shè)計以編程序上機為主,具體按教師每次下發(fā)的課程序設(shè)計內(nèi)容進行。2.總學(xué)時為周20個學(xué)時。三、評分標(biāo)準(zhǔn)課程設(shè)計結(jié)束
2、后,由指導(dǎo)老師根據(jù)學(xué)生在課程設(shè)計中的表現(xiàn)及任務(wù)完成的數(shù)量與質(zhì)量給每個學(xué)生評定成績??偝煽冇蓛刹糠纸M成??偝煽?課堂檢查成績*40%+設(shè)計報告成績*60%1.課堂檢查。在課程設(shè)計的每一次,由指導(dǎo)老師分別對每個學(xué)生的設(shè)計進行檢查,檢查的內(nèi)容主要有以下三個方面。 每次課程設(shè)計完成的數(shù)量與質(zhì)量,可采用學(xué)生先匯報并自我評價,然后老師作檢查。 隨機抽取題目對學(xué)生提問,從中判定學(xué)生的算法設(shè)計和程序設(shè)計的分析能力。 隨機抽取學(xué)生地綜合設(shè)計的模擬運算過程及結(jié)果,并作必要的提問,據(jù)此判別學(xué)生對綜合練習(xí)的完成情況。2.課程設(shè)計報告指導(dǎo)教師認(rèn)真閱讀每個學(xué)生的課程設(shè)計報告,對其系統(tǒng)設(shè)計、數(shù)據(jù)結(jié)構(gòu)設(shè)計、算法設(shè)計、程序設(shè)計
3、等的合理性和質(zhì)量以及對報告的編寫質(zhì)量作認(rèn)真的審核,以此作為評定綜合練習(xí)成績的主要依據(jù)四、設(shè)計報告格式(參考附件一)文檔資料的統(tǒng)一要求:1、文檔中的正文字體用五號宋體。2、每個問題均要有數(shù)據(jù)結(jié)構(gòu)分析、算法思想描述、源代碼和上機調(diào)試的過程及結(jié)果。3.工程名稱:學(xué)號姓名任務(wù);文件名稱:學(xué)號姓名任務(wù)4、源代碼是C+編輯正確且含有編譯、連接的提示信息貼圖、程序運行的結(jié)果用貼圖方式表示。5、沒有按要求做的同學(xué)則視為本課程設(shè)計不合格。6、每次上機所做的內(nèi)容用移動磁盤帶走。五、課程設(shè)計內(nèi)容第1章 分支與循環(huán)1.1 算法與范例1.遞推算法遞推算法是循環(huán)程序設(shè)計的精華之一,在很多情況下使用遞推算法能使程序簡練,同
4、時還能節(jié)省計算時間。遞推算法的基本思想:是利用前一項的值來推算出當(dāng)前項的值,即利用前一項的值乘以(或加上)一系數(shù)得到當(dāng)前項的值。使用遞推算法的前堤,必須有一項的值(一般是最前項)是已知的。使用遞推算法的關(guān)鍵地,是如何將多項式化成遞推公式。示范:求(即1!+2!+3!+20?。┑某绦蚓幊烫崾荆簄=1 to 20當(dāng)n=1時,要做兩件事: 實現(xiàn)t=t*n 注意t=1; 實現(xiàn) sum=sum+t 注意sum=0。當(dāng)n=2時,還是要做以上兩件事。因此t=t*n,sum=sum+t是遞推項是編程的核心。參考程序:#include <stdio.h>void main()double sum=0
5、,t=1; int n; for (n=1;n<=20;n+) t=t*n; sum=sum+t; printf("1!+2!+.+20!=%22.15en",sum);2.測試法在實際應(yīng)用中,有許多問題是無法用解釋方法實現(xiàn)的,這時采用測試法來求解是一種很有效的方法。測試法的基本思想是假設(shè)各種可能的解,讓計算機進行測試,如果測試結(jié)果滿足條件,則假設(shè)的解就是所要求的解。如果所要求的解是多值的,則假設(shè)的解也應(yīng)是多值的,在程序設(shè)計中,實現(xiàn)多值解的假設(shè)往往使用多重循環(huán)進行組合。示范:百錢買百雞問題已知公雞每只5元,母雞每只3元,小雞1元買3只。要求用100元錢正好買100只雞
6、,問公雞、母雞、小雞各多少只?編程提示:設(shè)公雞、母雞、小雞分別為a、b、c只,依據(jù)題目能列出下列兩個方程: a+b+c=100 5a+3b+c/3=100這是個不定方程,無法用解釋式求解。但可采用多重循環(huán)組合出各種可能的a、b、c的值。100元錢,全部買公雞最多只能買20只,即公雞的只數(shù)范圍是:a=1 to 20100元錢,全部買母雞最多只能買33只,即母雞的只數(shù)范圍是:b=1 to 33100元錢,全部買小雞最多只能買100只,即公雞的只數(shù)范圍是:c=1 to 100參考程序:#include<stdio.h>void main() int a,b,c; printf("
7、;公雞 母雞 小雞n"); for(a=1;a<=20;a+) for(b=1;b<=33;b+) c=100-a-b;if(5*a+3*b+c/3=100) printf(" %d %d %dn",a,b,c); 1.2 設(shè)計任務(wù)1.若一個口袋中放有12個球,其中有3個紅色球,3個白色球和6個黑色球,從中任取8個球,問共有多少不同的顏色搭配。2. 輸入年月日,求它是該年的第幾天。注:閏年的2月有29天,平年的2月有28天。3. 簡單計算器。請編寫一個程序計算表達式:data1 op data2的值。其中op為運算符+、-、*、/。4. 猜數(shù)游戲。由計
8、算機“想”一個數(shù)請人猜,如果猜對了,則游戲結(jié)束,否則計算機給出提示,告訴人所猜的數(shù)是太大還是太小,直到猜對為止。計算機記錄人猜的次數(shù),以此可以反映出猜數(shù)者“猜”的水平。1.3 實現(xiàn)過程設(shè)計任務(wù)1的實現(xiàn)過程1.算法分析(用文字或流程圖進行描述)2.編寫的源程序代碼3.程序運行的結(jié)果 設(shè)計任務(wù)2的實現(xiàn)過程1.算法分析(用文字或流程圖進行描述)2.編寫的源程序代碼3.程序運行的結(jié)果 設(shè)計任務(wù)3的實現(xiàn)過程1.算法分析(用文字或流程圖進行描述)2.編寫的源程序代碼3.程序運行的結(jié)果 設(shè)計任務(wù)4的實現(xiàn)過程1.算法分析(用文字或流程圖進行描述)2.編寫的源程序代碼3.程序運行的結(jié)果第2章 數(shù)組與函數(shù)2.1
9、啟示與范例1.輸入n個學(xué)生的成績,并求出其中高于平均分的人數(shù)。編程提示:用程序來實現(xiàn)本題的要求,首先有兩個值得思考的問題:一是數(shù)據(jù)結(jié)構(gòu)的選擇;二是數(shù)組的長度。 數(shù)據(jù)結(jié)構(gòu)的選擇:n個學(xué)生的成績是否有必要開辟數(shù)組來存放還是定義變量來存放?從任務(wù)要求分析知,兩次用學(xué)生成績,一次是求平均分;另一次是將每個學(xué)生的成績與平均分比較,高于平均分要輸出。因此有必要將其定義數(shù)組。 數(shù)組的長度定義:學(xué)生個數(shù)n的具體數(shù)值一般表示在編寫程序時是未知的,而在程序執(zhí)行時由使用者隨意確定。即n是一個變量,其值需要用輸入來確定。這樣一來,存放n個分?jǐn)?shù)的數(shù)組a,其長度的定義就必須注意,既不能定義為int an;因為數(shù)組長度要求
10、是常量,而n是一個變量,又不能將n定義成符號常量,因為n的具體值是未知的。對于這種情況的處理方法一般是:將數(shù)組的長度定義較大,讓使用者在此范圍內(nèi)隨意使用,當(dāng)然這個長度的定義有其原則,那就是既不讓使用者感到長度不夠,又不至于定義過大而浪費內(nèi)存,這種情況視應(yīng)用情況而定。參考程序:#include<stdio.h>void main()int i,a1000,num=0,n;float aver=0;printf("輸入學(xué)生個數(shù)nn");scanf("%d",&n);printf("輸入學(xué)生的成績存放到數(shù)組a中n");f
11、or(i=0;i<n;i+)scanf("%d",&ai);aver=aver+ai;aver=aver/n;for(i=0;i<n;i+)if(ai>=aver)num+;printf("高于平均分的人數(shù)是:%dn",num);2.輸入任意個學(xué)生的學(xué)號及成績,然后按順序輸出高分的前十名。編程提示:依據(jù)設(shè)計任務(wù)的要求需要考慮幾個問題:初始數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)選擇;采用的算法如何實現(xiàn)及相關(guān)的數(shù)據(jù)結(jié)構(gòu);任意個數(shù)據(jù)的實現(xiàn)問題。 初始數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)選擇問題:所謂任意個學(xué)生,應(yīng)該是個數(shù)不限,因此,對于存放初始數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)不宜選擇為數(shù)組。并且,
12、從算法實現(xiàn)的角度考慮,每個學(xué)生的數(shù)據(jù)輸入后只需使用一次,沒有再保留的必要,因此可選擇簡單變量作數(shù)據(jù)結(jié)構(gòu)來存放一個學(xué)生的數(shù)據(jù),而且每個學(xué)生的初始數(shù)據(jù)都用同一個數(shù)據(jù)結(jié)構(gòu)存放,即對一個學(xué)生的數(shù)據(jù)使用完后就將該數(shù)據(jù)結(jié)構(gòu)讓給下一個學(xué)生的數(shù)據(jù)使用。 算法的實現(xiàn)及相關(guān)的數(shù)據(jù)結(jié)構(gòu):本題核心的算法是排序,由設(shè)計任務(wù)可知只要求前十名的排序結(jié)果,因此算法上不需考慮對所有學(xué)生數(shù)據(jù)進行排序,只考慮對前十名排序即可。因此,應(yīng)選擇合適的數(shù)據(jù)結(jié)構(gòu)來存放前十名排序結(jié)果的數(shù)據(jù),顯然,選擇數(shù)組是最合適的。關(guān)于算法的實現(xiàn)可采用插入排序法最為合適。即存放排序結(jié)果的數(shù)組始終是存放當(dāng)前已插入數(shù)據(jù)的前十名的排序結(jié)果,而后每輸入一個學(xué)生的數(shù)據(jù)
13、就進行一次插入排序更新這一排序結(jié)果。 任意個的實現(xiàn):對于本題的程序來說,總體結(jié)構(gòu)是然是一個循環(huán)結(jié)構(gòu),每次循環(huán)的任務(wù)是輸入一個學(xué)生的數(shù)據(jù)并進行插入排序。問題是何時結(jié)束循環(huán)?循環(huán)結(jié)束的條件是什么?對用戶輸入的有用數(shù)據(jù),循環(huán)繼續(xù);對用戶輸入的無用數(shù)據(jù)即輸入數(shù)據(jù)為負(fù)數(shù)時,循環(huán)結(jié)束。 為了使程序更加清晰。主程序只提供輸入學(xué)生的學(xué)號、成績,并且輸出前十名的學(xué)號及成績;子函數(shù)實現(xiàn)插入排序的過程。參考程序:#include<stdio.h>void insertsort(int num,int a,int n,int number,int score)int i,j;for(i=0;i<n;
14、i+)if(score>ai)break;if(i>=n)return;for(j=n-1;j>i;j-)numj=numj-1;aj=aj-1;numi=number;ai=score;void main()int i,num10,a10,number,score;for(i=0;i<10;i+)ai=0;numi=0;while(1)printf("輸入學(xué)生的學(xué)號及學(xué)生成績:n");scanf("%d%d",&number,&score);if(number<0|score<0)break; ins
15、ertsort(num,a,10,number,score);for(i=0;i<10;i+)printf("前十名學(xué)生學(xué)號%d 成績是%dn",numi,ai);2.2 設(shè)計任務(wù)1.有一個一維數(shù)組score,內(nèi)存放10個學(xué)生的成績,要求編寫三個函數(shù)分別求學(xué)生的平均成績,求10個學(xué)生的最高分,求10個學(xué)生的最低分。2. 編寫一個函數(shù),將輸入的一串字符中的小寫字母轉(zhuǎn)變成大寫字母,并輸出所有的大寫字母。3.輸入10個學(xué)生姓名,按字典順序?qū)⑴旁谧钋懊娴膶W(xué)生姓名輸出。即在字符數(shù)組中求最小字符串。4.用函數(shù)法求N*N的對角線的和。其中的N是用戶通過鍵盤輸入的任意值。2.3實現(xiàn)過
16、程 設(shè)計任務(wù)1實現(xiàn)過程1.算法分析(用文字或流程圖進行描述)2.編寫的源程序代碼3.程序運行的結(jié)果設(shè)計任務(wù)2實現(xiàn)過程1.算法分析(用文字或流程圖進行描述)2.編寫的源程序代碼3.程序運行的結(jié)果設(shè)計任務(wù)3實現(xiàn)過程1.算法分析(用文字或流程圖進行描述)2.編寫的源程序代碼3.程序運行的結(jié)果 設(shè)計任務(wù)4實現(xiàn)過程1.算法分析(用文字或流程圖進行描述)2.編寫的源程序代碼3.程序運行的結(jié)果第3章 指針與文件3.1 啟示與范例1.指針變量作為函數(shù)參數(shù)最常見有以下兩種用法: 用于接受實參變量的地址,從而可以在函數(shù)中通過訪問指針變量所指向的內(nèi)存單元來達到間接地訪問實參變量。這樣,函數(shù)中既可引用實參變量原來的值
17、,也可將結(jié)果存入實參變量所在的單元,達到雙向傳遞的效果。 用于接受實參數(shù)組的首地址,從而可以在函數(shù)中通過訪問指針變量所指向的內(nèi)存單元及基以下的各元素來達到間接訪問實參數(shù)組的各元素,這樣,函數(shù)中既可以引用實參數(shù)組各元素的值,也可以將結(jié)果存入實參數(shù)組的各元素中。示例1:通過改變指針的指向來引用不同元素法:編寫輸入100名學(xué)生的成績,輸出其中高于平均分的人數(shù)。參考程序如下:#include<stdio.h>int over_aver_number(int *a,int n)int i,number=0;float aver=0;for(i=0;i<n;i+)aver+=*a+; /
18、a+的作用是每執(zhí)行一次循環(huán)就讓指針變量a指向下一個元素,使以后的訪問就直接訪問a所指向的內(nèi)存單元,不需再作地址計算。aver/=n;a-=n; / a-=n的作用是使a恢復(fù)其初始指向。for(i=0;i<n;i+)if(*a+>=aver)number+;return number;void main()int i,number,a100; /a是數(shù)組名,是指針常量。printf("n Enter a:");for(i=0;i<100;i+)scanf("%d",&ai);number=over_aver_number(a,10
19、0);printf("n輸出高于平均分的人數(shù)number=%d",number);2.文件的輸出只要求掌握其基本用法,且一般是按指定格式輸出到文件中。對文件輸入,除了基本用法外,還必須注意文件中數(shù)據(jù)的格式與輸入語句的格式相匹配,否則輸入的數(shù)據(jù)會失真。對文本文件的讀寫步驟如下: 打開文件;對應(yīng)的函數(shù)是fopen 讀/寫文件;對應(yīng)的函數(shù)是fscanf/fprintf 關(guān)閉文件;對應(yīng)的函數(shù)是fclose示例2:從鍵盤讀入若干個字符串,對它們按字母大小順序排序,然后把排序好的字符送到磁盤文件中保存參考程序如下:#include<stdio.h>#include<s
20、tdlib.h>#include<string.h>void main() FILE *fp; char str310,temp10; int i,j,k,n=3; printf("請輸入字符串:n"); for(i=0;i<n;i+) gets(stri); for(i=0;i<n-1;i+) k=i; for(j=i+1;j<n;j+)if(strcmp(strk,strj)>0)k=j;if(k!=j)strcpy(temp,stri);strcpy(stri,strk);strcpy(strk,temp);if(fp=fop
21、en("F:wangstring.dat","w")=NULL) /要將一個已經(jīng)排好序的string.dat數(shù)據(jù)文件存放在F盤wang目錄下printf("打開文件失?。");exit(0);printf("nThe new sequence:n");for(i=0;i<n;i+)fputs(stri,fp);fputs("n",fp);printf("%sn",stri); 3.2 設(shè)計任務(wù)1.已知一個整型數(shù)組a5,其各元素值為4,6,8,10,12。使用指針法求該數(shù)組元素之積。2.100個圍成一圈,從第1個人開始,每數(shù)到3的人出圈。問最后一個出圈的人是哪一個。3.編寫一個排序函數(shù),要求這個函數(shù)既能完成從小到大排序,又能完成從大到小排序,并編寫主函數(shù)完成: 輸入n個數(shù); 組織調(diào)用排序函數(shù)對n個數(shù)重排,要求重排后的結(jié)果是以最小值所在位置為界,前段數(shù)據(jù)按從大到小排序,后段數(shù)據(jù)按從小到大排序; 輸出重排結(jié)果。3.3實現(xiàn)過程
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 解除房屋租賃合同集錦15篇
- 公司員工個人工作總結(jié)集合15篇
- 中學(xué)校長工作述職報告合集6篇
- 部編版四年級語文下冊全冊教案
- 電子巡查系統(tǒng)課程設(shè)計
- 小額貸款有限公司日常管理制度
- 汽車文化5 汽車史上的重大技術(shù)革新
- 湖南省郴州市2024-2025學(xué)年七年級上學(xué)期期末考試英語試卷(無答案)
- 職場篇-課件 項目八商品銷售溝通
- 2025年特種銅合金材料項目發(fā)展計劃
- 2024巴西市場中輕度手游洞察報告
- 獸醫(yī)微生物學(xué)(浙江農(nóng)林大學(xué))智慧樹知到期末考試答案2024年
- 醫(yī)院科室合作共建方案
- (高清版)DZT 0203-2020 礦產(chǎn)地質(zhì)勘查規(guī)范 稀有金屬類
- 手術(shù)供應(yīng)室培訓(xùn)課件總結(jié)
- 亞馬遜衛(wèi)浴行業(yè)分析
- 發(fā)運工作總結(jié)
- 智慧農(nóng)業(yè)行業(yè)政策分析
- 氧化還原反應(yīng)方程式配平練習(xí)題及答案三篇
- GB/T 10739-2023紙、紙板和紙漿試樣處理和試驗的標(biāo)準(zhǔn)大氣條件
- 鐵三角管理辦法(試行)
評論
0/150
提交評論