C语言程序设计(第4版)谭浩强著—学习笔记chapter two 数据的存储与运算
第二章 数据的存储与运算
- 2.1数据在计算机中如何存储
- 关于整型数据的运算
- 关于实型数据的运算
- 关于字符型数据的运算
- 符号常量
- 2.2算术运算符和算数表达式
- 算数运算符
- C算数运算式
- 提高部分(未完)
- 课后练习
2.1数据在计算机中如何存储
- 程序的作用是对数据进行操作。计算机的工作是基于二进制原理,计算机的内部信息也是由二进制来表示。二进制的特点是逢二进一。
- 计算机的存储器由半导体集成电路构成,它包括几亿个小的脉冲电路单元,也就是二极管元件。每一个二极管元件如同一个开关,有两种稳定的工作状态导通和截止,就是电脉冲的有和无,分别用1和0表示。当用户向计算机输入数据时,计算机先把数据转换为二进制形式,根据其每一位是0或1使相应的电子元件设置为导通或截止状态。位又叫比特bite,每一个二极管元件就叫一个二进制位,是存储信息的最小单元。
- 字节又叫拜特byte,一般八个二进制位为一组是一个字节 ,这是最常用的存储单位。平时所说的 占内存125KB是指12.5万字节,内存为256M是256兆字节就是一百万字节。硬盘容量为40G就是指40吉字节就是400亿字节。其实实际上1K=1024B,方便起见常说1K=1000B
关于整型数据的运算
- 一字节共有八个二进制位,左边第一位也就是最高位用于表示符号,最高位是0表示是正数。在计算机存储器中整数以补码形式存放,正数的补码与源码也就是二进制形式相同,负数用补码表示,负数先求补码再存放在储存单元中。
- 不同类型的数据在内存中的存储方式和占用空间字节数是不同的,一般以4字节byte,也就是32比特二进制位bite,最大值是31位1,即2的31次方-1,约为21亿,用于存放C语言的一个整数。
//例2.1 鸡兔同笼 :头16脚40求多少只鸡和兔。
#include <stdio.h>
int main(){int rabbit,hen,head,foot;//定义四个整型变量:变量类型 变量名head=16;//常量是指程序运行过程中其值不能改变的量 ,16是整型常量 foot=40;rabbit=(foot-2*head)/2;hen=16-rabbit;printf("hen=%d,rabbit=%d\n",hen,rabbit);//printf("输出格式控制”) --hen=12,rabbit=4 return 0;
}
- 整型变量类型有int ,shortint, long int 。用unsigned修饰变量类型指定为无符号的整型变量 ,这样不用把存储单元中的第一位用来代表数值符号 ,这样存储数值的范围扩大了一倍。默认是有符号的整型变量,也可以用signed 修饰。类型相当于模板,是一种抽象的规定,不占储存空间。
- 变量名是代表一个储存单元的符号地址。当程序中有赋值语句时,编译系统根据变量名找到它对应的存储单元的地址,从而把变量值存放在该存储单元中。如果再次对该变量执行其他赋值语句,则新的变量值就会替代原值,这体现了变量的值是可以改变的。变量是根据类型所规定的的原则建立的实体,占储存空间。
- 变量必须先定义后使用,变量名一般最大长度为32个字符。标识符是用来标识一个对象如变量,符号常量,函数名,数组,文件,类型等。C语言规定标识符的第一个字符必须是大小写字母或者下划线_,标识符由数字和大小写字母和下划线构成,不能是关键字。
关于实型数据的运算
- 实数在计算机中被叫做浮点数,有两种表示形式:十进制小数形式,指数形式。十进制小数形式0.123,0.0,123.123都是,“3,0,-80”是整型常量不是实型数据。指数形式如123e-3,2.1E0都是,用E或e表示以10为底的指数,且字母前面必须有数字,字母后必须是整数。“E123,123e1.1,2e"都不合法。
- 一个实数可以有多种指数形式表达,但是只有一种标准化指数形式。标准化指数形式是指数值部分是一个小数,小数点前的数字是0,小数点后的第一位数字不能是0, 如0.123e2 。不论实数以什么形式出现都以标准化指数形式存储。实际上计算机用二进制形式表示数值,指数部分以2为底。在计算机中一般以四个字节存储一个实数,3字节存放数值部分和数符,一字节存放指数部分和指数符号。
//例2.2分期付款计算:贷款额324500元,每月还3245元,月利率0.8,求需要几个月才能还清和总的还款数。
#include <stdio.h>
#include <math.h> //调用系统提供的库函数,头文件命令
int main(){int count,payment;//定义整型变量 double profit,month;//定义实型变量 ,由于log10函数的值是double双精度型用相同的数据类型count=324500;payment=3245;profit=0.008; month=(log10(payment)-log10(payment-count*profit))/log10(1+profit); //通过数学公式求月份的值printf("month=%f\n",month);printf("total=%f\n",month*payment); //总的还款数printf("%d\n",sizeof(double)) ; //本系统一个双精度是八个字节--8double a; a=1234.1415926;printf("a=%lf\n",a); //a=1234.141593 结果显示有误差 return 0;
}
- 实型变量类型可分为三类:单精度实型变量float,双精度实型变量double,长双精度实型变量类型long double 。ANSI C标准并未规定数据类型的长度精度和取值范围。常见的编译系统的分配安排如,Turbo C:short占2字节,int 占2字节,long占4字节。Visual C:short占2字节,int 占4字节,long占8字节。 对字符型都是1字节,float占4字节,double占8字节。
- 可以用sizeof 运算符测定所用的C系统的对数据类型或变量的所占的长度安排。 sizeof(变量名或类型名)
- 由于实型变量在内存的存储单元中是由有限字节构成的,所以有效位以外的数字将被舍去而产生一些误差。除了特别简单的数值用float,大部分时候尽量使用double双精度浮点类型。
关于字符型数据的运算
- 字符数据采用ASCII美国国家信息交换标准码,将字符的代码存储到相应的存储单元中。计算机允许使用的字符不超过255个 ,其中前面127个是基本通用的,128到255之间相应地字符在不同计算机系统中是不同的。 常用0到127之间的字符,127用二进制码表示1111111,可见一个字节可以存放一个字符的代码。字符型变量用于存放字符常量,在所有的编译系统都规定一个字符用一个字节存放。
- 字符数据和整型数据在存储形式上没有区别,字符型数据和整型数据可以通用。赋值字符变量的整数有效范围是0~127。每一个小写字母的ASCII代码都比它的大写字母的ASCII代码大32 ,C语言允许字符数据和整型直接进行算术运算。
#include <stdio.h>
#include <math.h> //调用系统提供的库函数,头文件命令
int main(){//逐个输出英文字母C H I N A,然后按反序输出 A,N,I,H,Cchar b='C',c='H',d='I',e='N',f='A'; printf("%c%c%c%c%c\n",b,c,d,e,f);//CHINAprintf("%c%c%c%c%c\n",f,e,d,c,b);//ANIHC,输出字符所用的格式说明为%cchar g='\n';printf("%c",g);//结果是执行一次换行操作 char c1=97;char c2=98;printf("%c %c\n",c1,c2);//字符以字符形式输出 ,%c是输出字符的格式符 --a b printf("%d %d\n",c1,c2);//字符以整型形式输出 --97 98char c3='a',c4='b'; c3=c3-32;c4=c4-32;printf("%c,%c\n",c3,c4);//--A,Breturn 0;
}
- 字符常量必须用单撇号括起来,单撇号只是分界符表示字符常量的起止范围。如’ D’,‘?’,‘&’,‘=’,‘@’都是字符常量。
- 字符串常量,C语言编译系统在处理字符串常量时自动在每一个字符串常量的结尾都加上一个字符\0作为结束标志。 \0的ASCII的代码是0,是空操作字符,不引起任何操作也不可以显示。 c=“a”;表示字符串c有两个字符a和\0,要想将字符串存放在内存中必须用字符数组存放。
- 转义字符(控制字符)
\n换行符
\t使下一个输出的数据跳到下一个输出区,一行中一个输出区占七列
\b退格 \r回车 \f换页 \0空操作代表字符串的结束标志
\代表一个反斜杠 '代表一个单撇号 "代表一个双撇号
\ddd一到三位八进制数所代表的字符
\xhh 代表一到两位十六进制数所代表的字符
例如
10=’\12’=’\x0A’=’\n’
65=’\101’=’\x41’=‘A’
97=’\x61’=‘a’
符号常量
#include <stdio.h>
#include <math.h> //调用系统提供的库函数,头文件命令
#define PI 3.1415926//定义符号常量PI 这是预编译指令,符号常量只是符号,只进行符号置换,不占存储单元 ,不能赋值。
int main(){double radius,circle,area,volume;radius=3.67;circle=2*PI*radius;area=PI*pow(radius,2);//调用函数pow 求半径的平方 volume=4.0/3.0*PI*pow(radius,3);//整除整为整,浮点除浮点是浮点数更准确 printf("circle=%f\narea=%f\nvolume=%f\n",circle,area,volume);return 0;
}
1.数据的表现形式有两种,分别是字面常量和符号常量。符号常量不占储存空间,不能指定类型,不能被赋值,它代表一个字符串,用于代替一个已知常量。 整型实型字符字符串常量都是直接常量又叫字面常量。
2. 符号常量习惯上用大写表示,变量名用小写驼峰式表示以区别。符号常量含义清楚“见名知意” ,符号常量不能赋值从而能“一改全改”。 少用数值常量多用符号常量可以提高代码可读性和可维护性。
2.2算术运算符和算数表达式
常见运算符
算数运算符+ - * / %
关系运算符> < == >= <= !=
逻辑运算符! && ||
位运算符<< >> ~ | ^ &
赋值运算符=
条件运算符?:
逗号运算符,
指针运算符* &
求字节数运算符sizeof
强制类型转换运算符 (类型)被强制转换的变量
成员运算符.->
下标运算符[]
其他
C表达式
算数表达式3*a
关系表达式a>b
逻辑表达式a&&b
赋值表达式a=1
逗号表达式 a=1,b=2
#include <stdio.h>
#include <math.h> //调用系统提供的库函数,头文件命令
int main(){int i,j,k,l;i=3;j=i++;k=++i;printf("j=%d\ni=%d\nk=%d\n",j,i,k);//printf是从右往左赋值的,--j=3 i=3+1=5 k=4+1=5l=6;printf("l=%d\n",++l);//l=7输出 l=6;//再赋值 printf("l=%d\n",l++);//l=6输出,之后l=7 float m=3.6;int n;n=(int)m;printf("m=%f,n=%d",m,n);//--m=3.600000,n=3return 0;
}
算数运算符
+加法运算符 ,还是正值运算符
-减法运算符 ,这还是负值运算符
乘法运算符 ,加减乘除中有一个是浮点型结果就是double型。
/除法运算符 ,整数除整数得整数,小数直接舍去,多数编译系统采取“向零取整”方法,5/3=1,-5/3=-1
% 求余运算符又叫模运算符,%两边都得是整数
++自增运算符
–自减运算符,自增自减运算符可以用于循环语句使变量自动加减一,也可以用于指针使指针指向下一个地址。
(类型)被强制转换的变量 ,这是强制类型转换运算符,强制转换能得到一个中间类型的变量,而原来的变量类型并没有改变。系统计算时会自动转换类型,可以进行字符和整型和实型数据混合计算,计算原理是将字节少的数据转换为字节多的数据,如char和shot都转换成int,float转换成double,再int转换成double,得到的结果是字节多的数据类型。
运算符优先级:先括号,再乘除后加减,同级自左向右计算。
C算数运算式
C算数运算式是指用算数运算符和运算对象,包括函数变量符号常量等操作数连接起来的复合C语法规则的式子.
提高部分(未完)
课后练习
#include <stdio.h>
#include <math.h>
int main(){/*练习题1 我国国民生产总值是年增长率10%,计算10年后我国的国民生产总值与现在相比增长了多少百分比。计算公式P=(1+r)的n次方r是增长率,n是年数,p为与现在相比的百分比*/ double r,p;int n;r=0.1;n=10; p=pow((1+r),n);printf("p=%f \n",p);return 0;
}
#include <stdio.h>
#include <math.h>
int main(){/*练习题2 存款利息的计算。有1000元,想存5年,可按以下5种办法存:(1)一次存5年期 (2)先存2年期,到期后再存3年期 (3)先存3年期,到期后再存2年期 (4)先存一年期,到期后再存一年期,连存五次 (5) 存活期存款,活期利息一个季度结算一次某年银行存款利息如下:1年期定期存款利息为4.14%。2年期定期存款利息为4.68%。3年期定期存款利息为5.4%。5年期定期存款利息为5.85%。活期存款利息为0.72%(活期存款每一季度结算一次利息)。如果r为年利率,n为存款年数,则计算本息和的公式为:一年定期本息和:P=1000*(1+r)n年定期本息和:P=1000 * (1+n * r)存n次一年期的本息和:P=1000*(1+r)的n次方活期存款本息和:P = 1000 * (1+r/4)的4n次方说明:1000 * (1+r/4)是一个季度的本息和。*/double r1,r2,r3,r4,r5,p1,p2,p3,p4,p5;r1=4.14e-2;r2=4.68e-1;r3=5.4e-2;r4=5.85e-2;r5=0.72e-2;p1=1000*(1+5*r1)*5;p2=1000*(1+2*r2)+1000*(1+3*r2);p3=1000*(1+3*r3)+1000*(1+2*r2);p4=1000*pow((1+1*r4),1)*5;p5=1000*pow((1+r5/4),4*5);printf("p1=%f\np2=%f\np3=%f\np4=%f\np5=%f\n",p1,p2,p3,p4,p5);return 0;
}
#include <stdio.h>
int main(){/* 练习题3请编程序将China译成密码,密码规律是:用原来的字母后面第4个字母代替原来的字母。例如,字母A后面第4个字母是E,用E代替A。因此,China应译为Glmre。请编写程序,用赋初值的方法使c1,c2,c3 , c4,c5这5个变量的值分别为C'、'h'.i', 'n ', 'a',经过运算,使c1,c2,c3 , c4,c5分别变为'G'、l'、 'm' , 'r'. 'e',并输出。*/ char c1='C',c2='h',c3='i',c4='n',c5='a',d1,d2,d3,d4,d5;d1=c1+4;d2=c2+4;d3=c3+4;d4=c4+4;d5=c5+4;printf("%c,%c,%c,%c,%c",d1,d2,d3,d4,d5);return 0;
}
C语言程序设计(第4版)谭浩强著—学习笔记chapter two 数据的存储与运算相关推荐
- C语言程序设计第五版谭浩强课后答案 第九章习题答案
C语言程序设计第五版谭浩强第九章答案 1.定义一个结构体变量(包括年.月.日).计算该日在本年中是第几天,注意闰年问题. 2.写一个函数days,实现第1 题的计算.由主函数将年.月.日传递给days ...
- C语言程序设计第五版谭浩强 第七章答案
C语言程序设计第五版谭浩强著 第七章答案 第七章 用函数实现模块化程序设计 1.写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果.两个整数由键盘输人. 题目解析: ...
- C语言程序设计第五版 谭浩强 第四章 课后习题 答案
谭浩强C语言程序设计第五版 第4章 课后习题 答案 点我看视频讲解+可运行源码 记得一键三连哦 第四章 选择结构程序设计 1. 什么是算术运算?什么是关系运算?什么是逻辑运算? [答案解析] 算熟运算 ...
- C语言程序设计(第4版)谭浩强著—学习笔记chapter one 程序设计与C语言
第一章 程序设计与C语言 1.1机器语言和高级语言 1.2 C语言的出现和发展过程 1.3简单的C语言程序 stdio.h main函数 printf函数 scanf函数 格式字符串 \n换行符 re ...
- C语言程序设计第五版 谭浩强目录大纲
第1章程序设计和C语言1 1.1什么是计算机程序1 1.2什么是计算机语言1 1.3C语言的发展及其特点3 1.4最简单的C语言程序5 1.4.1最简单的C语言程序举例5 1.4.2C语言程序的结构9 ...
- C语言程序设计第五版谭浩强课后答案 第六章《利用数组处理批量数据》习题答案 (大一大二、考研、计算机二级必看)
第六章<利用数组处理批量数据>习题答案 1. 用筛选法求100之内的素数 2. 用选择法对10个整数排序 3. 求一个3 X 3的整形矩阵对角线元素之和 4. 有一个已经排好序的数组,要求 ...
- C语言程序设计第五版谭浩强著 第五章部分课后习题答案
#include<stdio.h> main() {int x,y,m,n,u,p;scanf("%d%d",&x,&y);m=x;n=y;while( ...
- C语言程序设计第五版谭浩强著 第8章291-292指针系列
1.输入3个整数,按由小到大的顺序输出. #include<stdio.h> main() {int a,b,c,*p1,*p2,*p3;p1=&a;p2=&b;p3=&a ...
- C语言程序设计第五版谭浩强著 第7章习题以及答案 函数系列
1.写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果.两个整数由键盘输入. #include<stdio.h> void main(void) {in ...
最新文章
- [王晓刚]深度学习在图像识别中的研究进展与展望(转发)
- 并不对劲的概率与期望
- C#中发送消息给指定的窗口到消息循环
- 复习--SQL Server (一) -系统数据库
- (JAVA)Arrays数组工具类
- iOS convertRect:view.frame toView: x 异常翻倍?
- centos安装python gcc sqlite
- 哑弹 图像处理检测_火箭军第三代哑弹处置系统排爆效率提升30%
- 华为明日发布鸿蒙整体战略;京东宣告全面向技术转型;Kotlin 1.3.60 发布 | 极客头条...
- 鼠标点到某个位置出现手势的效果。
- Linux记录-重启后磁盘丢失问题解决方案
- github fork别人项目后如何同步更新原项目
- Chrome插件GitZip(下载github项目中的部分文件)
- AD 20 PCB 导入CAD图形错乱-问题笔记
- 无线网络 看不到其他计算机,win10看不到无线局域网其他电脑
- html上自动显示汉字拼音,原来html上用这个标签显示拼音
- 小程序源码:强大的万年历微信小程序
- 基于 ZNS 模式搭建并运行 FEMU
- 下载 线代 薛威_考研线代李永乐真的首选吗?
- ffmpeg命令:wav转pcm,pcm转wav