C語(yǔ)言中結(jié)構(gòu)體和共用體實(shí)例教程
一、實(shí)驗(yàn)?zāi)康?br />
- 掌握結(jié)構(gòu)體類(lèi)型變量的定義和使用;
- 掌握結(jié)構(gòu)體類(lèi)型數(shù)組的概念和應(yīng)用;
- 掌握鏈表的概念,初步學(xué)會(huì)對(duì)鏈表進(jìn)行操作;
- 掌握共用體的概念與使用;
- 掌握指向結(jié)構(gòu)體變量的指針。
- 掌握指向結(jié)構(gòu)體數(shù)組的指針的應(yīng)用。
二、實(shí)驗(yàn)內(nèi)容
編寫(xiě)下列程序,然后上機(jī)調(diào)試運(yùn)行。
- 對(duì)候選人得票的統(tǒng)計(jì)程序。設(shè)有3個(gè)候選人,每次輸入一個(gè)得票的候選人的名字,要求最后輸出各人得票結(jié)果。
- 編寫(xiě)一個(gè)函數(shù)print,打印一個(gè)學(xué)生的成績(jī)數(shù)組,該數(shù)組中有5個(gè)學(xué)生的數(shù)據(jù)記錄,每個(gè)記錄包括num、name、score[3],用主函數(shù)輸入這些記錄,用print函數(shù)輸出這些記錄。
- 建立一個(gè)鏈表,每個(gè)結(jié)點(diǎn)包括:學(xué)號(hào)、姓名、性別、年齡。輸入一個(gè)年齡,如果鏈表中的結(jié)點(diǎn)所包含的年齡等于此年齡,則將此結(jié)點(diǎn)刪去。(選作)
三、實(shí)驗(yàn)記錄
3.1 候選人選票統(tǒng)計(jì)
(1)源代碼
# include <stdio.h>
typedef struct node
{
char name;
int cnt;
}candt;
int main(void)
{
candt A,B,C;
char vote;
A.name='A',A.cnt=0;
B.name='B',B.cnt=0;
C.name='C',C.cnt=0;
while(vote!='#')/*當(dāng)輸入為#時(shí),表示投票結(jié)束。*/
{
printf("Please enter the candidate:\n");
scanf("%c",&vote);
getchar();
switch(vote)
{
case 'A':A.cnt++;break;
case 'B':B.cnt++;break;
case 'C':C.cnt++;break;
default:printf("Input error!\n");
}
}
printf("A'note:%d\n",A.cnt);
printf("B'note:%d\n",B.cnt);
printf("C'note:%d\n",C.cnt);
return 0;
}
(2)運(yùn)行結(jié)果截圖

3.2 print函數(shù)
(一)源代碼
# include <stdio.h>
# define N 5
struct student
{
char num[6];
char name[10];
int score[4];
}stu[N];
void print(struct student stu[6]);
int main(void)
{
int i,j;
for(i=0;i<N;i++)
{
printf("\nInput data of student:\n");
printf("NO.: ");
scanf("%s",stu[i].num);
printf("name: ");
scanf("%s",stu[i].name);
for(j=0;j<3;j++)
{
printf("score %d:",j+1);
scanf("%d",&stu[i].score[j]);
}
}
print(stu);
return 0;
}
void print(struct student stu[6])
{
int i,j;
printf(" NO. name score1 score2 score3\n");
for(i=0;i<N;i++)
{
printf("%5s%10s",stu[i].num,stu[i].name);
for(j=0;j<3;j++)
printf("%9d",stu[i].score[j]);
printf("\n");
}
}
(2)運(yùn)行結(jié)果截圖

