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

    技术2024-11-07  2

    【程序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");

    }

    }

    }

    }

    最新回复(0)