簡單學C——第五天

結構體數組

  首先明確,結構體是一種構造的數據類型,是一種由多個數據類型如 int,char,double,數組或者結構體......組成的類型,如今告訴你們如何定義一個結構體。在定義int整型變量時,你們確定都知道 int a;   即定義了一個int 型變量,系統會自動分配 存int這麼大的空間,可是對於結構體而言,它是由許多個不肯定的類型組成的,因此在定義它的時候須要指明它是由哪些數據類型組成的.定義格式有多種,此處只說一種較爲簡單的,定義格式以下.函數

struct 名字
{
   由哪些數據類型組成
};//注意末尾的分號必定要有

 

例如:我要定義一個學生,學生須要值得注意的屬性都有什麼呢? 假設須要統計這名學生的 1學號,2姓名,3性別,4班級,5電話,6期末成績,此時爲了簡潔且處理方便,就須要用到結構體spa

struct student //結構體名
{
   long long  number,tel; // 學號和電話
   int score; //成績
   char name[20],sex[4],clas[20]; //姓名,性別和班級
};

如上,就成功定義了一個關於學生信息的結構體,下面實現具體的輸入輸出操做code

#include<stdio.h>
struct student { long long  number,tel; // 學號和電話
    int score; //成績
   char name[20],sex[4],clas[20]; //姓名,性別和班級
}; int main() { struct student tiantian; //聲明瞭一個名爲tiantian的變量,聲明能夠與定義同時進行 //如今能夠輸入
    scanf("%lld%s%s%s%lld%d",&tiantian.number,tiantian.name,tiantian.sex,tiantian.clas,&tiantian.tel,&tiantian.score); //輸出
    printf("%lld %s %s %s %lld %d",tiantian.number,tiantian.name,tiantian.sex,tiantian.clas,tiantian.tel,tiantian.score); return 0; }

運行結果:blog

 

或許在看了上面的以後,你會想,這也太麻煩了吧,我隨便定義6個獨立的變量,把它輸入再輸出出來,這樣效果是同樣的,並且代碼也會簡潔不少,不用在用每一個變量時都再前面加上聲明結構體時聲明的變量。對於上面這個這樣想固然沒錯,不過我如今要說,請統計一下全班全部的人他們各自的  1學號,2姓名,3性別,4班級,5電話,6期末成績,這時就能體會到結構體的做用之大了,具體看下面的代碼。io

 

#include<stdio.h>
struct student //結構體名,定義
{
    long long  number,tel; // 學號和電話
    int score; //成績
   char name[20],sex[4],clas[20]; //姓名,性別和班級
};

int main()
{
     //假設此班的學生低於100名,聲明瞭一個名爲stu的數組變量,
    //數組中的每個元素均可以存放下一個學生的六個信息
    struct student stu[100];
    int i;
    //輸入,,用循環,j假設有續名學生
    for(i=0;i<5;i++)
    scanf("%lld%s%s%s%lld%d",&stu[i].number,stu[i].name,stu[i].sex,stu[i].clas,&stu[i].tel,&stu[i].score);
    //輸出
    for(i=0;i<5;i++)
    printf("%lld %s %s %s %lld %d\n",stu[i].number,stu[i].name,stu[i].sex,stu[i].clas,stu[i].tel,stu[i].score);
    return 0;
}

運行結果:class

 

觀察上面的結果,輸入了五組數據,按下回車,輸出存儲在數組中的結果,每一個學生一行,每一個學生的信息之間空一格。當數字較小的時候或許還看不出優點,但是若是當記錄的學生數據達到上千組,無疑,用結構體記錄學生數據是較好的方案。變量

 

好比我要在上述結構體中再添加一個信息,學生的出生年月日,此時應該怎麼作呢? date

能夠用到結構體的嵌套,在c語言中,許多的東西都是能夠嵌套的。修改上述結構體的定義可得:循環

#include<stdio.h>
struct date //表示日期的結構體
{
    int year,month,day;
};
struct student //結構體名,定義
{
    long long  number,tel; // 學號和電話
    int score; //成績
    char name[20],sex[4],clas[20]; //姓名,性別和班級
    struct date bri_day;      //將上面的表達日期的結構體套到學生結構體中表達學生的出生年月日
};
int main()
{
    struct student stu[100]; //聲明
    
    //內容
}

由上面的變化能夠發現有一個問題,訪問年月日的時候怎麼辦呢?固然也是層層訪問,如訪問學生的出生年,就應該是:stu[i].bri_day.year;另外能夠看到我在主函數裏面即main()

裏面只申明瞭student結構體,並無聲明 date結構體,那麼是否是就不用聲明date結構體呢?確定不是的,注意..在student結構體的內部,我已經進行了date結構體的聲明,且聲明變量爲bri_day.

固然,與結構體相似的類型還有共用體union和枚舉型enum,用法都大同小異,理解告終構體以後再看看他們就是小case了。

相關文章
相關標籤/搜索