第九周作业及总结
6-1 按等級(jí)統(tǒng)計(jì)學(xué)生成績(jī)
本題要求實(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 10
struct 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;
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 B
代碼
int set_grade( struct student *p, int n ) {int fai=0,i;for(i=0;i<n;i++){if((*p).score<60){(*p).grade='D';fai++;}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 fai; }本題通過助教晚上進(jìn)行部分講解,和結(jié)對(duì)編程伙伴協(xié)助完成
7-1 一幫一
“一幫一學(xué)習(xí)小組”是中小學(xué)中常見的學(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代表男生)和姓名(不超過8個(gè)英文字母的非空字符串),其間以1個(gè)空格分隔。這里保證本班男女比例是1:1,并且沒有并列名次。
輸出格式:
每行輸出一組兩個(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 John
代碼
#include<stdio.h> struct student {int sex;char name[10];int flag; } data[50]; int main() {int z;int count=0;scanf("%d",&z);for(int i=0;i<z;i++){scanf("%d %s",&data[i].sex,&data[i].name);data[i].flag=0;}for(int i=0;i<z/2;i++){for(int j=z-1;j>=z/2;j--){if((data[i].sex!=data[j].sex)&&data[i].flag==0&&data[j].flag==0){data[i].flag =1;data[j].flag =1;count=count+2;printf("%s %s\n",data[i].name ,data[j].name);}}if(count==z)break;} }此題做法相對(duì)有點(diǎn)難度,助教晚自習(xí)講解之前,有在網(wǎng)上查找過,我將flag換成sign進(jìn)行運(yùn)行發(fā)現(xiàn)錯(cuò)誤,通過助教的講解后進(jìn)行編譯改正
7-2 考試座位號(hào)
每個(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 1
代碼
#include<stdio.h> struct student {char num1[1000];int num2;int num3; }; int main() {struct student a[1000];int n,m,i,j;int num4[1000];scanf("%d",&n);for(i=0;i<n;i++){scanf("%s %d %d",a[i].num1,&a[i].num2,&a[i].num3);}scanf ("%d",&m);for(j=0;j<m;j++){scanf("%d",&num4[j]); }for(j=0;j<m;j++)for(i=0;i<n;i++){if(num4[j]==a[i].num2)printf("%s %d\n",a[i].num1,a[i].num3);}return 0; }此題助教雖然有提及,但是還是不是很清楚,代碼是由結(jié)對(duì)編程伙伴幫助完成,自己進(jìn)行詢問,去搞懂
預(yù)習(xí)作業(yè)
第十周的教學(xué)內(nèi)容是:第十章 函數(shù)與程序結(jié)構(gòu)
請(qǐng)大家查閱資料,思考問題中的三問:什么是遞歸函數(shù),它的優(yōu)點(diǎn)和缺點(diǎn)有哪些,如何歸納出遞歸式?
請(qǐng)將你的思考用自己的語言寫下來。如果有引用他們的文字,請(qǐng)一定要標(biāo)出出處(使用Markdown的鏈接方式)。
答:遞歸函數(shù)就是函數(shù)自己調(diào)用自己
優(yōu)點(diǎn):結(jié)構(gòu)清晰,可讀性強(qiáng),容易用數(shù)學(xué)歸納法來證明算法正確性,讓設(shè)計(jì)算法·調(diào)試程序帶來很大方便。
缺點(diǎn):運(yùn)行效率低,計(jì)算時(shí)間和占內(nèi)存空間要更大
關(guān)于如何歸納出遞歸式:抓住兩個(gè)關(guān)鍵點(diǎn),遞歸出口和遞歸式子。
轉(zhuǎn)載于:https://www.cnblogs.com/zou1223/p/10772535.html
總結(jié)