當前位置:編程學習大全網 - 編程語言 - 編程課程

編程課程

c語言課程設計任務書

壹,題目:學生成績管理

二、目的和要求

1.目的:

(1)掌握面向過程編程的基本思想和方法;

(2)掌握C語言的基本知識和技能;

(3)能夠運用所學的基礎知識和技能解決簡單的編程問題。

2.要求

基本要求:

1.要求使用C語言面向過程的編程思想完成系統設計;

2.突出C語言的功能特點,用多種功能實現每個子功能;

3.繪制功能模塊圖;

4.簡潔的界面設計可以實現友好的交互;

5.有清晰的程序流程圖和詳細的數據結構定義;

6.熟悉C語言對文件的各種操作。

創新要求:

基本需求滿足後,可以進行創新設計,比如系統用戶功能控制,對於管理員級和壹般級用戶系統功能是不同的。

三、信息描述

輸入壹個班級10個學生的學號和每個學生的三門科目(數學、英語、計算機基礎)的成績。程序計算出每個學生的總分和平均分,並按成績排序,最後打印出按高分到低分排序的成績單。要求:

1)排序是通過壹個函數實現的。

2)打印的成績單項目包括:序號、學號、數學、英語、計算機、總分、平均分。

3)按照實驗報告的電子模板格式填寫實驗內容。

四、功能描述

1.輸入學生的基本信息和選定科目的成績。

2.基本信息查詢(部門、班級;子主題)和修改。

3.分析各部門或班級的成績(即求單科平均分、通過率、優秀率);

4.所開設課程的成績分析(求平均分、最高分、最低分);

5.對學生的考試成績進行排名(單科按系或班進行排名,對各班、同學期學生的綜合成績進行排名,顯示各科成績信息)

動詞 (verb的縮寫)解決方法

1.分析程序的功能需求,劃分程序的功能模塊。

2.畫出系統流程圖。

3.代碼編寫。定義數據結構和各種功能子功能。

4.程序的功能調試。

5.完成系統總結報告和說明手冊。

不及物動詞日程安排

本課程為期兩周,分四個階段完成:

1.分析和設計階段。指導教師要積極引導學生自主學習和鉆研問題,明確設計需求,找出實現方法,按照需求分析、總體設計、詳細設計的步驟進行。

2.編碼調試階段:根據設計分析方案編寫C代碼,然後調試代碼,實現項目所需的功能。

3.總結報告階段:對設計工作進行總結,撰寫壹篇課程設計說明,要求學生寫出需求分析、總體設計、詳細設計、編碼、測試的步驟和內容。

4.評估階段。

# include & ltstdio.h & gt

# include & ltstdlib.h & gt

#define STU_NUM 10 /*宏定義學生人數*/

Structure student/*定義壹個結構來存儲學生的學號、三門課程的分數、總分和平均分*/

{

char stu _ id[20];/*學生證;*/

浮動分數[3];/*三門課成績;*/

浮動總額;/*總分;*/

浮動aver/*平均分;*/

};

/*排序是通過函數實現的*/

void SortScore(student *stu,int n)

{

學生學習;

for(int I = 0;我& ltn-1;i++)

for(int j = I+1;j & ltn;j++)

{

如果(斯圖[我]。總計& lt斯圖[j]。總計)

{

stud = stu[I];

stu[I]= stu[j];

stu[j]= stud;

}

}

}

int main()

{

學生STU[STU _ NUM];/*創建的結構數組中有10個元素,分別用來保存這10個人的相關信息。*/

/*輸入這十個學生的相關信息*/

for(int I = 0;我& ltSTU _ NUMi++)

{

Printf("請輸入%d學生的學號:",I+1);

scanf("%s ",& amp斯圖[我]。stu _ id);

Printf("輸入%d學生的數學成績:",I+1);

scanf("%f ",& amp斯圖[我]。得分[0]);

Printf("輸入%d學生的英語成績:",I+1);

scanf("%f ",& amp斯圖[我]。得分[1]);

Printf("輸入%d學生的計算機成績:",I+1);

scanf("%f ",& amp斯圖[我]。得分[2]);

斯圖[我]。total = stu[i]。score[0]+stu[i]。score[1]+stu[i]。得分[2];

斯圖[我]。aver = stu[i]。總數/3;

}

printf(" \ n ");

排序分數(stu,STU _ NUM);/*呼叫排序功能*/

/*輸出排序後的學生成績*/

for(I = 0;我& ltSTU _ NUMi++)

{

Printf("序列號:%d\t ",I);

Printf("學號:%s\t ",stu[i]。stu _ id);

Printf ("Math: %f\t ",stu[i]。得分[0]);

Printf("英語:%f\t ",stu[i]。得分[1]);

Printf("計算機:%f\t ",stu[i]。得分[2]);

Printf ("GPA: %f\t ",stu[i]。aver);

Printf("總分:%f\t ",stu[i]。合計);

printf(" \ n \ n ");

}

返回0;

}

