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遍历路径下文件并转换成UTF-8编码
http://www.cnblogs.com/wuyuegb2312/archive/2013/01/11/2856772.html 开始学Python,这篇文章来自于应用需求. os.walk很方便 ...
- linux 下的特殊文件 /dev/null 和 /de/zero
生成一个100Mb的文件 : time dd of=2Gb.file if=/dev/zero bs=1024 count=100000 ubuntu 下测试磁盘的读写性能: 测试写: time d ...
- 【安卓笔记】抽屉式布局----DrawerLayout
效果例如以下: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hkamo=/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...
- 常用近百个js代码汇总
//檢查空串 function isEmpty(str){ )) return (true); else return(false); } //檢查是否未數字 function isDigit(the ...
- 高效5步走,高速搭建Hadoop2伪分布环境
前两天将Hadoop2的全然分布式搭建文档整理公布于网上(http://blog.csdn.net/aaronhadoop/article/details/24859369).朋友相邀.就再将Hado ...
- struts2的文件上传机制
Struts2的上传(基本流程例如以下) 1.Struts2默认採用了apache commons-fileupload 2.Struts2支持三种类型的上传组件 3.须要引入commons-file ...
- 我的kindle书单
刚刚入手kindle,希望能够持续阅读,不断进步. 列下书单,记录我的阅读足迹,更希望园友若有好书多多推荐,互相交流. # keep updating ... 我的kindle书单 book name ...
- 比 git log 更强大的 git reflog
最近做了个骚操作 git checkout commitId 修改了部分内容 git add . git commit -m '修改了些东西' -> 此时git 会自动生成一个新的 comm ...
- angularjs学习之六(angularjs中directive指令的一般编程事件绑定 模板使用等)
angular js 中模板的使用.事件绑定以及指令与指令之间的交互 相应教学视频地址(需FQ):v=aG8VD0KvUw4">angularjs教学视频 <!doctype h ...
- mongodb01--安装
配置Mongo服务端 安装MongoDB 1.按照操作系统下载http://www.mongodb.org/downloads. 2.在D盘新建MongoDB文件夹(此文件夹为自定义的数据库安装目录D ...