3.3 鏈表
(1)源代碼
# include <stdio.h>
# include <malloc.h>
//定義了一個(gè)鏈表節(jié)點(diǎn)的數(shù)據(jù)類(lèi)型
struct student
{
char num[10];
char name[6];
char sex[2];
int age;//數(shù)據(jù)域
struct student *next; //指針域
}stu[10];
int main(void)
{
struct student *p,*pt,*head;
int i,length,iage,flag=1;
int find=0;
while(flag==1)
{
printf("Please enter the length of the list(<10):");
scanf("%d",&length);
if(length<10)
flag=0;
}
//建立鏈表
for(i=0;i<length;i++)
{
p=(struct student *)malloc(sizeof(struct student));
if(i==0)
head=pt=p;
else
pt->next=p;
pt=p;
printf("NO.:");
scanf("%s",&p->num);
printf("name:");
scanf("%s",&p->name);
printf("sex:");
scanf("%s",&p->sex);
printf("age:");
scanf("%d",&p->age);
}
p->next=NULL;
p=head;
printf("\nNO. name sex age\n");
while(p!=NULL)
{
printf("%4s%8s%6s%6d\n",p->num,p->name,p->sex,p->age);
p=p->next;
}
//刪除結(jié)點(diǎn)
printf("Input age:");
scanf("%d",&iage);
pt=head;
p=pt;
if(pt->age==iage)/*鏈頭是待刪元素*/
{
p=pt->next;
head=pt=p;
find=1;
}
else/*鏈頭不是待刪元素*/
pt=pt->next;
while(pt!=NULL)
{
if(pt->age==iage)
{
p->next=pt->next;
find=1;
}
else
p=pt;
pt=pt->next;
}
if(!find)
printf("Not found%d.\n",iage);
p=head;
printf("\nNO. name sex age\n");
while(p!=NULL)
{
printf("%4s%8s",p->num,p->name);
printf("%6s%6d\n",p->sex,p->age);
p=p->next;
}
return 0;
}
(2)運(yùn)行結(jié)果截圖

總結(jié)
到此這篇關(guān)于C語(yǔ)言中結(jié)構(gòu)體和共用體的文章就介紹到這了,更多相關(guān)C語(yǔ)言結(jié)構(gòu)體和共用體內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
虛函數(shù)被類(lèi)的構(gòu)造析構(gòu)函數(shù)和成員函數(shù)調(diào)用虛函數(shù)的執(zhí)行過(guò)程
虛函數(shù)被類(lèi)的構(gòu)造析構(gòu)函數(shù)和成員函數(shù)調(diào)用虛函數(shù)的執(zhí)行過(guò)程,需要的朋友可以參考下2013-02-02
C到C++的升級(jí)關(guān)系及區(qū)別實(shí)例探究
這篇文章主要為大家介紹了C到C++的升級(jí)關(guān)系及區(qū)別實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
OpenCV + MFC實(shí)現(xiàn)簡(jiǎn)單人臉識(shí)別
這篇文章主要為大家詳細(xì)介紹了OpenCV + MFC實(shí)現(xiàn)簡(jiǎn)單人臉識(shí)別,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08
VisualStudio2022編寫(xiě)C語(yǔ)言的實(shí)現(xiàn)步驟
VisualStudio2022是一款強(qiáng)大的集成開(kāi)發(fā)環(huán)境,可以用來(lái)編寫(xiě)C語(yǔ)言程序,本文主要介紹了VisualStudio2022編寫(xiě)C語(yǔ)言的實(shí)現(xiàn)步驟,具有一定的參考價(jià)值,感興趣的可以了解一下2024-06-06
C++示例分析內(nèi)聯(lián)函數(shù)與引用變量及函數(shù)重載的使用
為了消除函數(shù)調(diào)用的時(shí)空開(kāi)銷(xiāo),C++ 提供一種提高效率的方法,即在編譯時(shí)將函數(shù)調(diào)用處用函數(shù)體替換,類(lèi)似于C語(yǔ)言中的宏展開(kāi)。這種在函數(shù)調(diào)用處直接嵌入函數(shù)體的函數(shù)稱(chēng)為內(nèi)聯(lián)函數(shù)(Inline Function),又稱(chēng)內(nèi)嵌函數(shù)或者內(nèi)置函數(shù)2022-08-08
Qt GUI圖形圖像開(kāi)發(fā)之QT表格控件QTableView,QTableWidget復(fù)雜表頭(多行表頭) 及凍結(jié)、固定特
這篇文章主要介紹了Qt GUI圖形圖像開(kāi)發(fā)之QT表格控件QTableView,QTableWidget復(fù)雜表頭(多行表頭) 及凍結(jié)、固定特定的行的詳細(xì)方法與實(shí)例,需要的朋友可以參考下2020-03-03

