C語言部落格作業--結構體

來源:互聯網
上載者:User

標籤:過程   解法   特殊情況   時間換算   遞迴調用   結構   ring   參考   手機號碼   

一、PTA實驗作業題目1:結構體數組中尋找指定編號人員1. 本題PTA提交列表

2. 設計思路
struct student fun(struct student  *std, char  *num){    定義struct student p用來儲存返回人員的資料    定義變數i,j,flag用來控制迴圈for i=0 to N-1{    flag賦值為1    for j=0 to 5    {        if std->num[j]與num[j]不相等            那麼讓flag變成0,std++,停止內迴圈    }    經過上面的迴圈如果 flag還是為1,說明制定編號人員存在,立即停止外迴圈}    將*std的資料複製到p上    if flag不等於0         返回 p}
3.代碼

4.本題調試過程碰到問題及PTA提交列表情況說明。直接讓p賦上std的資料,編譯錯誤,後來才發現是忘記加星號(*)。改用一個一個資料複製的方法賦值。題目2:時間換算1. 本題PTA提交列表

2. 設計思路
struct Time{    int hour;    int min;    int sec;}time;//該結構體表示時間的小時數,分鐘數,秒數定義變數n表示增加的秒數;輸入時間和秒數;給原秒數做加法運算time.sec+n;if time.sec不小於60{    分鐘數增加,秒數減去60    if time.min不小於60{        小時數增加,分鐘數減去60        if time.hour不小於24            小時數變為0    }}if time.hour<10輸出0               /*如果時間不足兩位要補0*/輸出 小時數:if time.min<10輸出0輸出 分鐘數:if time.sec<10輸出0輸出 秒數
3.代碼


4.本題調試過程碰到問題及PTA提交列表情況說明。這道題問題不大,思路清楚,就是最後輸出時如果時間是個位元前面要輸出0,我的處理方法感覺比較麻煩,要進行三次判斷。題目3:通訊錄的錄入與顯示1. 本題PTA提交列表

2. 設計思路
struct communication{    char name[11];    char birthday[11];    char sex;    char tel[17];    char mob[17];};//該結構表示通訊錄人員的姓名,生日,性別,固定和手機號碼定義變數i,j來控制迴圈定義N,k表示通訊錄人員總數和要查詢的編號個數定義通訊錄人員數組struct communication person[N]for i=0 to N-1錄入成員資訊輸入要查詢的編號個數k定義數組count[k]用來儲存要查詢的編號for j=0 to k-1錄入編號for j=0 to k-1    if  0<=count[j]<N        輸出該編號人員的資訊    else        輸出"Not Found"
3.代碼

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

仔細檢查自己思路沒問題,後來發現電話號碼不超過15位但還要算上加號,所以存放號碼的數組大小至少為17,否則會溢出。二、本周題目集的PTA最後排名。

