2019春季第九周做業

問題 回答
這個做業屬於哪一個課程 C語言程序設計
這個做業要求在哪裏 第九周做業
我在這個課程的目標是 瞭解並熟練掌握結構體的使用方法
這個做業在哪一個具體方面幫助我實現目標 此次的pta上的做業都有用結構體
參考文獻 C語言程序設計

#基礎做業 ##按等級統計學生成績 本題要求實現一個根據學生成績設置其等級,並統計不及格人數的簡單函數。 ###函數接口定義: int set_grade( struct student *p, int n ); 其中p是指向學生信息的結構體數組的指針,該結構體的定義爲: struct student{ int num; char name[20]; int score; char grade; }; n是數組元素個數。學號num、姓名name和成績score均是已經存儲好的。set_grade函數須要根據學生的成績score設置其等級grade。等級設置:85-100爲A,70-84爲B,60-69爲C,0-59爲D。同時,set_grade還須要返回不及格的人數。 ###裁判測試程序樣例:編程

#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;

    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 B數組

###1)實驗代碼app

int set_grade( struct student *p, int n )
{
	int sum=0,i;
	for(i=0;i<n;i++){
		if(p[i].score<=100&&p[i].score>=85){
			p[i].grade='A';
		}
		if(p[i].score<=84&&p[i].score>=70){
			p[i].grade='B';
		}
		if(p[i].score<=69&&p[i].score>=60){
			p[i].grade='C';
		}
		if(p[i].score<=59&&p[i].score>=0){
			p[i].grade='D';
			sum++;
		}
	}
	return sum;
}

###2)流程圖 函數

###3)本題調試過程碰到的問題及解決辦法 無 ###4)運行結果截圖 學習

###5)評價 感想:這道題目仍是比較簡單的,就是指針的自定義函數 用時:20分鐘測試

##一幫一 「一幫一學習小組」是中小學中常見的學習組織方式,老師把學習成績靠前的學生跟學習成績靠後的學生排在一組。本題就請你編寫程序幫助老師自動完成這個分配工做,即在獲得全班學生的排名後,在當前還沒有分組的學生中,將名次最靠前的學生與名次最靠後的異性學生分爲一組。 ###輸入格式: 輸入第一行給出正偶數N(≤50),即全班學生的人數。此後N行,按照名次從高到低的順序給出每一個學生的性別(0表明女生,1表明男生)和姓名(不超過8個英文字母的非空字符串),其間以1個空格分隔。這裏保證本班男女比例是1:1,而且沒有並列名次。 ###輸出格式: 每行輸出一組兩個學生的姓名,其間以1個空格分隔。名次高的學生在前,名次低的學生在後。小組的輸出順序按照前面學生的名次從高到低排列。 ###輸入樣例: 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設計

###1)實驗代碼指針

#include<stdio.h>
#define MAXN 50
struct student{
    int num;
    char name[9];
};
int main(void)
{
	struct student stu[MAXN];
	int n,i,j,l,count,sum[25],k=0;
	scanf("%d",&n);
	for(i=0;i<n;i++){
        scanf("%d %s\n",&stu[i].num,&stu[i].name);
    } 
    for(i=0;i<n/2;i++){
    	for(j=n-1;j>=n/2;j--){
    		if(stu[i].num!=stu[j].num&&stu[j].num!=2){
    			printf("%s %s\n",stu[i].name,stu[j].name);
                stu[j].num=2;
                break;
		    }  
		}
	}
	return 0;
}

###2)流程圖 調試

###3)本題調試過程當中碰到的問題及解決辦法 code

問題:一方面是名字的那個字符串定義範圍小了,沒有留‘\0’的位置,另外一方面是我在想那個不同性別的組合時,怎麼控制那個後面學生不重複輸出,想要一次性跳出第二個循環 解決辦法:第一個是根據那個提交時的提示字符串邊界,另外一個是我在尋找如何一次性跳出兩個循環的時候,看到了一個用標記的方法來判斷循環 ###4)運行結果截圖

###5)評價 感想:就是思路太過於侷限,想問題的思路不夠簡潔 用時:一小時

