日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第九周编程总结

發(fā)布時間:2025/4/14 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第九周编程总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
這個作業(yè)屬于那個課程C語言程序設(shè)計II
這個作業(yè)要求在哪里https://edu.cnblogs.com/campus/zswxy/MS/homework/3129
我在這個課程的目標是學(xué)好C語言
這個作業(yè)在那個具體方面幫助我實現(xiàn)目標學(xué)到了結(jié)構(gòu)體的運用
參考文獻c primer plus

6-1 按等級統(tǒng)計學(xué)生成績 (20 分)
本題要求實現(xiàn)一個根據(jù)學(xué)生成績設(shè)置其等級,并統(tǒng)計不及格人數(shù)的簡單函數(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ù)組元素個數(shù)。學(xué)號num、姓名name和成績score均是已經(jīng)存儲好的。set_grade函數(shù)需要根據(jù)學(xué)生的成績score設(shè)置其等級grade。等級設(shè)置:85-100為A,70-84為B,60-69為C,0-59為D。同時,set_grade還需要返回不及格的人數(shù)。

裁判測試程序樣例:

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)實驗代碼

int set_grade( struct student *p, int n ) {int i,count=0;for(i=0;i<n;i++){if((*p).score<=59){(*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è)計思路

3)本次調(diào)試過程中遇到的問題

問題:if語句中的條件錯誤,還有輸出也錯誤。把if語句改成加等于號的條件,把輸出改為(*p).grade=' '.并滿足他們的等級條件。

4)運行結(jié)果截圖

7-1 一幫一 (15 分)
“一幫一學(xué)習(xí)小組”是中小學(xué)中常見的學(xué)習(xí)組織方式,老師把學(xué)習(xí)成績靠前的學(xué)生跟學(xué)習(xí)成績靠后的學(xué)生排在一組。本題就請你編寫程序幫助老師自動完成這個分配工作,即在得到全班學(xué)生的排名后,在當前尚未分組的學(xué)生中,將名次最靠前的學(xué)生與名次最靠后的異性學(xué)生分為一組。

輸入格式:
輸入第一行給出正偶數(shù)N(≤50),即全班學(xué)生的人數(shù)。此后N行,按照名次從高到低的順序給出每個學(xué)生的性別(0代表女生,1代表男生)和姓名(不超過8個英文字母的非空字符串),其間以1個空格分隔。這里保證本班男女比例是1:1,并且沒有并列名次。

輸出格式:
每行輸出一組兩個學(xué)生的姓名,其間以1個空格分隔。名次高的學(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

1)實驗代碼

#include<stdio.h> struct students {int gender;char name[9];int flag; }; int main(){struct students student [50];int i,n,j;scanf("%d",&n);for(i=0;i<n;i++){scanf("%d %s",&student[i].gender,student[i].name);}student[i].flag=0;for(i=0;i<n/2;i++){for(j=n-1;j>=i;j--){if(student[i].gender!=student[j].gender&&student[j].gender!=2){printf("%s %s\n",student[i].name,student[j].name);student[i].flag=1;student[j].gender=2;break;}}}return 0; }

2)設(shè)計思路

3)調(diào)試過程中遇到的問題

問題:if語句少寫了判斷兩者的性別,以及忘了標記已經(jīng)組隊了的。if語句中加上student[j].gender!=2,再標記student[j].gender=2.

4)運行結(jié)果截圖

7-2 考試座位號 (15 分)
每個 PAT 考生在參加考試時都會被分配兩個座位號,一個是試機座位,一個是考試座位。正常情況下,考生在入場時先得到試機座位號碼,入座進入試機狀態(tài)后,系統(tǒng)會顯示該考生的考試座位號碼,考試時考生需要換到考試座位就座。但有些考生遲到了,試機已經(jīng)結(jié)束,他們只能拿著領(lǐng)到的試機座位號碼求助于你,從后臺查出他們的考試座位號碼。

輸入格式:
輸入第一行給出一個正整數(shù) N(≤1000),隨后 N 行,每行給出一個考生的信息:準考證號 試機座位號 考試座位號。其中準考證號由 16 位數(shù)字組成,座位從 1 到 N 編號。輸入保證每個人的準考證號都不同,并且任何時候都不會把兩個人分配到同一個座位上。

考生信息之后,給出一個正整數(shù) M(≤N),隨后一行中給出 M 個待查詢的試機座位號碼,以空格分隔。

輸出格式:
對應(yīng)每個需要查詢的試機座位號碼,在一行中輸出對應(yīng)考生的準考證號和考試座位號碼,中間用 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() {int n,m,i,j,c;struct student stu[1000];scanf("%d", &n);for(i = 0; i < n; i++){scanf("%lld %d %d", &stu[i].num, &stu[i].a, &stu[i].b);}scanf("%d",&m);for(j = 0; j < m; j++){scanf("%d",&c);for(i = 0; i< n; i++){if(c == stu[i].a){printf("%lld %d\n", stu[i].num, stu[i].b);break;}}}return 0; }

2)設(shè)計思路

3)調(diào)試過程中遇到的問題

問題:定義變量和輸入寫錯了;把int num改為long int num;第十二行的輸入把&m的條件全刪除,在13行下加上一個scanf("%d",&m);在14行下加入scanf("%d",&c);以及把第18行的代碼刪除。

4)運行結(jié)果截圖

