c语言程序设计案例教程(第2版)笔记(三)—变量、结构体
零散知识点:
- 变量 :C语言中,每个变量必须先定义后引用。所谓变量存在是指系统为这个变量分配一块存储空间,此时对变量的操作,就是对变量所对应的存储空间中存放的数据进行操作。人们将变量占据存储空间的时间称为变量的生存期,将变量可以引用的区域称为变量的作用域。变量的作用域依赖于变量定义的位置。
- 全局变量:在函数外部定义的变量称为全局变量。全局变量的生命期是定义这个变量的程序文件,作用域是从定义处开始到程序文件的结束处为止。如果程序文件中的某些局部变量与之同名,则全局变量的作用域应该减去这部分区域。
- 局部变量:在函数内部定义的变量,包括参数表中定义的形式参数被称为局部变量。局部变量的生存期和作用域是定义这些变量的函数。如果函数中出现与局部变量同名的块变量,局部变量的作用域将是减去块变量存在的区域,但它的生命周期并没有结束。(不同函数之间可以相同名字的变量)
- 块变量 :在复合语句中定义的变量称为块变量。块变量的生命期仅为定义它的复合语句块。优点:可以提高存储空间的利用率。
- 静态变量:变量在程序开始运行时系统就为其分配存储空间,等到程序结束时才将为其分配的所有存储空间回收。
- 格式: static 数据类型 变量名;
- 说明:
- 全局变量都具有静态变量的性质
- 在默认情况下,函数内部定义的变量属于自动变量
- 定义为静态变量的变量,只有在首次使用的时候进行初始化,随后的调用不再进行初始化
- 函数的形式参数必须是自动变量。因此在C语言中,不允许在定义形式参数时使用存储类别说明符
- 具有自动(auto)存储类别的变量与函数共存亡;具有静态(static)存储类别的变量与程序共存亡。
结构体 :是一种可以将若干个不同数据类型的变量组合在一起的复合型数据类型。常借助于它将表示同一对象的不同属性封装在一起。
- 优点:可以提高程序的清晰度,降低程序的复杂度,改善程序的可维护性。
- 结构体的变量称为“成员”,(在结构体中,“成员”可以属于任何一种数据类型)。其类型声明的语法格式:
struct <结构体类型名> {
<数据类型> <成员1>;
<数据类型> <成员2>;
……
<数据类型> <成员n>
};
- 在C语言中,允许用户为已经存在的数据类型起一个别名,格式为:typedef 原数据类型名 新数据类型名;
- 例如:typedef int INTEGER;
- 优点:可以提高程序的清晰度、增加程序的可读性
- 结合后:
typedef struct point_type {
Int x;
Int y;
} POINT
POINT p1, p2
等价于:
struct point_type p1, p2;
等价于:
struct point_type{
Int x;
Int y;
} p1, p2;
- 结构体类型变量的初始化:struct point_type p1 = {10,20};
- 结构体类型变量的引用:p1.x; p1.y
- 结构体类型变量的输入:scanf(“%d%d”,&p1.x,&p1.y);
- 结构体类型变量的输出:printf(“%d %d”,p1.x,p1.y);
- 结构体类型变量的赋值:p1.x=6; p1.y=8;
- 结构体代码实例:
功能描述:通过键盘输入30名学生的基本信息,并在上输出。然后,通过键盘输入一个月份和日期,查找并输出本年度在这个给定日期之后过生日的学生信息。
代码实例:
#include<stdio.h>
#pragma warning(disable:4996)
#define NUM 20
typedef struct{
int year; /*年*/
int month; /*月*/
int day; /*日*/
} DATE; typedef struct{
int num; /*学号*/
char name[]; /*姓名*/
DATE birthday; /*出生日期*/
char department[]; /*所属院系*/
char major[]; /*主修专业*/
} STUDENTINFO;
void inputINFO(STUDENTINFO s[]);
void outINFO(STUDENTINFO s[]);
void searchInfo(STUDENTINFO s[], DATE date); main()
{
STUDENTINFO s[NUM];
DATE date;
inputINFO(s);
outINFO(s);
printf("\n Enter a date(month,day):\n");
scanf("%d%d", &date.month, &date.day);
searchInfo(s, date);
} void inputINFO(STUDENTINFO s[])
{
int i;
printf("Enter %d studennts information (name,birthday,department,major):\n", NUM);
for (i = ; i < NUM; i++){
s[i].num = i + ;
scanf("%s", s[i].name);
scanf("%d%d%d", &s[i].birthday.year, &s[i].birthday.month, &s[i].birthday.day);
scanf("%s", s[i].department);
scanf("%s", s[i].major);
putchar('\n');
}
} void outINFO(STUDENTINFO s[])
{
int i;
printf("\n Num Name Birthday Department Major\n");
for (i = ; i < NUM; i++){
printf("%4d %14s %4d/%2d/%2d %16s %16s",
s[i].num, s[i].name, s[i].birthday.year, s[i].birthday.month, s[i].birthday.day,
s[i].department, s[i].major);
putchar('\n');
}
} void searchInfo(STUDENTINFO s[], DATE date)
{
int i;
for (i = ; i < NUM; i++){
if (s[i].birthday.month>date.month){
printf("\n%4d %16s %2d/%2d", s[i].num,s[i].name, s[i].birthday.month,
s[i].birthday.day);
continue;
}
if (s[i].birthday.month == date.month && s[i].birthday.day>date.day){
printf("\n%4d %16s %2d/%2d", s[i].num, s[i].name, s[i].birthday.month,
s[i].birthday.day);
}
}
}
本博客内容为原创,版权所有违者必究,转载请注明来源 http://www.cnblogs.com/sunshine-blog/
c语言程序设计案例教程(第2版)笔记(三)—变量、结构体的更多相关文章
- c语言程序设计案例教程(第2版)笔记(四)—指针、分配存储空间、文件
零散知识点: 指针类型:每个变量占用的首单元地址称为这个变量的存储地址. “&”为“取地址运算符”.格式:& 变量名.功能:返回指定变量的存储地址. “*”为“取内容运算”.格式:* ...
- c语言程序设计案例教程(第2版)笔记(二)—函数、递归
零散知识点 模块化:将一个问题分解成若干个子问题的过程成为模块化. 模块化的优点:不但可以将一个复杂的问题分解成几个相对简单的问题:还可以提高程序代码的重用性. 函数:函数是构成C程序的基本单位.函数 ...
- c语言程序设计案例教程(第2版)笔记(六)—字符串处理实例
字符串处理 功能描述:从键盘输入一个文本行后,为用户提供菜单选择,实现字符串一些操作——显示文本行.查找并替换指定子串.删除指定子串.统计指定子串数目. 实现代码: #include<stdio ...
- c语言程序设计案例教程(第2版)笔记(五)-软件开发基础知识
零散知识点: 软件的主要特征 软件是一种逻辑产品,而不是有型的物质: 软件需要设计.开发,但不是传统意义上的产品制造: 软件不会磨损,但软件需要维护,即:修改代码或增加模块: 虽然软件行业正在向基于组 ...
- c语言程序设计案例教程(第2版)笔记(一)—零散、输入输出、最小公倍数、选择排序、冒泡排序
零散知识点: 非格式化输入输出:getchar().putchar() 格式化输入输出 :scanf().printf() 字符串输入输出 :gets() 或 scanf().puts() 或 ...
- Just oj 2018 C语言程序设计竞赛(高级组)F:Star(结构体排序+最小生成树)
F: Star Time Limit: 1 s Memory Limit: 128 MB Submit My Status Problem Description 31世纪,人类世界的科技已 ...
- Go语言学习笔记十: 结构体
Go语言学习笔记十: 结构体 Go语言的结构体语法和C语言类似.而结构体这个概念就类似高级语言Java中的类. 结构体定义 结构体有两个关键字type和struct,中间夹着一个结构体名称.大括号里面 ...
- 0031 Java学习笔记-梁勇著《Java语言程序设计-基础篇 第十版》英语单词
第01章 计算机.程序和Java概述 CPU(Central Processing Unit) * 中央处理器 Control Unit * 控制单元 arithmetic/logic unit /ə ...
- C语言学习书籍推荐《C语言程序设计 现代方法(第2版)》下载
下载地址:点我 C语言仍然是计算机领域的通用语言之一,但现在的C语言已经和当初的时候大不相同了.本书主要的一个目的就是通过一种“现代方法”来介绍C语言,书中强调标准C,强调软件工程,不再强调“手工优化 ...
随机推荐
- Python---django轻量级框架
Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...
- DELPHI最新的产品路线图
1)根据众多像您一样的客户要求,我们改为一年一个重大版本及更多更新.这个计划回到一年发布周期并提供额外的2或3个包含附加功能及支持期间发布的新版操作系统的更新. 2)在 RAD Studio 10. ...
- Meteor package.js
在本章中,我们将学习如何创建自己的 meteor 包. 创建包 让我们添加在桌面上的新文件夹用来创建新的包.使用命令提示符窗口执行如下命令. C:\Users\Administrator\Deskto ...
- linux 解压zip文件
linux 解压zip文件 学习了:https://blog.csdn.net/hbcui1984/article/details/1583796 unzip xx.zip
- CentOS LAMP一键安装网站环境及添加域名
一般的VPS用户普遍使用一键安装包和WEB管理面板居多,在一键安装包中,使用LAMP和LNMP的普遍居多. 第一个版本的LAMP环境包安装过程以及建站过程分享出来. 第一.LAMP一键包环境的安装 目 ...
- day5-WordCount
1. wordcount示例开发 1.1. wordcount程序整体运行流程示意图 map阶段: 将每一行文本数据变成<单词,1>这样的kv数据 reduce阶段:将相同单词的一组k ...
- 深入理解 C 指针阅读笔记 -- 第六章
Chapter6.h #ifndef __CHAPTER_6_ #define __CHAPTER_6_ /*<深入理解C指针>学习笔记 -- 第六章*/ typedef struct _ ...
- 微信小程序之 ShoppingCart(购物车)
1.项目目录 2.逻辑层 group.js // pages/group/group.js Page({ /** * 页面的初始数据 */ data: { goodslist: [ { id: &qu ...
- iOS开发-UITableView单选多选/复选实现1
TableView怎样实现单选或者多选呢? 我们的直接思路是改动某一个Cell的样式就可以, 那么改动样式须要通过改动相应的数据, 从这里能够判断我们须要给Cell相应的数据设置一个标志位, 当选中的 ...
- sharpdevelop 调整代码字体显示大小
SharpDevelop中使用ctrl+鼠标滚轮可以调整代码的字体显示大小