第一篇:《C語言程序設計》綜合實習報告封面及正文格式
《C語言程序設計》
綜 合 實習報 告
學號
姓名 班級 指導教師
課題一: XXXXXXXXXXXXXXXXX
一、目的1.2.3.二、實習環(huán)境
個人計算機,Windows操作系統(tǒng),Turbo C 2.0或 WinTC或Visual C++等編譯開發(fā)環(huán)境
三、實習內容與步驟
1.在函數(shù)中進行10個學生成績從高到低排名 sort(int a[10])
2.改進第一步的函數(shù)為sort(int a[],int n),進行n個學生成績從高到低排名,3.改進第二步的函數(shù)為sort(int a[],int n, char style), 將n個學生成績從高到低排名,排名方式根據(jù)sort()函數(shù)的style參數(shù)進行,如style為‘a’按升序排,style為’d’按降序排。(a:ascending升,d:descending 降)
四、程序流程圖、算法及運行結果
五、知識點、難點及解決辦法。
六、編程小結或體會。
第二篇:C語言程序設計實習報告
實習報告
題
目: C語言程序設計 所屬系、部 : 電氣工程學院 班
級: 電子商務131 姓
名:
賀道君 學
號: 20***5 指 導 教 師: 費 玲 玲
2014年6月
一、實習目的
加深理解C語言基礎知識及其編程技術,了解高級程序設計語言的結構,熟練掌握程序設計方法和技巧,掌握基本的分析和利用計算機求解問題的能力,具備初步的高級語言程序設計能力。
二、實習時間、地點
6月16日(星期一)上午:微機室5
下午:微機室5
6月17日(星期二)
3、4:微機室5
下午:微機室3
6月18日(星期三)上午:微機室5
下午:學校
6月19日(星期四)上午:微機室5
下午:微機室3
6月20日(星期五)上午:C101
下午:學校
三、實習內容
綜合
四、實習總結
在學C語言的一個學期后,我們進行了C語言實訓階段,嘗試自己編寫一個比較復雜的程序系統(tǒng)。在為期一周周的時間中,我們同組的同學共同的感受是:C語言實訓和平時上課所接觸的程序是有很大不同的,所經(jīng)受的考驗和克服的困難是平時所無法比擬的。好在同組的搭檔們精誠合作,分工明確,有問題共同解決,攻克了C語言實訓的復雜程序。在這里,我作為其中的參與者,自然感觸良多
剛開始接觸到C的時候,我已經(jīng)學過一些有關VB的內容,這個在算法和思維上稍微有點幫助?;叵氡緦W期的學習,首先,最基本的,是C的數(shù)據(jù)格式,讓我們知道整數(shù),浮點數(shù)以及字符常量在C中的運用。然后,在學會了數(shù)據(jù)轉化,以及熟練的可以對各種數(shù)據(jù)處理之后,我開始進行有關數(shù)據(jù)結構,像數(shù)組,結構體等的學習,因為有的東西從現(xiàn)有的知識來看都是非常簡單的,還沒有聯(lián)系到指針等等一些復雜的概念。可是,僅僅學會這些是遠遠不夠的,C語言中,還有很多更加經(jīng)典、重要、實用的知識。
說說函數(shù)。雖說很多程序語言都有函數(shù)這一內容,但我覺得C語言的函數(shù)是最有魅力的了。學習函數(shù)的方法是比較簡單的,只有兩個字“牢記”,即:牢記函數(shù)的功能,牢記函數(shù)的用途以及如何輸入輸出。函數(shù)從本質上講是一段通用程序,用它可以幫助我們節(jié)約很多編程的時間,學習C語言的“高人”都說,一個聰明的編程者在編寫程序前往往總是先找自己所編寫的程序中有多少是可以用函數(shù)來代替的。比如,大家可以作一個比較字符串的實驗,用C語言中的strcmp()函數(shù)只要一句話,而自己編寫的話,30句都很難實現(xiàn),可想而知函數(shù)的實用和快捷。在我們C語言實訓的代碼中,函數(shù)更是得到了充分的應用,可以說,實訓題目的復雜代碼,就是用無數(shù)個函數(shù)的調用和嵌套積累出來的。要注意的是,有的同學剛剛開始的時候,都是被一些大的程序激勵的,所以當開始的時候看到繁瑣的數(shù)據(jù)轉化和簡單的算法,都覺得很無聊,都想自己做幾個自己滿意的程序來看看,雖然這種想法很好,但是,我們說,沒有基礎,純粹是搬照一些現(xiàn)成設計方法,是不足取的。要知道,程序設計講究的是個人的思維的,假如剛開始就被一些現(xiàn)成的思想束縛住,以后就會覺得很無趣。
我們知道,指針其實是C語言的靈魂,許多的數(shù)據(jù)結構在我們學到這里之前都可以說是精通了。所以我們的任務就是,讓數(shù)據(jù)結構在指針中運行。當然,剛剛開始接觸到這些新的東西,是一件非常痛苦的事情,所以我們一定要用非常形象的思維去看待指針,不能太固化。所以,新的東西,比如結構體在指針中的表現(xiàn)方法,數(shù)組及多維數(shù)組在結構體中的運用,都一點一點的加了進來,同時豐滿了我們對原來C的數(shù)據(jù)機構,數(shù)據(jù)表示的理解。當我們完成了這三步的學習,我們已經(jīng)可以自豪的說,我們的基礎都扎實了,可以進一步的學習有關算法,設計概念等等深層次的東西了。
但是,指針,結構體,這些太抽象的東西,在學習C語言的時候我們就有點“似懂非懂”,可是在眼下的C語言實訓中,像這么重要的C語言知識,一定要達到能熟練掌握,實際運用的程度。在實訓的大程序中,結構體在指針中的表現(xiàn)方法,數(shù)組及在結構體中的運用等具體的技術環(huán)節(jié),都得到了體現(xiàn),不會指針,我們的工作是沒法展開的。所以,在實訓期間,大家在鞏固基本知識的基礎上,逐塊攻克實訓課題,克服了困難,自信心得到了提高。
最后,談談我們組的程序軟件。商店商品管理系統(tǒng),是一個比較利于應用,解決實際問題,方便實際管理的程序。設計代碼比較復雜,結構比較嚴謹。在程序編寫的1周左右的時間里,組員們遇到了上述的困難,包括程序設計構思,甚至是指針等某些知識點的欠缺,導致的工作中出現(xiàn)的困難。但是,當大家一起團結協(xié)作,解決了這些困難之后,發(fā)現(xiàn)自己也可以編寫復雜的、應用性的程序了,更發(fā)現(xiàn)自己對C語言這門學科的興趣也提高了。
當然,我們編寫的商店商品管理系統(tǒng),還存在很多疏漏和不合理之處。比如,程序復雜冗長,如果時間充裕,我們將在不改變程序運行結果的基礎上,簡化程序,使每一句更加精辟,總體上更加簡化。另外,在程序的外觀上,我們由于時間問題,沒有做更多的修飾,運行起來顯得比較死板、枯燥乏味。如果增添一些色彩和其他效果,我們的程序也許會更加完美。以上就是我的C語言實訓個人總結
第三篇:C語言程序設計報告(精選)
C語言程序設計報告
(二)第一章:使用數(shù)組和指針統(tǒng)計成績
1.設計題目:假設給定班級各科考試平均成績的原始資料如下
數(shù)學:75 物理:80 外語:83 政治:85 體育:86 人數(shù):30
要求統(tǒng)計出全班學期總平均成績以及得分最低的科目和該科目的成績。要求的輸出結果如下:
全班各科平均成績如下: 數(shù)學:75 物理:80 外語:83 政治:85 體育:86 人數(shù):30 統(tǒng)計結果如下: 人數(shù):30
平均成績:81
最低分數(shù)科目的成績:75 最低分數(shù)的科目:數(shù)學
2.設計要求
對存放原始數(shù)據(jù)的要求如下:
(1)、使用整形數(shù)組a數(shù)學、物理、外語、政治、體育、人數(shù)、平均成績、最低科目成績 ;
(2)、使用字符串數(shù)name存放數(shù)學、物理、外語、政治、體育、最低分數(shù)的科目
(3)、使用字符串數(shù)組MeanLow存放人數(shù)、平均成績、最低分數(shù)科目的成績、最低分數(shù)的科目。
實現(xiàn)本設計功能的方法很多,這里給出4種難易成度不同的要求,以便加深對數(shù)組和指針知識的理解。
1.使用數(shù)組實現(xiàn)
使用數(shù)組和指針數(shù)組實現(xiàn)。2..使用分配的內存實現(xiàn)
要求將數(shù)組a的內容存入到分配的內存中,使用指針實現(xiàn)對內存的存取和計算。
3.將數(shù)組內容全部存入內存
為字符分配內存,并將字符數(shù)組的內容存入所分配的內存中,使用指針來實現(xiàn)。
源程序:
int pingjun(int *x);int zuidi(int *x);
int kemu(int *y,int n);#include
int kemu(int *y,int n){int i, t=y[0],m=0;for(i=1;i {if(t>y[i]){t=y[i];m++;} } return m;} int pingjun(int *x){int sum=0 ,i,aver;for(i=0;i<5;i++)sum=sum+x[i];aver=sum/5;return aver;} void main() {int a[9]={75,80,83,85,86,30},i,x; char *name[5]={“數(shù)學”,“物理”,“外語”,“政治”,“體育”}; char *meanlow[4]={“人數(shù)”,“平均成績”,“最低分數(shù)科目成績”,“最低分科目”}; printf(“原始信息如下:n”);for(i=0;i<5;i++) printf(“%s:%dn”,name[i],a[i]);for(i=0;i<4;i++) printf(“%s:%dn”,meanlow[i],a[i+5]);printf(“全班各科平均成績如下:n”);for(i=0;i<5;i++) printf(“%s:%dn”,name[i],a[i]);printf(“統(tǒng)計結果如下:n”); printf(“%s:%dn”,meanlow[0],a[5]); printf(“%s:%dn”,meanlow[1],pingjun(a));printf(“%s:%dn”,meanlow[2],zuidi(a));x=kemu(a,5); printf(“%s:%sn”,meanlow[3],name[x]);} #include “stdio.h” /*定義學生結構體*/ struct Student { char ID[20]; char Name[20]; float Mark1;/*計算機*/ float Mark2;/*英語*/ float Mark3;/*數(shù)學*/ float Zongfen;/*總分*/ float Average;};/*平均分*/ /*聲明學生數(shù)組及學生數(shù)量*/ struct Student students[2000];int num=0;/*求總分*/ float Zong(struct Student stu){ return(stu.Mark1+stu.Mark2+stu.Mark3);} /*求平均值*/ float Avg(struct Student stu){return(stu.Mark1+stu.Mark2+stu.Mark3)/3;} /*通過學號返回數(shù)組下標*/ int Student_SearchByIndex(char id[]){ int i; for(i=0;i int i; for(i=0;i {if(strcmp(students[i].Name,name)==0) {return i;}} return-1;} /*通過學號返回數(shù)組下標*/ int Student_SearchID(char id[]){ int i; for(i=0;i {if(strcmp(students[i].ID,id)==0) {return i;}} return-1;} /*顯示單條學生記錄*/ void Student_DisplaySingle(int index){printf(“%10s%10s%8s%8s%8s%8s%10sn”,“學號”,“姓名”,“計算機”,“英語”,“數(shù)學”,“總分”,“平均成績”);printf(“------------------------------n”);printf(“%10s%10s%8.0f%8.0f%8.0f%8.0f%10.2fn”,students[index].ID,students[index].Name, students[index].Mark1,students[index].Mark2,students[index].Mark3,students[index].Zongfen,students[index].Average);}void Student_DisplaySingle1(int index){printf(“------------------------------n”);printf(“%10s%10s%8.0f%8.0f%8.0f%8.0f%10.2fn”,students[index].ID,students[index].Name, students[index].Mark1,students[index].Mark2,students[index].Mark3,students[index].Zongfen,students[index].Average);} /*插入學生信息*/ void Student_Insert(){while(1){printf(“請輸入學號:”);scanf(“%s”,&students[num].ID);getchar();printf(“請輸入姓名:”);scanf(“%s”,&students[num].Name);getchar();printf(“請輸入計算機成績:”);scanf(“%f”,&students[num].Mark1);getchar();printf(“請輸入英語成績:”);scanf(“%f”,&students[num].Mark2);getchar();printf(“請輸入數(shù)學成績:”);scanf(“%f”,&students[num].Mark3);getchar(); students[num].Average=Avg(students[num]); students[num].Zongfen=Zong(students[num]); num++; printf(“是否繼續(xù)?(y/n)”); if(getchar()=='n'){break;} }} void exit();/*修改學生信息*/ void Student_Modify(){ float mark1,mark2,mark3; while(1) { char id[20]; int index; printf(“請輸入要修改的學生的學號:”); scanf(“%s”,&id); getchar(); index=Student_SearchByIndex(id); if(index==-1) { printf(“學生不存在!n”); } else { printf(“你要修改的學生信息為:n”); Student_DisplaySingle(index); printf(“--請輸入新值--n”); printf(“請輸入學號:”); scanf(“%s”,&students[index].ID); getchar(); printf(“請輸入姓名:”); scanf(“%s”,&students[index].Name); getchar(); printf(“請輸入成績:”); scanf(“%f”,&students[index].Mark1); getchar(); printf(“請輸入成績:”); scanf(“%f”,&students[index].Mark2); getchar(); printf(“請輸入成績:”); scanf(“%f”,&students[index].Mark3); getchar(); students[index].Zongfen=Zong(students[index]); students[index].Average=Avg(students[index]); printf(“是否繼續(xù)?(y/n)”); if(getchar()=='n') { break; } } } /*刪除學生信息*/ void Student_Delete(){ int i; while(1) { char id[20]; int index; printf(“請輸入要刪除的學生的學號:”); scanf(“%s”,&id); } getchar(); index=Student_SearchByIndex(id); if(index==-1) { printf(“學生不存在!n”); } else { printf(“你要刪除的學生信息為:n”); Student_DisplaySingle(index); printf(“是否真的要刪除?(y/n)”); if(getchar()=='y') { for(i=index;i { students[i]=students[i+1]; } num--; } getchar(); } printf(“是否繼續(xù)?(y/n)”); if(getchar()=='n') { break; } } } /*按姓名或學號查詢*/ void Student_Select(){ int sel; printf(“1--------------------按姓名查詢n”); printf(“2--------------------按學號查詢n”); scanf(“%d”,&sel); if(sel==2){ while(1) { char id[20]; int index; printf(“請輸入要查詢的學生的學號:”); scanf(“%s”,&id); getchar(); index=Student_SearchID(id); if(index==-1) { printf(“學生不存在!n”); } else { printf(“你要查詢的學生信息為:n”); Student_DisplaySingle(index); } printf(“是否繼續(xù)?(y/n)”); if(getchar()=='n') { break; } }}else if(sel==1) {while(1) { char name[20]; int index; printf(“請輸入要查詢的學生的姓名:”); scanf(“%s”,&name); getchar(); index=Student_SearchByName(name); if(index==-1) { printf(“學生不存在!n”); } else { printf(“你要查詢的學生信息為:n”); Student_DisplaySingle(index); } printf(“是否繼續(xù)?(y/n)”); if(getchar()=='n') { break; } }} else printf(“信息錯誤!n”);} /*排序*/ void Student_SortByAverage(){ int a,sel; printf(“1--------------------按學號排序n”); printf(“2--------------------按姓名排序n”); printf(“3--------------------按計算機排序n”); printf(“4--------------------按英語排序n”); printf(“5--------------------按數(shù)學排序n”); printf(“6--------------------按總分排序n”); printf(“7--------------------按平均分排序n”); scanf(“%d”,&sel); if(sel==1) {int i,j; struct Student tmp; for(i=0;i { for(j=1;j { if(strcmp(students[j-1].ID,students[j].ID)>0) { tmp=students[j-1]; students[j-1]=students[j]; students[j]=tmp; } } }} else if(sel==2) {int i,j; struct Student tmp; for(i=0;i { for(j=1;j { if(strcmp(students[j-1].Name,students[j].Name)>0) { tmp=students[j-1]; students[j-1]=students[j]; students[j]=tmp; } } }} else if(sel==3) {int i,j; struct Student tmp; for(i=0;i { for(j=1;j { if(students[j-1].Mark1>students[j].Mark1) { tmp=students[j-1]; students[j-1]=students[j]; students[j]=tmp; } } }} else if(sel==4) {int i,j; struct Student tmp; for(i=0;i { for(j=1;j { if(students[j-1].Mark2>students[j].Mark2) { tmp=students[j-1]; students[j-1]=students[j]; students[j]=tmp; } } }} else if(sel==5) {int i,j; struct Student tmp; for(i=0;i { for(j=1;j { if(students[j-1].Mark3>students[j].Mark3) { tmp=students[j-1]; students[j-1]=students[j]; students[j]=tmp; } } }} else if(sel==6) {int i,j; struct Student tmp; for(i=0;i { for(j=1;j { if(students[j-1].Zongfen>students[j].Zongfen) { tmp=students[j-1]; students[j-1]=students[j]; students[j]=tmp; } } }} else if(sel==7) {int i,j; struct Student tmp; for(i=0;i { for(j=1;j { if(students[j-1].Average>students[j].Average) { tmp=students[j-1]; students[j-1]=students[j]; students[j]=tmp; } } }} else printf(“信息錯誤!n”);} /*顯示學生信息*/ void Student_Display(){ int i; printf(“%10s%10s%8s%8s%8s%8s%10sn”,“學號”,“姓名”,“計算機”,“英語”,“數(shù)學”,“總分”,“平均成績”); printf(“------------------------------n”); for(i=0;i { printf(“%10s%10s%8.0f%8.0f%8.0f%8.0f%10.2fn”,students[i].ID,students[i].Name,students[i].Mark1,students[i].Mark2,students[i].Mark3,students[i].Zongfen,students[i].Average); } } /*將學生信息從文件讀出*/ void IO_ReadInfo(){ FILE *fp; int i; if((fp=fopen(“Database.txt”,“rb”))==NULL) { printf(“不能打開文件!n”); return; } if(fread(&num,sizeof(int),1,fp)!=1) { num=-1; } else { for(i=0;i { fread(&students[i],sizeof(struct Student),1,fp); } } fclose(fp);} /*將學生信息寫入文件*/ void IO_WriteInfo(){ FILE *fp; int i; if((fp=fopen(“Database.txt”,“wb”))==NULL) { printf(“不能打開文件!n”); return; } if(fwrite(&num,sizeof(int),1,fp)!=1) { printf(“寫入文件錯誤!n”); } for(i=0;i { if(fwrite(&students[i],sizeof(struct Student),1,fp)!=1) { printf(“寫入文件錯誤!n”); } } fclose(fp);} /*統(tǒng)計不同分數(shù)段的學生*/ void Student_TJ(){ while(1) { int a,sel; float m,n; printf(“1--------------------按計算機統(tǒng)計不同分數(shù)段的學生n”); printf(“2--------------------按英語統(tǒng)計不同分數(shù)段的學生n”); printf(“3--------------------按數(shù)學統(tǒng)計不同分數(shù)段的學生n”); printf(“4--------------------按總分統(tǒng)計不同分數(shù)段的學生n”); printf(“5--------------------按平均分統(tǒng)計不同分數(shù)段的學生n”); scanf(“%d”,&sel); printf(“輸入所需查詢的分數(shù)段[m,n]”); scanf(“%f%f”,&m,&n); printf(“%10s%10s%8s%8s%8s%8s%10sn”,“學號”,“姓名”,“計算機”,“英語”,“數(shù)學”,“總分”,“平均成績”); if(sel==1) {int j; for(j=0;j<=num;j++) { if(students[j].Mark1>=m&&students[j].Mark1<=n) Student_DisplaySingle1(j); }} else if(sel==2) {int j; for(j=0;j<=num;j++) { if(students[j].Mark2>=m&&students[j].Mark2<=n) Student_DisplaySingle1(j); }} else if(sel==3) {int j; for(j=0;j<=num;j++) { if(students[j].Mark3>=m&&students[j].Mark3<=n) Student_DisplaySingle1(j); }}else if(sel==4) {int j; for(j=0;j<=num;j++) { if(students[j].Zongfen>=m&&students[j].Zongfen<=n) Student_DisplaySingle1(j); }}else if(sel==5) {int j; for(j=0;j<=num;j++) { if(students[j].Average>=m&&students[j].Average<=n) Student_DisplaySingle1(j); }} else printf(“信息錯誤!n”); printf(“是否繼續(xù)?(y/n)”); a=getchar(); if(getchar()=='n'){break;} } } /*主程序*/ main(){ int choice; IO_ReadInfo(); fflush(stdin);while(1) { /*主菜單*/ printf(“ ~~~~~~~~~~~~~~~~~~~~~&歡迎進入學生成績管理系統(tǒng)&~~~~~~~~~~~~~~~~~~~~~ n”);printf(“ * 1.輸入學生記錄 *n”);printf(“ * 2.添加學生記錄 *n”);printf(“ * 3.修改學生記錄 *n”);printf(“ * 4.刪除學生記錄 *n”);printf(“ * 5.按姓名或學號查詢學生記錄 *n”);printf(“ * 6.排序 *n”);printf(“ * 7.統(tǒng)計不同分數(shù)段的學生 *n”);printf(“ * 8.輸出學生記錄 *n”);printf(“ * 9.退出 *n”);printf(“ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ n”);printf(“ 請選擇(1-9):”);scanf(“%d”,&choice);getchar();switch(choice){ case 1:Student_Insert();break;case 2:Student_Insert();break;case 3:Student_Modify();break;case 4:Student_Delete();break;case 5:Student_Select();break;case 6:Student_SortByAverage();Student_Display();break;case 7:Student_TJ();break;case 8:Student_Display();break;} IO_WriteInfo(); } } 1.Problem A: Hello world!Description Xiao_ming有兩個哥哥,大哥叫Da_min,二哥叫Er_min。三兄弟放學回家,父母分別跟他們打招呼。 Input 無 Output 請輸出: Hello Da_min, Hello Er_min, Hello Xiao_ming! Sample Input Sample Output Hello Da_min, Hello Er_min, Hello Xiao_ming! HINT 請注意換行符 Append Code #include printf(“Hello Da_min,n”); printf(“Hello Er_min,n”); printf(“Hello Xiao_ming!n”);} 2.Problem B: 求圓的面積和周長 Description 從鍵盤輸入圓的半徑,求圓的面積和周長,圓周率取3.14。 Input 輸入一個浮點型數(shù)據(jù),有效數(shù)字不會超過十進制的6位。 Output 輸出為兩行。 第一行為圓的面積,第二行為圓的周長,格式見sample。 Sample Input 3 Sample Output Area: 28.260000 Perimeter: 18.840000 HINT 了解浮點類型的輸入、輸出和算術運算符 Append Code 法一 #include #include double r; scanf(“%d”,&r); printf(“Area: %lfn”,pi*r*r); printf(“Perimeter: %lfn”,2*pi*r); } 3.Problem C:平均值 Description 求3個數(shù)的平均值。 Input 輸入只有一行,為3個較小的整數(shù)。 Output 輸出為這3個整數(shù)的平均值,保留3位小數(shù)。 Sample Input 1 2 3 Sample Output 2.000 HINT 注意除法運算對整型數(shù)據(jù)和浮點型數(shù)據(jù)是不一樣的。 Append Code #include 4.Problem D: 求字符的值 Description 從鍵盤輸入3個字符(不含雙字節(jié)字符),分別輸出每個字符的十進制值(ASCII碼)、八進制值和十六進制值。 Input 輸入為3個字符。 Output 輸出為3行。 每一行為每個字符(對應輸入順序)的十進制、八進制和十六進制值,用空格分隔開。每個輸出的值占3個字符,不足3個字符前面補0。 Sample Input 0 A Sample Output 048 060 030 032 040 020 065 101 041 HINT 了解字符值的存儲和整型的關系。 Append Code #include 5.Problem A: 最簡單的程序 Description 輸出一行“Hello world!”。 Input 無 Output Hello world! Sample Input Sample Output Hello world! HINT Append Code #include printf(“Hello world!”);} 6.Problem B: 算術基本運算 Description 計算兩整數(shù)x和y(0 Input 輸入只有一行,格式見sample。 Output 輸出為多行,按順序每行輸出x,y的和、差、積、商、余數(shù)、x的平方和y的三次方,格式見sample Sample Input x = 11, y = 3 Sample Output x + y : 14 xy : %dn“,x-y); printf(”x * y : %dn“,x*y); printf(”x / y quotient: %d, remainder: %dn“,x/y,x%y); printf(”x ^ 2 : %dn“,x*x); printf(”y ^ 3 : %dn“,y*y*y);} 7.Problem C: 自增自減運算 Description C語言中有自增運算++、自減運算--,并且可以前置和后置。 編寫一個程序:對輸入的一個整數(shù)a,輸出a++、a--、++a、--a的值。 Input 一個整數(shù)a,a是很小的整數(shù)。 Output 輸出為5行,第一行為a的值,后面依次為--a、a--、a++、++a的值。 5行輸出縱向a要對齊,“:”對齊,“:”前后各一個空格,后面的數(shù)值不用對齊。每行行尾都有回車。 Sample Input 0 Sample Output a : 0--a :-1 a--: 0 a++ : 0 ++a : 1 HINT Append Code #include : %dn“,a);printf(”--a : %dn“,--a);a=x;printf(” a--: %dn“,a--);a=x;printf(” a++ : %dn“,a++);a=x;printf(”++a : %dn“,++a);} 8.Problem F: 絕對值 Description 求整型數(shù)據(jù)和浮點型數(shù)據(jù)的絕對值。 Input 輸入兩個數(shù),第一個是整數(shù),第二個是浮點數(shù)。 Output 輸出為兩行,第一行為整數(shù)的絕對值,第二行為浮點數(shù)的絕對值,注意浮點數(shù)的絕對值不輸出無意義的0。 Sample Input-1 1 Sample Output 1 1 HINT 求絕對值可以用標準庫函數(shù)來完成,也可以自己判斷。注意浮點數(shù)的輸出格式。求絕對值的函數(shù)在哪個頭文件?貌似很多人會搞錯,包括很多編書的人! Append Code #include int n; float m; scanf(”%d%f“,&n,&m); //n=abs(n); //m=fabs(m); if(n<0) { n=-n; } if(m<0) { m=-m; } printf(”%dn“,n); printf(”%g“,m); return 0;} 9.Problem A: 奇數(shù)還是偶數(shù)? Description 輸入一個整數(shù),判讀它是奇數(shù)還是偶數(shù)。 Input 輸入只有一行,為一個100以內的正整數(shù)。 Output 輸出為一行。 若輸入為偶數(shù)則輸出“even”,奇數(shù)輸出“odd”。Sample Input 30 Sample Output even HINT 用整數(shù)運算可以解決,練習“?:”表達式。 Append Code #include int n; scanf(”%d“,&n); if(n>=0&&n<=100){ if(n%2==0)printf(”evenn“); else printf(”oddn“); } return 0;} 10.Problem B: 簡單的打折計算 Description 商店規(guī)定:消費滿n元,可以打八八折。設某件商品標價m元,輸入購買的件數(shù)x,計算出需要支付的金額(單位:元),精確到分。 Input 輸入只有一行,三個整數(shù)m、n和x,且0 Sample Input 95 300 4 Sample Output 334.40 HINT 了解浮點型的輸出控制,注意整型和浮點型混合運算過程中的數(shù)據(jù)類型轉換。 Append Code #include int m,x,n,a; float b; scanf(”%d%d%d“,&m,&n,&x); 0 x m a=m*x; if(a>n) b=0.88*a; else b=a; printf(”%.2fn“,b); } 11.Problem C: 判斷閏年 Description 輸入一個正整數(shù)的年份,判斷是否為閏年。 Input 輸入只有一行,為一個10000以內的正整數(shù)。 Output 輸出為一行。 若輸入為閏年偶數(shù)則輸出“Yes”,否則輸出“No”。 Sample Input 2010 Sample Output No HINT 了解邏輯運算符和關系運算符。 Append Code #include int x; scanf(”%d“,&x); if(x>0&&x<10000) { if(x%4==0&&x%100!=0) printf(”Yesn“); else if(x%400==0) printf(”Yesn“); else printf(”Non“); } else printf(”error“);} 12.Problem D: 水仙花數(shù) Description 如果一個三位十進制數(shù)等于其各位數(shù)字的立方和,則稱這個數(shù)為水仙花數(shù)。如:13+53+33=153。 Input 一個整數(shù)x,100<=x<=999。 Output x是水仙花數(shù),則輸出“YES”,否則為“NO”。 Sample Input 153 Sample Output YES HINT Append Code #include int a,b,c,x; scanf(”%d“,&x); a=x/100; b=x/10%10; c=x%10; if(x==a*a*a+b*b*b+c*c*c) printf(”Yes“); else printf(”No“);} 13.Problem E: 三個數(shù)比較大小 Description 從鍵盤上輸入0~100之間的三個數(shù),按從小到大的順序輸出。 Input 輸入只有一行,為三個整數(shù)。 Output 按從小到大輸出這三個數(shù)。 Sample Input 15 10 20 Sample Output 10 15 20 HINT 用if語句判斷各種情況可以解決這個問題。 Append Code #include int a,b,c; scanf(”%d%d%d“,&a,&b,&c); if(a>=b) { if(b>=c) printf(”%d %d %dn“,c,b,a); else if(c>=a) printf(”%d %d %dn“,b,a,c); else printf(”%d %d %dn“,b,c,a); } else { if(a>=c) printf(”%d %d %dn“,c,a,b); else if(b>=c) printf(”%d %d %dn“,a,c,b); else printf(”%d %d %dn“,a,b,c); } } 14.Problem F: 奇怪的求和之一 Description 給定3個正整數(shù)a、b和c,按照如下規(guī)則求和: 如果這個數(shù)字是偶數(shù),則累加到和中; 如果這個數(shù)字是奇數(shù),則將大于該數(shù)的最小偶數(shù)累加到和中。 Input 三個正整數(shù),均在100以內。 Output 一個和。 Sample Input 2 3 5 Sample Output 12 HINT 如果不會使用分支語句,可使用條件運算符判斷到底將哪個數(shù)累積到和中。 Append Code #include int a,b,c; scanf(”%d%d%d“,&a,&b,&c); if(a%2!=0)a++; if(b%2!=0)b++; if(c%2!=0)c++; printf(”%dn“,a+b+c); } 15.Problem G: 你過線了嗎? Description 經(jīng)過四年的學習,你決定報考我國著名的“285”高校之一的北青大學,經(jīng)過認真的復習,殘酷的考試,終于知曉了自己的考試成績,也知道了北青大學的錄取分數(shù)線,請你編程判斷,自己過線了嗎? Input 輸入有2行,第一行有4個正整數(shù),分別表示三門課程的分數(shù)線以及總分分數(shù)線。第二行有3個非負整數(shù),分別表示你考的三門課程的成績。 Output 如果你的三門課程成績都不低于相應課程的分數(shù)線,且你的考試總分也不低于北青大學的總分分數(shù)線要求,則輸出“congratulations”,否則輸出“sorry”。 Sample Input 70 80 70 240 80 80 82 Sample Output congratulations HINT 如果你不會使用分支語句,同樣可以使用條件運算符實現(xiàn)該程序。 Append Code #include int a,b,c,d,e,f,g,h; scanf(”%d %d %d %dn%d %d %d“,&a,&b,&c,&d,&e,&f,&g); h=e+f+g; if(e>=a&&f>=b&&g>=c&&h>=d) printf(”congratulations“); else printf(”sorry“);} 16.Problem I: A+B Problem(II): Input/Output Practice Description 計算a+b,0<=a,b<1000。 Input 輸入的第一行是一個整數(shù)N,后面有N對整數(shù)a和b,每對a和b占一行,a,b用空格分開。 Output 每行輸出一個a+b的和,順序與輸入對應。 Sample Input 2 1 2 10 20 Sample Output 3 30 HINT N給出了測試樣例數(shù),用for循環(huán)處理方便。 Append Code #include int n,a,b,i;Scanf(“%d”,&n);For(i=0;i 17.Problem H: A+B Problem Description 計算a+b,0<=a,b<1000。 Input 輸入有多對整數(shù)a和b組成,每對a和b占一行,a,b用空格分開。 Output 每行輸出一個a+b的值,順序與輸入對應。 Sample Input 1 2 10 20 Sample Output 3 30 HINT OJ系統(tǒng)上測試輸入結束符為EOF(End Of File),其值為-1。用scanf()把文件所有內容讀完后,會讀到EOF,所以可以用來判斷輸入是否完成,測試時可以用Ctrl+Z產生EOF。本題解法參看FAQ。Append Code #include int a,b; while(scanf(”%d%d“,&a,&b)!=EOF){ printf(”%dn“,a+b); } return 0;} 18.Problem A: 判斷是否是元音字母 Description 輸入一個英文字母,判斷是否是元音字母。元音字母是:a,e,i,o u,A,E,I,O,U Input 輸入一個英文字母 Output 是元音字母,輸出“yes”,否則輸出“no”,行尾沒有回車。 Sample Input A Sample Output yes HINT Append Code #include char ch; scanf(”%c“,&ch); if(ch>='A'&&ch<='Z') ch=ch+32; if(ch=='a') printf(”yes“); else if(ch=='e') printf(”yes“); else if(ch=='i') printf(”yes“); else if(ch=='o') printf(”yes“); else if(ch=='u') printf(”yes“); else printf(”no“); } 19.Problem B: 按順序輸出三個數(shù) Description 對于輸入的3個整數(shù),按照從小到大的順序輸出。 Input 輸入3個int類型內的整數(shù),兩兩之間用一個空格隔開。 Output 按照從小到大的順序輸出上述三個數(shù),兩兩之間用一個空格隔開。 Sample Input 2 1 3 Sample Output 1 2 3 HINT Append Code #include int a,b,c,temp; scanf(”%d%d%d“,&a,&b,&c); if(a { temp=a; a=b; b=temp; } if(a { temp=a; a=c; c=temp; } if(b { temp=b; b=c; c=temp; } printf(”%d %d %dn“,c,b,a);} 20.Problem E: Description 判斷輸入整數(shù)的奇偶性。 判斷奇偶數(shù) Input 輸入為一個整數(shù)。 Output 輸出只有一行,代表判斷結果。如果輸入的整數(shù)n是一個偶數(shù),輸出: n is an even number.否則輸出: n is an odd number.見樣例。 Sample Input 12 Sample Output 12 is an even number.HINT Append Code #include int a; scanf(”%d“,&a); if(a%2==0) printf(”%d is an even number.“,a); else printf(”%d is an odd number.“,a);} 21.Problem A: 判斷兩個整數(shù)的大小關系 Description 輸入2個整數(shù)a和b,如果a>b,則輸出1,否則輸出0。 Input 兩個整數(shù)a和b,均不超過int類型的表示范圍。 Output 表示a>b的結果:如果a>b,則輸出1,否則輸出0。 Sample Input 3 4 Sample Output 0 HINT Append Code #include printf(”1“); else printf(”0“);return 0;} 22.Problem D: 成績的等級 Description 把百分制的考試成績轉換成五級制的成績: 90~100:Excellent 80~89:Good 70~79:Average 60~69:Pass 0~59:Failing 不在0~100之間的輸入是非法數(shù)據(jù),輸出“Error”。 Input 輸入多行,每行一個整數(shù)。 Output 輸入所對應的成績等級。 Sample Input-1 81 92 35 68 72 100 Sample Output Error Good Excellent Failing Pass Average Excellent HINT 用switch語句解決這個問題比較方便。 Append Code #include int score; while(scanf(”%d“,&score)!=EOF) { if(score<0||score>100) printf(”Errorn“); else { switch(score/10) { case 0: case 1: case 2: case 3: case 4: case 5:printf(”Failingn“);break; case 6:printf(”Passn“);break; case 7:printf(”Averagen“);break; case 8:printf(”Goodn“);break; case 9: case 10:printf(”Excellentn“);break; } } } return 0;} 23.Problem E: 輸出是m的倍數(shù)或n的倍數(shù)、但不是 m和n的公倍數(shù)的數(shù) Description 輸出1~k之間是m的倍數(shù)或n的倍數(shù)、但不是m和n的公倍數(shù)的數(shù),其中1<=m,n Input 輸入三個整數(shù),依次為k、m、n。 Output 從小到大輸出符合題意的所有整數(shù),兩數(shù)之間用一個空格分開。 Sample Input 15 2 3 Sample Output 2 3 4 8 9 10 14 15 HINT 難點在于輸出格式的控制:空格在數(shù)的中間,學會用循環(huán)時邊界情況的特殊處理。 Append Code #include a=m;else a=n;printf(”%d“,a);for(i=a+1;i<=k;i++){ } if((i%m==0&&i%n!=0)||(i%n==0&&i%m!=0)) printf(” %d“,i);} return 0; 24.Problem B: 兩整數(shù)相加減 Description 計算a+b和a-b。 Input 輸入為一對整數(shù)a和b。a,b用空格分開。 Output 輸出a+b和a-b的計算結果,各占一行。 Sample Input 1 2 Sample Output 3-1 HINT Append Code #include printf(”%dn“,a+b); printf(”%dn“,a-b);} 25 Problem C: 它滿足條件嗎? Description 需要判斷給定的一個整數(shù)是否同時滿足如下三個條件: 1.它是一個完全平方數(shù)。2.它是一個偶數(shù)。3.它是一個正數(shù)。 注:若一個數(shù)能表示成某個自然數(shù)的平方的形式,則稱這個數(shù)為完全平方數(shù)。例如: 0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289,324,361,400,441,484,529 Input 一個int范圍內的整數(shù)。 Output 如果輸入的數(shù)字滿足條件,則輸出yes,否則輸出no。 Sample Input 100 Sample Output yes HINT 注意邏輯表達式判斷三個條件的順序。如果你不會使用分支語句,同樣可以使用條件運算符實現(xiàn)該程序。 庫函數(shù)sqrt()可以用于求一個數(shù)的平方根。 Append Code #include if(a==sqrt(a)*sqrt(a)&&a%2==0&&a>0) printf(”yes“); else printf(”no“);} 26.Problem F: 多路分支 Description 編寫一個完整的程序,運行時向用戶提問”你考試考了多少分?(0-100)“接受輸入后判斷其等級并顯示出來等級: 優(yōu):90<=分數(shù)<=100 良:80<=分數(shù)<90 中:60<=分數(shù)<80 差:0<=分數(shù)<60 Input 輸入任意一個整數(shù)分數(shù)值,顯示等級;再輸入任意一個整數(shù)分數(shù)值,顯示等級;....直到測試數(shù)據(jù)較充分,可輸入-1止。 Output 對任意輸入的分數(shù)值,輸出對應的等級,直到輸入的數(shù)為-1時才退出運行.Sample Input 102 100 90 80 70 60 50 0-80-1 Sample Output grad must between 0 and 100 優(yōu) 優(yōu) 良 中 中 差 差 grad must between 0 and 100 grad must between 0 and 100 HINT Append Code #include int x; while(scanf(”%d“,&x)!=EOF) { if(x<0||x>100) printf(”grad must between 0 and 100n“); else if(x>=90) printf(”優(yōu)n“); else if(x>=80) printf(”良n“); else if(x>=60) printf(”中n“); else if(x>=0) printf(”差n“); } return 0;} Problem D: 有多少人? Description 學校舉行運動會,如果全體學生按照3人一隊列隊,則多了1個人;如果按照4人一隊列隊,則多了2個人;如果按照5人一隊排隊,則多了3個人。請問這個學校有多少學生? Input 一個int類型的正整數(shù)N,是學生人數(shù)的上界,即:該校學生數(shù)不超過N。 Output 所有可能的學生數(shù),每個數(shù)占一行。 Sample Input 200 Sample Output 58 118 178 HINT Append Code #include int n,i; scanf(”%d“,&n); for(i==1;i<=n;i++){ if(i%3==1&&i%4==2&&i%5==3) printf(”%dn“,i);} return 0;} Problem C: 正負數(shù)各有幾個? Description 輸入若干個整數(shù),求其中正數(shù)、負數(shù)的個數(shù)。 Input 輸入分為2行:第一行是一個數(shù)字N>0,表示下面有N個整數(shù)。第2行是N個整數(shù),都是int類型的。 Output 輸出所輸入的N個整數(shù)的正數(shù)個數(shù)和負數(shù)個數(shù),并用空格分開2個輸出。Sample Input 10 2 3 4 5-1-2-3-4-5 Sample Output 5 5 HINT 貌似還有一種叫做0的數(shù)。 Append Code #include int n,a,i,num1=0,num2=0; scanf(”%d“,&n);for(i=0;i { scanf(”%d“,&a); if(a>0) num1++; else if(a<0) num2++; } printf(”%d %dn“,num1,num2); return 0;} Problem A: A+B Problem(III): Input/Output Practice Description 計算a+b,0<=a,b<1000。 Input 輸入有多對整數(shù)a和b組成,每對a和b占一行,a,b用空格分開。當測試樣為0 0時表示輸入結束,0 0不參與運算。 Output 每行輸出一個a+b的值,順序與輸入對應。 Sample Input 1 2 10 20 0 0 Sample Output 3 30 HINT 練習break的使用。 Append Code #include { if(a!=0||b!=0) } printf(”%dn“,a+b); else break; return 0;} 30 Problem B: A+B Problem(IV): Input/Output Practice Description 計算a+b,0<=a,b<1000。 Input 輸入有多對整數(shù)a和b組成,每對a和b占一行,a,b用空格分開。 Output 每行輸出一個a+b的值,順序與輸入對應。每個格式樣例之間用一個空行分隔開。 Sample Input 1 2 10 20 15 35 Sample Output 3 30 50 HINT 由于輸出的和比空行多一個,所以全部計算放在一個循環(huán)里是不行的,必須要特殊處理開頭或者結尾。 Append Code #include n++; if(n==1) printf(”%dn“,a+b); else printf(”n%dn“,a+b); } return 0;} Problem C: n個數(shù)的最大值和最小值 Description 找出n個數(shù)中最大的數(shù)和最小的數(shù),并將它們的值輸出出來。 Input 輸入為n+1個整數(shù),都在int類型范圍內。這些數(shù)可能用若干空格或者換行符分隔開。輸入的第1個數(shù)為n,表示后續(xù)有n個數(shù)輸入。從輸入的第2個數(shù)開始,求出直到第n+1個數(shù)中最大的數(shù)和最小的數(shù)。 Output 輸出為兩行,格式見sample。 Sample Input 3 0 1-1 Sample Output The maximum number is 1.The minimum number is-1.HINT 分隔符是空格還是回車都是空白符,對scanf(”%d“)來說沒有區(qū)別;先讀入n,然后用for循環(huán)就很容易控制讀入n個數(shù)的過程。 Append Code #include int n,i,max,min; scanf(”%d“,&n); int a[n];第四篇:c語言程序設計實習報告程序
第五篇:C語言程序設計