請大家查閱資料,思考問題中的三問:什么是遞歸函數(shù),它的優(yōu)點和缺點有哪些,如何歸納出遞歸式?
遞歸函數(shù)是一類從自然數(shù)到自然數(shù)的函數(shù)。優(yōu)點:代碼簡潔,能夠剪短代碼的行數(shù),使復(fù)雜的算法變的簡單。缺點:很容易出錯,使處理器超載運行,以及占用大量內(nèi)存。
遞歸式:http://blog.csdn.net/a130098300/article/details/7632227
(一)代換法:

實質(zhì)上就是數(shù)學(xué)歸納法,先對一個小的值做假設(shè),然后推測更大的值得正確性。由于是數(shù)學(xué)歸納法,那么我們就需要對值進行猜測?,F(xiàn)在,我們看下面這個例子:

我們先假設(shè)一個結(jié)論T(n) = O(lg(n - b)),并且假設(shè)對T(n / 2上取整)成立(這就是數(shù)學(xué)歸納法了),那么把T(n / 2上取整)用假設(shè)的結(jié)論進行代換,我們有T(n) <= lg((n - b)) / 2上取整)

<= lg((n - b) / 2 + 1) + 1 = lg(n - b + 2),對于任意的b >= 2,即滿足要求T(n) <= lg(n) = O(lgn)。證畢。

這是一個很簡單的例子,但是其中有些事情還是要交代的。

一個是結(jié)論的猜測不是一個容易的事情。另一個是在上面的例子中我沒有直接下結(jié)論說T(n) = O(lg(n)),而是減去了一個常數(shù)b,這是為什么呢?答案是:we can prove something stronger for a given value by assuming something stronger for smaller values.還有一點值得說明,請看下面這個例子:

這里出現(xiàn)了sqrt(n),我們采用變量代換的方法:令n = 2 ^ m,則上式變?yōu)門(2 ^ m) = 2T(2 ^ (m / 2) ),再設(shè)S(m) = T(2 ^ m),則得到S(m) = 2S(m / 2) + 1。我們先假設(shè)S(m) = m - b <= O(m),且對S(m / 2)成立,那么S(m) = 2 * (m - b) / 2 + 1 = m - b + 1,對于任意的b >= 1都有S(m) = O(m),然后回代有T(n) = T( 2 ^ m) = S(m) = O(m) = O(lgn)。

這里我們采用了變量代換的方法。如果假設(shè)時,感覺變量不明朗,那么這是一種很有效的方法。

(二)遞歸樹方法:

利用遞歸樹方法求算法復(fù)雜度我想最好的例子就是歸并排序了,這里我不想拿歸并排序做例子,而只是用書中一些更簡單形象的例子來說明:

根據(jù)上式我們建立遞歸式T(n) = 3T(n / 4) + cn^2,這里我們拋去上下界函數(shù)的影響(sloppiness that we can tolerate),并且把Theta(n ^ 2)用cn^2代替。下面建立遞歸樹模型:

在遞歸樹中,每一個結(jié)點都代表一個子代價,每層的代價是該層所有子代價的總和,總問題的代價就是所有層的代價總和。

所以,我們利用遞歸樹求解代價,需要知道什么呢,一個是每一層的代價,一個是層數(shù),就是這兩個。

這些,都需要我們用覺察的態(tài)度來發(fā)現(xiàn),而事實證明,這不是一件難事,很多情況下是有規(guī)律可循的。

我們且看上面這個例子,遞歸樹的構(gòu)造很簡單,當遞歸調(diào)用到邊界是,就達到了常量T(1),達到常量T(1)所用到的遞歸次數(shù)就是整個遞歸樹的深度,我們從圖中可以得到第i層的結(jié)點的代價為n / ( 4 ^ i ),當n / (4 ^ i) = 1即i = log4(n)時,遞歸到達了邊界,所以,整個遞歸樹的深度就是i = log4(n)。我們要求的總的代價是所有的總和,結(jié)果為O(n ^ 2)。計算過程我就不再累述了。但是,遞歸樹并不是都是這樣的滿的樹,也就是不是每一層的結(jié)點都是相同的結(jié)構(gòu),所以我們在構(gòu)造遞歸樹的時候要仔細看好這一點,才能保證在計算時不會出錯。

(三)主方法:

其實應(yīng)該叫做主定理方法,利用這個方法,我們只需要記住主定理的三種情況,并且在滿足一定的條件下,就可以速度解出遞歸式。主定理的三種情況不在這里給出,一定條件我只說一下我對于多項式大于(或小于)的理解,比如x和1.1x,那么x就是多項式小于1.1x,二者差了一個多項式(0.1x),而至于x與xlgx就不存在多項式大于(或小于)的關(guān)系。

學(xué)習(xí)感悟:
在這周編程中我感覺還好,可能是題目不算太難的結(jié)果吧,所以做的很輕松,不過在編程題最后一題中我的變量和輸入語句還是有點錯誤,所以我還是有很多知識點記得的不是很清楚,還是要努力的學(xué)習(xí)。

結(jié)對編程的過程及優(yōu)缺點:
這周因為編程題不難,所以我們在星期三晚自習(xí)的結(jié)對編程中就把題目差不多寫完了,我們在自習(xí)室中坐在一塊,一起交流自己從這道題中看到的問題以及自己的思路。

優(yōu)點:能夠更快的理解這道題的要求,以及可以學(xué)到很多自己沒想到的思路。
缺點:在一起交流的時間不夠。

轉(zhuǎn)載于:https://www.cnblogs.com/tzmad/p/10774528.html

總結(jié)

以上是生活随笔為你收集整理的第九周编程总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。