c語言定義結構體數組
『壹』 c語言定義一個具有5個元素的結構體數組,並進行初始化。寫兩個函數:1.輸出這五個學生的信息;
#include<stdio.h>
structs
{
intnum;
charname[10];
floatscore;
};
intmain(void)
{
structsstu[5]={
{1,"xiaozhao",50.5},
{2,"xiaoqian",60.5},
{3,"xiaosun",75.5},
{4,"xiaoli",15.5},
{5,"xiaozhou",15.5}
};
floatvar=0.0f;
for(inti=0;i<5;i++)
{
printf("學號:%d 姓名:%s 成績:%.2f ",stu[i].num,stu[i].name,stu[i].score);
var+=stu[i].score;
}
var/=5;
printf("平均分:%.2f ",var);
return0;
}
『貳』 用C語言寫的數據結構的定義
在C語言中,結構體(struct)指的是一種數據結構,是C語言中聚合數據類型(aggregate data type)的一類。結構體可以被聲明為變數、指針或數組等,用以實現較復雜的數據結構。結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的類型,成員一般用名字訪問。
在C語言中,定義一個結構的一般形式為:
struct結構名
{
//成員表列
};
成員表由若干個成員組成, 每個成員都是該結構的一個組成部分。對每個成員也必須作類型說明,其形式為:「類型說明符 成員名;」。成員名的命名應符合標識符的書寫規定。例如:
struct stu
{
int num;
char name[20];
char sex;
float score;
};
在這個結構定義中,結構名為stu,該結構由4個成員組成。 第一個成員為num,整型變數;第二個成員為name,字元型數組;第三個成員為sex,字元型變數;第四個成員為score,浮點型變數。 應注意在括弧後的分號是必不可少的。
然後,當結構定義完成後,即創建了一種數據類型,可以像int、float等內置類型一樣使用,以上面定義的stu結構體來和int類型對比著看。
int a;//定義一個int類型的變數a
stu a; //定義一個stu類型的變數a
int *p; //定義一個int類型的指針p
stu *p; //定義一個stu類型的指針p
int a[10];//定義一個int類型的數組a,它有10個元素,每個元素是int類型
stu a[10];//定義一個stu類型的數組a,它有10個元素,每個元素是stu類型。
『叄』 C語言結構體數組的定義
所謂結構體數組,是指數組中的每個元素都是一個結構體。在實際應用中,C語言結構體數組常被用來表示一個擁有相同數據結構的群體,比如一個班的學生、一個車間的職工等。
結構體可以存儲不同的數據類型,將他們互相聯系起來。結構體數組可以連續存儲多個結構體,和數組作用相似。比如想定義同一個最小外接矩形的四個坐標值,並給予這個矩形一個特徵編號。當需要存儲多個最小外接矩形的信息時,就需要動態申請一個結構體數組。
struct 結構體類型名{類型名 成員名;類型名 成員名;……},先聲明結構體類型,再定義結構體變數名。聲明結構體類型,不分配空間,定義結構體類型變數,就要分配內存空間。
(3)c語言定義結構體數組擴展閱讀:
結構體數組指針類型:
一個結構體變數的指針就是該變數所佔據的內存段的起始地址。可以設一個指針變數,用來指向一個結構體變數,此時該指針變數的值是結構體變數的起始地址,指針變數也可以用來指向結構體數組中的元素。
1、類型一:
指向結構體變數的指針引用結構體變數中的成員。
2、類型二:
用結構體變數和指向結構體變數的指針構成鏈表,鏈表是一種常見的重要的數據結構。鏈表有一個「頭指針」變數,以head表示,它存放一個地址。該地址指向一個元素。
鏈表中的每一個元素稱為「結點」,每個結點都應包括兩個部分:
一是用戶需要用的實際數據,
二是下一個結點的地址。
鏈表中各元素在內存中的存儲單元可以是不連續的。要找某一元素,可以先找到上一個元素,根據它提供的下一元素地址找到下一個元素。這種鏈表的數據結構,必須利用結構體變數和指針才能實現。
可以聲明一個結構體類型,包含兩種成員,一種是用戶需要用的實際數據,另一種是用來存放下一結點地址的指針變數。
參考資料來源:網路—結構體類型—數組
『肆』 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語言求助:定義一個學生結構體數組stu[10],結構體類型
#include <stdio.h>
#define N 10
typedef struct student {
int num;//成員num (學號)的類型為整型
char name[21];//成員name (姓名)的類型為字元數組
char sex;//成員sex(性別)的類型為字元型
int age; //成員score(分數)的類型為double類型
}stu;
void show(stu a[],int n) {
for(int i = 0; i < n; ++i)
printf("%d %d %s %c %d ",i + 1,a[i].num,a[i].name,a[i].sex,a[i].age);
printf(" ");
}
int find(stu a[],int n,int num) {
for(int i = 0; i < n; ++i) {
if(a[i].num == num) {
printf("%d %s %c %d ",a[i].num,a[i].name,a[i].sex,a[i].age);
return i;
}
}
return 0;
}
int main() {
int i,num;
stu a[N];
for(i = 0;i < N; ++i) {
scanf("%d",&a[i].num,a[i]);
fflush(stdin);
scanf("%s",a[i].name);
fflush(stdin);
scanf("%c",&a[i].sex);
scanf("%d",&a[i].age);
}
show(a,N);
printf("請輸入待查學號:");
scanf("%d",&num);
if(!find(a,N,num)) printf(" 沒有找到學號為%d的學生! ",num);
return 0;
}
『陸』 C語言結構體數組的定義和賦值
intmain(void){
structstudentsbao={};
printf("%d,%s ",bao.id,bao.name);//輸出是4224528,空(應該是null)
//structstudentsbao={3,"123"};可以。第一種賦值方法
//strcpy(bao.name,"bao");//可以,
//printf("%d,%s ",bao.id,bao.name);
//bao.name="bao";錯誤「stray'351'inprogram」其他是亂碼,
//bao.name[0]='a';
//bao.name[0]='/0';
//printf("%d,%s ",bao.id,bao.name);
/*這樣可以,*/
//chararr[10]="baobao";
////bao.name=arr;//error""
//scanf("%s",bao.name);//可以,
//printf("%d,%s ",bao.id,bao.name);
//所以scanf那一類函數都可以。
//還有就是memcpy函數也是可以的
return0;
}
(6)c語言定義結構體數組擴展閱讀
C語言結構體數組的直接賦值及數組的長度計算:
#include<stdio.h>
//自定義一個字元串的結構體,包含猜或字元串和字元串長度兩個變數
typedefstructStr{
charch[100];
intlength;//char數組(字元串)的長度
}myStr;
//剛開始聲明變數時每個變穗漏伍量的字元串長度length都為0
//這里以長度為10的數組為例,數組長度是1000
//對第0個到第9個結構體數組的長度同時賦值為0
myStrmyStr1[10]={
[0...9]={
.length=0,
}
};
intmain(){
inti;
for(i=0;i<搜沖10;i++){
printf("%d ",myStr1[i].length);
}
return0;
}