1. 程式人生 > >C語言博客作業--結構體

C語言博客作業--結構體

自增 規律 統一 body 語句 學生 http clas fin

一、PTA實驗作業

題目1:按等級統計學生成績

1. 本題PTA提交列表

技術分享圖片

2. 設計思路

for i=0 to i=n
    如果分數大於等於85,就讓grade為A
    如果分數大於等於75,就讓grade為B
    如果分數大於等於60,就讓grade為C
    如果分數小於60,就讓grade為D,count++  count用於統計不合格人數
end i
返回count

3.代碼截圖

技術分享圖片

4.本題調試過程碰到問題及PTA提交列表情況說明

  • 本題沒錯

題目2:6-4 結構體數組按總分排序

1. 本題PTA提交列表

技術分享圖片

2. 設計思路

calc函數
定義i
for i=0 to i=n
    將三科總分存入sum
end
sort函數
定義struct student 類型的temp
冒泡排序:for i=0 to i=n-1
                    for j=0 to j=n-i-1
                        如果前一個的總分小於後一個交換兩個結構變量
                    end
                end

3.代碼截圖

技術分享圖片

4.本題調試過程碰到問題及PTA提交列表情況說明

  • 本題沒錯

題目3:7-2 時間換算

1. 本題PTA提交列表

技術分享圖片

2. 設計思路

struct time{
    int hour;
    int minute;
    int second;
}now     //用來存放時間的時分秒
定義pass存放過去時間
輸入現在時間
輸入過去時間
將過去時間加在now.second
while(now.second>=60)
    now.minute++;
    now.second-60;    //表示過去一分鐘
while(now.minute>=60)
    同上     //表示過去一小時
while(now.hour>=24)
    now.hour-=24;     //過去一天

3.代碼截圖

技術分享圖片

4.本題調試過程碰到問題及PTA提交列表情況說明

  • 答案錯誤:時間格式應該是59後00我卻設置為59後60導致錯誤

二、截圖本周題目集的PTA最後排名

技術分享圖片

三、閱讀代碼

1.strcat函數的源代碼

char * __cdecl strcat (
        char * dst,
        const char * src
        )
{
        char * cp = dst;

        while( *cp )
                cp++;                   /* find end of dst */
       /*不能寫成while(*cp++)/ 因為這樣的話為*cp為0時還會+1,導致cp執向了\0的後一個。


        while( *cp++ = *src++ ) ;       /* Copy src to end of dst */

        return( dst );                  /* return dst */

}

他的做法非常的精簡,特別是while( cp++ = src++ )這一句要是我肯定不會把賦值語句放在while裏面,雖然這樣也是可行的,而且更精簡,但它的做法也是可行的
不失為一個好做法

2.strcmp函數

int __cdecl strcmp (
        const char * src,
        const char * dst
        )
{
        int ret = 0 ;

        while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)
                ++src, ++dst;

        if ( ret < 0 )
                ret = -1 ;
        else if ( ret > 0 )
                ret = 1 ;

        return( ret );
}

我覺得這個代碼就是好在! (ret = (unsigned char )src - (unsigned char )dst) && dst這個循環條件設置的很精練,定義了一個ret變量存放兩數組比較的結果,
並且用&&
dst這個條件保證會比較到dst的最後一個字符或兩字符串不相等,這樣大大減少了代碼量,還用了const來保證數組的值不會被改變,在不需要改變數組的
情況下這樣定義可以很好的避免意外

四、本周學習總結

1.總結本周學習內容

  • struct結構體是一種自定義型變量,可以用於存儲一個變量的個個屬性,使他們整體化
    • 結構的定義:單獨定義,混合定義,無類型名定義
    • 結構的使用:一般可以用.運算符引用結構中的變量,對於指針來說還可以用->運算符
    • 結構的整體賦值可以一次對多個變量進行操作,但在結構成員數量較多時運行效率很低
  • union共用體和結構體非常相似,只是裏面的變量會公用相同內存單元,必要的時候可以用它減少內存的使用
  • 枚舉類型enum 類型名{常量1,常量2....常量n} 變量名
    • 枚舉元素不是變量,而是常數,因此枚舉元素又稱為枚舉常量。因為是常量,所以不能對枚舉元素進行賦值。
    • 枚舉元素作為常量,它們是有值的,C 語言在編譯時按定義的順序使它們的值為,1,2,…。
  • 遞歸實際上是把問題簡化為形式相同,但較簡單的問題,程序書寫時只給出統一形式,到運算時再展開,每經過一次遞歸,問題就被簡化一次
  • 遞歸的關鍵在於歸納出遞歸式子,確定出口,寫程序時只要給出運算規律,對於具體過程不要深究

2.羅列本周一些錯題。

技術分享圖片A選項會給出一整串字符串,只有C會輸出M
技術分享圖片根據運算符優先級可以知道它最後是對地址進行自增所以錯誤
技術分享圖片它這裏Shangxi和zhangsan比較時要註意z是小寫
技術分享圖片這一題要註意先是函數的嵌套調用再是輸出

C語言博客作業--結構體