結構體數組c語言
A. c語言結構體數組的定義
所謂結構體數組,是指數組中的每個元素都是一個結構體。在實際應用中,C語言結構體數組常被用來表示一個擁有相同數據結構的群體,比如一個班的學生、一個車間的職工等。
結構體可以存儲不同的數據類型,將他們互相聯系起來。結構體數組可以連續存儲多個結構體,和數組作用相似。比如想定義同一個最小外接矩形的四個坐標值,並給予這個矩形一個特徵編號。當需要存儲多個最小外接矩形的信息時,就需要動態申請一個結構體數組。
struct 結構體類型名{類型名 成員名;類型名 成員名;……},先聲明結構體類型,再定義結構體變數名。聲明結構體類型,不分配空間,定義結構體類型變數,就要分配內存空間。
(1)結構體數組c語言擴展閱讀:
結構體數組指針類型:
一個結構體變數的指針就是該變數所佔據的內存段的起始地址。可以設一個指針變數,用來指向一個結構體變數,此時該指針變數的值是結構體變數的起始地址,指針變數也可以用來指向結構體數組中的元素。
1、類型一:
指向結構體變數的指針引用結構體變數中的成員。
2、類型二:
用結構體變數和指向結構體變數的指針構成鏈表,鏈表是一種常見的重要的數據結構。鏈表有一個「頭指針」變數,以head表示,它存放一個地址。該地址指向一個元素。
鏈表中的每一個元素稱為「結點」,每個結點都應包括兩個部分:
一是用戶需要用的實際數據,
二是下一個結點的地址。
鏈表中各元素在內存中的存儲單元可以是不連續的。要找某一元素,可以先找到上一個元素,根據它提供的下一元素地址找到下一個元素。這種鏈表的數據結構,必須利用結構體變數和指針才能實現。
可以聲明一個結構體類型,包含兩種成員,一種是用戶需要用的實際數據,另一種是用來存放下一結點地址的指針變數。
參考資料來源:網路—結構體類型—數組
B. C語言結構體數組
#defineN3
#include<stdio.h>
structBook{
charSm[100];//書名
charZz[20];//作者
intNian,Yue,Kc;
};
voidpaixu(structBooks[],intn){
structBookt;
inti,j;
for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)
if(s[i].Kc<s[j].Kc){
t=s[i];s[i]=s[j];s[j]=t;
}
}
voidprint(structBooks[],intn){
inti;
for(i=0;i<n;i++)
printf("%s%s%d%d%d ",s[i].Sm,s[i].Zz,s[i].Nian,s[i].Yue,s[i].Kc);
}
intmain(){
structBooks[N];
inti;
for(i=0;i<N;i++)
scanf("%s%s%d%d%d",s[i].Sm,s[i].Zz,&s[i].Nian,&s[i].Yue,&s[i].Kc);
paixu(s,N);
print(s,N);
}
C. c語言結構體數組的輸入輸出
C
語言中,結構體(struct)是一種數據結構,是C語言中聚合數據類型(aggregate data type)的一類。結構體可以被聲明為變數、指針或數組等,用以實現較復雜的數據結構。
結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的類型,成員一般用名字訪問。
定義與聲明
結構體的定義如下所示,struct為結構體關鍵字,tag為結構體的標志,member-list為結構體成員列表,其必須列出其所有成員;variable-list為此結構體聲明的變數。
在實際應用中,C語言結構體數組常被用來表示一個擁有相同數據結構的群體,比如一個班的學生、一個車間的職工等。
在C語言中,定義結構體數組和定義結構體變數的方式類似;
例:
struct stu{
char*name;//姓名
int num;//學號
int age;//年齡
char group;//所在小組
float score;//成績
}class[5];
表示一個班級有5個學生。
(3)結構體數組c語言擴展閱讀:
結構體數組的引用與引用一個結構體變數在原理上是一樣的。只不過結構體數組中有多個結構體變數,我們只需利用for循環一個一個地使用結構體數組中的元素。
下面編寫一個程序,編程要求:從鍵盤輸入5個學生的基本信息,如姓名、年齡、性別、學號,然後將學號最大的學生的基本信息輸出到屏幕。
#include<stdio.h>
#include<string.h>
struct STU
{
char name[20];
int age;
char sex;
char num[20];
};
void OutputSTU(struct STU stu[5]);
//函數聲明,該函數的功能是輸出學號最大的學生信息
int main(void)
{
int i;
struct STU stu[5];
for(i=0;i<5;++i)
{
printf("請輸入第%d個學生的信息:",i+1);
scanf("%s%d%c%s",
stu<i>.name,
&stu<i>
.age,&stu<i>
.sex,stu<
i>.num);/*%c
前面要加空格,不然輸入時會將空格賦給%c*/
}
OutputSTU(stu);
return 0;
}
void OutputSTU(struct STU stu[5])
{
struct STU stumax=stu[0];
int j;
for(j=1;j<5;++j)
{
if(strcmp(stumax.num,stu[j]
.num)<0)//strcmp函數的使用
{
stumax=stu[j];
}
}
printf("學生姓名:%s學生年齡:%d學生性別:%c學生學號:
%s ",stumax.name,
stumax.age,stumax.
sex,stumax.num);
}
輸出結果是:
請輸入第1個學生的信息:小紅22 F Z1207031
請輸入第2個學生的信息:小明21 M Z1207035
請輸入第3個學生的信息:小七23 F Z1207022
請輸入第4個學生的信息:小欣20 F Z1207015
請輸入第5個學生的信息:小天19 M Z1207024
學生姓名:小明學生年齡:21學生性別:M學生學號:Z1207035
D. C語言結構體數組的定義是什麼
結構數組就是具有相同結構類型的變數集合。
假如要定義一個班級40個同學的姓名、性別、年齡和住址, 可以定義成一個結構數組。如下所示:
struct{ char name[8]; char sex[2]; int age; char addr[40]; }student[40];也可定義為:
struct string{ char name[8]; char sex[2]; int age; char addr[40]; }; struct string student[40];需要指出的是結構數組成員的訪問是以數組元素為結構變數的, 其形式為:
結構數組元素.成員名
例如:
student[0].name student[30].age實際上結構數組相當於一個二維構造, 第一維是結構數組元素, 每個元素是
一個結構變數, 第二維是結構成員。
注意: 結構數組的成員也可以是數組變數。
例如:
struct a { int m[3][5]; float f; char s[20]; }y[4];為了訪問結構a中結構變數y[2]的這個變數, 可寫成
y[2].m[1][4]
E. C語言結構體數組
結構數組就是具有相同結構類型的變數集合。
假如要定義一個班級40個同學的姓名、性別、年齡和住址, 可以定義成一個結構數組。如下所示:
struct{ char name[8]; char sex[2]; int age; char addr[40]; }student[40];
也可定義為:
struct string{ char name[8]; char sex[2]; int age; char addr[40]; }; struct string student[40];
F. 怎麼使用結構體數組(C語言)
代碼僅供參考:
#include "stdio.h"
#include "conio.h"
struct books
{
char *name;
char *press;
char *author;
float price;
};
struct books lib[]={{"C language","UESTC","Zhuang San",12.50},{"PASCAL","UESTC","Li Si",10.00},{"English Reading","UESTC","Wang wu",8.00},{"########","#####","######",0}};//由於篇幅有限,這里只給出三本書的信息
main()
{
find();
printf("Press any key continue...\n");
getch();
}
//圖書查詢子函數
find()
{
struct books *p;
char sm[100];
int i=0;
p=&lib[i];
printf("Please input the name of books:\n");
gets(sm);
printf("The information of the books:\n");
while(p->price!=0)//用p->price成員的值控制循環
{
if(strcmp(p->name,sm)==0)
{
printf("%18s%8s%8s%7.2f\n",p->name,p->author,p->press,p->price);
break;//當字元比較函數值為0,表明該書已找到,列印並跳出循環
}
i++;//否則將下標加1移向下一元素
p=&lib[i];//讓指針再指向這一元素後繼續查找
}
if(p->price==0)//p->price=0,表明整個書庫都已查完並沒有找到所要的書
printf("Sorry ! Your inquires the book was not found.\n");
}