標籤:報錯 換算 自身 style 生日 另一個 code 注意 優先執行
一、PTA實驗作業題目1.結構體數組中尋找指定編號人員1. 本題PTA提交列表
2. 設計思路
struct student{ char num[10]; int year,month,day ;};//該結構體表示人員的編號,出生年、月、日 定義i為迴圈變數,定義結構變數p for i=0 to N-1 if std[i]中編號等於num 把std[i]賦值給p;跳出迴圈; end for 返回p ;
3.代碼
4.本題調試過程碰到問題及PTA提交列表情況說明
①初步代碼及輸出答案。
②不管怎麼改,進入不了if語句。發現題目頭中給出#include<string.h>,考慮到應該使用函數來實現。
③嘗試用比較函數strcmp來判斷編號是否相等,改完後發現答案正確。
題目2.時間換算1. 本題PTA提交列表
2. 設計思路
struct time{ int hour,minute,second;};//該結構體表示時、分、秒 定義n表示過了n秒,定義結構變數times 輸入起始時間和n//計算新的時間 秒數=秒數+n; 分鐘=分鐘+秒數/60; 小時=小時+分鐘/60;//調整新時間的格式 秒數=秒數%60; 分鐘=分鐘%60; 小時=小時%24; 輸出過n秒後的新時間
3.代碼
4.本題調試過程碰到問題及PTA提交列表情況說明
①本題初步代碼及輸出結果。
②計算新時間時沒有加上原來的時間,導致結果錯誤。改正後正確。
題目3.通訊錄的錄入與顯示1. 本題PTA提交列表
2. 設計思路
struct information{ char name[10];//姓名 int year,month,day;//出生年、月、日 char sex[2];//性別 char telephone[20],mobilephone[20];//telephone固定電話,mobilephone行動電話 }; 定義變數n表示通訊錄條數,i為迴圈變數,k為查詢次數,number為查詢編號; 輸入n; 定義結構數組num[n]; for i=0 to n-1 輸入姓名 生日 性別 固話 手機 end for 輸入查詢次數k; for i=0 to k-1 輸入查詢編號number; if 查詢的編號有效 輸出姓名 固話 手機 性別 生日 else 輸出Not Found end for
3.代碼
4.本題調試過程碰到問題及PTA提交列表情況說明
①初步代碼及結果,多種錯誤。
②調試發現性別,電話錯誤。
③把性別改為數組存放後部分正確。
④調試發現,判斷編號有效後,輸出不應該是第 i 條通訊錄資訊,應該是要查詢的第number條資訊。
⑤修改後代碼及結果如下。
⑥不應該改變迴圈變數的值,直接在輸出中改成輸出第number 組。並且在輸出中要用到%02d控制出生日期格式。
二、本周題目集的PTA最後排名。
PTA排名
PTA提交列表
三、閱讀代碼
四、本周學習總結1.總結本周學習內容。1.結構體、共用體、枚舉這種構造資料類型特點。1.1結構體
struct 結構名{ 類型名 結構成員名1; 類型名 結構成員名2; … 類型名 結構成員名n;}變數列表;
- 如果要聲明變數結構,可以在結構定義時,在結束的分號之前加上這些變數的名字,也可以在定義結構之後使用
struct 結構名 變數列表;語句聲明結構變數。
- struct是定義結構類型的關鍵字,結構名是一個合法的C標識符,結構的定義以分號結束。
- 嵌套定義的結構變數中,每個成員按從左至右,從外到內的方式引用。
- 結構成員成員運算子的優先順序屬最進階別,所以一般情況下都是優先執行,即和一般運算子混合運算時,結構成員運算子優先。
- 只有相同結構類型的變數之間才可以直接賦值。不能在結構體內部直接給成員賦值。
例:s2=s1;等效於
s2.num=s1.sum;strcpy(s2.name,s1.name);//數組s2.math=s1.math;s2.english=s1.english;s2.computer=s1.computer;s2.average=s1.average;
1.2共用體(聯合體)
union 聯合名{ 成員聲明 成員聲明 …}變數列表;
- 如果要聲明聯合變數,可以在聯合定義時,在結束的分號之前加上這些變數的名字,也可以在定義聯合之後使用
union 聯合名 變數列表;語句聲明聯合變數。
- 共用體變數中起作用的成員是最後一次存放的成員,在存入一個新成員後,原有成員就失去作用。即當給一個成員重複賦值時或對多個成員賦值時,只承認最後一次的賦值。
- 共用體變數的地址和它的各成員的地址都是同一地址。
- 不能對共用體變數名賦值,也不能企圖引用變數名來得到一個值。
- 共用體類型可以出現在結構體類型的定義中,也可以定義共用體數組。反之,結構體也可以出現在共用體類型的定義中,數組也可以作為共用體的成員。
- 共用體變數的初始化:
union data a=b; //把共用體變數初始化為另一個共用體
union data a={123}; //初始化共用體為第一個成員
union data a={.ch=‘a‘}; //指定初始化項目
1.3枚舉
enum 枚舉名{枚舉值1,枚舉值2,…}變數列表;
- 如果要聲明一個枚舉變數(假定該枚舉類型已經在前面定義過),可以採用
enum 枚舉名 變數列表的方式。
- 每一個枚舉值應該是一個合法的標識符,或是一個標識符後跟上等號,再加上一個常量運算式。
- 編譯器將從0開始逐個給枚舉值賦值。如果某個枚舉值標識符後面跟有等號和常量運算式,那麼編譯器就將該常量運算式的值作為該枚舉的值。該枚舉值後面的枚舉值從這個枚舉值開始逐個加1,重新編號。注意:枚舉值都不能超過它的基礎類型範圍,否則會報錯。
例:b的值為2,d的值為2.
public enum Number{a=1,b,c=1,d} ;
- 編譯器將枚舉值當作常量。
每個枚舉成員的常數值必須在該枚舉的基礎類型的範圍之內。
例:產生編譯時間錯誤,原因是常數值 -1、-2 和 –3 不在基礎整型 uint 的範圍內。
public enum TimeofDay:uint{Morning=-3,Afternoon=-2,Evening=-1} ;
1.4其他
- 結構體和聯合體可以含有多種資料類型,枚舉只能含有一種基礎資料型別 (Elementary Data Type),而且為整型。
- 結構體和聯合體所佔的空間不同,結構體按照對其方式每個資料類型都是獨立的資料空間,整個結構體所佔的空間基本上可以等於或者大於每個獨立資料空間的和。而聯合體所有資料類型都共用最大的那個資料類型的空間,所佔的空間為最大的那個資料類型所佔的空間。
2.遞迴函式原理
- 遞迴方法的兩個要點:
遞迴出口:遞迴結束條件,到何時不再遞迴調用下去。
遞迴調用式子:遞迴的運算式。如fact(n)=n*fact(n-1)
- 尾部遞迴:指遞迴函式在調用自身後直接傳回其值,而不對其再加運算,無需返回調用。尾部遞迴與迴圈是等價的。
- 優點:解決複雜問題,代碼更直觀。
2.羅列本周一些錯題。
- 預習的時候對一些知識點還不熟悉。①函數調用時不知道填什麼就隨便填了float。②返回的應該是地址。
C語言第十次部落格作業---結構體