IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言学习之结构体.day2 -> 正文阅读

[C++知识库]C语言学习之结构体.day2

结构体的内容:

1.定义和引用结构体? 数组和指针

2.union共用体

3.枚举类型 如enum a={1,2,3};

4.用typedef 声明新类型名

1.建立一个简单链表,它由3个学生数据的结点组成,要求输出各结点中的数据。

(理解节点是什么? ? 理解节点中内存是怎么分配的和节点之间怎么形成链表的)

#include <stdio.h>
struct student//声明结构体类型struct student
{
   int num;//学号
   float score;//成绩
   struct student *next;//next为指针,包含地址信息
};
int main()
{
   struct student a={10101,90.0},b={10102,91.0},c={10103,92.0},*head,*p;
   //定义3个结构体变量作为链表的节点 head,p为指向 struct student类型 的指针变量
   head=&a;//头指针指向a的地址
   a.next=&b;
   b.next=&c;
   c.next=NULL;//c指针指向空
   p=head;//p指向头指针指向的地址

   printf("struct student 结构体占%d字节\n",sizeof(struct student));
   printf("struct student类型节点内存分配如下:\n");
   printf("\nnum占%d字节\nscore占%d字节\n*next指针占%d字节\n",
          sizeof(int),sizeof(float),sizeof(struct student *));
   printf("a,b,c节点的首地址分别为:\n%d\n%d\n%d\n",&a,&b,&c);//打印
   printf("p指针指向地址为:%d\nhead指针指向地址为:%d\n",p,head);
   printf("a,b,c三个节点中的数据如下:\n");
   for(p=head;p!=NULL;p=p->next)//更新p指向 指向地址不为NULL就执行
      printf("%d %5.1f%12d\n",p->num,p->score,p->next);//输出p指针指向的节点的数据
   return 0;
}

2.通过函数,建立一个有3名学生数据的单向动态链表并输出链表。

#include <stdio.h>
#include<stdlib.h>
#define LEN sizeof(struct Student)//定义宏
struct Student//声明结构体类型
{
   long num;
   float score;
   struct student *next;
};
int n=0;//全局变量
int main()
{  struct Student *head;
   struct Student *creat();//函数声明
   void print(struct Student *head);//函数声明
   head=creat();//函数调用,返回第一个节点的起始地址
   print(head);//函数调用
   return 0;
}

struct Student *creat()//函数定义,返回值为一个指向链表头的指针
{
   struct Student *head;//头指针指向链表首地址
   struct Student *p1,*p2;
   p2=p1=(struct Student *)malloc(LEN);
   //开辟一个新单元,p1,p2指针指向首地址
   scanf("%ld,%f",&p1->num,&p1->score);
   //输入第一个学生学号和成绩
   head=NULL;
   while(p1->num!=0)//p1指向的节点num不为0
   {
      n=n+1;
      if(n==1)head=p1;//头指针指向p1指向的地址
      else p2->next=p1;//第一个节点的指针 指向p1
      p2=p1;//重新使得  p2指向p1
      p1=(struct Student *)malloc(LEN);
      //申请内存空间
      scanf("%ld,%f",&p1->num,&p1->score);
      //输入其他学生学号和成绩
   }
   p2->next=NULL;
   return (head);
}
void print(struct Student *head)//输出链表
{
   struct Student *p;
   printf("\nNow,These %d records are:\n",n);
   p=head;
   for(;p!=NULL;p=(*p).next)
   printf("%ld %5.1f\n",p->num,p->score);
   //p指针不为空,打印节点中的学号,成绩
}

3.有若干个人员的数据,其中有学生和教师。学生的数据中包括: 姓名、号码、性别、职业、班级。教师的数据包括: 姓名、号码、性别、职业、职务。要求用同一个表格来处理。

思路:

循环n次

读入号码、姓名、性别、职业

读入class

读入position

输出“输入错”

循环n次

输出:号码、姓名、性别、职业、班级

输出:号码、姓名、性别、职业、职务

#include <stdio.h>
#include<stdlib.h>
struct						//声明无名结构体类型
{	int num;					//成员num(编号)
	char name[10];			//成员name(姓名)
	char sex;				//成员sex(性别)
	char job;				//成员job(职业)

	union					   //声明无名共用体类型
	{	int clas;	   	//成员clas(班级)
		char position[10];	//成员position(职务)
	}category;				//成员category是共用体变量

}person[2];					//定义结构体数组person,有两个元素

int main()
{  int i;
   for(i=0;i<2;i++)
   { 
     printf("please enter the data of person:\n");
     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.clas);
     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%-10s%-4c%-4c%-10d\n",
         person[i].num,person[i].name,person[i].sex,
         person[i].job,person[i].category.clas);
		else									//若是教师
			printf("%-6d%-10s%-4c%-4c%-10s\n",
          person[i].num, person[i].name,person[i].sex,
          person[i].job,person[i].category.position);
   }
   return 0;
}

4.口袋中有红、黄、蓝、白、黑5种颜色的球若干个。每次从口袋中先后取出3个球,问得到3种不同颜色的球的可能取法,输出每种排列的情况(使用枚举类型)。

#include <stdio.h>
#include<stdlib.h>

int main()
{
   enum Color{red,yellow,blue,white,black};//声明枚举类型
   enum Color i,j,k,pri;//枚举类型变量
   int n,loop;
   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);             //符合条件次数加1
              for(loop=1;loop<=3;loop++)    //先后对3个球处理
              {
                 switch(loop)
                 {
                    case 1:pri=i;break;    //第一个球的颜色
                    case 2:pri=j;break;    //第二个球的颜色
                    case 3:pri=k;break;    //第三个球的颜色
                    default:break;
                 }
                 switch(pri)              //根据球的颜色输出相应文字
                 {
                    case red:printf("%-10s","red");break;
                    case yellow:printf("%-10s","yellow");break;
                    case blue:printf("%-10s","blue");break;
                    case white:printf("%-10s","white");break;
                    case black:printf("%-10s","black");break;
                    default:break;
                 }
              }
              printf("\n");

           }
          }
        }
        printf("\ntotal:%5d\n",n);
   return 0;
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-18 12:31:35  更:2021-08-18 12:33:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 13:15:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码