當前位置:首頁 » 編程語言 » c語言結構數組

c語言結構數組

發布時間: 2022-10-24 01:22:14

c語言中結構體數組長度怎麼計算

結構體數組的長度計算方法和普通數組相同。
1、c語言中,定義數組後可以用sizeof命令獲得數組的長度(即可容納元素個數)。但是通過傳遞數組名參數到子函數中,以獲得數組長度是不可行的,因為在子函數當中,數組名會退化為一個指針。
2、例如:
int
data[4],length;
length=sizeof(data)/sizeof(data[0]);
//數組占內存總空間除以單個元素占內存空間大小,即等於元素個數
printf("length
of
data[4]=%d",
length
);
//輸出length
of
data[4]=4

㈡ c語言編程:建立一個結構體數組

分析題意:

一、要定義兩個結構體,一個是日期年月日,一個是員工。

二、程序包含三個功能:1、結構數組的輸入。2、結構數組的輸出。3、統計平均工資。根據編程習慣,三功能要寫成獨立函數,方便擴展和調用。

ps:員工數量定義成常量,也為編程習慣,便於修改。另外,日期驗證我只寫了月份檢測給你參考。需擴展,自行編寫函數驗證。

#include <stdio.h>

#define M 3//最大員工數量

typedef struct date

{

int year;

int month;

int day;

}YMD;

typedef struct employee

{

int id;//工號

char name[20];//姓名

YMD date;//日期

int wage;

}EME;

void inputInfo(EME emes[]);//輸入

void outputInfo(EME emes[]);//輸出

float getAvg(EME emes[]);//求平均工資

int main()

{

EME emes[M];//員工結構體數組

inputInfo(emes);

outputInfo(emes);

printf("平均工資:%f",getAvg(emes));

return 0;

}

void inputInfo(EME emes[])

{

int i;

for(i=0;i<M;i++)

{

printf("請輸入員工%d的信息: ",i+1);

printf("工號:"),scanf("%d",&emes[i].id);

printf("姓名:"),scanf("%s",emes[i].name);

printf("日期(分別輸入年月日,空格分割):"),scanf("%d%d%d",&emes[i].date.year,&emes[i].date.month,&emes[i].date.day);

if(emes[i].date.month>12 || emes[i].date.month<=0)//日期輸入的驗證不通過時,重新輸入,驗證可單獨寫函數,這里只做參考!

{

printf("輸入日期不符合,請重新輸入! "),i--;

continue;

}

printf("工資:"),scanf("%d",&emes[i].wage);

printf(" ");

}

}

void outputInfo(EME emes[])

{

int i;

printf("所有員工的信息為:---------------------------- ");

for(i=0,printf("員工%d的信息: ",i+1);i<M;i++)

{

printf("工號:%d ",emes[i].id);

printf("姓名:%s ",emes[i].name);

printf("日期:%04d-%02d-%02d ",emes[i].date.year,emes[i].date.month,emes[i].date.day);

printf("工資:%d ",emes[i].wage);

printf(" ");

}

}

float getAvg(EME emes[])

{

int i;

float sum=0;

for(i=0;i<M;i++)

sum+=emes[i].wage;

return sum/M;

}

㈢ 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&lt;stdio.h&gt;

#include&lt;string.h&gt;

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&lt;5;++i)

{

printf("請輸入第%d個學生的信息:",i+1);

scanf("%s%d%c%s",

stu&lt;i&gt;.name,

&stu&lt;i&gt;

.age,&stu&lt;i&gt;

.sex,stu&lt;

i&gt;.num);/*%c

前面要加空格,不然輸入時會將空格賦給%c*/

}

OutputSTU(stu);

return 0;

}

void OutputSTU(struct STU stu[5])

