結構體

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

1. 本題PTA提交列表:

2. 設計思路:

struct student                  
{
int num;
char name[15];
float score[3];
float sum;
};//該結構體表示學生的學號,姓名,成績和成績總和
call void calc(struct student *p,int n)//進入函數
int  i,  j
for  i ←0 to n
  (p+i)->sum←0; 
      i++;
for  i←0 to n   i++,p++;
{
  for  j←0 to 3
      p->sum←p->sum+p->score[j] ;
           j++;   
}    
end  for
end
call void sort(struct student *p,int n)//進入函數
int i,k,index;
struct student temp;//定義新的結構體
for i←0 to n-1 , i++
{
  index←i;
  for k←i+1 to n , k++
        if((p+k)->sum>(p+index)->sum)index←k;
    end  for
  temp←*(p+i);
 *(p+i)←*(p+index);
 *(p+index)←temp;
}
  end for
end

3.代碼截圖:

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

  • 1.一開始不會使用指針訪問結構體,後來看書知道了指針訪問結構有多種表示方式,如(*p).num,或p->num,結構數組也有多種表示方式,如p.num[i]或p[i].num[i];
  • 2.另外一個錯誤是把temp=(p+i); (p+i)=(p+index); (p+index)=temp;中的i寫成k,後來發現這樣寫只會讓它本身和本身交換,要多注意;編程

    7-1 計算職工工資

    1. 本題PTA提交列表:

    2. 設計思路:

struct staff{
      char name[10];
      float truth;
      float real;
      float imag;
      float pay;};//定義員工姓名 基本工資 浮動工資 支出
   int n,i;
  struct staff s1[1500];
  輸入n;
for i←0 to n ,i++
   輸入員工姓名,浮動工資 ,支出
      end for
for i←0 to n,i++
   s1[i].truth ←s1[i].real+s1[i].imag-s1[i].pay;//計算基本工資
      end for 
for i←0 to n,i++
   輸出員工姓名和基本工資

3.代碼截圖:

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

  • 1.起名有問題,一開始把truth命名爲true,到DVE上運行發現原來它是庫函數;
  • 2.定義結構體後沒加分號;
  • 3.在PTA過得去,但在DVE 運行不了,後來發現是由於scanf("%s %f %f %f\n",s1[i].name,&s1[i].real,&s1[i].imag,&s1[i].pay);中的\n影響,在同窗建議下把\n刪除,將for後加大括號,在scanf後加上getchar(),大括號把getchar()括起來就解決了這一問題;
    數組

    7-2 時間換算:

    1. 本題PTA提交列表:

    2. 設計思路:

struct time{
  int cloc;
  int minute;
  int second;
};//定義時,分,秒
int i,n;
 struct time t1;
輸入時分秒和要加的秒數n
getchar();//吸取回車符
if(n!=0){
for i=1 to n,i自增
    t1.second自增;
    if(t1.second==60)
         t1.minute自增;
         t1.second=t1.second-60;
              if(t1.minute==60)
                  t1.cloc自增;//分鐘等於60,時鐘加1
                  t1.minute=t1.minute-60;
                       if(t1.cloc==24)
                           t1.cloc=t1.cloc-24;
}
輸出加法運算事後的時分秒

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

  • 1.忘記考慮時針滿24時要歸0;沒有加條件n!=0;改過來就對了;
  • 2.發現getchar():很好用,可用於吸取多餘的回車符;編程語言

    2、截圖本週題目集的PTA最後排名。(2分)

    3、閱讀代碼:


    這是宵瑩6-3題結構體數組中查找指定編號人員的代碼,此代碼用flag判斷是否返回員工的信息,當遇到一個員工的編號和輸入的編號不一樣時,當即讀取下一個員工的編號,flag的值也重置爲1;直到讀取最後一個員工編號仍不符合輸入編號時,flag=0,由於題目輸入的員工編號已知,能夠在編號中找到,因此能夠不返回空串的值,若找到編號,則將此員工的信息複製到另外一個結構體上,返回那個結構體;

    這是個人6-3代碼,我是採起直接用指針指向原來結構體,用strcmp函數比較std->num和num,若是找到則返回std(由於std自己自增),不然令 std->num[0]=0,再返回*std;個人思路和不少同窗思路類似,而宵瑩的思路比較獨特,不是採起調用strcmp直接比較兩個字符串,而是用嵌套循環和flag來比較,一遇到不一樣字符即進入下個字符串判斷,flag的值也在相應進行更新,最後來判斷返回何值,值得學習!
    函數

這是林嶽7-6題 通信錄的錄入與顯示的代碼,我從中學會了循環k次的另外一種寫法,在尋找編號時我是用循環來查找,代碼以下:學習

而林嶽的代碼是直接用條件判斷如:if(i>=n||i<0)printf("Not Found\n");即查找不到,這樣會更簡潔明瞭,不用一次次執行循環去判斷,值得學習!設計

4、本週學習總結(1分)

1.總結本週學習內容。

結構體、共用體、枚舉這種構造數據類型特色

  • 1.結構體和數組同樣都是構造型數據類型,和數組不一樣的是,結構體能夠處理不一樣類型的數據。以下定義一個學生信息的結構體:
  • 2.共用體是一種多變量共享存儲空間的構造類型,它容許幾種不一樣的變量共用同一存儲空間。共用體和結構體的區別:3d

    1.結構體每一位成員都用來表示一種具體事務的屬性,共用體成員能夠表示多種屬性(同一存儲空間能夠存儲不一樣類型的數據)。
    
     2.結構體總空間大小,等於各成員總長度,共用體空間等於最大成員佔據的空間。
    
     3.共用體不能賦初值。

遞歸函數原理:

  • 1.遞歸函數的實質就是不斷調用本身自己,使問題獲得簡化,應抓住兩個關鍵點:遞歸出口和遞歸式子;
  • 2.在編程語言中,把直接或間接地調用自身的函數稱爲遞歸函數。函數的構建一般須要一個函數或者一個過程來完成。

2.羅列本週一些錯題。
指針

  • 1.課堂派遞歸部分第二題,弄不清楚遞歸的流程;
  • 2.正解爲:n<0;n= =0| |n= =1; f=fac(n-1)*n;
  • 3.這裏就是所謂的本身調用本身 fac(n-1)是調用本身,n是爲了計算f的值。
    咱們假設你在主函數裏面輸入3,即y=fac(3);
    那麼fac函數執行以下:
    n=3時進入函數,f=fac(2)
    3;此時程序會進入fac(2),傳入的參數n變成了2,
    可是並不執行return(f),return(f)要等fac(2)執行完成以後才能執行。
    fac(2)中f=fac(2-1)2,即f=fac(1)2,此時程序會進入fac(1),傳入的參數n變成了1,
    可是並不執行return(f),return(f)要等fac(1)執行完成以後才能執行。
    fac(1)中,符合 if(n= =0| |n= =1),因此f=1.
    fac(1)將結果f return給fac(2),fac(2)中的f=12=2; fac(2)再將本身的f return給fac(3),fac(3)中的f=23=6; 這樣y=fac(3)=6.;
相關文章
相關標籤/搜索