三、閱讀代碼1.時間換算:本題要求編寫程式,以hh:mm:ss的格式輸出某給定時間再過n秒後的時間值(超過23:59:59就從0點開始計時)。
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>int all[10]={0},i=0;void tosex(int n) //轉換為60進位{    if(n>59) tosex(n/60);    all[i]=n%60;    i++;    return 0;//原代碼有return 0,如果要在dev上測試,需要刪除}int main(){    int h,m,s,n,stamp,j;    scanf("%d:%d:%d\n%d",&h,&m,&s,&n);    stamp=s+m*60+h*3600+n; //時間戳記    tosex(stamp);    all[i-3]=all[i-3]%24;   //小時是24進位的    for(j=i-3;j!=i;j++)    {        if(all[j]<10) printf("0");        printf("%d",all[j]);        if(j<i-1) printf(":");    }    return 0;}
這是本周PTA的一道題,我們使用結構體來做,然而上面的代碼採用了遞迴的做法,方法更加巧妙。先算出總的秒數,利用遞迴函式和數組all來計算儲存換算後的時間,最後逆序輸出。2.角穀定理:輸入一個自然數,若為偶數,則把它除以2,若為奇數,則把它乘以3加1。經過如此有限次運算後,總可以得到自然數值1。求經過多少次可得到自然數1。
#include<stdio.h>//定義遞迴函式,參數為數字和步驟數int jg(int n,int step){    if(n!=1)    {           if(n%2 == 0)        {            printf("%d ", n);            n = n / 2;          }        else if (n % 2 == 1)        {            printf("%d ", n);            n = 3 * n + 1;        }        return jg(n, step + 1);    }    else    {        printf("%d ", n);        step++;    }    printf("\nSTEP=%d\n",step);//輸出步驟數}//主函數int main(){    int s=0;    int num;    printf("請輸入一個數:");    scanf("%d",&num);//輸入數字    jg(num,s);    return 0;}
可以利用遞迴解決一些複雜的數學問題,找出遞迴出口和遞迴式子就可以完成,可以試著挑戰一些題目,主要是要發現其中的共同規律。四、本周學習總結1.總結本周學習內容。嵌套函數(1)在一個函數中再調用其他函數,可以使問題解決過程局部化,避免功能之間的相互幹擾。(2)對於一個具體問題設計方法的原則一般如下:(i)自頂向下(ii)逐步求精(iii)函數實現(3)在設計函數時應注意:(i)限制函數的長度(ii)避免函數功能間的重複(iii)減少全域變數的使用(4)遞迴函式(i)遞迴函式即自己調用自己的函數(ii)遞迴函式的兩個要點:遞迴出口和遞迴式子(iii)注意運算式子不能這樣寫:fact(n)=n*fact(n-1);結構體、共用體、枚舉這種構造資料類型特點· 結構體的特點(i)結構體和數組一樣都是構造型資料類型,和數組不一樣的是,結構體可以處理不一樣類型的資料,但是數組中的元素必須是同一資料類型(ii)結構體變數所佔的記憶體長度為所有成員所佔記憶體的長度之和(iii)結構體數組每個元素都是一個結構體類型的資料(定義資料時要注意)· 共用體的特點(i)共用體變數所佔的記憶體長度等於最長的成員的長度(ii)同一段記憶體可以存放幾種不同類型的成員,但是每一瞬間,只能存放一種,其他成員都不起作用(iii)共用體變數中起作用的成員是最後一次存放的成員(iv)共用體變數的地址和其成員地址都是同一地址,&a, &a.i都一樣(v)不能對共用體變數名賦值,不能引用共用體變數名來得到一個值,不能在定義共用體變數時對它進行初始化(vi)不能將共用體變數作為函數參數,不能使函數返回共用體變數,但可以使用指向共用體變數的指標(vii)共用體使用了記憶體覆蓋技術,同一時刻只能儲存一個成員的值,如果對新的成員賦值,就會把原來成員的值覆蓋掉。· 枚舉的特點(i) 枚舉類型是指變數的值可以全部列出,定義1個枚舉變數後,變數的值確定在定義之中。(ii)枚舉和結構體、共用體的區別在於,枚舉元素是常量,只可以在定義階段賦值。(iii)枚舉定義的量屬於全域常量,在其他地方不能再有與之重名的量。(iv)變數的值只限於列舉出來的值的範圍內遞迴函式原理(i)遞迴通常用來解決結構自相似的問題。所謂結構自相似,是指構成原問題的子問題與原問題在結構上相似,可以用類似的方法解決。具體地,整個問題的解決,可以分為兩部分:第一部分是一些特殊情況,有直接的解法;第二部分與原問題相似,但比原問題的規模小。實際上,遞迴是把一個不能或不好解決的大問題轉化為一個或幾個小問題,再把這些小問題進一步分解成更小的問題,直至每個小問題都可以直接解決。(ii)遞迴函式的內部執行過程
一個遞迴函式的調用過程類似於多個函數的嵌套的調用,只不過調用函數和被調用函數是同一個函數。為了保證遞迴函式的正確執行,系統需設立一個工作棧。具體地說,遞迴調用的內部執行過程如下:
    (1)運動開始時,首先為遞迴調用建立一個工作棧,其結構包括值參、局部變數和返回地址;    (2)每次執行遞迴調用之前,把遞迴函式的值參和局部變數的當前值以及調用後的返回地址壓棧;    (3)每次遞迴調用結束後,將棧頂元素出棧,使相應的值參和局部變數恢複為調用前的值,然後轉向返回地址指定的位置繼續執行。 

(參考自遞迴函式工作原理)

2.羅列本周一些錯題。課堂派C語言複習作業--結構體(1)


輸入資料時,要在前面加上&。(2)


定義函數時要根據函數的作用是什麼來定義類型。C語言預習作業--函數嵌套調用(1)

函數調用數組時應當用指標或數組來調用,a是整型變數,不能用來調用數組。

C語言部落格作業--結構體

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.