简单学C——第五天
结构体
首先明确,结构体是一种构造的数据类型,是一种由多个数据类型如 int,char,double,数组或者结构体......组成的类型,现在告诉大家如何定义一个结构体。在定义int整型变量时,大家肯定都知道 int a; 即定义了一个int 型变量,系统会自动分配 存int这么大的空间,但是对于结构体而言,它是由许多个不确定的类型组成的,所以在定义它的时候需要指明它是由哪些数据类型组成的.定义格式有多种,此处只说一种较为简单的,定义格式如下.
struct 名字
{
由哪些数据类型组成
};//注意末尾的分号一定要有
例如:我要定义一个学生,学生需要值得注意的属性都有什么呢? 假设需要统计这名学生的 1学号,2姓名,3性别,4班级,5电话,6期末成绩,此时为了简洁且处理方便,就需要用到结构体
struct student //结构体名
{
long long number,tel; // 学号和电话
int score; //成绩
char name[],sex[],clas[]; //姓名,性别和班级
};
如上,就成功定义了一个关于学生信息的结构体,下面实现具体的输入输出操作
#include<stdio.h>
struct student
{
long long number,tel; // 学号和电话
int score; //成绩
char name[],sex[],clas[]; //姓名,性别和班级
}; int main()
{
struct student tiantian; //声明了一个名为tiantian的变量,声明可以与定义同时进行
//现在可以输入
scanf("%lld%s%s%s%lld%d",&tiantian.number,tiantian.name,tiantian.sex,tiantian.clas,&tiantian.tel,&tiantian.score);
//输出
printf("%lld %s %s %s %lld %d",tiantian.number,tiantian.name,tiantian.sex,tiantian.clas,tiantian.tel,tiantian.score);
return ;
}
运行结果:

或许在看了上面的之后,你会想,这也太麻烦了吧,我随便定义6个独立的变量,把它输入再输出出来,这样效果是一样的,而且代码也会简洁很多,不用在用每个变量时都再前面加上声明结构体时声明的变量。对于上面这个这样想当然没错,不过我现在要说,请统计一下全班所有的人他们各自的 1学号,2姓名,3性别,4班级,5电话,6期末成绩,这时就能体会到结构体的作用之大了,具体看下面的代码。
#include<stdio.h>
struct student //结构体名,定义
{
long long number,tel; // 学号和电话
int score; //成绩
char name[],sex[],clas[]; //姓名,性别和班级
}; int main()
{
//假设此班的学生低于100名,声明了一个名为stu的数组变量,
//数组中的每一个元素都可以存放下一个学生的六个信息
struct student stu[];
int i;
//输入,,用循环,j假设有续名学生
for(i=;i<;i++)
scanf("%lld%s%s%s%lld%d",&stu[i].number,stu[i].name,stu[i].sex,stu[i].clas,&stu[i].tel,&stu[i].score);
//输出
for(i=;i<;i++)
printf("%lld %s %s %s %lld %d\n",stu[i].number,stu[i].name,stu[i].sex,stu[i].clas,stu[i].tel,stu[i].score);
return ;
}
运行结果:

