溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C語言中結(jié)構(gòu)體和共用體的示例分析

發(fā)布時間:2021-06-30 15:23:18 來源:億速云 閱讀:201 作者:小新 欄目:開發(fā)技術(shù)

這篇文章給大家分享的是有關(guān)C語言中結(jié)構(gòu)體和共用體的示例分析的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

    一、實驗?zāi)康?br/>

    • 掌握結(jié)構(gòu)體類型變量的定義和使用;

    • 掌握結(jié)構(gòu)體類型數(shù)組的概念和應(yīng)用;

    • 掌握鏈表的概念,初步學(xué)會對鏈表進(jìn)行操作;

    • 掌握共用體的概念與使用;

    • 掌握指向結(jié)構(gòu)體變量的指針。

    • 掌握指向結(jié)構(gòu)體數(shù)組的指針的應(yīng)用。

    二、實驗內(nèi)容

    編寫下列程序,然后上機(jī)調(diào)試運行。

    1. 對候選人得票的統(tǒng)計程序。設(shè)有3個候選人,每次輸入一個得票的候選人的名字,要求最后輸出各人得票結(jié)果。

    2. 編寫一個函數(shù)print,打印一個學(xué)生的成績數(shù)組,該數(shù)組中有5個學(xué)生的數(shù)據(jù)記錄,每個記錄包括num、name、score[3],用主函數(shù)輸入這些記錄,用print函數(shù)輸出這些記錄。

    3. 建立一個鏈表,每個結(jié)點包括:學(xué)號、姓名、性別、年齡。輸入一個年齡,如果鏈表中的結(jié)點所包含的年齡等于此年齡,則將此結(jié)點刪去。(選作)

    三、實驗記錄

    3.1 候選人選票統(tǒng)計

    (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)輸入為#時,表示投票結(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)運行結(jié)果截圖

    C語言中結(jié)構(gòu)體和共用體的示例分析

    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)運行結(jié)果截圖

    C語言中結(jié)構(gòu)體和共用體的示例分析

    3.3 鏈表

    (1)源代碼

    # include <stdio.h>
    # include <malloc.h>
    //定義了一個鏈表節(jié)點的數(shù)據(jù)類型
    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é)點
    	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)運行結(jié)果截圖

    C語言中結(jié)構(gòu)體和共用體的示例分析

    感謝各位的閱讀!關(guān)于“C語言中結(jié)構(gòu)體和共用體的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI