標籤:過程 姓名 覆蓋 blog i+1 需要 class 語句 images
一、PTA實驗作業題目1:6-4 結構體數組按總分排序1. 本題PTA提交列表
2. 設計思路
void calc 函數部分(計算每位同學成績總和) i=0; for i to n-1 總成績=三科成績總和 end;void sort 函數部分 (通過比較每位同學成績總和,對同學進行排序) 定義 i,j; 定義結構變數 temp for i=1 to n for j=0 to n-i 利用冒泡排序將同學的總分的從大到小排序 end;
3.代碼
4.本題調試過程碰到問題及PTA提交列表情況說明。
計算總和時直接用sum=sum+score[i],發現運行後總和數並沒有相加,是要用結構指標間接訪問結構變數,後來改為p+i)->sum=(p+i)->score[0]+(p+i)->score[1]+(p+i)->score[2]可以計算成績總和;開始時是用選擇排序法,但發現發現過於複雜,後來換用冒泡排序,簡單
題目2:7-5 有理數比較1. 本題PTA提交列表
2. 設計思路
定義結構變數; int flag; char ch; 輸入這兩個有理數number1,number2 flag=number1.fenzi*number2.fenmu-number2.fenzi*number1.fenmu 判斷flag的大小,從而確定ch的值 如若flag>0 ch=‘>‘; 若flag<0 ch=‘<‘ 否則 ch=‘=‘ 輸出兩個有理數比較後的結果 end
3.代碼
4.本題調試過程碰到問題及PTA提交列表情況說明。
開始時直接用兩有理數相減,但發現分子,分母都是整型範圍內整數,相除後不會保留小數;後來定義結構變數,分別定義分子,分母和分號;
再根據兩有理數分子,分母的關係,判斷ch的值就可以了
題目3:7-6 通訊錄的錄入與顯示1. 本題PTA提交列表
2. 設計思路
定義結構變數 定義結構變數表 輸入n for i=0 to n-1 輸入姓名 生日 性別 固話 手機 輸入k for i=0 to k-1 輸入尋找編號num[i] 判斷num[i]是否在0~10之間,若在,則輸出相應的人員資訊 若不在,則輸出Not Found
3.代碼
4.本題調試過程碰到問題及PTA提交列表情況說明。
這題部分正確的原因是輸出錯誤,與原題要求的輸出符號錯了,其他沒什麼
二、本周題目集的PTA最後排名。三、閱讀代碼四、本周學習結1.總結本周學習內容。結構體 共同體 枚舉體結構體:概念:結構體時一種構造資料類型用途:把不同類型的資料群組合成一個整體記憶體:各成員所佔記憶體空間的累加關鍵詞:struct
一.結構體的聲明與定義變數的方法一共有三種:
1.常規定義:
struct AA
{
int a;
int b;
}; //注意大括弧後面有分號
變數定義:struct 機構體名 結構體變數名表
如: struct AA aa,bb;(前面的struct不能掉)
成員調用:aa.a; aa.b;
2.尾部定義。
struct CC
{
int a;
int b;
}aa,bb;
此時aa,bb就是已經定義好的CC類型的變數了,這種情況在聲明時struct前就一定不能加typedef,如果加上了,aa,bb就成了和CC一樣的結構體類型了,而不是變數了。
3.無名結構體
struct CC
{
int a;
int b;
}vip1,vip2;
此種情況除了vip1,vip2,不能再在其他地方定義新的變數,即定義了幾個就只能用幾個。
不能在結構體內部直接給成員賦值:
#include<stdio.h> //直接帶變數名Huqinwei struct stuff{ // char job[20] = "Programmer"; // char job[]; // int age = 27; // float height = 185; }Huqinwei; 12345678https://yq.aliyun.com/articles/104171
共用體:
構造資料類型,也叫聯合體。
用途: 使幾個不同類型的資料共佔一段記憶體(相互覆蓋)
關鍵詞:union特點:
1共用體變數任何時候只有一個變數存在。
2,共用體變數定義分配記憶體,長度=最長成員所在位元組數
3,定義共用體變數的方式和結構體一樣有三種:常規,尾部,無名。
4,當給一個成員重複賦值時或對多個成員賦值時,只承認最後一次的賦值。
枚舉體關鍵詞:enum
用途:列舉所有選項
舉例:day = {Sunday,Monday,Tuesday,Wednesday,Thusday,Friday,Saturday};
結尾有分號,如果個枚舉常量沒有賦值,則預設值為其下標(參考一維數組),比如此時Tuesday = 2
遞迴函式的原理
遞迴(recursion)就是子程式(或函數)直接調用自己或通過一系列調用語句間接調用自己,是一種描述問題和解決問題的基本方法。
遞迴通常用來解決結構自相似的問題。所謂結構自相似,是指構成原問題的子問題與原問題在結構上相似,可以用類似的方法解決。具體地,整個問題的解決,可以分為兩部分:第一部分是一些特殊情況,有直接的解法;第二部分與原問題相似,但比原問題的規模小。實際上,遞迴是把一個不能或不好解決的大問題轉化為一個或幾個小問題,再把這些小問題進一步分解成更小的問題,直至每個小問題都可以直接解決。因此,遞迴有兩個基本要素:(1)邊界條件:確定遞迴到何時終止,也稱為遞迴出口。(2)遞迴模式:大問題是如何分解為小問題的,也稱為遞迴體。遞迴函式只有具備了這兩個要素,才能在有限次計算後得出結果
在遞迴函式中,調用函數和被調用函數是同一個函數,需要注意的是遞迴函式的調用層次,如果把調用遞迴函式的主函數稱為第0層,進入函數後,首次遞迴調用自身稱為第1層調用;從第i層遞迴調用自身稱為第i+1層。反之,退出第i+1層調用應該返回第i層。
遞迴函式的內部執行過程
一個遞迴函式的調用過程類似於多個函數的嵌套的調用,只不過調用函數和被調用函數是同一個函數。為了保證遞迴函式的正確執行,系統需設立一個工作棧。具體地說,遞迴調用的內部執行過程如下:(1)運動開始時,首先為遞迴調用建立一個工作棧,其結構包括值參、局部變數和返回地址;(2)每次執行遞迴調用之前,把遞迴函式的值參和局部變數的當前值以及調用後的返回地址壓棧;(3)每次遞迴調用結束後,將棧頂元素出棧,使相應的值參和局部變數恢複為調用前的值,然後轉向返回地址指定的位置繼續執行。
2.羅列本周一些錯題
1.輸出應是s.score,應加上結構變數名 2.定義結構體指標,struct student *; 3.分數加一,應加上變數名,p->score[i]或p.score[i] 4.返回的是學生的所有相關資訊,不止是成績
1.定義結構體變數 struct worker s[10] 2.name[20]是地址,不用加&,其他的需加& 即&s[i].num, s[i].name ,&s[i].jbpay,&s[i]zwpay 3,max=i 4.min=i
fun()函數定義了一個數及數組,但D選項中fun(int n ,int a)不可以這麼寫,這樣a是一個整型數,並不是一個數組
C語言部落格作業--結構體