观察上面的结果,输入了五组数据,按下回车,输出存储在数组中的结果,每个学生一行,每个学生的信息之间空一格。当数字较小的时候或许还看不出优势,可是如果当记录的学生数据达到上千组,无疑,用结构体记录学生数据是较好的方案。
比如我要在上述结构体中再添加一个信息,学生的出生年月日,此时应该怎么做呢?
可以用到结构体的嵌套,在c语言中,许多的东西都是可以嵌套的。修改上述结构体的定义可得:
#include<stdio.h>
struct date //表示日期的结构体
{
int year,month,day;
};
struct student //结构体名,定义
{
long long number,tel; // 学号和电话
int score; //成绩
char name[],sex[],clas[]; //姓名,性别和班级
struct date bri_day; //将上面的表达日期的结构体套到学生结构体中表达学生的出生年月日
};
int main()
{
struct student stu[]; //声明 //内容
}
由上面的变化可以发现有一个问题,访问年月日的时候怎么办呢?当然也是层层访问,如访问学生的出生年,就应该是:stu[i].bri_day.year;另外可以看到我在主函数里面即main()
里面只申明了student结构体,并没有声明 date结构体,那么是不是就不用声明date结构体呢?肯定不是的,注意..在student结构体的内部,我已经进行了date结构体的声明,且声明变量为bri_day.
当然,与结构体类似的类型还有共用体union和枚举型enum,用法都大同小异,理解了结构体之后再看看他们就是小case了。
简单学C——第五天的更多相关文章
- [老老实实学WCF] 第五篇 再探通信--ClientBase
老老实实学WCF 第五篇 再探通信--ClientBase 在上一篇中,我们抛开了服务引用和元数据交换,在客户端中手动添加了元数据代码,并利用通道工厂ChannelFactory<>类创 ...
- 从零开始学Xamarin.Forms(五) 技巧
原文:从零开始学Xamarin.Forms(五) 技巧 由于HTML5规范于2014年10月终于定稿,公司.net开发人员较少,国内外已有了较为成熟的UI框架.手机软件硬件的快速发展等等原因,所以我就 ...
- (素材源代码) 猫猫学IOS(五)UI之360等下载管理器九宫格UI
猫猫分享,必须精品 先看效果 代码学习地址: 猫猫学IOS(五)UI之360等下载管理器九宫格UI 猫猫学IOS(五)UI之360等下载管理器九宫格UI http://blog.csdn.net/u0 ...
- Java从零开始学二十五(枚举定义和简单使用)
一.枚举 枚举是指由一组固定的常量组成的类型,表示特定的数据集合,只是在这个数据集合定义时,所有可能的值都是已知的. 枚举常量的名称建议大写. 枚举常量就是枚举的静态字段,枚举常量之间使用逗号隔开. ...
- 简单学C——第二天
控制结构(-) 相信大家对流程图肯定很熟悉.下面我将介绍的正是关于此方面的,c语言中,控制结构大体分为选择结构和循环结构. 一.选择结构: 先贴出一般用于选择结构的语 ...
- 零基础学Java第五节(面向对象一)
本篇文章是<零基础学Java>专栏的第五篇文章,文章采用通俗易懂的文字.图示及代码实战,从零基础开始带大家走上高薪之路! 本文章首发于公众号[编程攻略] 类与对象 在哲学体系中,可以分为主 ...
- Java从零开始学四十五(Socket编程基础)
一.网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...
- 简单学C——第七天
函数 函数是C语言重要的组成部分,你现在,或者以后(如果C没什么变化的话)所写的任何一个C语言程序都是由一个一个的函数组合在一起的,当然,现在或许你只会在主函数 main中写一个小程序,那么在看了本篇 ...
- 简单学C——第四天
数组 在学数组之前,有必要把前面的知识复习一遍,当然我的复习,仅仅只是提一下,而对于你,则应该认真的看一下前面的知识点,不懂可以百度,哈哈. 前面我们大致学了 1.定义变量,2.数据的输入与输出,3. ...
随机推荐
- myeclipse building workspace如何禁止及提高myeclipse速度
大家一定对building workspace时那缓慢的速度给困扰到了吧~ 其实只要把project选项里的 building automatically前的勾去掉,就可以快很多了.. 另外大家一定对 ...
- HTML5的渐变色 渐变的两种类型 createLinearGradient 和createRadialGradient
今天又再看了html5的颜色渐变API,发现没有第一次看那么复杂. 不过我对这个颜色渐变存在着一个疑惑就是两种色带之间,那段是属于两种颜色混合的,有点模糊. 比如从红色变成黄色,在红与黄之间的那个地方 ...
- jquerymobile知识点:button与a
首先先上一段代码: <a href="#" data-role="button" onclick="change();" id=&qu ...
- Uncaught TypeError: Cannot read property 'post' of undefined
- ZooKeeper监控
http://jm-blog.aliapp.com/?p=1450 在公司内部,有不少应用已经强依赖zookeeper,zookeeper的工作状态直接影响它们的正常工作.目前开源世界中暂没有一个比较 ...
- [D3] 2. Basics of SVG
1. svg should use 'fill' prop instead 'background-color'2. svg width & height no need 'px'3. att ...
- 基于bootstrap面板的类别多选栏
1.html部分 <div class="panel panel-default"> <div class="panel-heading"&g ...
- Class Fxp\Composer\AssetPlugin\Repository\NpmRepository does not exist
使用 composer 安装 laravel 时报错, 如下: [ReflectionException] Class Fxp\Composer\AssetPlugin\Repository\NpmR ...
- Mysql中int(1)的误解及说明
在mysql中使用int相关的数据类型时, 如果不太了解其存储方式, 会产生一些误用的情况. 如: 只保存0-9之间的数字, 可能会直接用int(1). 习惯性的以为int(1)就相当于varchar ...
- 我的Shell + VIM配置
1. 安装powerline-shell 下载powerline-shell # cd /opt/ # git clone https://github.com/milkbikis/powerline ...