##考試座位號 每一個 PAT 考生在參加考試時都會被分配兩個座位號,一個是試機座位,一個是考試座位。正常狀況下,考生在入場時先獲得試機座位號碼,入座進入試機狀態後,系統會顯示該考生的考試座位號碼,考試時考生須要換到考試座位就座。但有些考生遲到了,試機已經結束,他們只能拿着領到的試機座位號碼求助於你,從後臺查出他們的考試座位號碼。 ###輸入格式: 輸入第一行給出一個正整數 N(≤1000),隨後 N 行,每行給出一個考生的信息:准考證號 試機座位號 考試座位號。其中准考證號由 16 位數字組成,座位從 1 到 N 編號。輸入保證每一個人的准考證號都不一樣,而且任什麼時候候都不會把兩我的分配到同一個座位上。 考生信息以後,給出一個正整數 M(≤N),隨後一行中給出 M 個待查詢的試機座位號碼,以空格分隔。 ###輸出格式: 對應每一個須要查詢的試機座位號碼,在一行中輸出對應考生的准考證號和考試座位號碼,中間用 1 個空格分隔。 ###輸入樣例: 4 3310120150912233 2 4 3310120150912119 4 1 3310120150912126 1 3 3310120150912002 3 2 2 3 4 ###輸出樣例: 3310120150912002 2 3310120150912119 1

###1)實驗代碼

#include<stdio.h>
struct student{
    long int num;
    int a;
    int b;
};
int main(void)
{
	struct student stu[1000];
	int i,N,M,j,a1[1000];
	scanf("%d",&N); 
	for(i=0;i<N;i++){
		scanf("%ld %d %d\n",&stu[i].num,&stu[i].a,&stu[i].b);
	}
	scanf("%d\n",&M);
	for(i=0;i<M;i++){
		scanf("%d ",&a1[i]);
	}
	for(i=0;i<M;i++){
		for(j=0;j<N;j++){
			if(a1[i]==stu[j].a){
				printf("%ld %d\n",stu[j].num,stu[j].b);
				break;
			}
		}
	}
	return 0;
}

###2)流程圖

###3)本題調試過程碰到的問題及解決辦法

問題:一個是沒有注意輸出格式,還有就是太粗心了,把那個座位輸進數組的時候寫成了範圍,應該是a1[i] 解決辦法:就是反覆的調試,查看

###4)運行結果截圖

###5)評價 感想:題不是很難,主要是老是出一些小錯誤,無奈 用時:一個小時

#預習做業 問題:什麼是遞歸? 在我看來,遞歸就是先想一個問題的最直接的解決辦法,也就是說最特殊的狀況,即跳出循環的那種狀況,而後就是不斷的簡化問題,找出規律,能夠不停的套用同時使用函數循環 優勢:使得代碼更加的精簡,而且減小了咱們的思考量相對狀況下的,就是說咱們只須要簡單的想大的運行計算,相對的內部運算不用太過去想,像課本中的漢諾塔問題 缺點:就是對於找遞歸式子很差找,還有就是代碼看起來彷佛不是那麼好理解 問題:如何概括出遞歸式? 我的以爲,找遞歸式仍是須要靠作題來練的吧,主要是找出裏面的規則,多作題,有了那個思惟就行了吧 ###學習進度條 |周/日期|這周所花的時間|代碼行數|學到的知識點簡介|目前比較迷惑大問題| |----------|---------------------|------------|---------------------------------|-----------------------------| |4/22-4/26|15個小時|200行|結構體的使用,遞歸法,一些頭文件|漢諾塔問題| ####累計代碼行數和博客字數 |時間|博客字數|代碼行數| |-------|-----------|------------| |第一週|0|80| |第二週|100|180| |第三週|400|330| |第四周|600|480| |第五週|900|720| |第六週|1250|890| |第七週|1610|1065| |第八週|2010|1295| |第九周|2480|1495|

###學習感悟 1)老是莫名其妙的寫錯一些不應寫錯的地方,可能仍是由於不夠專一吧 2)疑惑:對於此次預習的內容,那個漢諾塔問題的那個遞歸,我不是特別明白他是怎麼搬運的那個盤子,還有那個本身定義頭文件是要把他存在哪裏我不是特別清楚 ###結對編程 過程:就是一塊兒思考該怎麼作,討論解題的的思路 優勢:1.能夠更加的清楚思路,就是對程序更加的熟悉和清楚 2.能夠更有效的交流,在交流的過程當中本身的思路會更加的清楚,能夠解決更多的問題,以及本身自己忽略的問題 3.相互學習,傳遞經驗 4.能夠督促學習 缺點:經驗不足!

相關文章
相關標籤/搜索