简单学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. ...
随机推荐
- 探索AutoLayout的本质和解决一些问题
最近频繁使用AutoLayout,记录下自己的一些发现和问题的解决(不是教程) 1.简介 Auto Layout 是苹果在 iOS 6中新引入的布局方式,旨在解决不同尺寸屏幕的适配问题. 屏幕适配工作 ...
- Js- 在一个JS文件中引用另一个JS文件
在调用文件的顶部加入下例代码: document.write(”<script language=javascript src=’/js/import.js’></script> ...
- 高性能MySql进化论(十一):常见查询语句的优化
总结一下常见查询语句的优化方式 1 COUNT 1. COUNT的作用 · COUNT(table.filed)统计的该字段非空值的记录行数 · ...
- 圣诞节来了,雪花纷飞的CSS3动画,还不首页用起来
圣诞节来了,冬天来了,怎么可以没有雪花纷飞效果,昨天下班前折腾了一会儿,弄了个雪花纷飞的实例,有兴趣的可以交流分享下. 原文链接:http://www.html5think.com/article/i ...
- 50个Android开发技巧(24 处理ListView数据为空的情况)
在移动平台上为用户展示数据的一个经常用法是将数据填充进一个List内,而此时须要注意的一点就是: 原文地址:(http://blog.csdn.net/vector_yi/article/d ...
- WIN32 根据程序名(映像名称)终止外部程序
场景: 1.有时候需要调用外部程序,但是外部程序有可能崩溃挂起,这样这个进程就没法结束,所以再在下次调用前需要先结束之前调用的. 2.没考虑到权限问题,应该是只能终止当前用户启动的进程. #inclu ...
- android智能天气闹钟应用开发经过
开发这个应用的初衷是这样产生滴,和我一块租房的同学每天早上都是骑单车上班,所以手机闹钟就会定一个刚好适合骑车的起床时间点.但是呢,有一天早上起床以后发现外面下挺大雨,肯定是不能骑车去上班了,于是就只好 ...
- NDK-r7以上版本部署方法
一.关于NDK: NDK全称:Native Development Kit. 1.NDK是一系列工具的集合. NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和jav ...
- SAMBA用户访问指定的目录
指定某个用户访问一个特定的共享文件夹sfx 用户可以访问abc目录 别的用户不可以访问abc目录 先创建一个用户命令useradd sfx 创建一个smbpasswd用户 在创建这个用户时要先创建一个 ...
- quartz简单实现
quartz介绍 在我们的项目中,经常会遇到某个任务需要在特定的时间点执行,这个时间点可能是每天的某分某秒,可能是一周的指定某个星期某个时间等:quartz就是实现这样一个复杂任务调度逻辑的框架. 官 ...