C語言中結構體和共用體實例教程

一、實驗目的

  • 掌握結構體類型變量的定義和使用;
  • 掌握結構體類型數組的概念和應用;
  • 掌握鏈表的概念,初步學會對鏈表進行操作;
  • 掌握共用體的概念與使用;
  • 掌握指向結構體變量的指針。
  • 掌握指向結構體數組的指針的應用。

二、實驗內容

編寫下列程序,然後上機調試運行。

  1. 對候選人得票的統計程序。設有3個候選人,每次輸入一個得票的候選人的名字,要求最後輸出各人得票結果。
  2. 編寫一個函數print,打印一個學生的成績數組,該數組中有5個學生的數據記錄,每個記錄包括num、name、score[3],用主函數輸入這些記錄,用print函數輸出這些記錄。
  3. 建立一個鏈表,每個結點包括:學號、姓名、性別、年齡。輸入一個年齡,如果鏈表中的結點所包含的年齡等於此年齡,則將此結點刪去。(選作)

三、實驗記錄

3.1 候選人選票統計

(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!='#')/*當輸入為#時,表示投票結束。*/
	{
		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)運行結果截圖

3.2 print函數

(一)源代碼

# 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)運行結果截圖

3.3 鏈表

(1)源代碼

# include <stdio.h>
# include <malloc.h>
//定義瞭一個鏈表節點的數據類型
struct student
{
	char num[10];
	char name[6];
	char sex[2];
	int age;//數據域
	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;
	}
	//刪除結點
	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)運行結果截圖

總結

到此這篇關於C語言中結構體和共用體的文章就介紹到這瞭,更多相關C語言結構體和共用體內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: