#include?cstdio
創(chuàng)新互聯(lián)公司主要從事成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)朗縣,十多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):18980820575
void?menu(){
printf("1.求兩個(gè)數(shù)的和\n");
printf("2.求兩個(gè)數(shù)的差\n");
printf("3.求兩個(gè)數(shù)的積\n");
printf("4.求兩個(gè)數(shù)的商\n");
printf("5.求兩個(gè)數(shù)的余\n");
}
int?add(int?x,int?y){return?x+y;}
int?sub(int?x,int?y){return?x-y;}
int?mul(int?x,int?y){return?x*y;}
int?drv(int?x,int?y){return?x/y;}
int?mod(int?x,int?y){return?x%y;}
int?main(){
int?a,b,n;
printf("Please?input?2?numbers:");
scanf("%d%d",a,b);
menu();
printf("Please?input?the?number:");
scanf("%d",n);
switch(n){
case?1:printf("%d\n",add(a,b));break;
case?2:printf("%d\n",sub(a,b));break;
case?3:printf("%d\n",mul(a,b));break;
case?4:printf("%d\n",drv(a,b));break;
case?5:printf("%d\n",mod(a,b));break;
default:printf("Wrong?number!");
}
}
望采納
C語(yǔ)言程序設(shè)計(jì)報(bào)告
課題名稱:學(xué)生成績(jī)管理
1 系統(tǒng)概述:
本程序?yàn)橐粋€(gè)學(xué)生成績(jī)管理系統(tǒng),對(duì)學(xué)生的成績(jī)進(jìn)行管理,學(xué)生的信息包括學(xué)號(hào),姓名,學(xué)期,三門(mén)課程的成績(jī),輸入這些信息,本程序可以自動(dòng)計(jì)算總成績(jī),可以按高分到低分進(jìn)行排名,并對(duì)輸入信息的人數(shù)進(jìn)行匯總.
2 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì):
(1)結(jié)構(gòu)體;
(2)數(shù)組的設(shè)計(jì):運(yùn)用指針代替數(shù)組,使用指針來(lái)建立線性表,使程序更加簡(jiǎn)潔,可讀性更強(qiáng).
3 各函數(shù)的設(shè)計(jì):
函數(shù)原型:void InitList(SqLinkList L);
功能: 創(chuàng)建一個(gè)空的線性鏈表;
入口參數(shù):L為要?jiǎng)?chuàng)建的線性鏈表;
出口參數(shù):創(chuàng)建鏈表的L.head為空,L.length為0;
返回值: 無(wú);
函數(shù)原型:void EmptyLinkList(SqLinkList L);
功能: 清空整個(gè)線性鏈表;
入口參數(shù):L為要清空的鏈表名稱;
出口參數(shù):若清空成功則鏈表長(zhǎng)度L.length為0;
返回值: 無(wú);
函數(shù)原型:int ScanE(ElemType e);
功能: 輸入學(xué)生信息;
入口參數(shù):e為要輸入信息的學(xué)生名稱;
出口參數(shù):e.num保存學(xué)號(hào),e.name保存姓名,e.team保存所在學(xué)期,e.s1,e.s2,e.s3分別保存三門(mén)課程的成績(jī);
返回值: 輸入合法返回1,否則返回0;
錯(cuò)誤處理:若學(xué)號(hào)、姓名等輸入不合法會(huì)有提示及重輸;
函數(shù)原型:Status SqLinkListAppend(SqLinkList L,ElemType e);
功能: 追加一個(gè)結(jié)點(diǎn)到線性鏈表中;
入口參數(shù):e為所追加的結(jié)點(diǎn)名稱,L為e所追加到的線性鏈表的名稱;
出口參數(shù):若追加成功,則e為頭結(jié)點(diǎn),鏈表長(zhǎng)度L.length增1;
返回值: 若追加成功返回1;
函數(shù)原型:Link SearchNode(SqLinkList L,int NUM);
功能: 查找學(xué)號(hào)為NUM的學(xué)生;
入口參數(shù):查找的鏈表名稱L,學(xué)號(hào)NUM;
出口參數(shù):若找到結(jié)點(diǎn)指針p指向該結(jié)點(diǎn),否則指向空結(jié)點(diǎn);
返回值: 結(jié)點(diǎn)指針p;
函數(shù)原型:void SearchTeam(SqLinkList L,int team);
功能: 查找學(xué)期為team的所有記錄并輸出其信息;
入口參數(shù):查找的鏈表名稱L,要查找的學(xué)期team;
出口參數(shù):無(wú);
返回值: 無(wú);
函數(shù)原型:void SearchUnpass(SqLinkList L,float s1,float s2,float s3);
功能: 查找所有有掛科記錄的學(xué)生并輸出其信息;
入口參數(shù):查找的鏈表名稱L,要查找的各門(mén)學(xué)科成績(jī)s1,s2,s3;
出口參數(shù):無(wú);
返回值: 無(wú);
函數(shù)原型:void SqLinkListSearch(SqLinkList L);
功能: 對(duì)鏈表進(jìn)行分類查找;
入口參數(shù):要查找的鏈表名稱L;
出口參數(shù):無(wú);
返回值: 無(wú);
函數(shù)原型: void inputData(SqLinkList L);
功能: 輸入數(shù)據(jù),并追加一個(gè)結(jié)點(diǎn);
入口參數(shù): L為要追加結(jié)點(diǎn)的鏈表名稱;
出口參數(shù): 無(wú);
返回值: 無(wú);
函數(shù)原型:void SqLinkListTraverse(SqLinkList L);
功能: 輸出鏈表中所有學(xué)生成績(jī)列表;
入口參數(shù):L為要輸出信息的鏈表名稱;
出口參數(shù):無(wú);
返回值: 無(wú);
函數(shù)原型:void PrintE(ElemType e);
功能: 輸出一個(gè)結(jié)點(diǎn)的所有信息;
入口參數(shù):要輸出的結(jié)點(diǎn)名稱e;
出口參數(shù):無(wú);
返回值: 無(wú);
4 使用程序的說(shuō)明:
本程序?yàn)橐粋€(gè)學(xué)生成績(jī)管理系統(tǒng)。對(duì)學(xué)生的成績(jī)信息進(jìn)行管理,學(xué)生的信息包括學(xué)號(hào)、姓名、學(xué)期、三門(mén)課程的成績(jī)、平均成績(jī)、名次。本管理系統(tǒng)實(shí)現(xiàn)學(xué)生的學(xué)號(hào)、姓名、學(xué)期、每門(mén)課程的成績(jī)的錄入,并自動(dòng)按平均分排名,使用時(shí)按屏幕上的提示,輸入使用代碼.如下圖所示:
例如:輸入代碼數(shù)字”1”,程序執(zhí)行”輸入學(xué)生成績(jī)或已存在的學(xué)生成績(jī)進(jìn)行修改”這條小程序.輸入學(xué)生個(gè)人信息后,如下圖所示:
如此分別輸入相應(yīng)的程序代碼,就執(zhí)行相應(yīng)的程序段.
如下的程序是按學(xué)號(hào)進(jìn)行成績(jī)排名:
當(dāng)輸入”6”時(shí),執(zhí)行相應(yīng)的程序,即匯總一共輸入學(xué)生的人數(shù):
5 總結(jié)和體會(huì):
通過(guò)對(duì)C語(yǔ)言學(xué)習(xí),尤其是這學(xué)期本班開(kāi)展C語(yǔ)言雙語(yǔ)教學(xué),體會(huì)到學(xué)習(xí)難的同時(shí),也真正了解到C語(yǔ)言作為一門(mén)高級(jí)的計(jì)算機(jī)語(yǔ)言的強(qiáng)大功能,特別是在當(dāng)今實(shí)際生活,生產(chǎn),辦公,信息管理等方面的強(qiáng)大作用. 這次合作我們遇到了許多的困難。時(shí)間的緊迫,知識(shí)的不足,給我很大的壓力。最終我還是還是完成了任務(wù)。團(tuán)結(jié)就是力量是我這次最真切的感受。
6 程序代碼:
void InitList(SqLinkList L) {
// 構(gòu)造一個(gè)空的線性表L;
L.head = 0; //頭指針為空;
L.length = 0; //長(zhǎng)度初始為0;
}
void EmptyLinkList(SqLinkList L){
//入口參數(shù)為整個(gè)線性表的數(shù)據(jù),功能為清空線性表;
Node *p;
if(!L.head)printf("系統(tǒng)中不存在記錄。\n");
//頭指針為空時(shí)沒(méi)有學(xué)生錄入;
else {
while (L.head){
//每個(gè)循環(huán)將下一結(jié)點(diǎn)賦值給頭指針,并釋放本結(jié)點(diǎn)空間,直至線性表清空;
p=L.head;
L.head=p-next;
free(p);
} //end while;
L.length=0; //長(zhǎng)度為0;
printf("該管理系統(tǒng)學(xué)生信息已清空。\n");
}//end else;
}
int ScanE(ElemType e){
//輸入一個(gè)學(xué)生的成績(jī)數(shù)據(jù)結(jié)點(diǎn)。返回0為無(wú)效結(jié)點(diǎn)數(shù)據(jù),1為有效結(jié)點(diǎn)數(shù)據(jù);
printf("\n學(xué)號(hào):");
scanf("%d",e.num);
if(e.num==0){
//學(xué)號(hào)為0輸入不合法,重新輸入;
printf("學(xué)號(hào)輸入不合法.\n");
return 0;
}
printf("\n姓名:");
scanf("%s",e.name);
printf("\n學(xué)期:");
scanf("%d",e.team);
while(e.team12){
//系統(tǒng)只記錄小于12的學(xué)期數(shù);
printf("輸入的學(xué)期不能大于12,請(qǐng)重新輸入:");
scanf("%d",e.team);
}
printf("\n成績(jī)A:");
scanf("%f",e.s1);
printf("\n成績(jī)B:");
scanf("%f",e.s2);
printf("\n成績(jī)C:");
scanf("%f",e.s3);
return OK;
}
Status SqLinkListAppend(SqLinkList L,ElemType e){
//追加一個(gè)結(jié)點(diǎn)到線性表中;
Node *p;
p=SearchNode(L,e.num);
//查找學(xué)號(hào)為e.num的記錄并將其地址賦給指針p;
if (p==0){
//若不存在添加學(xué)號(hào)相同的結(jié)點(diǎn),追加一個(gè)結(jié)點(diǎn);
p=(Node *)malloc(sizeof(Node));
if (!p) return ERROR;
memcpy((p-data),e,sizeof(ElemType));
p-next=L.head ;
L.head=p;
//追加的一個(gè)結(jié)點(diǎn)為首結(jié)點(diǎn);
L.length++; //表長(zhǎng)度加1;
}
else { //如果該學(xué)號(hào)記錄已存在,則進(jìn)行修改操作;
memcpy((p-data),e,sizeof(ElemType));
printf("該學(xué)生記錄已經(jīng)存在,已完成修改操作。\n");
}
return OK;
}
Link SearchNode(SqLinkList L,int NUM){
//查找學(xué)生記錄,該學(xué)生的學(xué)號(hào)為NUM;
Node *p;
p=L.head; //p先指在頭結(jié)點(diǎn);
while (p p-data.num !=NUM ) p=p-next;
//如果該學(xué)生的學(xué)號(hào)不為NUM則查找下一個(gè)結(jié)點(diǎn);
return p;
}
void SearchTeam(SqLinkList L,int team){
//按學(xué)期查找并輸出所有該學(xué)期存在的記錄;
Node *p;
p=L.head;
int n,sum=0;
//sum記錄該學(xué)期的學(xué)生總?cè)藬?shù);
printf("請(qǐng)輸入您要查詢的學(xué)生的學(xué)期:");
scanf("%d",n);
printf("\n學(xué)號(hào) 姓名 學(xué)期 成績(jī)A 成績(jī)B 成績(jī)C 平均成績(jī)\n");
while(pp-next){
//如果p結(jié)點(diǎn)和它的下一結(jié)點(diǎn)不為空,且該結(jié)點(diǎn)的學(xué)期等于要查找學(xué)期,則格式輸出所有該學(xué)期學(xué)生信息;
if(p-data.team==n){
PrintE(p-data);
sum++;
//查找到一個(gè)該學(xué)期的學(xué)生記錄計(jì)數(shù)加1;
}
p=p-next;
//轉(zhuǎn)向下一結(jié)點(diǎn);
} //end while;
if(p-data.team==n){
//如果p的下一結(jié)點(diǎn)為空,且本結(jié)點(diǎn)學(xué)期為n,則格式輸出該結(jié)點(diǎn)信息;
sum++;
PrintE(p-data);
}
if(sum==0)printf("沒(méi)有這學(xué)期的記錄。\n");
if(sum)printf("該學(xué)期共有%d人的記錄.\n",sum);
}
void SearchUnpass(SqLinkList L,float s1,float s2,float s3){
//查找并輸出有掛科的學(xué)生信息;
Node *p;
p=L.head;
int sum=0;
//sum計(jì)數(shù)掛科總?cè)藬?shù),初始為0;
printf("以下是有一門(mén)以上不及格科目的學(xué)生的成績(jī):\n");
printf("\n學(xué)號(hào) 姓名 學(xué)期 成績(jī)A 成績(jī)B 成績(jī)C 平均成績(jī)\n");
while(pp-next){
//如果p及其下一結(jié)點(diǎn)為真,且該結(jié)點(diǎn)有一門(mén)以上科目分?jǐn)?shù)低于60則輸出該結(jié)點(diǎn)成績(jī)并使sum計(jì)數(shù)加1;
if((p-data.s160)||(p-data.s260)||(p-data.s360))
{
PrintE(p-data);
sum++;
} //end if;
p=p-next;
//轉(zhuǎn)到下一結(jié)點(diǎn);
} //end while;
if((p-data.s160)||(p-data.s260)||(p-data.s360)){
//查看最后一個(gè)結(jié)點(diǎn),若有掛科,sum加1并格式輸出結(jié)點(diǎn)信息;
sum++;
PrintE(p-data);
}
if(sum==0)printf("沒(méi)有不及格的記錄。\n");
if(sum)printf("共有%d人的掛科記錄.\n",sum);
}
void SqLinkListSearch(SqLinkList L){
//分類查找學(xué)生記錄;
Node *p;
p=L.head;
int n,reg; //reg為查詢方式的指令;
printf("1--按學(xué)號(hào)查詢\n2--按學(xué)期查詢\n3--掛科學(xué)生信息列表\n");
printf("請(qǐng)您輸入查詢方式:");
scanf("%d",reg);
if(L.length){
if(reg3)printf("對(duì)不起沒(méi)有您要求的選項(xiàng)。\n");
//若reg3則輸入不合法;
else if(reg==1){
//reg==1按學(xué)號(hào)查詢;
printf("請(qǐng)輸入您要查詢的學(xué)生的學(xué)號(hào):");
scanf("%d",n);
while(pp-next p-data.num !=n) p=p-next;
//當(dāng)p和他下一結(jié)點(diǎn)為真時(shí)且結(jié)點(diǎn)數(shù)據(jù)不為要查找數(shù)據(jù)時(shí)轉(zhuǎn)向下一結(jié)點(diǎn);
if(p-data.num==n){
//找到所要查詢結(jié)點(diǎn),格式輸出;
printf("\n學(xué)號(hào) 姓名 學(xué)期 成績(jī)A 成績(jī)B 成績(jī)C 平均成績(jī)\n");
PrintE(p-data);
}
else printf("沒(méi)有您要查找的學(xué)號(hào)。\n");
} //end reg==1 if ;
else if(reg==2)SearchTeam(L,p-data.team);
//reg==2,調(diào)用SearchTeam函數(shù)按學(xué)期查詢并輸出;
else if(reg==3)SearchUnpass(L,p-data.s1,p-data.s2,p-data.s3);
//reg==3,調(diào)用SearchUnpass函數(shù),輸出全部有掛科記錄的學(xué)生信息;
}//end if;
else printf("系統(tǒng)中無(wú)記錄.\n");
}
void inputData(SqLinkList L){
//請(qǐng)求輸入學(xué)生成績(jī),則追加一個(gè)結(jié)點(diǎn)并輸入;
ElemType e;
if (ScanE(e)) SqLinkListAppend(L,e); //輸入數(shù)據(jù),追加一個(gè)結(jié)點(diǎn);
}
void SqLinkListTraverse(SqLinkList L){
//所有學(xué)生信息列表輸出;
Node *p;
char c;
p=L.head;
if(p) //非空表;
{
printf("\n學(xué)號(hào) 姓名 學(xué)期 成績(jī)A 成績(jī)B 成績(jī)C 平均成績(jī)\n");
for (p=L.head ;p;p=p-next )PrintE(p-data);
//從第一個(gè)結(jié)點(diǎn)開(kāi)始輸出所有信息直到結(jié)點(diǎn)為空;
}
else printf("系統(tǒng)中無(wú)記錄。\n");
//空表;
c=getchar();
}
void PrintE(ElemType e){
//輸出各科成績(jī)和平均成績(jī);
printf("%d\t%s\t%d\t%f\t%f\t%f\t%f\n",e.num,e.name,e.team,e.s1,e.s2,e.s3,(e.s1+e.s2+e.s3)/3);
//格式輸出學(xué)生的學(xué)號(hào)、姓名、學(xué)期、A、B、C三門(mén)成績(jī)以及平均成績(jī);
}
只是個(gè)例子,不可照抄。
實(shí)驗(yàn)內(nèi)容與要求:
[實(shí)驗(yàn)內(nèi)容]
1、 通過(guò)本試驗(yàn)初步培養(yǎng)計(jì)算機(jī)邏輯解題能力。熟練掌握賦值語(yǔ)句和if語(yǔ)句的應(yīng)用;掌握switch多路分支語(yǔ)句和if嵌套語(yǔ)句的使用
2、 將前期所學(xué)習(xí)到的基本數(shù)據(jù)類型、運(yùn)算符和表達(dá)式等程序設(shè)計(jì)基礎(chǔ)知識(shí)運(yùn)用于具體的程序設(shè)計(jì)。
3、 進(jìn)一步熟練掌握輸入輸出函數(shù)scanf, printf和getchar的使用,熟悉math.h中常用數(shù)學(xué)函數(shù)的使用方法
4、 掌握循環(huán)語(yǔ)句的應(yīng)用方法。
5、 了解隨機(jī)數(shù)生成函數(shù)。
[實(shí)驗(yàn)要求]
在規(guī)定期限獨(dú)立完成實(shí)驗(yàn)內(nèi)容
1、 提交實(shí)驗(yàn)報(bào)告(電子版)
2、 提交相應(yīng)源程序文件(文件名 EX6_x姓名.c, 如EX6_1彭健.c)
3、 要求從簡(jiǎn)單到復(fù)雜,后面的要求均在前面的基礎(chǔ)上進(jìn)行修改,前六題,每題均需要保留各自的程序,六題以后,每題均在前一題基礎(chǔ)上修改,保留最后一個(gè)程序即可(如做到第九題,則保留EX6_9姓名.c,做到第11題,則保留ex6_11姓名.c)
二、實(shí)驗(yàn)原理和設(shè)計(jì)方案:
1、函數(shù)頭的選則,while循環(huán)語(yǔ)句,switch(case)語(yǔ)句,條件表達(dá)式,if else條件語(yǔ)句,自增運(yùn)算符,設(shè)置復(fù)雜變量,輸出隨機(jī)操作數(shù)。
2、 變量要有分?jǐn)?shù)變量和等級(jí)變量,要有選擇算法題數(shù)的變量和計(jì)算正確與否的變量,要有隨機(jī)輸出的兩個(gè)操作數(shù)變量和自己按運(yùn)算符號(hào)輸入結(jié)果的變量,最后還有判斷是否要進(jìn)行的變量字符。中間結(jié)果有選擇運(yùn)算符的switch()和分?jǐn)?shù)等級(jí)的switch()和錯(cuò)題對(duì)題的自增和選擇運(yùn)算符計(jì)算的自增。
3、 問(wèn)題的分析方法:先考慮設(shè)置整形變量和字符變量,考慮到要不斷循環(huán)計(jì)算,選擇用while語(yǔ)句來(lái)循環(huán)。在循環(huán)體中,將前面的輸出提示運(yùn)算符,和自行選擇運(yùn)算符、答案及輸出隨機(jī)操作數(shù)完成。再用switch語(yǔ)句對(duì)選擇的運(yùn)算符進(jìn)行判斷,并用變量進(jìn)行自增運(yùn)算,計(jì)算出錯(cuò)題于對(duì)題個(gè)數(shù)和選擇了那種運(yùn)算符號(hào)。在循環(huán)體最后用if else語(yǔ)句來(lái)判斷是否繼續(xù)執(zhí)行還是跳出循環(huán)。最后根據(jù)自增計(jì)算的結(jié)果和公式進(jìn)行分?jǐn)?shù)計(jì)算,并用switch語(yǔ)句來(lái)是想等級(jí)的制定。
三、源代碼
#includestdio.h
#includestdlib.h
#includetime.h
void main()
{
..........
}
四、試驗(yàn)結(jié)果和啟發(fā)
因?yàn)檩斎難要繼續(xù)循環(huán),所以選擇用while語(yǔ)句。在while語(yǔ)句中要結(jié)合前面的按提示計(jì)算,并嵌套switch語(yǔ)句并用條件表達(dá)式,來(lái)計(jì)算結(jié)果正確與否,計(jì)算的題型是什么。最后再用switch語(yǔ)句來(lái)完成分?jǐn)?shù)等級(jí)的判斷。
五、實(shí)驗(yàn)體會(huì):
描述自己在編程或程序編譯運(yùn)行中遇到的難點(diǎn)和問(wèn)題及解決的辦法。