2019年春季学期第九周作业
| 這個(gè)作業(yè)屬于那個(gè)課程 | C語(yǔ)言程序設(shè)計(jì)II |
| 這個(gè)作業(yè)要求在哪里 | 2019春第九周作業(yè) |
| 我在這個(gè)課程的目標(biāo)是 | 了解并且應(yīng)用結(jié)構(gòu)體和數(shù)組的知識(shí) |
| 這個(gè)作業(yè)在那個(gè)具體方面幫助我實(shí)現(xiàn)目標(biāo) | 掌握了數(shù)組的簡(jiǎn)單編程及應(yīng)用,了解了結(jié)構(gòu)體 |
| 參考文獻(xiàn) | C語(yǔ)言chap3和C語(yǔ)言chap9 |
一、本周完成的作業(yè)
題目1.6-1 按等級(jí)統(tǒng)計(jì)學(xué)生成績(jī) (20 分)
本題要求實(shí)現(xiàn)一個(gè)根據(jù)學(xué)生成績(jī)?cè)O(shè)置其等級(jí),并統(tǒng)計(jì)不及格人數(shù)的簡(jiǎn)單函數(shù)。
函數(shù)定義接口:
int set_grade( struct student *p, int n );其中p是指向?qū)W生信息的結(jié)構(gòu)體數(shù)組的指針,該結(jié)構(gòu)體的定義為:
struct student{int num;char name[20];int score;char grade; };n是數(shù)組元素個(gè)數(shù)。學(xué)號(hào)num、姓名name和成績(jī)score均是已經(jīng)存儲(chǔ)好的。set_grade函數(shù)需要根據(jù)學(xué)生的成績(jī)score設(shè)置其等級(jí)grade。等級(jí)設(shè)置:85-100為A,70-84為B,60-69為C,0-59為D。同時(shí),set_grade還需要返回不及格的人數(shù)。
裁判測(cè)試程序:
#include <stdio.h> #define MAXN 10struct student{int num;char name[20];int score;char grade; };int set_grade( struct student *p, int n );int main() { struct student stu[MAXN], *ptr;int n, i, count;ptr = stu;scanf("%d\n", &n);for(i = 0; i < n; i++){scanf("%d%s%d", &stu[i].num, stu[i].name, &stu[i].score);} count = set_grade(ptr, n);printf("The count for failed (<60): %d\n", count);printf("The grades:\n"); for(i = 0; i < n; i++)printf("%d %s %c\n", stu[i].num, stu[i].name, stu[i].grade);return 0; }/* 你的代碼將被嵌在這里 */輸入樣例:
10 31001 annie 85 31002 bonny 75 31003 carol 70 31004 dan 84 31005 susan 90 31006 paul 69 31007 pam 60 31008 apple 50 31009 nancy 100 31010 bob 78輸出樣例:
The count for failed (<60): 1 The grades: 31001 annie A 31002 bonny B 31003 carol B 31004 dan B 31005 susan A 31006 paul C 31007 pam C 31008 apple D 31009 nancy A 31010 bob B1).實(shí)驗(yàn)代碼
int set_grade( struct student *p, int n ) { int count=0,i; for(i=0;i<n;i++) { if((*p).score<60) { (*p).grade='D'; count++; } else if((*p).score>=60&&(*p).score<=69) {(*p).grade='C'; } else if((*p).score>=70&&(*p).score<=84) {(*p).grade='B'; }else {(*p).grade='A';} p++; } return count; }2) .設(shè)計(jì)思路
mermaid flowchat st=>start: 函數(shù)聲明,定義相關(guān)變量,聲明結(jié)構(gòu)體 op=>operation: 利用if和else-if來(lái)進(jìn)行成績(jī)?cè)诓煌A層的分級(jí) op1=>operation: 統(tǒng)計(jì)不及格人數(shù) e=>end: return count;st->op->op1->e3).本題調(diào)試過(guò)程碰到問(wèn)題及解決辦法
問(wèn)題:老實(shí)說(shuō)這道題對(duì)我來(lái)說(shuō)不算很南,難的只有在指針上的部分,還有些許粗心。
解決方法:查閱書(shū)籍,調(diào)試代碼。
4).運(yùn)行結(jié)果截圖
題目2.7-1 一幫一 (15 分)
“一幫一學(xué)習(xí)小組”是中小學(xué)中常見(jiàn)的學(xué)習(xí)組織方式,老師把學(xué)習(xí)成績(jī)靠前的學(xué)生跟學(xué)習(xí)成績(jī)靠后的學(xué)生排在一組。本題就請(qǐng)你編寫程序幫助老師自動(dòng)完成這個(gè)分配工作,即在得到全班學(xué)生的排名后,在當(dāng)前尚未分組的學(xué)生中,將名次最靠前的學(xué)生與名次最靠后的異性學(xué)生分為一組。
輸入格式:
輸入第一行給出正偶數(shù)N(≤50),即全班學(xué)生的人數(shù)。此后N行,按照名次從高到低的順序給出每個(gè)學(xué)生的性別(0代表女生,1代表男生)和姓名(不超過(guò)8個(gè)英文字母的非空字符串),其間以1個(gè)空格分隔。這里保證本班男女比例是1:1,并且沒(méi)有并列名次。輸出格式:
每行輸出一組兩個(gè)學(xué)生的姓名,其間以1個(gè)空格分隔。名次高的學(xué)生在前,名次低的學(xué)生在后。小組的輸出順序按照前面學(xué)生的名次從高到低排列。輸入樣例:
8 0 Amy 1 Tom 1 Bill 0 Cindy 0 Maya 1 John 1 Jack 0 Linda輸出樣例:
Amy Jack Tom Linda Bill Maya Cindy John1).實(shí)驗(yàn)代碼
#include<stdio.h> #include<string.h>struct student { int sex;char name[10];int flag; }; int main(){ struct student s[100]; int n;int count=0;scanf("%d",&n);for(int i=0;i<n;i++) {scanf("%d %s",&s[i].sex,&s[i].name);s[i].flag=0;} for(int i=0;i<n/2;i++) {for(int k=n-1;k>=n/2;k--){if((s[i].sex!=s[k].sex)&&s[i].flag==0&&s[k].flag==0){s[i].flag =1;s[k].flag =1;count=count+2;printf("%s %s\n",s[i].name ,s[k].name );}}if(count==n)break;} }2) 設(shè)計(jì)思路
mermaid flowchat st=>start: 編譯預(yù)處理函數(shù),定義結(jié)構(gòu)體 op=>operation: 定義相關(guān)變量,申明結(jié)構(gòu)體 io=>inputoutput: 利用一個(gè)循環(huán)來(lái)輸入樣例 op1=>operation: 在利用for的雙重嵌套循環(huán)來(lái)進(jìn)行分配任務(wù) cond=>condition: 是異性且還沒(méi)有分配? op3=>operation: 排除未配對(duì)統(tǒng)計(jì)已配對(duì) cond1=>condition: count==n? io1=>inputoutput: 輸出配對(duì)表 e=>endst->op->io->op1->cond cond(yes,right)->op3->io1->cond1 cond(no)->op1 cond1(no)->op1 cond1(yes)->e3).本題調(diào)試過(guò)程碰到問(wèn)題及解決辦法
問(wèn)題:提交pta之后老師答案部分正確,我就在想是不是少了什么,從答案的測(cè)試點(diǎn)出發(fā)進(jìn)行調(diào)試。
解決方法:在最后在多定義一個(gè)flag來(lái)作為標(biāo)記是否已分配,提交后答案正確。
4).運(yùn)行結(jié)果截圖
題目3.*7-2 考試座位號(hào) (15 分**)
每個(gè) PAT 考生在參加考試時(shí)都會(huì)被分配兩個(gè)座位號(hào),一個(gè)是試機(jī)座位,一個(gè)是考試座位。正常情況下,考生在入場(chǎng)時(shí)先得到試機(jī)座位號(hào)碼,入座進(jìn)入試機(jī)狀態(tài)后,系統(tǒng)會(huì)顯示該考生的考試座位號(hào)碼,考試時(shí)考生需要換到考試座位就座。但有些考生遲到了,試機(jī)已經(jīng)結(jié)束,他們只能拿著領(lǐng)到的試機(jī)座位號(hào)碼求助于你,從后臺(tái)查出他們的考試座位號(hào)碼。
輸入格式:
輸入第一行給出一個(gè)正整數(shù) N(≤1000),隨后 N 行,每行給出一個(gè)考生的信息:準(zhǔn)考證號(hào) 試機(jī)座位號(hào) 考試座位號(hào)。其中準(zhǔn)考證號(hào)由 16 位數(shù)字組成,座位從 1 到 N 編號(hào)。輸入保證每個(gè)人的準(zhǔn)考證號(hào)都不同,并且任何時(shí)候都不會(huì)把兩個(gè)人分配到同一個(gè)座位上。 考生信息之后,給出一個(gè)正整數(shù) M(≤N),隨后一行中給出 M 個(gè)待查詢的試機(jī)座位號(hào)碼,以空格分隔輸出格式:
對(duì)應(yīng)每個(gè)需要查詢的試機(jī)座位號(hào)碼,在一行中輸出對(duì)應(yīng)考生的準(zhǔn)考證號(hào)和考試座位號(hào)碼,中間用 1 個(gè)空格分隔。輸入樣例
4 3310120150912233 2 4 3310120150912119 4 1 3310120150912126 1 3 3310120150912002 3 2 2 3 4輸出樣例
3310120150912002 2 3310120150912119 11).實(shí)驗(yàn)代碼
#include<stdio.h> #include<string.h> struct student { char num[20];int x,y; }; int main(){ struct student s[1100]; int n,m;scanf("%d\n",&n);for(int i=0;i<n;i++) {scanf("%s %d %d\n",&s[i].num,&s[i].x,&s[i].y);} scanf("%d\n",&m);int b[m];for(int i=0;i<m;i++) {scanf("%d",&b[i]);} for(int i=0;i<m;i++) {for(int k=0;k<n;k++){if(s[k].x==b[i]) {printf("%s %d\n",s[k].num,s[k].y);}}} }2) 設(shè)計(jì)思路
mermaid flowchat st=>start: 聲明結(jié)構(gòu)體,定義相關(guān)變量和數(shù)組 io=>inputoutput: 輸入n,并且利用循環(huán)輸入學(xué)號(hào)和座位號(hào) io2=>inputoutput: 輸入m,并且利用for循環(huán)輸入座位號(hào) op=>operation: 利用for的二重循環(huán)來(lái)進(jìn)行在座位號(hào)的比較 cond=>condition: s[k].x==b[i]? io3=>inputoutput: 輸出學(xué)號(hào)座位號(hào) e=>end: 結(jié)束函數(shù)st->io->io2->op->cond cond(yes)->io3->e cond(no)->op2) 本題調(diào)試過(guò)程中碰到問(wèn)題及解決辦法
問(wèn)題:pta提交答案錯(cuò)誤,軟件上運(yùn)行無(wú)法輸出
解決方法:仔細(xì)尋找發(fā)現(xiàn)原來(lái)是數(shù)組b[m]的位置沒(méi)放對(duì)應(yīng)當(dāng)放在輸入m之后。
4) 運(yùn)行結(jié)果截圖
題目4.思考題
1.什么是遞歸函數(shù)?
答:調(diào)用自己定義的函數(shù)也可以覺(jué)遞歸函數(shù),這是我自己比較淺顯的理解,具體參考:什么是遞歸函數(shù)?
2..遞歸函數(shù)的優(yōu)缺點(diǎn)。
答: 我怕覺(jué)得吧優(yōu)點(diǎn)在于實(shí)現(xiàn)比較簡(jiǎn)單,缺點(diǎn)的話就是比較麻煩,調(diào)用的耗時(shí)長(zhǎng),效率也可能很低,占用空間也會(huì)大一些。這是我的理解。
3..如何歸納出遞歸式?
答: 我覺(jué)得遞歸式都是前人總結(jié)的,沒(méi)有足夠的經(jīng)驗(yàn)是沒(méi)有成型的總結(jié)式。我仔細(xì)閱讀過(guò)這篇文章,這就是我得出的體會(huì)。參考:C語(yǔ)言遞歸操作總結(jié)
二、學(xué)習(xí)進(jìn)度統(tǒng)計(jì)和學(xué)習(xí)感悟
1).學(xué)習(xí)進(jìn)度統(tǒng)計(jì)
2).學(xué)習(xí)感悟
本次作業(yè)讓我感覺(jué)難度非凡,深深的感到自己在結(jié)構(gòu)體知識(shí)匱乏到了什么程度,幾天的時(shí)間才能完成作業(yè),思路也不多太難了呀,耗時(shí)長(zhǎng),題目難,所幸在這個(gè)過(guò)程中還是又學(xué)習(xí)到一些東西的。
(1)本周你學(xué)習(xí)哪些內(nèi)容?有哪些收獲?
本周學(xué)習(xí)了結(jié)構(gòu)體和指針和數(shù)組的結(jié)合,三者的結(jié)合,難度誤以又提高了一個(gè)難度,難上加難。掌握了結(jié)構(gòu)體的簡(jiǎn)單應(yīng)用,至少基礎(chǔ)作業(yè)做出來(lái)了。
(2)本周所學(xué)內(nèi)容中你覺(jué)得哪些地方是難點(diǎn)?對(duì)此你做了哪些措施去客服這些難點(diǎn)?
我覺(jué)得都挺難的,主要看知識(shí)量和操作量的積累。我也精良去多做一些編程題目,題目太難的也不會(huì)去設(shè)計(jì),都是先嘗試少量又相對(duì)簡(jiǎn)單的編程題目。
三、結(jié)對(duì)編程的過(guò)程及優(yōu)缺點(diǎn)
關(guān)于結(jié)對(duì)編程
本次結(jié)對(duì)編程地點(diǎn)在寢室,本次結(jié)對(duì)與室友搭檔,過(guò)程還是依然比較愉快的,結(jié)對(duì)編程中我們討論了第九周基礎(chǔ)作業(yè)第三題中代碼總是在軟件上運(yùn)行無(wú)法輸出,我們進(jìn)行了長(zhǎng)時(shí)間的調(diào)試和討論分別的除了不一樣的結(jié)果。
結(jié)對(duì)編程的優(yōu)缺點(diǎn):
優(yōu)點(diǎn):1.結(jié)對(duì)編程更適用于解決一些方向性的問(wèn)題;2.結(jié)對(duì)編程中,雙方的互動(dòng)目的在于開(kāi)啟思路,避免單獨(dú)編程時(shí)思維容易阻塞的情況。3.多雙眼睛,少點(diǎn) bug,也能增加不一樣的編程經(jīng)驗(yàn)
缺點(diǎn):拍照編程還是有些讓人覺(jué)得不太自然。
轉(zhuǎn)載于:https://www.cnblogs.com/LfanWyuXooo/p/10775133.html
總結(jié)
以上是生活随笔為你收集整理的2019年春季学期第九周作业的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 清北学堂培训2019.4.4
- 下一篇: webpack4打包工具