邪恶八进制短期C培训教材《说C》(第二部分)
邪恶八进制短期C培训教材《说C》(第一部分)
练习的方法也不应该是死做书上的习题。习题的目的是帮助学习者巩固语法知识,便于其熟练使用而已。学习者做完了习题最多是懂得怎么用语法,但还没有到懂得何时用什么语法的程度。要想达到自由地编程,或者是下意识地编程的程度,必须是分析实际的功能需求,仿照已有的程序来编码才可达成。比方说一个菜单,看的XX概就是会用,但程序员应该从编程的角度去看这个菜单。有目的地思考“我如何实现这个菜单的功能”之类实际问题,更能锻炼出真正的编程能力,而不是简单地应试。换句话说,就是先懂得分析,然后才懂得设计,最后是懂得编码。编码人人都能懂,但分析设计却不是个个都会的。这也可算是编程爱好者与程序员的本质区别了吧。
以上就是我们可以从极小化的经典C代码中看出的一些东西。不过每一个东西都足够让我们研究好长一段时间了(主要是“意会”的时间太长了:()。Letusgo!顶部 无锋之刃 发布于:2005-02-2514:25 [6楼]
2 雄关漫道从头越
2.1 小是小非的问题
2.1.1 常量与变量
编程中用得最多的,大概就是常量和变量了。
constinti=0;/*实质是个变量*/
i=1;/*哈,编译器知道你“想在逻辑上改变常量值”的意图,不会让你通过的*/
*常量
通常常量分两个层次,即物理存储的常量与逻辑常量。物理层面(特指RAM中)的常量并不存在,因为RAM本身就是可读可写的,并没有什么物理机制可以限定RAM中某区域的读写权限。所以存储在RAM中的常量实质是个变量。那为什么称其为常量呢?
河海大学考试参考书目
工业工程导论 工业工程综合
金融综合
国际商务综合
资产评估综合
法学综合
社会工作综合考查
综合英语
综合日语
会计综合
cksm 请参考相应的本科专业通用教材 请参考相应的本科专业通用教材 请参考相应的本科专业通用教材 请参考相应的本科专业通用教材 请参考相应的本科专业通用教材 请参考相应的本科专业通用教材 请参考相应的本科专业通用教材 请参考相应的本科专业通用教材 请参考相应的本科专业通用教材 请参考相应的本科专业通用教材 请参考相应的本科专业通用教材 请参考相应的本科专业通用教材 请参考相应的本科专业通用教材 请参考相应的本科专业通用教材 请参考相应的本科专业通用教材 请参考相应的本科专业通用教材 请参考相应的本科专业通用教材 请参考相应的本科专业通用教材 请参考相应的本科专业通用教材 请参考相应的本科专业通用教材 请参考相应的本科专业通用教材 请参考相应的本科专业通用教材 请参考相应的本科专业通用教材 请参考相应的本科专业通用教材 请参考相应的本科专业通用教材 《理论力学》武清玺、冯奇主编,高等教育出版社,2003年 《欧洲哲学通史》冒从虎主编,南开大学出版社。
说明:按照教育部规定,学校不提供考试科目参考书,以下书籍仅为参考。
dwdm 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294 10294
21天学通C++(第8版)
轻量级C++经典教程
Sams Teach Yourself C++ in One Hour a Day
Eighth Edition 涵盖C++14和C++17新标准
中文版 累70计00销0量册
21天学通
C++(第8版) [美] Siddhartha Rao 著 袁国忠 译
本书是你学习C++编程语言的不二之选。
针对的读者
本书从最基本的 C++知识开始介绍,读者只需具备学习 C++的愿望及了解工作原理的好奇心即可; 虽然具备一些 C++知识会有所帮助,但这并非必须。本书也可供熟悉 C++但想了解其新增功能的读者 参考。如果您是专业程序员,第三部分(学习标准模板库)将有助于您创建更优质、更实用的 C++应 用程序。
分类建议:计算机 / 程序设计 / C++ 人民邮电出版社网址:
21天学通
C++(第8版) [美] Siddhartha Rao 著 袁国忠 译
人民邮电出版社
北京
版权声明
Siddhartha Rao: Sams Teach Yourself C++ in One Hour a Day(8th Edition) ISBN: 0789757745 Copyright © 2017 by Pearson Education, Inc. Authorized translation from the English languages edition published by Pearson Education, Inc. All rights reserved. 本书中文简体字版由美国 Pearson 公司授权人民邮电出版社出版。未经出版者书面许可,对本书任何部 分不得以任何方式复制或抄袭。 版权所有,侵权必究。
邪恶八进制短期C培训教材《说C》(第三部分)
�
[原创]邪恶八进制短期C培训教材《说C》(第三部分)
文章标题:[原创]邪恶八进制短期C培训教材《说C》(第三部分)顶部 无锋之刃 发布于:2005-04-0300:18 [楼主][原创]邪恶八进制短期C培训教材《说C》(第三部分)
文章作者:无锋之刃[E.S.T顾问团成员]
信息来源:邪恶八进制安全小组
好久不写东西了,都快没有激情了……
大家随便看看咯。
2.1 新长征路的起点
2.1.1 数据与类型
 从信息到数据
程序设计的过程,就是把易于被人类理解的信息(比如文字、图像等)转换成易于机器理解的信息(比如电压、电流)。换言之,就是进行从“物理”到“逻辑”的抽象。
人类能够理解的信息种类多之又多,文字、图像、音频、视频……无所不包。尽管表达方式不同,这些信息都有一个共同点:信息量值是连续的(模拟的)。比如色彩,拿一块三棱玻璃镜进行分光实验,可以看到自然白光被分成了七种近似离散(能相互区别开的)的色光带。实际上色光值是连续变化的,只是肉眼分辨不出罢了,因为决定色光量值的是波频率本身是连续的。可见相邻色光的色彩是近似的,彼此相关又彼此不同。人眼无从分辨如此细小的变化,看到的色带是近似离散,即包含七、八种主色调。
存储问题解决,表示问题来了。二进制信息方便了存储,却不方便表示。按照人类的习惯,应该是以十进制进行计算(汇编中为了照顾十进制计算,设置了特定的指令进行结果调整)然后表示出来。因此,二进制信息值最后要转换成为十进制的值,方可便于用户接受。一般来说,不同的编程语言所附带的函数库中都会包含此类二进制/十进制相互转换的函数,或是直接将转换结果显示到标准输出设备的函数(典型的有printf)。
国考C语言二级实训教材
前言本教材为C二级实训教材,教材主要针对国家计算机等级考试(NCRE)二级C语言笔试内容进行设计。
教材以二级考点为总纲进行编写,主要内容包括:●最新二级考试大纲;●二级考试基础知识串讲及习题;●C语言二级知识点串讲及部分习题;●C语言二级真题详细讲解;本教材是讲解C语言程序设计及进行多次C语言二级培训的教师集体编写,适用于学生自学、课程安排的二级实训、以及教师培训参考等。
如果为教学和学生实训用建议授课学时为30—40学时。
由于教材编写时间仓促,书中不足望读者和同行不吝指出。
电子计算机系C语言教学组目录第一部分最新国家计算机等级考试二级C语言笔试大纲 (1)1.1 公共基础知识 (1)1.1.1 基本要求 (1)1.1.2 考试内容 (1)1.1.3 考试方式 (2)1.2 C语言程序设计 (2)1.2.1 基本要求 (2)1.2.2 考试内容 (2)第二部分基础知识部分串讲 (4)2.1 数据结构和算法 (4)一、算法的基本概念 (4)二、数据结构的基本概念 (5)三、线性结构——顺序表 (6)四、线性结构——栈和队列 (6)五、线性结构——链表 (7)六、树和二叉树结构 (8)七、查找算法 (9)八、排序算法 (9)习题1 (10)2.2 程序设计基础知识 (11)一、程序设计的方法与风格 (11)二、结构化程序设计 (11)三、面向对象的程序设计 (12)习题2 (13)2.3 数据库设计基础 (14)一、数据库基本概念 (14)二、概念模型 (14)三、关系模型 (15)四、关系数据库运算 (15)五、数据库设计方法和步骤 (17)习题3 (17)2.4 软件工程基础 (18)一、软件工程基本概念 (18)二、软件工程过程与软件的生命周期 (18)三、软件开发工具与软件开发环境 (20)四、结构化分析方法 (20)五、结构化设计方法 (21)六、软件测试 (21)习题4 (22)第三部分 C语言知识点串讲 (23)第一章、程序设计基本概念 (23)第二章、C程序设计的初步知识 (24)第三章、顺序结构 (25)第四章、选择结构 (26)第五章、循环结构 (27)第六章、字符型数据 (27)第七章、函数 (27)第八章、指针 (28)第九章、数组 (29)第十章、字符串 (30)第十一章、变量的作用域 (31)第十二章、编译预处理和动态分配空间 (31)第十三章、结构体、共用体和用户定义类型 (31)第十四章、位运算 (33)第十五章、文件 (33)第四部分历年C语言二级真题 (35)2009年3月份真题 (35)2008年9月份真题 (45)2008年4月份真题 (56)2007年9月份真题 (66)附录1 基础知识部分习题答案 (79)附录2 2009年3月份真题答案及解析 (80)附录3 2008年9月份真题答案及解析 (81)附录4 2008年4月份真题答案及解析 (84)附录5 2007年9月份真题答案及解析 (89)附录6 上机考试内容及要求 (92)第一部分最新国家计算机等级考试二级C语言笔试大纲1.1 公共基础知识1.1.1 基本要求1.掌握算法的基本概念。
计算机C语言自学资料二PPT
本文由jschenhb1991贡献 ppt文档可能在WAP端浏览体验不佳。
建议您优先选择TXT,或下载源文件到本机查看。
第二章 数据描述 预备知识 数据类型 常量与变量 不同类型数据间的转换 运算符和表达式 C 语 言 程 序 设 计 §2.0 预备知识 计算机中数的表示及进制转换 数码、基与权 数码:表示数的符号 基:数码的个数 权:每一位所具有的值 数制 第 二 章 数 据 描 述 < > C 语 言 程 序 设 计 各种进制之间的转换 二进制、八进制、十六进制转换成十进制 方法:按权相加 例 ( 111011) = 1 × 2 5 + 1 × 2 4 + 1 × 2 3 + 0 × 2 2 + 1 × 21 + 1 × 2 0 = 59) ( 10 2 (136) = 1 × 8 2 + 3 × 81 + 6 × 8 0 = 94) ( 10 8 (1F 2 A) = 1 × 16 3 + 15 × 16 2 + 2 × 161 + 10 × 16 0 = 7978) ( 16 10 例 第 二 章 数 据 描 述 例 < > C 语 言 程 序 设 计 各种进制之间的转换(整数) 二进制、八进制、十六进制转换成十进制 方法:按权相加 十进制转换成二进制、八进制、十六进制 原理: 方法:连续除以基,从低到高记录余数,直至商为0 第 二 章 数 据 描 述 C 语 言 程 序 设 计 二进制与八进制之间的转换 二进制转换成八进制:从右向左,每3位一组(不足3位左 补0),转换成八进制 八进制转换成二进制:用3位二进制数代替每一位八进制数 000  ̄ 0 001  ̄ 1 010  ̄ 2 011  ̄ 3 100  ̄ 4 101  ̄ 5 110  ̄ 6 111  ̄ 7 例 (1101001)2=(001,101,001)2=(151)8 例 (246)8=(010,100,110)2=(10100110)2 第 二 章 数 据 描 述 < > C 语 言 程 序 设 计 二进制与十六进制之间的转换 二进制转换成十六进制:从右向左,每4位一组 (不足4位左补0),转换成十六进制 十六进制转换成二进制:用4位二进制数代替每一 位十六进制数 例 (11010101111101)2=(0011,0101,0111,1101)2=(357D)16 例 (4B9E)16=(0100,1011,1001,1110)2=(100101110011110)2 第 二 章 数 据 描 述 0000  ̄ 0 0001  ̄ 1 0010  ̄ 2 0011  ̄ 3 0100  ̄ 4 0101  ̄ 5 0110  ̄ 6 0111  ̄ 7 1000  ̄ 8 1001  ̄ 9 1010  ̄ A 1011  ̄ B 1100  ̄ C 1101  ̄ D 1110  ̄ E 1111  ̄ F < > C 语 言 程 序 设 计 数值的表示方法——原码、反码和补码 原码:最高位为符号位,其余各位为数值本身的绝对值 反码: 正数:反码与原码相同 负数:符号位为1,其余位对原码取反 补码: 正数:原码、反码、补码相同 负数:最高位为1,其余位为原码取反,再对整个数加1 12 1 11 10 第 二 章 数 据 描 述 2 3 9 8 4 7 6 5 9-5=4 9+7=16=(14)12 < > C 语 言 程 序 设 计 (用一字节表示数) 原码 +7 -7 +0 -0 数的范围 反码 00000111 11111000 00000000 11111111 01111111 ̄ 10000000 (-127 ̄+127) 补码 00000111 11111001 00000000 00000000 01111111 ̄ 10000000 (-128 ̄+127) 00000111 10000111 00000000 10000000 01111111 ̄ 11111111 (-127 ̄+127) 负数补码转换成十进制数:最高位不动,其余位取反加1 第 二 章 数 据 描 述 例 补码:11111001 取反:10000110 加1: 10000111=-7 < > C 语 言 程 序 设 计 §2.1 数据类型 数据类型总表 基本类型 实型 整 型 短整型short 整型int 长整型long 单精度型float 双精度型double 字符类型char 数组 第 二 章 数 据 描 述 C 数 据 类 型 结构体struct 构造类型 共用体union 枚举类型enum 指针类型 空类型void 数据类型决定: 1. 数据占内存字节数 2. 数据取值范围 3. 其上可进行的操作 < > 定义类型typedef C 语 言 程 序 设 计 基本数据类型 类型 符号 关键字 (signed)int 整 型 (signed)short (signed)long unsigned int unsigned short 实 型 字 符 型 unsigned long float double char unsigned char :数据类型所占字 数 所占位数 16 16 32 16 16 32 32 64 8 8 数的表示范围 -32768 ̄32767 -32768 ̄32767 -2147483648 ̄2147483647 0 ̄65535 0 ̄65535 0 ̄4294967295 3.4e-38 ̄3.4e38 1.7e-308 ̄1.7e308 -128 ̄127 0 ̄255 , 表 IBM PC : 第 二 章 数 据 描 述 < > C 语 言 程 序 设 计 §2.2 常量与变量 标识符 定义:用来标识变量、常量、函数等的字符序列 组成: 只能由字母、数字、下划线组成,且第一个字母必须是字母或下 划线 大小写敏感 不能使用关键字 长度:最长32个字符 命名原则: 例:判断下列标识符号合法性 第 二 章 数 据 描 述 见名知意 sum Sum M.D.John 不宜混淆 如l与I, o与0 day Date 3days student_name #33 lotus_1_2_3 char a>b _above ¥123 a>b < > C 语 言 程 序 设 计 常量 定义:程序运行时其值不能改变的量(即常数) 分类: 符号常量:用标识符代表常量 定义格式: #define 符号常量 常量 一般用大写字母 例 符号常量举例(ch2_1.c) 如 #define PRICE 30 是宏定义预处理命令,不是C语句 直接常量: #define PRICE 30 整型常量 > main() 运行结果:total=300 实型常量 > { 字符常量 > int num,total; 字符串常量 > num=10; 第 二 章 数 据 描 述 total=num*PRICE; printf("total=%d",total); < > } C 语 言 程 序 设 计 整型常量(整常数) 三种形式: 十进制整数:由数字0 ̄9和正负号表示.如 123,-456,0 八进制整数:由数字0开头,后跟数字0 ̄7表示.如0123,011 十六进制整数:由0x开头,后跟0 ̄9,a ̄f,A ̄F表示. 如0x123,0Xff 第 二 章 数 据 描 述 整型常量的类型 问题: 问题: 根据其值所在范围确定其数据类型 0123 = (( 83 ))10 0123 = 10 在整常量后加字母l或L,认为它是long int 型常量 0x123 = (( 291 ))10 0x123 = 10 例 30000= 为int型 ))10 0Xff = (( 255 10 0Xff 12 与 12L 例 65536 为long int 型 < C 语 言 程 序 设 计 实型常量(实数或浮点数) 表示形式: 十进制数形式:(必须有小数点) 如0.123, .123, 123.0, 0.0, 123. 指数形式:(e或E之前必须有数字;指数必须为整数) 如12.3e3 ,123E2, 1.23e4 , e-5 , 1.2E-3.5 实型常量的类型 默认double型 在实型常量后加字母f或F,认为它是float 型 第 二 章 数 据 描 述 < 字符常量 定义:用单引号括起来的单个普通字符或转义字符. 如 ‘a’ ‘A’ ‘?’ ‘\n’ ‘\101’ 字符常量的值:该字符的ASCII码值 转义字符:反斜线后面跟一个字符或一个代码值表示 如 ‘A’——65, ‘a’——97, 转义字符及其含义: , ‘\n’——10 例 转义字符举例(ch2_001.c,ch2_004.c) ‘0’——48 main() 例: 含义 转义字符 ‘\101’ ‘A’ 转义字符 如 ‘\012’ 含义 ’\n’ 运行结果:(屏幕显示) ‘A’’\101’’\x41’65 { ‘\376’换行 ’ ’ \t ‘\x61’ ’a’ \n A B C 水平制表 printf("\101 ’0’ ‘\60’ \x42 C\n"); ‘\483’ (×)are you?” \b 垂直制表 退格 \v printf("I say:\"How are you?\"\n"); Isay:”How \C Program\ \r printf("\\C Program\\\n"); \f 回车 Turbo ‘C’ 换页 < \a printf("Turbo \'C\'"); \\ 响铃 反斜线 \‘ } \“ 单引号 双引号 \ddd 例 main() 3位8进制数代表的字符 < { } printf(“Y\b=\n”); \xhh 2位16进制数代表的字符 运行结果: 屏幕显示:= 打印机输出:¥ C 语 言 程 序 设 计 字符串常量 定义:用双引号(“”)括起来的字符序列 存储:每个字符串尾自动加一个 ‘\0’ 作为字 符串结束标志 例 字符串“hello”在内存中 例 空串 “” \0 h e l l o \0 字符常量与字符串常量不同 例 ‘a’ 第 二 章 数 据 描 述 a “a” a \0 例: 例: < char ch; char ch; ch=‘A’; ch=“A”; C 语 言 程 序 设 计 变量 概念:其值可以改变的量 Ch2_005.c 变量名与变量值 变量定义的一般格式: 数据类型 变量1[,变量2,…,变量n]; 变量初始化:定义时赋初值 例: int a=1, b=-3,c; 变量的使用:先定义,后使用 例: int a,b,c; 决定分配字节数 合法标识符 : 变量定义位置:一般放在函数开头 int a=2,b,c=4; 和数的表示范围 float data; 地址 main() main() 1 2字节 a float data=3.67; 例1 char ch=‘A’; 例2 { { int a,b=2; 地址 int a,b=2; int student; x=1,y=1,z=1; 变量定义 int -3 float a,b,c; a=1; b 2字节 float//Undefined symbol ‘statent’ in function main data; stadent=19; int c=a%b; a=1; //Illegal use of floating point in function main 地址 可执行语句 x=y=z=1; ……… ……… 第 二 章 数 据 描 述 < > float data; ×× data=(a+b)*1.2; data=(a+b)*1.2; c 编译程序根据变量定义为其 分配指定字节的内存单元 printf(“data=%f\n”,data); printf(“data=%f\n”,data); } } 内存 ……… 2字节 随机数 C 语 言 程 序 设 计 整型变量 占字节数随机器不同而不同,一般占一个机器字 short≤int≤long 可用sizeof(类型标识符)测量 实型变量 float:占4字节,提供7位有效数字 double:占8字节,提供15 ̄16位有效数字 a=111111.111; /* a=111111.1*/ 字符变量存放字符ASCII码 double b; char与int数据间可进行算术运算 b=111111.111; /* b=111111.111*/ 例 a=‘D’; /* a=68; */ 没有字符串变量,用字符数组存放 x=‘A’+5; /* x=65+5; */ s=‘!’+‘G’ /* s=33+71; */ > 例 float a; 字符型变量 第 二 章 数 据 描 述 < Ch2_006.c C 语 言 程 序 设 计 例 /*ch2_003.c*/ #define PRICE 12.5 main() { int num=3; float total; char ch1,ch2=‘D’; 宏定义 变量定义 total=num*PRICE; 输出结果 ch1=ch2-‘A’+‘a’; printf(“total=%f,ch1=%c\n”,total,ch1); } 第 二 章 数 据 描 述 运行结果: total=37.500000, ch1=d C 语 言 程 序 设 计 §2.3不同类型数据间的转换 隐式转换 什么情况下发生 运算转换不同类型数据混合运算时 赋值转换把一个值赋给与其类型不同的变量时 输出转换输出时转换成指定的输出格式 函数调用转换实参与形参类型不一致时转换 运算转换规则:不同类型数据运算时先自动转换 成同一类型 第 二 章 数 据 描 述 < > 高 double float 说明: 必定的转换 运算对象类型不同时转换 long unsigned 例 int i; float f; double d; long l; 10+‘a’ +i*f int int d/l 低 int char,short 例 char ch; int i; float f; double d; ch/i int int + f*d - (f+i) double double double double double double double double double double double < > double C 语 言 程 序 设 计 显式转换(强制转换) 一般形式:(类型名)(表达式) Ch2_007.c Ch2_008.c 例 (int)(x+y) (int)x+y (double)(3/2) (int)3.6 说明:强制转换得到所需类型的中间变量,原变 量类型不变 例 main() 精度损失问题 { float x; int i; 较高类型向较低类型转换时可能发生 x=3.6; i=(int)x; printf(“x=%f,i=%d”,x,i); } 结果:x=3.600000,i=3 第 二 章 数 据 描 述 < > C 语 言 程 序 设 计 §2.4 运算符和表达式 算术运算符:(+ - * / % ++ --) 关系运算符:(< <= == > >= !=) 逻辑运算符:((! && ||) 位运算符 :(<< >>  ̄ | ^ &) 赋值运算符:(= 及其扩展) 条件运算符:(?:) 逗号运算符:(,) 指针运算符:(* &) 求字节数 :(sizeof) 强制类型转换:(类型) 分量运算符:(. ->) 下标运算符:([]) 其它 :(( ) -) C 运 算 符 第 二 章 数 据 描 述 < > C 语 言 程 序 设 计 学习运算符应注意: 运算符功能 与运算量关系 要求运算量个数 要求运算量类型 运算符优先级别 结合方向 结果的类型 第 二 章 数 据 描 述 < > C 语 言 程 序 设 计 算术运算符和表达式 基本算术运算符: + - * / % 结合方向:从左向右 优先级: - >* / % > + (2) (3) (4) 说明: “-”可为单目运算符时,右结合性 两整数相除,结果为整数 %要求两侧均为整型数据 第 二 章 数 据 描 述 例 例 5/2 = 2 5/2 = -5/2.0 ==-2.5 -5/2.0 例 例 5%2 5%2 -5%2 -5%2 1%10 1%10 5%1 5%1 5.5%2 5.5%2 = = 1 = = -1 = = 1 = = 0 (×) < > C 语 言 程 序 设 计 自增、自减运算符++ -作用:使变量值加1或减1 种类: 前置 ++i, --i (先执行i+1或i-1,再使用i值) 后置 i++,i-- (先使用i值,再执行i+1或i-1) 例 第 二 章 数 据 描 述 j=3; k=++j; j=3; k=j++; j=3; printf(“%d”,++j); j=3; printf(“%d”,j++); a=3;b=5;c=(++a)*b; a=3;b=5;c=(a++)*b; //k=4,j=4 //k=3,j=4 //4 //3 //c=20,a=4 //c=15,a=4 < > C 语 言 程 序 设 计 自增、自减运算符++ -作用:使变量值加1或减1 种类: 前置 ++i, --i (先执行i+1或i-1,再使用i值) 后置 i++,i-- (先使用i值,再执行i+1或i-1) 说明: ++ -- 不能用于常量和表达式,如5++,(a+b)++ ++ --结合方向: 自右向左 优先级:- ++ -- >* / % >+ (2) (3) (4) 例 -i++ -(i++) 例 -i++ 例 j+++k; i=3; printf(“%d”,-i++); //-3 (j++)+k; i=3; printf(“%d”,-i++); 第 二 章 数 据 描 述 Ch2_009.c C 语 言 程 序 设 计 赋值运算符和表达式 简单赋值运算符 符号: = 格式: 变量标识符=表达式 作用:将一个数据(常量或表达式)赋给一个变量 例 a=3; 复合赋值运算符 d=func(); 种类:+= -= *= /= %= 《= 》= &= ^= |= c=d+2; 含义: exp1 op= exp2 exp1 = exp1 op exp2 a+=3 第 二 章 数 据 描 述 a=a+3 x=x*(y+8) x=x%3 x*=y+8 x%=3 < > C 语 言 程 序 设 计 说明: 结合方向:自右向左 优先级: 14 左侧必须是变量,不能是常量或表达式 例: 例 3=x-2*y; 赋值转换规则:使赋值号右边表达式值自动转换成其左边 变量的类型 a+b=3; 赋值表达式的值与变量值相等,且可嵌套 例 float f; 例 int i; i=2.56; int i; //结果i=2; i=10; f=i; a=b=c=5 //表达式值为5,a,b,c值为5 则 f=10.0 // b=5;a=5 a=(b=5) a=5+(c=6) //表达式值11,c=6,a=11 a=(b=4)+(c=6)//表达式值10,a=10,b=4,c=6 a=(b=10)/(c=2) //表达式值5,a=5,b=10,c=2 第 二 章 数 据 描 述 < > C 语 言 程 序 设 计 说明: 结合方向:自右向左 优先级: 12 左侧必须是变量,不能是常量或表达式 赋值转换规则:使赋值号右边表达式值自动转换成其左边 变量的类型 赋值表达式的值与变量值相等,且可嵌套 例: a=12; a+=a-=a*a //a=-264 等价于a=a+(a=a-(a*a)) 例: int a=2; 第 a%=4-1; 二 a+=a*=a-=a*=3; //a=0 等价于a=a+(a=a*(a=a-(a=a*3))) 章 数 据 描 述 < > C 语 言 程 序 设 计 逗号运算符和表达式 形式:表达式1,表达式2,……表达式n 结合性:从左向右 优先级: 15 逗号表达式的值:等于表达式n的值 用途:常用于循环for语句中 //a=15,表达式值60 例 a=3*5,a*4 //a=15,表达式值20 //a=15, 20 a=3*5,a*4,a+5 例 x=(a=3,6*3) //赋值表达式,表达式值18,x=18 x=a=3,6*a //逗号表达式,表达式值18,x=3 例 a=1;b=2;c=3; //1,2,3 printf(“%d,%d,%d”,a,b,c); printf(“%d,%d,%d”,(a,b,c),b,c); //3,2,3 < > 第 二 章 数 据 描 述 C 语 言 程 序 设 计 逗号运算符和表达式 形式:表达式1,表达式2,……表达式n 结合性:从左向右 优先级: 15 逗号表达式的值:等于表达式n的值 用途:常用于循环for语句中 例: /*ch2_6.c*/ #include main() 运行结果:x=3 { int x,y=7; float z=4; x=(y=y+6,y/z); printf("x=%d\n",x); } 第 二 章 数 据 描 述 < > C 语 言 程 序 设 计 关系运算符和表达式 关系运算符 种类:< <= == >= > 结合方向:自左向右 优先级别: 例 != < <= > >= == != 优先级6(高) 第 二 章 数 据 描 述 c>a+b //c>(a+b) a>b!=c //(a>b)!=c 关系表达式的值:是逻辑值“真”或“假”,用1和0表 1 0 a==b<c //a==(b<c) 示 a=b>c //a=(b>c) 例 int a=3,b=2,c=1,d,f; a>b //表达式值1 (a>b)==c //表达式值1 b+cb f=a>b>c //f=0 优先级7(低) < > C 语 言 程 序 设 计 关系运算注意: 例 若a=0; b=0.5; x=0.3; 则 a<=x<=b的值为 0 例 5>2>7>8在C中是允许的, 值为 0 例 int i=1, j=7,a; a=i+(j%4!=0); 则a= 2 1 结果为 结果为0 第 二 章 数 据 描 述 例 ‘a’>0 ‘A’>100 < > C 语 言 程 序 设 计 关系运算注意: 例 应避免对实数作相等或不等的判断 如 1.0/3.0*3.0==1.0 结果为 0 可改写为:fabs(1.0/3.0*3.0-1.0)<1e-6 例 注意区分“=”与“==” int a=0,b=1; if(a=b) printf(“a equal to b”); else printf(“a not equal to b”); 第 二 章 数 据 描 述 C 语 言 程 序 设 计 逻辑运算符和表达式 逻辑运算符 种类: ! && || 逻辑运算真值表 a 真 真 假 假 b 真 假 真 假 !a 假 假 真 真 !b 假 真 假 真 a&&b 真 假 假 假 a||b 真 真 真 假 第 二 章 数 据 描 述 C语言中,运算量: 0表示“假”, 非0表示“真”, 运算结果: 0表示“假”, 1表示“真”, < > C 语 言 程 序 设 计 优先级: 结合方向: ! (2) 高 ! :从右向左 && (11) || (12) 低 && :从左向右 || :从左向右 例 a<=x && x<=b // (a<=x) && (x<=b) a>b&&x>y //(a>b)&&(x>y) a==b||x==y //(a==b)||(x==y) !a||a>b //(!a)||(a>b) 第 二 章 数 据 描 述 < > C 语 言 程 序 设 计 优先级: 结合方向: ! (2) 高 ! :从右向左 && (11) || (12) 低 && :从左向右 || :从左向右 第 二 章 数 据 描 述 例 a=4;b=5; !a 值为0 a&&b 值为1 值为1 a||b !a||b 值为1 4&&0||2 值为1 5>3&&2||8<4-!0 //(5>3)&&2||(8<(4-(!0))) 值为1 值为1 ‘c’&&‘d’ < > C 语 言 程 序 设 计 优先级: 结合方向: ! (2) 高 ! :从右向左 && (11) || (12) 低 && :从左向右 || :从左向右 短路特性:逻辑表达式求解时,并非所有的逻辑运算 符都被执行,只是在必须执行下一个逻辑运算符才能 求出表达式的解时,才执行该运算符 例 a&&b&&c 第 二 章 数 据 描 述 < > //只在a为真时,才判别b的值; 只在a、b都为真时,才判别 c的值 例 a||b||c //只在a为假时,才判别b的值; 只在a、b都为假时,才判别 c的值 例 a=1;b=2;c=3;d=4;m=1;n=1; (m=a>b)&&(n=c>d) //结果m=0,n=1 C 语 言 程 序 设 计 条件运算符与表达式 一般形式: expr1 ? expr2 : expr3 执行过程 功能:相当于条件语句,但不能取代一般if语句 例 求(a>b) if a+|b| 例 (a==b)?’Y’:’N’ 条件运算符可嵌套 例 printf(“%d”,a); printf(“a+|b|=%d\n”,b>0?a+b:a-b); printf(“%d”,a>b?a:b); (x%2==1)?1:0 如 else x>0?1:(x<0?-1:0) =0 非0 (x>=0)?x:-x printf(“%d”,b); expr1 优先级: && c<=‘z’)?c-’a’+’A’:c (c>=‘a’ 13 第 二 章 数 据 描 述 结合方向:自右向左 取expr2值 取expr3值 如 a>b?a:c>d?c:d ? a>b?a:(c>d?c:d) expr1、expr2、expr3类型可不同,表达式值取较高 的类型 例 x?‘a’:‘b’ //x=0,表达式值为‘b’; x?0,表达式值为‘a’ x>y?1:1.5 //x>y ,值为1.0; x<y ,值为1.5 < > 1本文由jschenhb1991贡献 ppt文档可能在WAP端浏览体验不佳。
2007年开卷八分钟书单
2007《开卷八分钟》书单2007年1月2007年2月[07.01.01] 书读完了[07.01.02] 扎比芭与国王[07.01.03] 唐代的外来文明[07.01.04] 大崩坏[07.01.05] No Smoking[07.01.08] 群众的智慧[07.01.09] 今日的伊斯兰[07.01.10] 千面美食家[07.01.11] 兵以诈立我读孙子[07.01.12] 动物必须刷牙吗?[07.01.15] 十年后的台湾[07.01.16] 民主是个好东西[07.01.17] 东写西读[07.01.18] 与生命相约[07.01.19] 处处有音乐[07.01.22] 论语释注[07.01.23] 于丹《论语》心得[07.01.24] 论語今读[07.01.25] 古代中国的思想世界[07.01.26] 优入圣域[07.01.29] 失语者的呼声[07.01.30] 长尾理论[07.01.31] 《碧奴》——苏童重述孟姜女传说[07.02.01] 图解人体使用手册[07.02.02] 尼古丁女郎[07.02.05] 创意新贵[07.02.06] 朗读者[07.02.07] 当中医遇到西医[07.02.08] The Coming China Wars [07.02.09] 光的故事[07.02.12] 永经堂[07.02.13] 二零零七猪年运程[07.02.14] 中国方术考[07.02.15] 天学真原[07.02.16] 神算——中国术数的秘密[07.02.26] 记忆火车[07.02.27] 《新知客》杂志[07.02.28] 伶人往事[07.03.01] 论馈赠[07.03.02] 论馈赠(续)[07.03.05] 台湾《商业周刊》[07.03.06] 芬兰惊艳[07.03.07] 前进杜拜[07.03.08] 净土不丹[07.03.09] MICRO NATIONS [07.03.12] 流浪集[07.03.13] 天下美食[07.03.14] 天工开物栩栩如真[07.03.15] 城市个人安全手册[07.03.16] 随风而行[07.03.19] 原乡人:族群的故事[07.03.20] 最后的黄埔[07.03.21] 共同体:世界图像下的台湾[07.03.22] 四海困穷[07.03.23] 成为“日本人”[07.03.26] 希罗多德历史(一)[07.03.27] 希罗多德历史(二)[07.03.28] 希罗多德历史(三)[07.03.29] PERSIAN FIRE[07.03.30] 卢比孔河[07.04.02] 一章“木椅”[07.04.03] 追逐日光[07.04.04] 右手左手(一)[07.04.05] 右手左手(二)[07.04.06] 拥有太多爱情的男人[07.04.09] 消费社会[07.04.10] 消费社会(二)[07.04.11] 江户日本[07.04.12] 整形日本[07.04.13] 无约束的日本[07.04.16] 清俗纪闻[07.04.17] 近代日本的中国认识[07.04.18] 对中国文化的乡愁[07.04.19] 中国与日本的他者认识[07.04.20] 暧昧的日本人[07.04.23] MONOCLE[07.04.24] 香港华人家族企业个案研究[07.04.25] 卧底经济学[07.04.26] 好绘本如何好[07.04.27] 山南水北[07.04.30] 美国大城市的死与生[07.05.01] Planet of Slums[07.05.02] 城市的世界[07.05.03] 城里[07.05.04] 社区建筑[07.05.07] 王小波10岁[07.05.08] 黄金时代[07.05.09] 理想国与哲人王[07.05.10] 个人尊严[07.05.11] 沉默的大多数[07.05.14] 医事[07.05.15] 当世界年纪还小的时候[07.05.16] 伊斯坦布尔:一座城市的记忆[07.05.17] 郁金香热[07.05.18] The Elephant in the Room [07.05.21] 我的千岁寒(上)[07.05.22] 我的千岁寒(下)[07.05.23] 顽主[07.05.24] 顽主(二)[07.05.25] 顽主(三)[07.05.28] 一行禅师释佛[07.05.29] Slow Living[07.05.30] 十六世纪大不列颠女性统治之辩[07.05.31] 追忆[07.06.01] 剑鸟[07.06.04] 彳亍地平线I,II[07.06.05] 丧家狗[07.06.06] 丧家狗(续)[07.06.07] 画堂香事[07.06.08] 你最重要的东西是什么?[07.06.11] 上访者[07.06.12] 大河移民上访的故事[07.06.13] Purity and Danger[07.06.14] 追寻失落的圆明园[07.06.15] 佛教与素食[07.06.18] No Logo[07.06.19] Delaying the real world[07.06.20] 写在救援侧面——无国界医生的故事[07.06.21] 一万封信[07.06.22] The Rough Guide to Ethical Living [07.06.25] 历史的沉重[07.06.26] 历史的沉重(二)[07.06.27] 香港人之香港史[07.06.28] 香港六七暴动内情[07.06.29] 香港风格[07.07.02] 香港,多一点颜色[07.07.03] Uneasy Partners[07.07.04] 穷到极[07.07.05] 天水围十二师奶[07.07.06] 我这一代香港人[07.07.09] 寻访抗战老兵[07.07.11] 日本帝国主义研究[07.07.12] 走向“最后关头”(上)[07.07.13] 走向“最后关头”(下)[07.07.16] 原乡精神[07.07.17] 我会做好呢份工[07.07.18] 迈向美丽之国[07.07.19] 关于主体哲学[07.07.20] The Audacity of Hope[07.07.23] 如何阅读一本书[07.07.24] 如何阅读一本书(续)[07.07.25] 梁文道教你读书并择书[07.07.26] 为什么需要阅读不同类型的书籍[07.07.27] 文道答网友们的诸多问题[07.07.30] 哈利波特与死圣[07.07.31] 哈里波特·神秘的魔法石[07.08.01] 哈里波特·神秘的魔法石(续)[07.08.02] 《哈利波特与死圣》不好看?[07.08.03] 深入解读《哈利波特》[07.08.06] 有关品位(上)[07.08.07] 有关品位(下)[07.08.08] 跟着大亨去旅行[07.08.09] 奢迷[07.08.10] 亚洲名牌圣教[07.08.13] 真相何在[07.08.14] 笔底波澜[07.08.15] 旧闻记者[07.08.16] 别对我撒谎[07.08.20] 读书[07.08.21] 读书(续)[07.08.22] 《纽约时报书评》和《纽约书评》[07.08.23] 《读书》现场[07.08.24] London Review of Books[07.08.27] 说来话儿长[07.08.28] 厕神-厕所的文明史[07.08.29] 嘘嘘嗯嗯屁屁[07.08.30] 尴尬的气味[07.08.31] History of Sh[07.09.03] 伊利亚随笔选[07.09.04] 伊利亚随笔选(二)[07.09.05] 退步集续编[07.09.06] 哥伦比亚的倒影[07.09.07] 从前[07.09.10] 马利与我[07.09.11] 成为家中一员的麻雀小珠[07.09.12] 我的野生动物朋友[07.09.13] 猫啊,猫[07.09.14] The Companion Species Manifesto [07.09.17] 一个经济杀手的自白[07.09.18] Who Paid the Piper[07.09.19] Imperial Grunts[07.09.20] Interventions[07.09.21] 美国实力的衰落[07.09.24] 惯于赞同[07.09.25] Common Sense[07.09.26] 独立宣言[07.09.27] 如彗星划过夜空[07.09.28] 联邦论[07.10.01] 民主在美国[07.10.02] 民主在美国(续)[07.10.03] SETTING THE PEOPLE FREE[07.10.04] The Transformation of Chinese Socialisam [07.10.05] 大论战:民主社会主义与中国出路[07.10.08] 郁金香[07.10.09] 色戒爱玲[07.10.10] 今生今世[07.10.11] 上海歹土[07.10.12] Collaboration[07.10.15] 数盲世界[07.10.16] 数学符号史[07.10.17] 费玛最后定律[07.10.18] 笛卡尔之梦[07.10.19] 丈量世界[07.10.22] The Cleft[07.10.23] The Cleft(二)[07.10.24] 金色笔记(上)[07.10.25] 金色笔记(下)[07.10.26] 特别的猫[07.10.29] Illumination[07.10.30] 书天堂[07.10.31] 搜书记[07.11.01] 生涯一蠹魚[07.11.02] 古本屋女主人[07.11.05] 切·格瓦拉[07.11.06] 切·格瓦拉之谜[07.11.07] 切·格瓦拉语录[07.11.08] Che Guevara Icon,Myth,and Message [07.11.09] 切·格瓦拉之死[07.11.12] 晚明七十年[07.11.13] 万历十五年[07.11.14] 晚明史[07.11.15] 纵乐的困惑[07.11.16] Return to Dragon Mountain[07.11.19] 逝去的武林[07.11.20] 侠隐[07.11.21] 梁文道谈金庸武侠[07.11.22] 梁文道谈金庸武侠(续)[07.11.23] 梁文道谈金庸武侠(三)[07.11.26] 畅销书风貌[07.11.27] 畅销书风貌(续)[07.11.28] 灰皮书,黄皮书[07.11.29] 阅读的故事[07.11.30] How to talk about books you haven't read[07.12.03] 摩西五经[07.12.04] 创世纪传说与译注[07.12.05] 宽宽信箱与出埃及记[07.12.06] Whose Bible Is It?[07.12.07] Truth and Fiction in The Da Vinci Code [07.12.10] 山楂树之恋[07.12.11] 时空旅人之妻[07.12.12] 时空旅人之妻(续)[07.12.13] 霍乱时期的爱情[07.12.14] 霍乱时期的爱情(续)[07.12.17] 货币战争[07.12.18] 货币战争(续)[07.12.19] 企业的性格与命运[07.12.20] 当企业购并国家[07.12.21] 境外共和国[07.12.24] 物种起源[07.12.25] 生命的壮阔[07.12.26] 自私的基因[07.12.27] 蝴蝶斑马与胚胎[07.12.28] 创世论与进化论的世纪之争[07.12.31] 文道总结读书方法。
ch02.pdf[共27页]
C 语言提供了丰富的数据类型(data type)来表达信息(及其存储方式)。图 2‐1 是 C 语言 数据类型的结构图。
图 2-1 C 语言数据类型
1.图中没有列出 C99 增加的数据类型,例如_Bool、_Complex 等。有兴趣的读者可以去查 阅 C99 标准的相关资料。
2.修饰符 unsigned 意为无符号,表示它修饰的类型的数只能是 0 或者正数;signed 意为有 符号。“[]”表示它括起的内容可以省略;“|”表示它前后的修饰符只能选一个。如果一个整数 类型没有前面的符号修饰符,那么根据 C 语言的规定,这个类型默认为是 signed。
2.1 问题的引入
速算比赛的组织者提出的关于程序的要求较多,而读者现在可能缺乏相应的知识。所以,现 在将整个问题分解成最基本的小问题,而这些小问题会涉及 C 语言最基础的知识点。
首先要考虑信息的表示和存储问题。在组织者提出的要求中,有一个是要求信息在内存中存 储。那么先来分析一下哪些信息需要存储。根据要求,以下这些信息是需要存储的:
所有类型中: (1)整数类型和浮点类型合称为基础类型(basic types);它们也是内建类型(built‐in types),即不用附加说明,C 编译器也能明白其含义。 (2)枚举类型是一些命名整型常量(named constant)(2.4)值的集合。 (3)算术类型和指针类型合称为标量类型(scalar types);数组和结构体类型合称为聚集 (aggregate types)类型。 (4)数组、函数和指针类型合称为派生声明符类型(derived declarator types)。 (5)void 类型是一种不能定义该类型变量(2.3.3)和常量的未完成类型(incomplete
2022年教科版一年级科学上册第二单元《在观察中比较练习题》课件
1 在观察中比较
学习目标
能从多种角度观察和比较物体。 能通过简单排序的方式描述和记录观察结果。
夯实基础
一、快乐选一选。(把正确答案的序号填在括号里)
1.观察比较恐龙模型的大小,下列说法不正确的是( C )。
A.可以按照从高到矮比较
B.可以按照从长到短比较
C.按照不同的标准比较结果都是相同的
二、快乐排一排。 请按照下面的标准给恐龙模型排序。
从高到矮 从长到短 从胖到瘦
①②④③ ①②③④ ②①④③
能力提升
三、快乐画一画。 比较下面动物的大小,在大的下面画“○”。
○
○
○
○
2.比较下面恐龙模型的长短,( C )恐龙最短,( A )恐龙最长。
A.
B.
C.
3.下面的恐龙模型中,( C )的前肢最短。A.Fra bibliotekB.C.
4.观察下面的恐龙模型,可知天上飞的恐龙是( B )。
A.
B.
C.
5.观察比较同一组恐龙模型的大小,各组得到的结果不完全一致, 这是因为( C )不一样。 A.比较对象 B.比较时间 C.比较标准
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
int*a=(int*)&i;/*强制转换地址的类型*/
*a=5;/*哈,编译器怎么办?*/
任何编译器都应该允许以上代码通过编译(因为语法上完全正确),不过好的编译器更应该给出一个warning(因为语义上有错):间接修改常量的值可能会导致错误。程序员不应该写出这样的代码,这根本就是搬石头砸自己的脚。常量就是不可修改的量值,在逻辑上必须完全遵循这一规则。
2.1.2 宏与内联
宏与内联,是形相似而质不同的两个东西。
l 宏(macro)
宏是用预处理指令定义的,因此,宏是由预处理器(preprocessor)处理的。也就是说,编译器看到的文件中是没有任何宏文本的――因为宏已经被预处理器处理过并移除了――存在于文件中的只是处理后的对应代码文本。换句话说,预处理器对待宏,就像“编辑”-》“替换”-》“替换所有”这样的操作,把所有的宏恰当地替成结果文本罢了,即宏本身只是另一段代码文本的别名。
i+=1;
呵呵,知道为什么说宏与内联“形相似而质不同”了吧。根本原因就在于:宏是被预处理器处理的,不具备任何函数调用规则限制(即类型检查);内联是由编译器处理的,有着各种各样的限制与约束。而且成功内联的函数的代码体积与函数宏差不多,执行效率比普通函数则小多了(因为少了返回地址入栈、参数入栈等指令)。因此应该尽量使用内联函数替代函数宏。
使用宏很方便,但并不安全。因为宏的语义不符合编译器的语义规则。比如定义一个类似函数的宏:
#definetest(x)x>5?x:x*5
这样的宏没有语法上的错误(实际上很少会产生宏语法错误),但在语义上却是有问题的。当x是简单的变量名时,语义可能是对的――类似“test(i)”这样的宏调用会被替换成“i>5?i:i*5”。但当x是表达式的时候,结果代码的语义就不一样了――“test(a+b)”会处理成“a+b>5?a+b:a+b*5”――编译器永远不会让这样的代码通过编译。不过还好解决,可以加上小括号来欺骗呆板的预处理器:“test((a+b))”-》“(a+b)>5?(a+b):(a+b)*5”。
最后注意一下,inline关键字只是提示性的关键字而不是强制性的关键字,编译器有权忽略掉程序员的内联请求――编译器不是那种你说“我要”它就会给你的老实家伙,嘿嘿:P。顶部 意识 发布于:2005-02-2712:43 [1楼]
const
内联函数这些是C++的东西吧顶部 无锋之刃 发布于:2005-02-2716:57 [2楼]
麻烦吧?但有的时候就连加上小括号也没用了。比如“test((i++))”-》“(i++)>5?(i++):(i++)*5”……完蛋!本意是要用旧的i值代入宏中求值,然后再加一,但实际的代码却完全不同于想象……也许已经有读者开始愤愤了:(,但这不是预处理器的错,真的。它只是很忠实地按照“文本替换规则”对宏做了处理而已。要怪只能怪程序员,在主观上把函数的调用规则强加在宏身上,根本就是错误的。要解决此类问题,别无它法,用函数吧(如果还不明白,可以自己设计一个MAX(a,b)来看看?)。
[原创]邪恶八进制短期C培训教材《说C》(第二部分)
文章标题:[原创]邪恶八进制短期C培训教材《说C》(第二部分)顶部 无锋之刃 发布于:2005-02-2615:32 [楼主][原创]邪恶八进制短期C培训教材《说C》(第二部分)
文章作者:无锋之刃[E.S.T顾问团]
信息来源:邪恶八进制PRC
l 内联(inline)
内联是函数宏的绝佳替代方案:
inlineinttest(intx)
{
returnx>5?x:x*5;
}
如此一来,简单的一句“inta=test(i++)”会被编译器(注意,不是预处理器)处理成类似下面的伪代码:
inta=i>5?i:i*5;
2 雄关漫道从头越
2.1 小是小非的问题
2.1.1 常量与变量
编程中用得最多的,大概就是常量和变量了。
*常量
通常常量分两个层次,即物理存储的常量与逻辑常量。物理层面(特指RAM中)的常量并不存在,因为RAM本身就是可读可写的,并没有什么物理机制可以限定RAM中某区域的读写权限。所以存储在RAM中的常量实质是个变量。那为什么称其为常量呢?
一般教程中叙述的常量指的都是逻辑常量,即在逻辑上,此量值是不可改变的。由于RAM中不存在完全的常量,因此程序中的常量是由编译器用变量加上逻辑规则限定而仿真出来的。如下所示:
constinti=0;/*实质是个变量*/
i=1;/*哈,编译器知道你“想在逻辑上改变常量值”的意图,不会让你通过的*/
//中的数据,例如:
//*p=10; /*错误*/
2.const可以用来创建数组常量、指针常量、指向常量的指针等:
constcharch='a';
constinta[5]={1,2,3,4,5};
constint*p=a; //a是一个数组的首地址.p是指向常量的指针
int*constp=a; //a是一个数组的首地址.p是指针常量;
……楼上的看C++太多了吧……
const和inline都是最新的C语言标准,C99所涵盖的内容啊。
可以参考
/wiki/C%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80顶部 !angel 发布于:2005-03-2014:40 [3楼]
intflag=1;
for(i=0;(i<count)&flag;i++)
{
if(array==num)
{
flag=0;
break;
}
意思,而且容易让人产生误解(也许是偶水平太菜了)。例如,把它有定义:一个能够让变量变成无法修改的常量
的关键字。那么,这样的话,就可能让人误解为只要有const在定义变量里面,那变量就无论怎样都无法修改。这
样的理解是很片面的(下面用法方面将对这问题做探讨)。因此,本人在此不敢对它下定义,其他参考书好象也没
//Example->
intFindNum(constintarray[],intnum,intconut);//声明函数
//code...
intFindNum(constintarray[],intnum,intcount)
{
inti;
不过,内联函数有着两个极大的开销:代码体积开销和编译时间开销。这是因为编译器处理内联函数的态度是:把函数中的代码直接插入调用点,将原来的函数调用转换成一段直接的代码。这种行为可以视为“二进制层面的代码替换”。如果在代码中滥用内联函数,则代码的体积会像吹气球一样……
编译时间开销则是由C编译模型引起的。简单说一下主要原因:展开内联函数时必须看到完整的函数定义,而内联函数的定义只能放在头文件中。因此必须在调用该内联函数的实现文件(.c文件中)#include此头文件。如果每一个实现文件都这样做,编译器会疯掉的,然后大家们都可以享受喝着咖啡等编译结果的好时光了:)。
常会因为它的优点而犯错,犯错的原因除了粗心之外,另一个更重要的,就是以前对const理解不到位。于是今天
自己写成一篇小总结。如果是初学者,建议好好看一下,相信帮助比较大;如果是高手,请不吝赐教!
上面写了一段废话,就算是小序吧:)接下来就是正文;
一、关于const的具体定义:
——个人感觉很难对它下一个标准的定义,因为的用法很灵活,似乎对它定义后总无法让人能够明白它的
constint*constp=a; //a是一个数组的首地址。p是指向常量的指针常量
前两种情况很简单,现在着重分析一下后三种用法,因为这3种情况容易出错,偶就有时候怕用错了
刚脆不用const.
——constint*p=a; //p是指向常量的指针,因此,不可以通过给指针赋值来改变数组
从表示的方式来看,可以将常量分成两类:存储常量与字面常量(literalconstant)。存储常量就是上面说的以变量仿真出来、以二进制形式保存的常量。字面常量则是直接保存在代码中的、以文字形式表现出来的常量。比如:
constintb=0; /*0就是一个字面常量*/
char*str=“test!”; /*以引号定界的字符串也是字面常量*/
做人要厚道,所以能不用符号宏就尽量别用吧,我们有更好的解决方案:使用全局具名常量仿真文本常量值:
constintRATIO=3.98;
这样一来,与预处理器就毫无瓜葛了,剩下的都是编译器的问题。即便出错了,调试器中显示的也只是ratio而不是3.98了。继任者也不会为此而郁郁了。
提示:宏名和常量名都应尽量使用大写字母和下划线构成。 有下定义。 源自二、关于const的具体作用
——const作用就灵活了,一个表达式中const放置的位置不同,效果可能就不一样了。下面分具体情况分
析(当然,所举的情况并非覆盖全部情况)
A。const最经常的用法
1.为了防止传递的函数参数不被修改,在调用函数的形参中用const关键字.
批判完了“函数宏”后,我们再来批判一下“符号宏”。即如下形式定义的宏:
#defineRATIO3.98
在C代码中符号宏用得相当频繁,因为实在是太好用了。不过只是编程时的好用而已,在调试程序的时候程序员准会被符号宏弄疯的。因为所有的RATIO已经被预处理器替换成了3.98,如果程序出了错,在调试信息里只有3.98这串文本,而不是RATIO这个符号――代码的原作者当然明白,可是毫不知情的后来维护者呢?