{

struct STU stumax=stu[0];

int j;

for(j=1;j&lt;5;++j)

{

if(strcmp(stumax.num,stu[j]

.num)&lt;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

㈣ c語言定義結構體數組

1、C語言結構體數組的定義:數組是有序的並且具有相同類型的數據的集合。
2、結構數組就是具有相同結構類型的變數集合。假如要用C語言,定義一個班級40個同學的姓名、性別、年齡和住址, 可以做成一個結構數組。
結構數組成員的訪問是以數組元素為結構變數的,它的形式為:
1、結構數組元素—成員名。
2、例如:student[0].name,student[30].age
3、實際上結構數組相當於一個二維構造, 第一維是結構數組元素, 每個元素是一個結構變數, 第二維是結構成員。

㈤ C語言結構體數組的定義

所謂結構體數組,是指數組中的每個元素都是一個結構體。在實際應用中,C語言結構體數組常被用來表示一個擁有相同數據結構的群體,比如一個班的學生、一個車間的職工等。

結構體可以存儲不同的數據類型,將他們互相聯系起來。結構體數組可以連續存儲多個結構體,和數組作用相似。比如想定義同一個最小外接矩形的四個坐標值,並給予這個矩形一個特徵編號。當需要存儲多個最小外接矩形的信息時,就需要動態申請一個結構體數組。

struct 結構體類型名{類型名 成員名;類型名 成員名;……},先聲明結構體類型,再定義結構體變數名。聲明結構體類型,不分配空間,定義結構體類型變數,就要分配內存空間。

(5)c語言結構數組擴展閱讀:

結構體數組指針類型:

一個結構體變數的指針就是該變數所佔據的內存段的起始地址。可以設一個指針變數,用來指向一個結構體變數,此時該指針變數的值是結構體變數的起始地址,指針變數也可以用來指向結構體數組中的元素。

1、類型一:

指向結構體變數的指針引用結構體變數中的成員。

2、類型二:

用結構體變數和指向結構體變數的指針構成鏈表,鏈表是一種常見的重要的數據結構。鏈表有一個「頭指針」變數,以head表示,它存放一個地址。該地址指向一個元素。

鏈表中的每一個元素稱為「結點」,每個結點都應包括兩個部分:

一是用戶需要用的實際數據,

二是下一個結點的地址。

鏈表中各元素在內存中的存儲單元可以是不連續的。要找某一元素,可以先找到上一個元素,根據它提供的下一元素地址找到下一個元素。這種鏈表的數據結構,必須利用結構體變數和指針才能實現。

可以聲明一個結構體類型,包含兩種成員,一種是用戶需要用的實際數據,另一種是用來存放下一結點地址的指針變數。

參考資料來源:網路—結構體類型—數組

㈥ 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]

㈦ 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語言中用於進行初始化的程序結構則稱為初始化器或初始化列表。

1、初始化器

初始化器是聲明器的可選部分,它由一個'='以及其後的一個表達式(或含有多個以','隔開的帶圓括弧表達式的單一列表)所組成。後面這一列表有時也被稱為「初始化(器)列表」(initializer list)或」初始化列表」(initialization list)。

例:

public class Curry

{public string MainIngredient { get; set; }

public string Style { get; set; }

public int Spiciness { get; set; }}

2、初始化列表

一個類/結構的構造函數可以在定義中於構造函數體前包含一個初始化列表,用以給類/結構的元素賦初值。

例:

class foo

{public:

foo(string s, int i):name(s), id(i){} ; // 初始化列表

private:

string name ;int id ;};

(8)c語言結構數組擴展閱讀

在程序里,數據初始化也可能在沒有由明確的語法來實現的情況下進行。例如說,如果一個靜態變數在沒有初始化(即未指定初值)的情況下被聲明,則:對於原生數據類型:以對應類型的零值進行初始化;對於類中的靜態對象:由其默認的構造函數來進行初始化。

每一個初始化部分裡面的代碼在程序運行後,或庫的begin-end塊運行之前。delphi使用對單元相關樹的深度優先遍歷來運行初始化部分。換句話說,就只在一個單元的初始化代碼運行前,delphi就運行了特他使用的每一個單元的初始化部分。每一個單元僅初始化一次 。

熱點內容
iphone清除緩存軟體 發布:2025-07-10 16:20:03 瀏覽:678
以下所列的c語言常量中錯誤的是 發布:2025-07-10 16:19:00 瀏覽:850
怎麼給安卓應用重命名 發布:2025-07-10 16:18:01 瀏覽:998
php調用棧 發布:2025-07-10 15:58:33 瀏覽:869
android頁面返回 發布:2025-07-10 15:58:22 瀏覽:460
php解析多層json 發布:2025-07-10 15:51:36 瀏覽:873
谷歌x86版安卓系統哪個最流暢 發布:2025-07-10 15:51:33 瀏覽:445
iqoo清除應用緩存 發布:2025-07-10 15:34:34 瀏覽:845
手機rm文件夾 發布:2025-07-10 15:30:48 瀏覽:581
游戲腳本掛 發布:2025-07-10 15:21:46 瀏覽:588