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,强调软件工程,不再强调“手工优化 ...
随机推荐
- Linux下的lds链接脚本简介(一)
转载自:http://linux.chinaunix.net/techdoc/beginner/2009/08/12/1129972.shtml 一. 概论 每一个链接过程都由链接脚本(linker ...
- [Typescript] Specify Exact Values with TypeScript’s Literal Types
A literal type is a type that represents exactly one value, e.g. one specific string or number. You ...
- 【安卓笔记】抽屉式布局----DrawerLayout
效果例如以下: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hkamo=/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...
- 获取当前时间 YYYY-MM-DD
1.函数封装 /** * 获取当前时间 * 格式YYYY-MM-DD */ Vue.prototype.getNowFormatDate = function() { var date = new D ...
- 区分Integer.getInteger和Integer.valueOf、Integer.parseInt() 的使用方法
Integer类有两个看起来很类似的静态方法,一个是Integer.getInteger(String),另外一个是Integer.valueOf(String).如果只看方法名称的话,很容易将这两个 ...
- POJ 2545+2591+2247+1338简单水题
[题意简述]:就是有这种一个序列.就拿当p1 = 2,p2 = 3, p3 = 5,来举例.由这三个数为基准组成的序列是: 2,3,4,5,6,8,9,10,12--如今给你这个序列数组的下标,让你求 ...
- Centos 6.4 实际工作环境搭建(LNMP)
基本配置 服务器IP设置.编辑网卡配置文件,命令: vi /etc/sysconfig/network-scripts/ifcfg-eth0 注:ifcfg-eth0参数 TYPE=Ethernet ...
- 使用OnScrollListener回调处理自己主动载入很多其它
首先来分析下OnScrollListener的回调. new OnScrollListener() { boolean isLastRow = false; @Override public void ...
- [学习笔记]渗透测试metasploit
1.渗透成功后,在meterpreter命令行,需要使用如下命令切换当前目录.更多信息,可以参考: meterpreter > pwd C:\ meterpreter > cd /&quo ...
- CXF 中自定义SOAPHeader
Interceptor是CXF架构中一个很有特色的模式.你可以在不对核心模块进行修改的情况下,动态添加很多功能.这对于CXF这个以处理消息为中心的服务框架来说是非常有用的,CXF通过在Intercep ...