註:(源程序中主要標識符的描述)

#define STU_NUM 10 /*宏定義學生人數*/

Structure student/*定義壹個結構來存儲學生的學號、三門課程的分數、總分和平均分*/

{

char stu _ id[20];/*學生證;*/

浮動分數[3];/*三門課成績;*/

浮動總額;/*總分;*/

浮動aver/*平均分;*/

}

實驗結果:

輸入:(只輸入後面的數字,前面的字自己生成)。

請輸入1學生的學號:001。

輸入第1個學生的數學成績:1。

輸入第1名學生的英語成績:1。

輸入第1名學生的計算機成績:1。

請輸入第二個學生的學號:002。

輸入第二個學生的數學成績:2

輸入第二個學生的英語成績:2

輸入第二個學生的計算機分數:2

請輸入第三個學生的學號:003。

輸入第三個學生的數學成績:3

輸入第三個學生的英語成績:3

輸入第三個學生的計算機分數:3

請輸入第四個學生的學號:004。

輸入第四個學生的數學成績:4

輸入第四個學生的英語成績:4

輸入第四個學生的計算機分數:4

請輸入第五個學生的學號:005。

輸入第五個學生的數學成績:5

輸入第五個學生的英語成績:5

輸入第五個學生的計算機分數:5

請輸入第六名學生的學號:006。

輸入第六個學生的數學成績:6

輸入第六名學生的英語成績:6

輸入第六名學生的計算機分數:6

請輸入第7名學生的學號:007。

輸入第七個學生的數學成績:7

輸入第七個學生的英語成績:7

輸入第七個學生的計算機分數:7

請輸入第八名學生的學號:008。

輸入第八個學生的數學成績:8

輸入第八名學生的英語成績:8

輸入第八名學生的計算機分數:8

請輸入第9名學生的學號:009。

輸入第九個學生的數學成績:9

輸入第九名學生的英語成績:9

輸入第九個學生的計算機分數:9

請輸入10號學生的學號:010。

輸入第10名學生的數學成績:10。

輸入第10名學生的英語成績:10。

輸入第10名學生的計算機成績:10。

輸出:

序號:0學號:010數學:10.000000英語:10.000000計算機:10.00000。

平均分:10.000000總分:30.000000。

序號:1學號:009數學:9.000000英語:9.000000計算機:9.000000。

平均分:9.000000,總分:27.000000。

序號:2學號:008數學:8.000000英語:8.000000計算機:8.000000。

平均分:8.000000,總分:24.000000。

序號:3學號:007數學:7.000000英語:7.000000計算機:7.000000。

平均分:7.000000,總分:21.000000。

序號:4學號:006數學:6.000000英語:6.000000計算機:6.000000。

平均分:6.000000,總分:18.000000。

序號:5學號:005數學:5.000000英語:5.000000計算機:5.000000。

平均分:5.000000,總分:15.000000。

序號:6學號:004數學:4.000000英語:4.000000計算機:4.000000。

平均分:4.000000,總分:12.000000。

序號:7學號:003數學:3.000000英語:3.000000計算機:3.000000。

平均分:3.000000,總分:9.000000。

序號:8學號:002數學:2.000000英語:2.000000計算機:2.000000。

平均分:2.000000,總分:6.000000。

序號:9學號:001數學:1.000000英語:1.000000計算機:1.000000。

平均分:1.000000總分:3.000000。

七、寫出課程設計報告或課程設計總結。

課程設計報告要求:

總結報告包括需求分析、總體設計、詳細設計、編碼(編程步驟寫得很詳細)、測試步驟和內容、課程設計總結、參考資料等。如果不滿足上述要求,該設計將被標記為失敗。

c語言中的常見錯誤

在編寫標識符時,大寫字母和小寫字母之間的差異被忽略。

主()

{

int a = 5;

printf("%d ",A);

}

