第一篇:C語言課程設計
前言
讓自己所學的知識應用于實際生活中,理論聯系生活,學以致用,我們將更好服務于民。我們是新一代的年輕人,要想將來在社會上更好的立足,就必須讓自己強大起來,努力的學習新東西,了解新事物,跟上時代的步伐,這樣我們才能與時俱進,不被社會所淘汰。C語言在大學里是一門很重要的課程,也是一門很實用的課程,學好C語言在當今的信息時代是一個很好的敲門磚。而且,我們是電子信息工程專業的,更應該學好C語言,這對我們以后走向社會有很大的幫助,為我們以后大學畢業去求職提升競爭力。從C語言產生到現在,它已經成為最重要和最流行的編程語言之一。在各種流行編程語言中,都能看到C語言的影子,如Java的語法與C語言基本相同。學習、掌握C語言是每一個計算機技術人員的基本功之一。C語言具有高級語言的強大功能,卻又有很多直接操作計算機硬件的功能(這些都是匯編語言的功能),因此,C語言通常又被稱為中級語言。學習和掌握C語言,既可以增進對于計算機底層工作機制的了解,又為進一步學習其他高級語言打下了堅實的基礎。需求分析
當今社會是信息社會,誰的信息越快速越準確,誰就會更好的生活在這個社會上,他的人生也將走向成功。信息業正在21世紀扮演著越來越重要的角色,也是中國十二五規劃中的重要一環,因此,我們應該努力的去學習好這門課程,力爭在以后的生活工作中大展身手。現在的社會日新月異,各種信息在不斷的傳遞交流,誰最先獲取了信息誰就會成功。所以,作為我們這類專業的人才,在畢業以后一定會大顯身手,實現自己的人生價值。
2.1 課程設計目的
本課程設計為信息類公共課《計算方法與程序設計》配套的課程設計。是該課程的理論學習的延伸。通過本課程設計有助于鍛煉綜合運用C語言相關知識設
為1;若n大于1,則開始循環運算(見圖3.22流程圖),直到i小于n不成立時結束循環。在循環運算的過程中,要調用兩個函數即函數pit1和函數pit2(見圖3.23流程圖)。在調用函數pit1和函數pit2中,這兩個函數進行相互遞歸調用。最后將調用函數pit1和pit2的值返回主函數main函數中,再輸出高能質子數目t3和低能質子數目t4。
3.1 系統流程圖
程序一系統流程圖(如圖3.11所示):
開始輸入nt1=3,t2=1,i=1否n==0否是n==1是否i 3.2主要模塊的流程圖 程序一模塊流程圖如圖3.21所示: 否i 圖3.21流程圖 程序二模塊流程圖如圖3.22和圖3.23所示: i=1否i 圖3.22流程圖 } {t3=3*t1+2*t2;t4=t1+t2;t1=t3;t2=t4;} printf(“n the high=%d the low=%dn”,t3,t4); 程序代碼4.1 程序二代碼如下所示: #include “stdio.h” int pit1(int a){ if(a==1) } int pit2(int b){ if(b==1) } main(){ int n,i,t3,t4;printf(“n input n”);scanf(“%d”,&n);if(n==0){ return(1);return(pit1(b-1)+pit2(b-1));else return(3);return(3*pit1(a-1)+2*pit2(a-1));else 圖5.11 程序二運行結果:如圖5.12(程序運行時,當輸入時間變量n是3時,輸出高能粒子是41,低能粒子是15。) 圖5.12 參考文獻 [1 ]張福祥.C語言程序設計[M].遼寧大學出版社,2008.[2] 張福祥,王萌.C語言程序設計習題解答與實驗實訓.沈陽:遼寧大學出版社,2008. [3] 牛莉,劉遠軍等.計算機等級考試輔導教程[M].北京:中國鐵道出版社,2008. [4]李勇帆,謝兵.大學計算機應用教程.北京:中國鐵道出版社,2009. [5]田淑清.全國計算機等級考試二級教程.北京:高等教育出版社,2011. [6]楊振山,龔沛曾.大學計算機基礎.北京:高等教育出版社,2006. [7]盧湘鴻.信息技術應用基礎.北京:高等教育出版社,2004. 致 謝 在這次課程設計的撰寫過程中,我得到了許多人的幫助。首先我要感謝我的老師在課程設計上給予我的指導、提供給我的支持和幫助,這是我能順利完成這次報告的主要原因,更重要的是老師幫我解決了許多技術上的難題,讓我能把系統做得更加完善。在此期間,我不僅學到了許多新的知識,而且也開闊了視野,提高了自己的設計能力。其次,我要感謝幫助過我的同學,他們也為我解決了不少我不太明白的設計商的難題。同時也感謝學院為我提供良好的做畢業設計的環境。最后再一次感謝所有在設計中曾經幫助過我的良師益友和同學。 #include int num1; char name1[20]; int score; int nelepeo;//課程已選人數 int Melepeo;//課程人數上限 struct couse * next;}; int student(); //學生登陸 int teacher(); //教師登陸 struct student//學生信息結構體 { int num2; char name2[20]; int nelenum[50];//已選課程編號 int nelen;//已選課程數量 struct student * next;}; void Ms(){ for(kk1=0;kk1<1100;kk1++) for(kk2=0;kk2<1200;kk2++) for(kk3=0;kk3<1200;kk3++);} void keyboardc()//錄入課程子函數(從鍵盤錄入){ void intoc();struct couse *p1,*p2;N1=0;p1=p2=(struct couse*)malloc(sizeof(struct couse));printf(“n課程編號:”);fflush(stdin);scanf(“%d”,&p1->num1);printf(“n課程名稱:”);scanf(“%s”,p1->name1);printf(“n學分:”);scanf(“%d”,&p1->score);printf(“n課程人數上限:”);scanf(“%d” ,&p1->Melepeo);printf(“ntttt輸入成功!”);p1->nelepeo=0;head1=NULL;while(p1->num1!=0){ N1=N1+1; if(N1==1)head1=p1; else p2->next=p1; p2=p1; p1=(struct couse *)malloc(sizeof(struct couse)); printf(“n-----------------------------”); printf(“n課程編號:(輸入0結束)”);scanf(“%d”,&p1->num1);printf(“n課程名稱:”);scanf(“%s”,p1->name1);printf(“n學分:”);scanf(“%d”,&p1->score);printf(“n課程人數上限:”);scanf(“%d” ,&p1->Melepeo); p1->nelepeo=0; printf(“ntttt輸入成功!”);} p2->next=NULL;intoc();} void filec()//錄入鍵盤子函數(從文件錄入){ void intoc(); FILE * fp; char filepath[20]; struct couse *p1,*p2; N1=0; printf(“輸入要讀入的文件路徑:”); getchar(); gets(filepath); if((fp=fopen(filepath,“r”))==NULL) { printf(“找不到%s文件!n”,filepath); exit(0); } p1=p2=(struct couse*)malloc(sizeof(struct couse)); fscanf(fp,“%d%s%d%d%d”,&p1->num1,p1->name1,&p1->score,&p1->nelepeo,&p1->Melepeo); head1=NULL; while(!feof(fp)) { N1=N1+1; if(N1==1)head1=p1; else p2->next=p1; p2=p1; p1=(struct couse *)malloc(sizeof(struct couse)); fscanf(fp,“%d%s%d%d%d”,&p1->num1,p1->name1,&p1->score,&p1->nelepeo,&p1->Melepeo); } p2->next=NULL; intoc();} void inputc()//錄入課程主函數 { int i; printf(“ttt錄入課程信息n”); printf(“n1.從鍵盤錄入n”); printf(“2.從文件錄入n”); printf(“3.返回主菜單n”); printf(“請選擇(1~3):n”); scanf(“%d”,&i); switch(i) { case(1):keyboardc();break; case(2):filec();break; case(3):system(“cls”);return;break; //return } } void insertc(struct couse *incouse)//課程管理子函數(增加課程){ void intoc(); struct couse *p0,*p1,*p2; p1=head1; p0=incouse; if(head1==NULL) { head1=p0; p0->next=NULL; } else { while((p0->num1 > p1->num1)&&(p1->next!=NULL)) { p2=p1; p1=p1->next; } if(p0->num1 <= p1->num1) { if(head1==p1)head1=p0; else p2->next=p0; p0->next=p1; } else { p1->next=p0; p0->next=NULL; } } N1=N1+1; intoc();} void delc(int num1)//課程管理子函數(刪除課程){ void intoc(); struct couse *p1,*p2; if(head1==NULL) { printf(“n沒有課程,無法刪除!n”); goto end; } p1=head1; while(num1!=p1->num1 && p1->next!=NULL) { p2=p1; p1=p1->next; } if(num1==p1->num1) { if(p1==head1)head1=p1->next; else p2->next=p1->next; printf(“已刪除該編號課程!n”); N1=N1-1; } else printf(“無該編號的課程!n”); end:; intoc();} void managementc()//課程管理主函數 { struct couse * incouse; struct couse *p1; int i,num1; printf(“ttt課程管理n”); printf(“1.新增課程n”); printf(“2.刪除課程n”); printf(“3.返回主菜單n”); printf(“請選擇(1~3):n”); scanf(“%d”,&i); switch(i) { case(1): { incouse=(struct couse *)malloc(sizeof(struct couse)); printf(“n課程編號:”); fflush(stdin); scanf(“%d”,&p1->num1); printf(“n課程名稱:”); scanf(“%s”,p1->name1); printf(“n學分:”); scanf(“%d”,&p1->score); printf(“n課程人數上限:”); scanf(“%d” ,&p1->Melepeo); printf(“ntttt輸入成功!”); incouse->nelepeo=0; insertc(incouse); break; } case(2): { printf(“請輸入要刪除課程的編號:n”); scanf(“%d”,&num1); delc(num1); break; } case(3):system(“cls”);return;break; } } void keyboards()//錄入學生信息子函數(從鍵盤錄入){ void intos(); int i; struct student *p1,*p2; N2=0; p1=p2=(struct student *)malloc(sizeof(struct student)); printf(“n學生學號:”); scanf(“%d”,&p1->num2); printf(“n學生姓名:”); scanf(“%s”,p1->name2); p1->nelen=0; for(i=0;i<50;i++)p1->nelenum[i]=0; head3=NULL; while(p1->num2!=0) { N2=N2+1; if(N2==1)head3=p1; else p2->next=p1; p2=p1; p1=(struct student *)malloc(sizeof(struct student)); //return printf(“n學生學號:(輸入0結束!)”); scanf(“%d”,&p1->num2); printf(“n學生姓名:”); scanf(“%s”,p1->name2); p1->nelen=0; for(i=0;i<50;i++)p1->nelenum[i]=0; } p2->next=NULL; intos();return;} void files()//錄入學生信息子函數(從文件錄入){ int i=0; FILE * fp; char filepath[20]; struct student *p1,*p2; N2=0; printf(“輸入要讀入的文件路徑:”); getchar(); gets(filepath); if((fp=fopen(filepath,“r”))==NULL) { printf(“找不到%s文件!n”,filepath); exit(0); } p1=p2=(struct student*)malloc(sizeof(struct student)); fread(p1,sizeof(struct student),1,fp); head3=NULL; while(!feof(fp)) { i=0; N2=N2+1; if(N2==1)head3=p1; else p2->next=p1; p2=p1; p1=(struct student *)malloc(sizeof(struct student)); fread(p1,sizeof(struct student),1,fp); } p2->next=NULL;} void inputs()//錄入學生信息主函數 { int i; printf(“nttt錄入學生信息n”); printf(“n1.從鍵盤錄入n”); printf(“2.從文件錄入n”); printf(“3.返回主菜單n”); printf(“請選擇(1~3):n”); scanf(“%d”,&i); switch(i) { case(1):keyboards();break; case(2):files();break; case(3):system(“cls”);return;break; } return 0;} void inserts(struct student * incouse)//學生信息管理子函數(填加學生信息){ void intos(); struct student *p0,*p1,*p2; p1=head3; p0=incouse; if(head3==NULL) { head3=p0; p0->next=NULL; } else { while((p0->num2 > p1->num2)&&(p1->next!=NULL)) { p2=p1; p1=p1->next; } if(p0->num2 <= p1->num2) { if(head3==p1)head3=p0; else p2->next=p0; p0->next=p1; } else { //return p1->next=p0; p0->next=NULL; } } N2=N2+1; intos();} void dels(int num2)//學生信息管理子函數(刪除學生信息){ void intos(); struct student *p1,*p2; if(head3==NULL) { printf(“n沒有該學生信息,無法刪除!n”); goto end; } p1=head3; while(num2!=p1->num2 && p1->next!=NULL) { p2=p1; p1=p1->next; } if(num2==p1->num2) { if(p1==head3)head3=p1->next; else p2->next=p1->next; printf(“已刪除該學生信息!n”); N2=N2-1; } else printf(“無該學號的學生!n”); intos(); end:;} void managements()//學生信息管理主函數 { struct student * incouse; int i,num2; printf(“ttt學生信息管理n”); printf(“1.新增學生信息n”); printf(“2.刪除學生信息n”); printf(“3.返回主菜單n”); printf(“請選擇(1~3):n”); scanf(“%d”,&i); switch(i) { case(1): { incouse=(struct student *)malloc(sizeof(struct student)); incouse->nelen=0; incouse->nelenum[0]=0; printf(“學生學號t學生姓名n”); scanf(“%d%s”,&incouse->num2,incouse->name2); inserts(incouse); break; } case(2): { printf(“請輸入要刪除學生的學號:n”); scanf(“%d”,&num2); dels(num2); break; } case(3):system(“cls”);return;break; //return } } void elect(struct student * s)//選課 { void intos(); struct couse * p; int num1,i; printf(“請輸入要選課的編號:n”); scanf(“%d”,&num1); for(i=0;s->nelenum[i]!=0;i++); s->nelenum[i]=num1; (s->nelen)++; p=head1; while(p->num1!=num1)p=p->next; (p->nelepeo)++; intos();} void cheak()//學生選課子函數(查詢可選課程){ char e; struct couse * c; struct student * s; int num2,i,j=0,t=0; printf(“請輸入你的學號:”); scanf(“%d”,&num2); s=head3; while((s->num2!=num2)&&(s->next!=NULL))s=s->next; if(s->num2!=num2) { printf(“不存在你的信息,請進入主菜單錄入你的信息!n”); goto end; } c=head1; printf(“你的可選課程編號:n”); while(c!=NULL) { for(t=0,i=0;s->nelenum[i]!=0;i++) { if(c->num1==s->nelenum[i])t=1; } if(t==0 &&(c->nelepeo!=c->Melepeo)) { printf(“%dn”,c->num1); j++; } c=c->next; } if(j==0) { printf(“你已選完所有課程,無法再多選!n”); goto end; } printf(“選課(y/n)?:n”); getchar(); e=getchar(); i=0; while((e=='y')||(e=='Y')) { elect(s); printf(“繼續選課(y/n)?:n”); getchar(); e=getchar(); } end:;} void back(struct student * p)//退課 { void intos(); struct couse * p1; int num1,i,j; printf(“請輸入你要退掉的課程編號:n”); scanf(“%d”,&num1); p1=head1; while(p1->num1!=num1)p1=p1->next; for(i=0;p->nelenum[i]!=num1;i++); for(j=i;p->nelenum[j]!=0;j++)p->nelenum[j]=p->nelenum[j+1]; p->nelenum[--j]=0; (p1->nelepeo)--; printf(“退課成功!n”); intos();} void hcheak()//學生選課子函數(查詢已選課程){ char c; struct couse * p0; struct student * p; int num2,i,f=0; printf(“請輸入學號:n”); scanf(“%d”,&num2); p=head3; while(p->num2!=num2 && p!=NULL)p=p->next; if(p==NULL) { printf(“不存在你的信息,請回主菜單錄入信息:n”); goto end; } printf(“已選課程編號:n”); if(p->nelenum[0]==0) { printf(“你還沒選課!n”); goto end; } for(i=0;p->nelenum[i]!=0;i++) { printf(“%dn”,p->nelenum[i]); p0=head1; while(p0->num1!=p->nelenum[i])p0=p0->next; f=f+p0->score; } printf(“總學分:%dn”,f); printf(“是否進行退課(y/n)?”); getchar(); c=getchar(); while((c=='y')||(c=='Y')) { back(p); printf(“繼續退課(y/n)?”); getchar(); c=getchar(); (p->nelen)--; } end:;} void elective()//學生選課主函數 { int i; printf(“ttt學生選課n”); printf(“1.查詢可選課程n”); printf(“2.查詢已選課程n”); printf(“3.返回主菜單n”); printf(“請輸入(1~3):n”); scanf(“%d”,&i); switch(i) { case(1):cheak();break; case(2):hcheak();break; case(3): system(“cls”);return;break; // return } } void listc()//輸出課程信息 { struct couse * p; p=head1; printf(“課程編號 課程名稱 學分 課程已選人數 課程人數上限n”); while(p!=NULL) { printf(“%-8d%10s%6d%8d%12dn”,p->num1,p->name1,p->score,p->nelepeo,p->Melepeo); p=p->next; } } void lists()//輸出學生信息 { struct student * p; p=head3; printf(“學生學號 學生姓名 已選課程數量n”); while(p!=NULL) { printf(“%-4d %10s %6dn”,p->num2,p->name2,p->nelen); p=p->next; } } void intoc()//存儲課程信息 { FILE * fp; struct couse * p; char filepath[30]; if((fp=fopen(“課程信息.dat”,“a+”))==NULL) { printf(“n保存失敗!”); exit(0); } p=head1; while(p!=NULL) { fprintf(fp,“%d %s %d %d %dn”,p->num1,p->name1,p->score,p->nelepeo,p->Melepeo); p=p->next; } fclose(fp); printf(“課程信息已保存成功!n”);} void intos()//存儲學生信息 { int i; FILE * fp; struct student * p; char filepath[30]; if((fp=fopen(“學生信息.dat”,“a+”))==NULL) { printf(“n保存失敗!”); exit(0); } p=head3; while(p!=NULL) { fwrite(p,sizeof(struct student),1,fp); p=p->next; } fclose(fp); printf(“學生信息已保存成功!n”); printf(“ntttt選擇菜單:”); printf(“ntttt1.繼續添加ntttt2.返回主菜單:”); printf(“請選擇:”); scanf(“%d”,&i); switch(i) { case 1:inputs();break; case 2:teacher();break; default:printf(“n輸入有誤!n”);} } void store()//信息主函數 { int i; printf(“tt系統信息查看及存儲n”); printf(“1.查看課程信息n”); printf(“2.查看學生信息n”); printf(“3.返回主菜單n”); printf(“請輸入(1~3):n”); scanf(“%d”,&i); switch(i) { case(1):listc();break; case(2):lists();break; case(3):system(“cls”);return;break; } } int main()//主函數 //retuen { int i; FILE *fp; printf(“nttt歡迎使用學生選課系統!n”); printf(“n請選擇菜單:”); printf(“ntttt1.教師登陸ntttt2.學生登陸n”); printf(“請選擇:”); scanf(“%d”,&i); switch(i) { case 1:teacher();break; case 2:student();break; default:printf(“輸入有誤!”); } } int student() { int i; printf(“ntttt1.學生選課n”); printf(“ntttt2.系統信息查看及存儲n”); printf(“ntttt3.退出系統n”); printf(“請選擇:”); scanf(“%d”,&i); switch(i) { case 1: { system(“cls”); elective(); break; } case 2: { system(“cls”); store(); break; } default:printf(“輸入有誤!”); } } int teacher() { FILE *fp; int i; printf(“菜單:n”); printf(“1.錄入課程信息n”); printf(“2.課程管理n”); printf(“3.錄入學生信息n”); printf(“4.學生信息管理n”); printf(“5.系統信息查看n”); printf(“6.退出系統n”); if((fp=fopen(“課程信息.dat”,“rb”))==NULL) { printf(“n打開系統文件失敗! n”); //fp=fopen(“信息.dat”,“rb”)); // } // if(feof(fp)) // { printf(“n還未添加課程信息,請添加課程信息!n”); inputc(); } while(!feof(fp)) { emp1=(struct couse*)malloc(sizeof(struct couse)); if(emp1==NULL) { printf(“n分配內存失敗!n”); return; } fread(emp1,sizeof(struct couse),1,fp); if(feof(fp))break; if(head1==NULL) { head1=emp1; head2=emp1; } else{ head2->next=emp1; head2=emp1; } head2->next=NULL; } fclose(fp); fp==NULL; if((fp=fopen(“學生信息.dat”,“rb”))==NULL) printf(“n打開系統文件失敗!n”); // //if(feof(fp)==1) // { printf(“還未添加學生信息,請添加學生信息!”); inputs(); while(!feof(fp)) { emp1=(struct student*)malloc(sizeof(struct student)); if(emp2==NULL) { printf(“n分配內存失敗!n”); return; } fread(emp2,sizeof(struct student),1,fp); if(feof(fp))break; if(head3==NULL) { head3=emp2; head4=emp2; } else{ head4->next=emp2; head4=emp2; } head4->next=NULL; } fclose(fp); fp==NULL; printf(“n請輸入菜單選項(1~6):n”); scanf(“%d”,&i); switch(i) { case(1): { system(“cls”); inputc(); break; } case(2): { system(“cls”); managementc(); break; } case(3): { system(“cls”); inputs(); break; } case(4): { system(“cls”); managements(); break; } case(5): { system(“cls”); store(); break; } case(6): { system(“cls”); printf(“感謝使用本系統!nn再見!n”); } } return 1; } 1,/*100-999內的水仙花數的個數*/ #include int a,b,c,d,s,i=0; for(a=100;a<=999;a++) { b=a/100; c=a%100/10; d=a%10; s=b*b*b+c*c*c+d*d*d; if(a==s) i++; } printf(“%d”,i); getch();} 2, /*x^2+y^2+z^2=55^2,則(x,y,z)稱為方程的整數解的個數*/ #include for(y=-55;y<=55;y++) for(z=-55;z<=55;z++) { a= x*x+y*y+z*z; s=55*55; if(a==s&&x>y&&x>z&&x>y) t++; } printf(“%d”,t); getch(); } 3/*100-400內的水仙花數的個數*/ #include int a,b,c,d,s,i=0; for(a=100;a<=400;a++) { b=a/100; c=a%100/10; d=a%10; s=b*b*b+c*c*c+d*d*d; if(a==s) i++; } printf(“%d”,i); getch(); } 4, /* 0-60內每位數的乘積大于和的數個數*/ #include int a,b,c,d,e,i=0; for(a=0;a<=6;a++) { b=a/10;c=a%10; d=a*b;e=a+b; if(d==e) i++; } printf(“%d”,i); getch(); } 5/*滿足1/A^2+1/B^2=1/C^2關系時,稱為倒勾股數 */ #include int a,b,c ,t=0; float x,y,z; for(a=1;a<=100;a++) { for(b=1;b<=100;b++) for(c=1;c<=100;c++) x=1/(a*a); y=1/(b*b); z=1/(c*c); if(x+y==z&&a+b+c<150&&a+b+c>130&&a>b&&a>c&&b>c) t++; } printf(“%d”,t); getch(); } 6, /*愛因斯坦走臺階 */ #include int s; for(s=0;;s++) { if(s%2==1&&s%3==2&&s/4==3&&s/5==4&&s/6==5&&s%7==0)break; } printf(“%d”,s); getch(); } 7./*121-140內弦數的個數*/ #include int a=0,b=0,c=121 ,i=0; for(c=121;c<=140;a++) { for(a=0;a<=15;a++) for(b=0;b<=15;b++) if(c*c==a*a+b*b) i++; continue; printf(“%d”,i); } getch();} 8/*1000內其十位數是6能被8整除數的個數*/ #include int a,i=0; for(a=10;a<=1000;a++) { if(a%100/10==6&&a%8==0) i++; } printf(“%d”,i); getch(); } 9/* 0-60內每位數的乘積大于和的數個數*/ #include int a,b,c,d,e,i=0; for(a=0;a<=60;a++) { b=a/10;c=a%10; d=c*b;e=c+b; if(d>e) i++; } printf(“%d”,i); getch(); } 10./* 1-5000內能被5整除偶數之和大于500和的值*/ #include int a, b=0; for(a=2;a<=5000;a+=2) { if(a%5==0) b=b+a; while(b>500); printf(“%d”,b); } getch(); } 11./* 100-500內能被3整除余2和能被5整除余3的個數*/ #include int a, b=0; for(a=100;a<=500;a++) { if(a%3==2&&a%5==3) b++; } printf(“%d”,b); getch(); } 12/* 1-7000內能被3或者能被7整除的個數*/ #include int a, b=0; for(a=1;a<=7000;a++) { if(a%3==0||a%7==0) b++; } printf(“%d”,b); getch(); } 13./*3-100內非偶數非素數之和*/ #include int a,i,k, b=0; for(a=3;a<=100;a+=2) { k=sqrt(a); for(i=2;i<=k;i++) {if(a%i==0)break; if(i>k+1) b=b+a;} } printf(“%d”,b); getch(); } 14/*求滿足ijk+kji=1534,且i #include int j,i,k, b=0; for(j=0;j<=9;j++) for(k=0;k<=9;k++) for(i=0;i if(100*i+10*j+k+100*k+10*j+i==1534) b++; printf(“%d”,b); getch(); } 15/*有四位數ABCD的個數,該四位數是11的倍數,且A=B+C,即第2位數加上第3位數等于第1位數。4 */ #include int j,i,k,a, b=0; for(j=1000;j<=9999;j++) { i= j/1000; k=j%1000/100; a=j%100/10; if(j%11==0&&i==k+a) b++; } printf(“%d”,b); getch(); } 16/*求三位數的偶數中,所有各位數字之和是15的倍數的數的個數*/ #include int j,i,k,a,s, b=0;for(j=100;j<=999;j+=2) { i= j/100; k=j%100 /10; a=j%10; s=i+k+a; if(s%15==0) b++; } printf(“%d”,b); getch(); } 17/*四位數的奇數中,所有各位數字之積是125的倍數的數的和*/ #include int j,i,k,a,c,s, b=0;for(j=1111;j<=9999;j+=2) { i= j/1000; k=j%1000 /100; a=j%100/10; c=j%10; s=i*k*a*c; if(s%125==0) b=b+j; } printf(“%d”,b); getch(); } 18/*5000以內能被17或者23整除的正整數的個數 */ #include int j,i,k,a,c,s, b=0;for(j=1;j<=5000;j++) { if(j%17==0||j%23==0) b++; } printf(“%d”,b); getch(); } 19/*四位數的偶數中,所有各位數字之和是30的倍數的數的和 */ #include int j,i,k,a,c,s, b=0;for(j=1000;j<=9999;j+=2) { i=j/1000; k=j%1000/100; a=j%100/10; c=j/10; s=i+k+a+c; if(s%30==0) b=b+j; } printf(“%d”,b); getch(); } 21/*統計1000~9999之間的所有滿足以下條件的四位數的個數。該數是一個完全平方數*/ #include int a,b,c ,d,s,x,y,t=0; for(s=1000;s<=9999;s++) { a=s/1000; b=s%1000/100; c=s%100/10; d=s%10; x=sqrt(s); y=x*x; if(a+b==12&&c*d==24&&y==s) t++; } printf(“%d”,t); getch(); } 22/*S=1+3+5+7+9+…,求S不大于9000的最大值*/ #include int j ,s=0;for(j=1;;j+=2) { s+=j;if(s>9000)break; } s=s-j; printf(“%d”,s); getch(); } 23/*S=2+4+8+16+32+…,求S不大于1500的最大值*/ #include int j ,s=0;for(j=2;;j=2*j) { s+=j; if(s>1500)break; } s=s-j; printf(“%d”,s); getch(); } /*m的值為50時,計算下列公式的值T=1-1/2-1/3-1/4-…-1/m*/ #include float n,m,s,T; s=0; for(n=2;n<=50;n++){ m=-1/n; s=s+m; } T=1+s; printf(“%0.4f”,T); getch(); } 26, /*當n的值為25時,計算下列公式的值: s=1+1/1!+1/2!+1/3!+…+1/n*/ #include float s,T; int m=1,n=1; s=0; for(n=1;n<=25;n++){ m=m*n; s=s+1/m; } T=1+s; printf(“%0.4f”,T); getch(); } 27/*斐波那契數列,10000000以內最大的斐波那契數*/ #include do { f1=f1+f2; f2=f1+f2; }while(f1>10000000); printf(“%ldn%ld”,f1,f2); getch(); } 28/*計算y=1+2/3+3/5+4/7+.....+n/(2*n-1)的值,n=50*/ #include t=2*n-1; m=1.0/t; s=m*n; y+=s; } printf(“%.2f”,y); getch(); } 29/*計算y=x/1!-x^3/3!+x^5/5!-x^7/7!...前20項的值x=2*/ #include float y=0,m,s,x;int t,n; for(n=1;n<=20;n++){ x=-4*x; m=2*n+1; t=t*m*(m-1); s+= x/t; } printf(“%.2f”,y); getch(); } 30/*梅森尼數2^n-1是素數,【2-21】內的梅森尼數個數 */ #include main(){ int n,m,i,j,k,x=0;for(n=2;n<=21;n++){ m=2*m; i=m-1; k=sqrt(i); for(j=3;j<=k;j++) if(i%k==0)break;if(j>=k+1)x++; } printf(“%d”,x); getch(); } 31/*兩位數分子分母各個數之和的比等于原來的值*/ #include main(){ int n,m,a,b,c,d,s;float x,y;for(n=10;n<=98;n++)for(m=11;m<=99;m++) { a=n/10; b=n%10; c=m/10; d=m%10; x=n/m; y=(a+b)/(c+d); if(m>n&&x==y) s+=a+b+c+d; } printf(“%d”,s); getch(); } 32/* 1-50內構成直角三角形的組數 */ #include main(){ int x,y,z,n=0,t; for(x=1;x<=50;x++) { for(y=1;y<=50;y++) for(z=1;z<=50;z++) if(x+y>z&&x*x+y*y==z*z) n++;} t=n/3; printf(“%d ”,t); getch(); } 33/*一正整數遞減,每次減半后減一,10次后剩一 */ #include main(){ int n, s=0,m=1; for(n=2;n<=10;n++) { m= 2*(m+1); } printf(“%dn”,m); getch(); } 34./* 2/1,3/2,5/3,.....前50項和*/ #include main(){ int x1=1,x2=2, n;float t,s=0; for(n=1;n<=50;n++) { t=x2/x1; s+=t; x2=x1+x2; x1=x2; } printf(“%.2f ”,s); getch(); } 35,/*求五位數各個位數平方和為100的最大五位數*/ #include main(){ int x,a,b,c,d,e,m,n,max; for(x=10000;x<=99999;x++) { a=x/10000; b=x%10000/1000; c=x%1000/100; d=x%100/10; e=x%10; m=a*a+b*b+c*c+d*d+e*e; if(m==100)break; max=x; } for(n=x;n<=99999;n++) { a=n/10000; b=n%10000/1000; c=n%1000/100; d=n%100/10; e=n%10; m=a*a+b*b+c*c+d*d+e*e; if(m==100) max=n; } printf(“%ld ”,max); getch(); } 36,#include long int y,k; int x,i=0; for(x=2;x<=1000;x++) { y=x*x; k=y-x; if(x<10&&k%10==0) i=i+x; if(x>=10&&x<=99&&k%100==0) i=i+x; if(x>=100&&x<=999&&k%1000==0) i=i+x; if(x==1000&&k%10000) i=i+x; } printf(“%d”,i); getch();} 37/*求50-150之間的友對數*/ #include y=x+1; z=x*y-1; for(i=2;x<=z-1;i++) { if(z%i==0)break; if(z%i!=0) { if(i==z-1) t++;} } } printf(“%d”,t); getch(); } 38/* 求[1,30000]之內E數的個數,E(1)=E(2)=1;E(n)=(n-1)*E(n-1)+(n-2)*E(n-2)*/ #include int i,j=2,n; long int a[]={0,1,1}; for(n=3;;n++) { a[n]=(n-1)*a[n-1]+(n-2)*a[n-2]; for(i=1;i<=30000;i++) { if(a[n]==i) {j++;break;} if(a[n]>=30000) break; } if(a[n]>=30000) break; } printf(“%d”,j); getch();} 39./*試求所有兩位絕對素數的和,絕對素數是交換位子后仍為素數*/ #include int i,j,a,b,x,k,s=0; for(i=11;i<=99;i+=2) for(j=2;j<=i-1;j++) {if(i%j==0) break; if(i%j!=0) {if(j==i-1) {a=i/10; b=i%10; x=10*b+a; for(k=2;k<=x-1;k++) {if(x%k==0) break; if(x%k!=0) {if(k==x-1) s=s+i;}} } } } printf(“%d”,s); getch();} 40./*f(0)=f(1)=1,f(2)=0f(n)=f(n-1)-2*f(n-2)+f(n-3),(n>2)求f(0)到f(50)中的最大值*/ #include long int a[50]={1,1,0},max; int i; for(i=3;i<=50;i++) { max=a[1]; a[i]=a[i-1]-2*a[i-2]+a[i-3]; if(max max=a[i]; else max=max; } printf(“%ld”,max); getch();} 41,/*f(n)=f(n-1)+2*f(n-2)-5*f(n-3),f(0)=1,f(1)=2,f(2)=3,求f(0)+f(1)+…f(30)*/ #include long int a[31]={1,2,3},s=a[0]+a[1]+a[2]; int i; for(i=3;i<=30;i++) { a[i]=a[i-1]+2*a[i-2]-5*a[i-3]; s=s+a[i]; } printf(“%ld”,s); getch();} 42./*A1=1, A2=1/(1+A1), A3=1/(1+A2), A4=1/(1+A3), ……, 求A50*/ #include float a[51]={0,1}; int i; for(i=2;i<=50;i++) { a[i]=1.0/(1+a[i-1]); } printf(“%.3f”,a[50]); getch();} 43./*A,B為正整數, A #include int A,B,d,min=2699; long int c; for(B=2;B<=2698;B++) for(A=1;A {c=A*B; if(c==2698) { d=A+B; if(min>d) min=d;} } for(B=2;;B++) {for(A=1;A {min=A+B; c=A*B; if(c==2698) break;} if(c==2698) break;} printf(“%d”,B); getch();} 44/*A main(){ int A,B,d,min=2699; long int c; for(B=2;B<=2698;B++) for(A=1;A {c=A*B; if(c==2698) { d=A+B; if(min>d) min=d;} } printf(“%d”,min); getch();} 45/*的自然數對中B之和求所有小于或等于100*/ #include int a,b,A,B,j,i,s=0; for(A=1;A<=100;A++) for(B=1;B<=A;B++) { a=A+B; b=A-B; for(i=1;i<=15;i++) if(a==i*i) {for(j=1;j<=10;j++) if(b==j*j) s=s+B;} } printf(“%d”,s); getch();} 46./*問大、中、小學生的人數分配共有多少種不同的解*/ #include int i,j,k,s,y=0; for(i=1;i<=30;i++) for(j=1;j<=40;j++) for(k=1;k<=60;k++) {s=4*i+3*j+2*k; if(s==120) y++; } printf(“%d”,y); getch();} C語言課程設計 飛機空戰小游戲 一、實驗環境 運行系統 WINDOWSXP 編程工具C++6.0 地點 程序設計與仿真實驗室 桌號19電腦IP地址221.12.10.218 二、實驗目的和要求 實驗目的: (1)使學生進一步理解和掌握課堂上所學各種基本抽象數據類型的邏輯結構、存儲結構和操作算法。 (2)使學生進一步掌握程序設計、編寫、調試能力。(3)使學生了解軟件開發的基本步驟和內容。 實驗要求::飛機空戰小游戲。功能要求: 1)有主菜單界面,能讓用戶選擇開始、退出、難度等級、查看用戶積分功能; 2)飛機能通過A、S、D、W或上下左右鍵控制移動方向,使用空格鍵發射子彈; 3)屏幕隨機出現從上到下的敵方子彈; 4)當打中敵方子彈時,積分加1; 5)當敵方子彈打正飛機時,游戲結束,并提示用戶是否保存記錄(記錄包括用戶名及積分值),保存后退回到主菜單; 6)當選擇主菜單中的“查看用戶積分”選項時,進入第二級菜單,用戶可查看全部用戶積分記錄,也可僅查看積分最高者,也可根據用戶輸入的用戶名查看;(此處要求使用到鏈表,用于臨時存儲用戶積分數據);(對鏈表的查找操作) 7)所有用戶積分信息使用文件進行永久性保存; 8)用戶選擇“難度等級”,可設定游戲不同難度,難度越高,出現敵方子彈數目及間隔將增加。 三、實驗內容和結果 系統總體設計:編寫出c語言代碼,運行程序,并調試程序,最終實現游戲的功能。本程序主要包含游戲控制函數、設置是否繼續游戲函數、輸出函數、子彈移動函數、敵機移動函數、設置函數、菜單函數等7個主要函數,包含了不同的功能,對原來的程序作出了很大的改進,用到的主要語句有if語句,for語句、while語句、printf語句、switch語句等等,添加了顏色函數。 系統模塊設計:包含游戲控制函數、設置是否繼續游戲函數、輸出函數、子彈移動函數、敵機移動函數、設置函數、菜單函數等7個主要函數,其中是否繼續游戲函數,菜單函數主要運用了SWITCH語句和If語句,子彈移動函數,敵機移動函數通過數組內各數值的變化來完成,設置函數主要用PRINTF和SCANF語句進行各項數值的設置,游戲控制函數使用if函數,kbhit()函數,switch函數組合控制數組中飛機進行的移動和圖案的變換。最后用打印數組的方式打印出數組變換。最后運用SWITCH函數進行各項菜單內容的操作。 實驗的測試和結果: 四、實驗中的問題及心得 通過本次試驗,使我對c語言有了更深一層次的了解,對for語句、while語句、printf語句、switch語句、顏色函數等等的了解及使用更加詳細了一些,明白了這些語句的用法,明確了c語言的使用環境,功能。同時我了解到了一些方法來實現一些C語言作為一個基礎性編程語言是我們在以后編程中不可或缺的語言,使用率肯定會進一步增高。掌握了c語言就相當于掌握了一門技術,同時c語言相對而言簡單一些,更容易理解。自己雖然對這個小游戲進行一部分的改造,但是我也感覺這只是其中的很很小的一部分,肯定會有更加強大的功能等待著我們去改善。 同時,我也發現了自己很多的不足,需要進一步加強這一方面的學習,在數據結構鏈表的使用上還很欠缺,無法使用鏈表進行數據的讀取和輸入,還有在兩個程序的連接上還有困難,對于頭文件的理解不到位,鏈表的結構,定義,使用指針的方式??這些都需要提高。這些技能的欠缺導致了在 這個小游戲中無法順利完成有關用戶名和記錄的一些要求。?? 附錄:程序清單 #include void movebul(int [][N]);//子彈移動函數 void movepla(int [][N]);//敵機移動函數 void setting(void);//設置函數 void menu();//菜單 int scr[50][N]={0},pl=9,width=15,speed=16,density=40,score=0,death=0,length=18,y=0,x=5,z=15,life=1,max=0;//全局變量:界面、我機初始位、界面寬度、敵機速度、敵機密度、得分、死亡,子彈,飛機,敵機初始圖案,生命 char name[N];char first[N];void main(){ menu();getch();} void print(int a[][N])//輸出函數 { int i,j;system(“cls”);for(i=0;i a[i][width-1]=4; for(j=0;j { if(a[i][j]==0)printf(“ ”); if((a[i][j]==1)&&(x<15))printf(“%c”,x);//輸出我機的符號 if((a[i][j]==2)&&(z<35))printf(“%c”,z);//子彈 if((a[i][j]==3)&&(y<4))printf(“%c”,y+1);//輸出敵機符號 if(i==1&&j==width-1)printf(“總積分:%d”,score);//顯示得分 if(i==2&&j==width-1)printf(“已經死亡了%d 次,剩余 %d 條命”,death,life-death);//右上角顯示死亡次數 if(i==3&&j==width-1)printf(“普通按鍵:AD控制左右飛行”); if(i==4&&j==width-1)printf(“ W 發射子彈”);if(i==5&&j==width-1)printf(“特殊按鍵:+-號加減敵機速度”);if(i==6&&j==width-1)printf(“ /*號單列敵機密度減小增大(均有限制)”); if(i==7&&j==width-1)printf(“VIP按鍵:X鍵變化飛機圖案,Y鍵變化敵機圖案”); if(i==8&&j==width-1)printf(“tZ鍵變化子彈圖案,P鍵增加生命(均有限制)”); if(i==9&&j==width-1)printf(“注意:向下移動后按其他方向鍵飛機顯現”); } printf(“n”);} } void movebul(int a[][N]){ int i,j;for(i=0;i { if(i==0&&a[i][j]==2) a[i][j]=0; if(a[i][j]==2) { if(a[i-1][j]==3)//加分 { score+=1; printf(“7”); } a[i][j]=0,a[i-1][j]=2; } } } void movepla(int a[][N]){ int i,j;for(i=length-1;i>=0;i--)//從最后一行往上是為了避免把敵機直接沖出數組。 for(j=0;j if(i==length-1&&a[i][j]==3) a[i][j]=0;//消除敵機,在最低層 if(a[i][j]==3)a[i][j]=0,a[i+1][j]=3;//敵機移動 } if(a[length-2][pl]==3&&a[length-1][pl]==1)death++;//死亡 } void continuegame()//繼續游戲 { printf(“用戶%s”,name);printf(“你的得分是%dn”,score);if(score==0)printf(“tttt 恭喜你刷新了最低記錄na”,score);if((score>0)&&(score<20)) printf(“tttt 回家再練 練吧na”,score);if(score>19) printf(“tttt 你真厲害 na”,score);printf(“游戲結束n”);printf(“按y鍵繼續游戲,空格鍵退出游戲(y/n)?n”);printf(“ttt”);switch(getch())//是否要繼續游戲 { case 'y': case 'Y':system(“cls”),death=0,score=0,life=1,x=5,y=0,z=15;menu();break;} } void setting(void)//設置函數 { system(“cls”);//清屏 printf(“n 輸入游戲界面的大小(默認3):1-10 ”);scanf(“%d”,&width);width=(width+1)*5;printf(“n 請輸入敵機密度大小(默認3):1-5 ”);scanf(“%d”,&density);density=(7-density)*10;printf(“n 輸入敵機的飛行速度大小(默認3):1-10 ”);scanf(“%d”,&speed);speed=(11-speed)*2;printf(“n 輸入我機的生命(默認1):1-100 ”);scanf(“%d”,&life);printf(“n 輸入飛機的圖案(默認1):1-2 ”);scanf(“%d”,&x);x=x+4;printf(“n 輸入子彈的圖案(默認1):1-10 ”);scanf(“%d”,&z);z=z+14;printf(“n 輸入敵機的圖案(默認1):1-3 ”);scanf(“%d”,&y);y=y-1;} void run(){ int i=0,j=0,k=0,b=0;printf(“請輸入用戶名:”);scanf(“%s”,name);printf(“您的用戶名是:%s”,name);if(getch()==27)setting();printf(“游戲說明:按AWSD控制我機左右飛行,空格鍵發射子彈n特殊按鍵:-號敵機減速,+號敵機加速n特殊按鍵:/號單列敵機密度減小,*號單列敵機密度增大n”);printf(“VIP按鍵:X鍵變化飛機圖案,Y鍵變化敵機圖案ntZ鍵變化子彈圖案,P鍵增加生命n”);printf(“任意鍵開始游戲,esc鍵進入游戲設置n”);printf(“游戲時也可更改游戲設置任意鍵開始nn”);system(“color a”);//設置背景顏色 if(getch()==27)setting();scr[length-1][pl]=1;//我方飛機初始位置 scr[0][5]=3;while(death { if(kbhit()) switch(getch())//控制設置按鍵 { case 'a': case 'A':if(pl>0) scr[length-1][pl]=0,scr[length-1][--pl]=1;break; case 'd': case 'D':if(pl scr[length-1][pl]=0,scr[length-1][++pl]=1;break;case 'W': case 'w':if(length>10) { scr[length-1][pl]=0,scr[length-2][pl]=1; length=length-1; };break; case '+':if(speed>2) { speed=speed-2; };break; case '-':speed=speed+1;break;case '*':if(density>5) { density=density-5; };break; case '/':density=density+10;break; case 'l':if(width<40) { width=width+2; };break; case 's':if(length<30) { scr[length-1][pl]=0; length=length+1; scr[length-1][pl]='5'; };break; case ' ':scr[length-2][pl]=2;break; case 'y':y=(y+1)%4;break; case 'x':x=(x)%2+5;break; case 'z':if(z<25) { z=z+1; } else z=15;break; case 'p':life=life+1;break;} if(++j%density==0)//控制生產敵機的速度 { j=0; srand(time(NULL));//產生隨機數 scr[0][rand()%width]=3; scr[rand()%3][rand()%(width+2)]=3; scr[rand()%2][rand()%(width+1)]=3; scr[rand()%4][rand()%(width+4)]=3;//生成隨機敵方飛機 } if(++i%speed==0)//控制敵機移動速度,相對于子彈移動速度 movepla(scr);//飛機移動 movebul(scr);//子彈移動 print(scr);//繪制游戲畫面 } if(score>=max){ max=score; for(i=0;i { name[i]=first[i]; } } if(score score=score;} continuegame();getch();} void menu(){ printf(“n1:游戲設置n2:游戲說明n3:開始游戲n4:查看用戶信息n5:退出游戲n”); switch(getch()){ case '1': setting();menu();break; case '2':printf(“游戲說明:按AWSD控制我機左右飛行,空格鍵發射子彈n特殊按鍵:-號敵機減速,+號敵機加速n特殊按鍵:/號單列敵機密度減小,*號單列敵機密度增大n”);printf(“VIP按鍵:X鍵變化飛機圖案,Y鍵變化敵機圖案ntZ鍵變化子彈圖案,P鍵增加生命n”);printf(“ 任意鍵開始游戲,esc鍵進入游戲設置n”);printf(“ 游戲時也可更改游戲設置”);menu();break; case '3':run();menu();break; case '4':seerecord();menu();break; case '5':exit(0);break;default:menu();break;} } seerecord(){ printf(“最高紀錄為%s,%d”,first[N],max);} C語言課程設計題目 一、實訓要求 1)C語言課程設計要求 1.可自己選定一題目,限1人選的題目只能由1人單獨完成,如限3人選的題目可由1-3人完成。2.模塊化程序設計 3.鋸齒型書寫格式 4.必須上機調試通過 2)課程設計報告內容要求: 1.課程設計題目 2.總體設計(程序設計組成框圖、流程圖) 3.詳細設計(模塊功能說明(如函數功能、入口及出口參數說明,函數調用關系描述等) 4.調試與測試:調試方法,測試結果的分析與討論,測試過程中遇到的主要問題及采取的解決措施 5.源程序清單和執行結果:清單中應有足夠的注釋 6.具體格式另附說明。3)檢查要求: 1.每個人必須有程序運行結果; 2.每個人必須交《課程設計報告》打印稿---—注:各班班長將本班學生的課程設計報告電子版用優盤拷貝(標上學號、姓名、班級)上交。 4)打分標準: 1.根據平時上機考勤;注重平時上機成績,教師要不定期檢查學生進度,學生不得以自己有私人電腦為借口而不來上機。2.根據程序運行結果; 3.根據《C語言課程設計報告》,學生能對自己的程序面對教師提問并能熟練地解釋清楚 以上三項缺一不可,否則不能到得相應學分 二、課程設計題目: 1:職工信息管理系統設計(限最多3人完成) 職工信息包括職工號、姓名、性別、年齡、學歷、工資、住址、電話等(職工號不重復)。試設計一職工信息管理系統,使之能提供以下功能: 系統以菜單方式工作 職工信息錄入功能(職工信息可用文件保存)--輸入 職工信息瀏覽功能 --輸出 查詢和排序功能:(至少一種查詢方式)--算法 按工資查詢 按學歷查詢等 職工信息刪除、修改功能(任選項) 2:圖書信息管理系統設計(限最多3人完成) 圖書信息包括:登錄號、書名、作者名、分類號、出版單位、出版時間、價格等。試設計一圖書信息管理系統,使之能提供以下功能: 系統以菜單方式工作 圖書信息錄入功能(圖書信息用文件保存)--輸入 圖書信息瀏覽功能--輸出 查詢和排序功能:(至少一種查詢方式)--算法 按書名查詢 按作者名查詢 圖書信息的刪除與修改(可選項) 3:學生信息管理系統設計(限最多3人完成) 學生信息包括:學號,姓名,年齡,性別,出生年月,地址,電話,E-mail等。試設計一學生信息管理系統,使之能提供以下功能: 系統以菜單方式工作 學生信息錄入功能(學生信息用文件保存)---輸入 學生信息瀏覽功能---輸出 查詢、排序功能---算法 按學號查詢 按姓名查詢 學生信息的刪除與修改(可選項) 4:學生選修課程系統設計(限最多3人完成) 假定有n門課程,每門課程有課程編號,課程名稱,課程性質,總學時,授課學時,實驗或上機學時,學分,開課學期等信息,學生可按要求(如總學分不得少于60)自由選課。試設計一選修課程系統,使之能提供以下功能: 系統以菜單方式工作 課程信息錄入功能(課程信息用文件保存)--輸入 課程信息瀏覽功能--輸出 查詢功能:(至少一種查詢方式)--算法 按學分查詢 按課程性質查詢 學生選修課程(可選項) 5:銷售管理系統(限最多3人完成) 某公司有四個銷售員(編號:1-4),負責銷售五種產品(編號:1-5)。每個銷售員都將當天出售的每種產品各寫一張便條交上來。每張便條包含內容: 1)銷售員的代號 2)產品的代號 3)這種產品的當天的銷售額 每位銷售員每天可能上繳0-5張便條。假設,收集到了上個月的所有便條,編寫一個處理系統,讀取上個月的銷售情況(自己設定),進行如下處理。1)計算上個月每個人每種產品的銷售額。 2)按銷售額對銷售員進行排序,輸出排序結果(銷售員代號)3)統計每種產品的總銷售額,對這些產品按從高到底的順序,輸出排序結果(需輸出產品的代號和銷售額)4)輸出統計報表 銷售統計報表能反映出:銷售員代號 產品代號 銷售之和 每種產品之和 總和 6:設計一個簡單計算器(限最多3人完成) 算術計算器的實現 實現過程和步驟提示: 1. 首先實現一個簡單的算術器1。 功能說明:程序首先顯示計算器界面,并等待用戶輸入一個算術計算式(見圖1所示)。假如用戶輸入22+1 圖1 圖2 計算器的界面程序已經提供:(可訪問http://its.nbtvu.net.cn/xhyu下載) #include void main(){ float a,b;char c; clrscr();gotoxy(1,2);printf(“諛哪哪哪哪哪哪哪哪哪哪哪哪縗n”);printf(“? 砛n”);printf(“媚哪哪哪哪哪哪哪哪哪哪哪哪碶n”);printf(“? 1 + 砛n”);printf(“? 砛n”);printf(“? 4 * / 砛n”);printf(“? 砛n”);printf(“? 7 = x1b 砛n”);printf(“? 砛n”);printf(“? 0 .End 砛n”);printf(“濫哪哪哪哪哪哪哪哪哪哪哪哪賊n”); gotoxy(2,3);//following codes get user's input and complete the calculation //add your codes down here! //add your codes up here!} 計算器1實現提示: ? 讀懂并掌握顯示計算器界面的程序 ? 獲取用戶輸入的算式只需利用”%f%c%f”調用scanf函數就可以。其中%c用來獲取運算符+,-,*,/,%f用來獲取運算數。 ? 利用if語句或switch語句區分 +,-,*,/ 的不同情況進行運算輸出。 ? 在屏幕的指定位置輸出利用gotoxy()和cprintf函數實現。包含在conio.h頭文件中。2. 在算術計算器1的基礎上,實現算術計算器2。功能說明:算術計算器1一次只能執行一次計算,算術計算器2要求實現可以多次響應用戶的計算請求。當用戶輸入一個算式后,計算器顯示計算結果,同時屏幕項部顯示:continue? 如果用戶此時按Y鍵,則繼續輸入下一個算式,否則,程序終止。計算器2實現提示: ? 在“計算器1”的主要算法外層套一個循環語句 ? 在循環體內,顯示完計算結果后調用getch函數,如果它的返回值不是’y’或’Y’,則跳出循環,程序終止。3. 在算術計算器2的基礎上,實現算術計算器3。 功能說明:算術計算器3不盲目等待用戶輸入,而是當用戶沒有輸入時,計算器頂部顯示一串閃爍的文本“This is a simple calculator!”,并且這串文本一會兒變成紅色,一會兒變成綠色。當用戶按鍵時,這串文本不再閃爍。如果用戶按下End鍵,程序終止;否則程序接受用戶輸入的算式,并顯示計算結果。顯示完計算結果后,程序繼續閃爍言文本 “This is a simple calculator!”,等待用戶輸入下一個算式或按End鍵退出。計算器3實現提示: ? 程序在調用scanf函數之前,必須先檢測是否有鍵被按下。? 顯示閃爍文本的算法如圖3所示。 圖3 計算器3流程圖 ? 檢測是否有鍵按下,需要調用kbhit()庫函數。kbhit的原數原型: int kbhit(void);kbhit函數功能:檢測是否有鍵按下,如果有,則返回非0值(即真),否則返回0(即假)。調用kbhit()函數的源程序必須包含conio.h文件。 ? 具有延時功能的函數是delay(unsigned milliseconds)。包含在dos.h頭文件中。 Delay()函數的功能是:將程序掛起milliseconds毫秒,即程序暫停或延時milliseconds毫秒。 ? 當kbhit函數返回非0時,還要檢測是否是End鍵。這需要調用bioskey庫函數。但參數必須是1,不能是0。因為bioskey(1)雖然返回用戶所按鍵值,但沒有接受鍵盤輸入,不會影響其它函數(如scanf函數)接受有效輸入。 ? END的鍵值定義為: #define END 0X4F00 ? bioskey(1)判斷是否是END的用法: if(bioskey(1)= =END) { 相關操作 } 7:學生成績管理(限最多2人完成) 1.主要功能: (1)能按學期、按班級完成對學生成績的錄入、修改 (2)能按班級統計學生的成績,求學生的總分及平均分,并能根據學生的平均成績進行排序(3)能查詢學生成績,不及格科目及學生名單(4)能按班級輸出學生的成績單 8:通訊錄管理(限最多3人完成) 設一個通信錄由以下幾項數據信息構成: 數據項 類型 姓名 字符串 地址 字符串 郵政編碼 字符串 電話號碼 字符串 1.主要功能: (1)能建立、查詢、修改和增刪學生通訊錄(2)能夠按多種方式進行查詢 2.要求:界面友好,易于操作 9:一元多項式簡單的計算器(限最多1人完成) 1主要功能: (1)輸入并建立多項式;(2)輸出多項式; (3)兩個多項式相加,建立并輸出和多項式;(4)兩個多項式相減,建立并輸出差多項式。 (5)算法的時間復雜度、另外可以提出算法的改進方法 實現提示:可選擇帶頭結點的單向循環鏈表或單鏈表存儲多項式,頭結點可存放多項式的參數,如項數等。2.要求:一元多項式簡單計算器的基本功能 10:圖書管理系統(限最多3人完成) 功能描述 1、新進圖書基本信息的輸入。2.圖書基本信息的查詢。3.對撤消圖書信息的刪除。4.為借書人辦理注冊。 5.辦理借書手續(非注冊會員不能借書)。6.辦理還書手續 信息描述:有關該系統基本信息的描述,如:圖書名稱、圖書編號、單價、作者、存在狀態、借書人姓名、性別、學號等 11:用戶設置密碼(限最多2人完成) 做一個密碼驗證程序,密碼驗證只有三次機會。要求有登錄界面,用戶輸入密碼時應以*代替輸出。用戶登錄成功后可以修改密碼。 可以有多個用戶登錄。初次登錄的密碼由管理員設置。管理員可以添加或刪除用戶。 12: 成績記錄簿(限最多2人完成) 編制一個C語言成績記錄簿,每個學生信息包括:學號、姓名、C語言成績。具體功能:(1)創建信息鏈表并以磁盤文件保存; (2)讀取磁盤文件并顯示輸出所有學生的成績;(3)按學號或姓名查詢成績;(4)添加成績記錄; (5)修改指定姓名或學號的學生的成績并可存盤; (6)顯示輸出60分以下、60~79、80~89、90分以上各分數段的學生信息。 13: 學生籍貫信息記錄簿(限最多2人完成) 編制一個學生籍貫信息記錄簿,每個學生信息包括:學號、姓名、籍貫。具體功能: (1)創建信息鏈表并以磁盤文件保存; (2)讀取磁盤文件并顯示輸出所有學生的籍貫信息; (3)按學號或姓名查詢其籍貫; (4)按籍貫查詢并輸出該籍貫的所有學生; (5)能添加、刪除和修改學生的籍貫信息; 14: 職工工作量統計系統(限最多1人完成) 編寫有一個程序,該程序輸入職工工號和完成的產品數量,程序允許同一職工有多次輸入,由程序對其完成的產品數量實現累計。程序按完成數量對他們排序,并確定他們的名次。按完成的產品數量由多到少的順序,輸出名次、同一名次的職工人數及他們的工號(工號由小到大順序輸出)。要求程序用有序鏈表存儲數據信息。 15:成績管理系統(限最多3人完成) 現有學生成績信息,內容如下 姓名 學號 語文 數學 英語 張明明 01 李成友 02 張輝燦 03 王露 04 陳東明 05 ….......… 實現學生信息管理,軟件的入口界面應包括如下幾個方面: (一)功能要求:(1)信息維護: 要求:學生信息數據要以文件的形式保存,能實現學生信息數據的維護。此模塊包括子模塊有:增加學生信息、刪除學生信息、修改學生信息(2)信息查詢: 要求:查詢時可實現按姓名查詢、按學號查詢(3)成績統計: 要求:A輸入任意的一個課程名(如數學)和一個分數段(如60--70),統計出在此分數段的學生情況。(4)排序:能對用戶指定的任意課程名,按成績升序或降序排列學生數據并顯示排序結果(使用表格的形式顯示排序后的輸出結果)(使用多種方法排序者,加分) (5)至少采用文本菜單界面(如果能采用圖形菜單界面更好)(3)學生可自動增加新功能模塊(視情況可另外加分) 16:通訊錄管理系統(限最多3人完成) 用C設計出模擬手機通信錄管理系統,實現對手機中的通信錄進行管理。 (一)功能要求 (1)查看功能:選擇此功能時,列出下列三類選擇。 A 辦公類 B 個人類 C 商務類,當選中某類時,顯示出此類所有數據中的姓名和電話號碼)(2)增加功能:能錄入新數據(一個結點包括:姓名、電話號碼、分類(可選項有:A 辦公類 B 個人類 C 商務類)、電子郵件)。例如 楊春 *** 商務類 chuny@126.com 當錄入了重復的姓名和電話號碼時,則提示數據錄入重復并取消錄入;當通信錄中超過15條信息時,存儲空間已滿,不能再錄入新數據;錄入的新數據能按遞增的順序自動進行條目編號。 (3)拔號功能:能顯示出通信錄中所有人的姓名,當選中某個姓名時,屏幕上模擬打字機的效果依次顯示出此人的電話號碼中的各個數字,并伴隨相應的拔號聲音。 (4)修改功能:選中某個人的姓名時,可對此人的相應數據進行修改 (5)刪除功能:選中某個人的姓名時,可對此人的相應數據進行刪除,并自動調整后續條目的編號。 (二)其它要求: (1)至少采用文本菜單界面(如果能采用圖形菜單界面更好)(2)建議使用數組或鏈表等數據結構 (3)學生可自動增加新功能模塊(視情況可另外加分) 17:學籍管理系統(限最多3人完成) 使用下面的數據,用C設計一個簡單的學籍管理系統,實現出最基本的功能。 學生基本信息文件(A.TXT)及其內容:A.TXT文件不需要編程錄入數據,可用文本編輯工具直接生成 學號 姓名 性別 宿舍號碼 電話號碼 01 張成成 男 501 87732111 02 李成華 女 101 87723112 03 王成鳳 女 101 87723112 04 張明明 男 502 87734333 05 陳東 男 501 87732111 06 李果 男 502 87734333 07 張園園 女 102 87756122 … …...… ………..學生成績基本信息文件(B.TXT)及其內容: 學號 課程編號 課程名稱 學分平時成績 實驗成績 卷面成績 綜合成績 實得學分 01 A01 大學物理 02 B03 高等數學 01 B03 高等數學 02 C01 VF … ….……….....… 功能要求及說明: (1)數據錄入功能: 對B.TXT進行數據錄入,只錄入每個學生的學號、課程編號、課程名稱、學分、平時成績、實驗成績、卷面成績共7個數據.綜合成績、學分由程序根據條件自動運算。 綜合成績的計算:如果本課程的實驗成績為-1,則表示無實驗,綜合成績=平時成績*30%+卷面成績*70%;如果實驗成績不為-1,表示本課程有實驗,綜合成績=平時成績*15%+實驗成績*.15%+卷面成績*70%.實得學分的計算: 采用等級學分制.綜合成績在90-100之間 ,應得學分=學分*100% 綜合成績在80-90之間 ,應得學分=學分*80% 綜合成績在70-80之間 ,應得學分=學分*75% 綜合成績在60-70之間 ,應得學分=學分*60% 綜合成績在60以下 ,應得學分=學分*0%(2)查詢功能:分為學生基本情況查詢和成績查詢兩種 A:學生基本情況查詢: A1----輸入一個學號或姓名(可實現選擇),查出此生的基本信息并顯示輸出。A2---輸入一個宿舍號碼,可查詢出本室所有的學生的基本信息并顯示輸出。 B:成績查詢: B1:輸入一個學號時,查詢出此生的所有課程情況,格式如下: 學 號:xx 姓 名:xxxxx 課程編號:xxx 課程名稱:xxxxx 綜合成績:xxxx 實得學分: xx 課程編號:xxx 課程名稱:xxxxx 綜合成績:xxxx 實得學分: xx 課程編號:xxx 課程名稱:xxxxx 綜合成績:xxxx 實得學分: xx … … … … ……… … … 共修:xx科,實得總學分為: xxx(3)刪除功能:當在A.TXT中刪除一個學生時,自動地在B.TXT中刪除此人所有信息。 (4)排序功能:能實現選擇按綜合成績或實得學分升序或降序排序并顯示數據。 (二)其它要求: (1)至少采用文本菜單界面(如果能采用圖形菜單界面更好)(2)學生可自動增加新功能模塊(視情況可另外加分) 18: 車票管理系統(限最多3人完成) 一車站每天有n個發車班次,每個班次都有一班次號(1、2、3…n),固定的發車時間,固定的路線(起始站、終點站),大致的行車時間,固定的額定載客量。如 班次 發車時間 起點站 終點站 行車時間 額定載量 已定票人數 1 8:00 郫縣 廣漢 2 6:30 郫縣 成都 0.5 3 7:00 郫縣 成都 0.5 4 10:00 郫縣 成都 0.5 … (一)功能要求:用c/c++設計一系統,能提供下列服務:(1)錄入班次信息(信息用文件保存),可不定時地增加班次數據 (2)瀏覽班次信息,可顯示出所有班次當前狀總(如果當前系統時間超過了某班次的發車時間,則顯示“此班已發出”的提示信息)。 (3)查詢路線:可按班次號查詢 ,可按終點站查詢(4)售票和退票功能 A:當查詢出已定票人數小于額定載量且當前系統時間小于發車時間時才能售票,自動更新已售票人數 B:退票時,輸入退票的班次,當本班車未發出時才能退票,自動更新已售票人數 (二)其它要求: (1)只能使用C/C++語言,源程序要有適當的注釋,使程序容易閱讀(2)至少采用文本菜單界面(如果能采用圖形菜單界面更好)(3)學生可自動增加新功能模塊(視情況可另外加分)(4)寫出實訓報告,具體要求見相關說明文檔 19:單項選擇題標準化考試系統(限最多3人完成) (一)功能要求: (1)用文件保存試題庫。(每個試題包括題干、4個備選答案、標準答案)(2)試題錄入:可隨時增加試題到試題庫中 (3)試題抽取:每次從試題庫中可以隨機抽出N道題(N由鍵盤輸入)(4)答題:用戶可實現輸入自己的答案 (5)自動判卷:系統可根據用戶答案與標準答案的對比實現判卷并給出成績。 (二)其它要求: (1)源程序要有適當的注釋,使程序容易閱讀 (2)至少采用文本菜單界面(如果能采用圖形菜單界面更好)(3)學生可自動增加新功能模塊(視情況可另外加分)(4)寫出實訓報告,具體要求見相關說明文檔第二篇:C語言課程設計
第三篇:CC語言課程設計
第四篇:C語言課程設計
第五篇:2018c語言課程設計題目