【C语言基础一百题11】87-92题结构体公共体和枚举类型

本文介绍使用C语言实现的学生和教师数据管理程序。通过结构体定义了学生和教师的不同属性,并利用联合体实现根据不同职业展示不同字段的功能。此外还提供了其他几个C语言程序示例,涉及链表操作等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【程序87】

题目:编写input()和output()函数输入,输出5个学生的数据记录。
1.程序分析:
2.程序源代码:

#include
#define N 5
struct student
{ char num[6];
char name[8];
int score[4];
} stu[N];
input(stu)
struct student stu[];
{ int i,j;
for(i=0;i{ printf("/n please input %d of %d/n",i+1,N);
printf("num: ");
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]);
}
printf("/n");
}
}
print(stu)
struct student stu[];
{ int i,j;
printf("/nNo. Name Sco1 Sco2 Sco3/n");
for(i=0;i{ printf("%-6s%-10s",stu[i].num,stu[i].name);
for(j=0;j<3;j++)
printf("%-8d",stu[i].score[j]);
printf("/n");
}
}
main()
{
input();
print();
}
-----------------------------------------------------------------------------
【程序88】
题目:创建一个链表。
1.程序分析:
2.程序源代码:
/*creat a list*/
#include "stdlib.h"
#include "stdio.h"
struct list
{ int data;
struct list *next;
};
typedef struct list node;
typedef node *link;
void main()
{ link ptr,head;
int num,i;
ptr=(link)malloc(sizeof(node));
ptr=head;
printf("please input 5 numbers==>/n");
for(i=0;i<=4;i++)
{
scanf("%d",&num);
ptr->data=num;
ptr->next=(link)malloc(sizeof(node));
if(i==4) ptr->next=NULL;
else ptr=ptr->next;
}
ptr=head;
while(ptr!=NULL)
{ printf("The value is ==>%d/n",ptr->data);
ptr=ptr->next;
}
}
-----------------------------------------------------------------------------
【程序89】
题目:反向输出一个链表。
1.程序分析:
2.程序源代码:
/*reverse output a list*/
#include "stdlib.h"
#include "stdio.h"
struct list
{ int data;
struct list *next;
};
typedef struct list node;
typedef node *link;
void main()
{ link ptr,head,tail;
int num,i;
tail=(link)malloc(sizeof(node));
tail->next=NULL;
ptr=tail;
printf("/nplease input 5 data==>/n");
for(i=0;i<=4;i++)
{
scanf("%d",&num);
ptr->data=num;
head=(link)malloc(sizeof(node));
head->next=ptr;
ptr=head;
}
ptr=ptr->next;
while(ptr!=NULL)
{ printf("The value is ==>%d/n",ptr->data);
ptr=ptr->next;
}}
-----------------------------------------------------------------------------
【程序90】
题目:连接两个链表。
1.程序分析:
2.程序源代码:
#include "stdlib.h"
#include "stdio.h"
struct list
{ int data;
struct list *next;
};
typedef struct list node;
typedef node *link;
link delete_node(link pointer,link tmp)
{if (tmp==NULL) /*delete first node*/
return pointer->next;
else
{ if(tmp->next->next==NULL)/*delete last node*/
tmp->next=NULL;
else /*delete the other node*/
tmp->next=tmp->next->next;
return pointer;
}
}
void selection_sort(link pointer,int num)
{ link tmp,btmp;
int i,min;
for(i=0;i{
tmp=pointer;
min=tmp->data;
btmp=NULL;
while(tmp->next)
{ if(min>tmp->next->data)
{min=tmp->next->data;
btmp=tmp;
}
tmp=tmp->next;
}
printf("/40: %d/n",min);
pointer=delete_node(pointer,btmp);
}
}
link create_list(int array[],int num)
{ link tmp1,tmp2,pointer;
int i;
pointer=(link)malloc(sizeof(node));
pointer->data=array[0];
tmp1=pointer;
for(i=1;i{ tmp2=(link)malloc(sizeof(node));
tmp2->next=NULL;
tmp2->data=array[i];
tmp1->next=tmp2;
tmp1=tmp1->next;
}
return pointer;
}
link concatenate(link pointer1,link pointer2)
{ link tmp;
tmp=pointer1;
while(tmp->next)
tmp=tmp->next;
tmp->next=pointer2;
return pointer1;
}
void main(void)
{ int arr1[]={3,12,8,9,11};
link ptr;
ptr=create_list(arr1,5);
selection_sort(ptr,5);
}
-----------------------------------------------------------------------------
【程序91】
题目:设有若干个人员的数据,其中有学生和教师。学生的数据中包括:姓名、学号、性别、职业、班级。教师的数据包括:姓名、号码、性别、职业、职务,可以看出。学生和教师所包含的数据是不同的。现要求把它们放在同一个表格中,如果job项为S,则第五项为班级,如果job项为T,则第五项为职务
1.程序分析:
2.程序源代码:

#include

struct

{

int num;

char name[10];

char sex;

char job;

union

{

int classnum;

char position[10];

}category;

}person[2];

void main()

{

int i;

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

{

scanf("%d %s %c %c",&person[i].num,&person[i].name,&person[i].sex,&person[i].job);

if(person[i].job=='s')scanf("%d",&person[i].category.classnum);

else if(person[i].job=='t')scanf("%s",&person[i].category.position);

else printf("input error");

}

printf("/n");

printf("No. Name sex job class/position/n");

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

if(person[i].job=='s')

printf("%-6d%-10d%-3c%-3c%-6d/n",person[i].num,person[i].name,person[i].sex,person[i].job,person[i].category.classnum);

else if(person[i].job=='t')

printf("%-6d%-10d%-3c%-3c%-6d/n",person[i].num,person[i].name,person[i].sex,person[i].job,person[i].category.position);

}

-----------------------------------------------------------------------------
【程序92】
题目:口袋中有红、黄、蓝、白、黑5种颜色的球若干。每次从口袋取出3个球,问得到3种不同颜色的球的可能,打印每次组合的3种颜色。
1.程序分析:
2.程序源代码:
#include

void main()

{enum color{red,yellow,blue,white,black};

enum color ;

int i,j,k,pri;

int n,loop;

n=0;

for(i=red;i<=black;i++)

for(j=red;j<=black;j++)

{

if(i!=j)

{

for(k=red;k<=black;k++)

if((k!=i)&&(k!=j))

{

n=n+1;

printf("%-4d",n);

for(loop=1;loop<=3;loop++)

{

switch(loop)

{

case 1:pri=i;break;

case 2:pri=j;break;

case 3:pri=k;break;

default:break;

}

switch(pri)

{

case red:printf(" %s ","red");

case yellow:printf(" %s ","yellow");

case blue:printf(" %s ","blue");

case white:printf(" %s ","white");

case black:printf(" %s ","black");

default:break;

}

}

printf("/n");

}

}

}

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值