編譯器將和視為兩個不同的變量名,並顯示壹條錯誤信息。c認為大寫字母和小寫字母是兩個不同的字符。傳統上,符號常量名稱大寫,變量名小寫,以增加可讀性。

2.忽略變量的類型並執行非法操作。

主()

{

浮動a,b;

printf("%d ",a % b);

}

%是余數運算,得到a/b的整數余數。整型變量A和B可以進行余數運算,而實型變量不允許進行“余數”運算。

3.混淆字符常量和字符串常量。

char c;

c = " a

這裏,字符常量與字符串常量混淆了。字符常量是用壹對單引號括起來的單個字符,字符串常量是用壹對雙引號括起來的字符序列。c指定“\”作為字符串的結尾,這是系統自動添加的,所以字符串“a”實際上包含了兩個字符:‘a’和’\’,將其賦給字符變量是不可以的。

4.忽略“=”和“= =”的區別。

在許多高級語言中,符號“=”被用作關系運算符“等於”。比如妳可以用BASIC程序寫。

如果(a=3)那麽…

但在C語言中,“=”是賦值運算符,“= =”是關系運算符。比如:

if(a = = 3)a = b;

前者是比較A是否等於3,後者是指如果A和3相等,給A賦值B值..因為習慣,初學者經常會犯這樣的錯誤。

5.別管加號了。

分號是C語句不可或缺的壹部分,語句末尾必須有分號。

a=1

b=2

編譯時,編譯器沒有找到“a=1”後面的分號,所以把下壹行“b=2”作為上壹行的壹部分,這樣會導致語法錯誤。改錯的時候,有時候被指出錯誤的那壹行並沒有發現錯誤,就要看前面壹行的分號是不是漏了。

{ z = x+y;

t = z/100;

printf("%f ",t);

}

對於復合語句,不能忽略最後壹個語句中的最後壹個分號(這和PASCAL不同)。

6.加分。

對於復合語句,例如:

{ z = x+y;

t = z/100;

printf("%f ",t);

};

復合句的大括號後面不能有多余的符號,否則會畫蛇添足。

另壹個例子是:

if(a % 3 = = 0);

i++;

本來如果3被A整除,我會加1。但由於if後面加了分號(a%3==0),if語句到此結束,程序會執行I++語句,不管3是否能被A整除,我都會自動加1。

另壹個例子是:

for(I = 0;我& lt5;i++);

{scanf("%d ",& ampx);

printf("%d ",x);}

原意是依次輸入五個數字,然後輸出每個數字。因為在for()後面添加了分號,所以循環體變成了壹個空語句。此時,只能輸入和輸出壹個數字。

7.輸入變量時忘記添加地址運算符“&”。。

int a,b;

scanf("%d%d ",a,b);

這是違法的。Scanf函數用於根據A和B在內存中的地址來存儲它們的值。“& amp“A”是指內存中A的地址。

8.數據輸入方式不符合要求。①scanf("%d%d ",& amp壹,& ampb);

在輸入時,不能使用逗號作為兩個數據之間的分隔符,如以下輸入是非法的:

3,4

輸入數據時,在兩個數據之間留出壹個或多個空格,或者按Enter或tab。

②scanf("%d,%d ",& amp壹,& ampb);

c規定,如果“格式控制”字符串中有格式描述以外的其他字符,則在輸入數據時應輸入與這些字符相同的字符。以下輸入是合法的:

3,4

這時候用空格或其他字符代替逗號是錯誤的。

3 4 3:4

另壹個例子是:

scanf("a=%d,b=%d ",& amp壹,& ampb);

輸入應采用以下形式:

a=3,b=4

9.輸入字符的格式不符合要求。

當輸入“%c”格式的字符時,“空格字符”和“轉義字符”都作為有效字符輸入。

scanf("%c%c%c ",& ampc 1;c2和ampC3);

比如輸入壹個b c

字符“a”發送到c1,字符“”發送到c2,字符“b”發送到c3,因為%c只需要讀壹個字符,不需要用空格作為兩個字符之間的間隔。

10.輸入和輸出的數據類型與使用的格式說明符不壹致。

例如,A被定義為整數,B被定義為實數類型。

a = 3;b = 4.5

printf("%f%d\n ",a,b);

編譯時不會給出錯誤信息,但運行結果會與初衷不符。這種錯誤需要特別註意。

11.在輸入數據時,曾試圖規定準確性。

scanf("%7.2f ",& ampa);

這樣做是違法的,輸入數據時無法指定精度。

12.switch語句中省略了break語句。

比如根據考試成績的等級打印出壹個百分比數字段。

開關(等級)

{ case ' A ':printf(" 85 ~ 100 \ n ");

情況' B ':printf(" 70 ~ 84 \ n ");

case ' C ':printf(" 60 ~ 69 \ n ");

case ' D ':printf(" & lt;60 \ n”);

默認值:printf(" error \ n ");

由於break語句的省略,case只起到標簽的作用,不起到判斷的作用。因此,當等級值為a時,printf函數在執行第壹條語句後,執行第二、第三、第四、第五條printf函數語句。正確的寫法應該加上“break”在每個分支之後。。例如

case ' A ':printf(" 85 ~ 100 \ n ");打破;

13.忽略while和do-while語句之間的細節差異。

(1)main()

{int a=0,I;

scanf("%d ",& ampI);

while(我& lt=10)

{ a = a+I;

i++;

}

printf("%d ",a);

}

(2)主要()

{int a=0,I;

scanf("%d ",& ampI);

{ a = a+I;

i++;

} while(I & lt;=10);

printf("%d ",a);

}

可以看出,當輸入I的值小於或等於10時,兩者得到的結果相同。當我& gt在10,結果就不壹樣了。因為while循環是在執行前判斷的,而do-while循環是在執行後判斷的。對於大於10的數字,while循環不執行壹次循環體,而do-while語句執行壹次循環體。

14.定義數組時誤用變量。

int n;

scanf("%d ",& ampn);

int a[n];

數組名兩邊的方括號是常量表達式,可以包含常量和符號常量。也就是說,C不允許動態定義數組的大小。

15.定義數組時,定義的“元素數”被誤認為是最大下標值。

主()

printf("%d ",a[10]);

}

c語言規定定義的時候用a[10],也就是說數組A有10個元素。它的下標值從0開始,所以數組元素a[10]不存在。

16.初始化陣列時未使用靜態存儲。

int a[3]=;

像這樣初始化數組是錯誤的。c語言規定只能初始化靜態存儲數組和外部存儲數組。應改為:

static int a[3]=;

17.不應添加地址運算符&;地址運算符被添加到的位置。

scanf("%s ",& ampstr);

C語言編譯系統對數組名的處理是這樣的:數組名代表數組的起始地址,scanf函數中的輸入項是字符數組名,所以不需要加地址符號&。應改為:

scanf("%s ",str);

18.同時定義了形式參數和函數中的局部變量。

int max(x,y)

int x,y,z;

{ z = x & gty?x:y;

返回(z);

}

形參應該在函數外部定義,而局部變量應該在函數內部定義。應改為:

int max(x,y)

int x,y;

{ int z;

z = x & gty?x:y;

返回(z);

}

c語言經驗

通過這次培訓,我增加了學習軟件技術的興趣。雖然不清楚軟件技術的具體內容,但是從C語言這門課程開始,我就找到了編程的樂趣,在學習C語言的過程中也學到了很多計算機應用的基礎知識,也對計算機機體有了壹個大致的了解。

在這次培訓中,老師給出了壹個示例程序,經過自己的改寫,實現了要求。先做簡單的輸出,再壹步壹步做其他的模式。實際操作過程中犯的壹些錯誤會有意想不到的收獲,感覺培訓很有意思。在具體操作中,鞏固了本學期所學的C語言理論知識,達到了訓練的基本目的。同時也發現了自己的不足,以後要多多註意。同時,我意識到C語言具有語句簡潔、使用靈活、執行效率高的特點。發現計算機訓練的重要作用,特別是對數組和循環的深刻理解。

通過實際操作,學習了C語言編程的基本步驟和方法,發展了自己的邏輯思維能力,培養了自己分析問題和解決問題的能力。我深深懂得了“沒有不可能,只有想不到”、“團結就是力量”、“實踐是檢驗真理的標準”、“我不恥下問”的含義。

計時在此希望以後多進行這樣的訓練,加長設計間,培養學生獨立思考的能力,提高實際操作水平。

八。參考:C語言程序設計教程

  • 上一篇:二叉樹排序算法的實現(數據結構課程設計)
  • 下一篇:請給壹些Windows中網絡編程的資料
  • copyright 2024編程學習大全網