C语言程序设计(三) 简单的算术运算和表达式
第三章 简单的算术运算和表达式
算数运算符:一元、二元、三元(条件运算符)
1/2是整型除法,1.0/2是浮点数除法
求余运算(%)限定参与运算的两个操作数必须为整数,不能对两个实型数据进行求余运算
余数的符号与被除数的符号相同
C语言中没有幂运算符!
//L3-1
- #include <stdio.h>
- main()
- {
- int x = 153, b0, b1, b2, sum;
- b2 = x / 100; /* 计算百位数字 */
- b1 = (x - b2 * 100) / 10; /* 计算十位数字 */
- b0 = x % 10; /* 计算个位数字 */
- sum = b2 + b1 + b0;
- printf("b2=%d, b1=%d, b0=%d, sum=%d\n", b2, b1, b0, sum);
- }
- //运行结果
- b2=1, b1=5, b0=3, sum=9
复合的赋值运算符
- +=:a+=b; 等价于 a=a+b;
- -=
- *=
- /=
- %=
增1和减1运算符(一元运算符)
- ++x:前缀运算符,在变量使用之前对其执行加1操作
- m=++n; 等价于 n=n+1;m=n;
- x++:后缀运算符,先使用变量的当前值,然后对其进行加1操作
- m=n++; 等价于 m=n;n=n+1;
良好的程序设计风格提倡在一行语句中一个变量最多只出现一次增1或者减1运算
不建议在程序中使用复杂的增1和减1运算符,过多的增1和减1运算符会导致程序的可读性变差
宏常量和宏替换
//L3-2
- #include <stdio.h>
- main()
- {
- double r = 5.3; /* 圆的半径 */
- printf("circumference = %f\n", 2*3.14159*r);
- printf("area = %f\n", 3.14159*r*r);
- }
- //运行结果
- circumference = 33.300854
- area = 88.247263
//L3-3
- #include <stdio.h>
- main()
- {
- double r;
- printf("Input r:"); /* 提示用户输入半径的值*/
- scanf("%lf", &r); /* 以双精度实型格式从键盘输入半径的值 */
- //scanf()函数也是C的标准输入/输出函数
- //&称为取地址运算符,&r指定了用户输入数据存放的变量的地址
- printf("circumference = %f\n", 2*3.14159*r);
- printf("area = %f\n", 3.14159*r*r);
- }
- //运行结果
- Input r:6
- circumference = 37.699080
- area = 113.097240
幻数:在程序中直接使用的常数
- 导致程序的可读性变差
- 容易发生书写错误
- 难以修改
把幻数定义为宏常量或const常量,用一个简单易懂的名字来代替一个长字符串
能提高程序的可读性
//L3-4
- #include <stdio.h>
- #define PI 3.14159 /* 定义宏常量PI */
- main()
- {
- double r;
- printf("Input r:");
- scanf("%lf", &r);
- printf("circumference = %f\n", 2*PI*r); /*编译时PI被替换为3.14159*/
- printf("area = %f\n", PI*r*r); /*编译时PI被替换为3.14159*/
- }
宏定义中的标识符被称为宏名
习惯上用字母全部大写的单词来命名宏常量
将程序中出现的宏名替换为字符串的过程称为宏替换
宏定义的宏名与字符串之间可有多个空白符,无需加等号
字符串后不以分号结尾
宏定义不是C语句,而是一种编译预处理命令
宏常量没有数据类型,const常量可以声明数据类型
//L3-5
- #include <stdio.h>
- main()
- {
- const double PI = 3.14159; /* 定义实型的const常量PI */
- double r;
- printf("Input r:");
- scanf("%lf", &r);
- printf("circumference = %f\n", 2*PI*r);
- printf("area = %f\n", PI*r*r);
- }
表达式中的自动类型转换:
- C编译器在对操作数进行运算之前将所有操作数都转换为取值范围较大的操作数类型,称为类型提升。
- 类型提升可以避免数据信息丢失的情况发生。
在一个赋值语句中,若赋值运算符左侧的变量的类型与右侧的表达式的类型不一致,则赋值时会发生自动类型转换
类型转换的规则是:将右侧表达式的值转换为左侧变量的类型
//L3-6
- #include <stdio.h>
- main()
- {
- int n = 256;
- float f = 3.6;
- double d = 2.5;
- n = f;
- f = n;
- d = f;
- printf("n = %d\n", n);
- printf("f = %f\n", f);
- printf("d = %f\n", d);
- }
- //运行结果
- n = 3
- f = 3.000000
- d = 3.000000
将取值范围小的类型转换为取值范围大的类型是安全的,而反之则是不安全的
尽量避免使用这种自动的类型转换,建议使用强制类型转换运算符
强制类型转换就是明确地表明程序打算执行哪种类型转换,有助于消除因隐式的自动转换而导致的程序隐患
//L3-7
- #include <stdio.h>
- main()
- {
- int m = 5;
- printf("m/2=%d\n", m/2);
- printf("(float)(m/2) = %f\n", (float)(m/2));
- printf("(float)m/2 = %f\n", (float)m/2);
- printf("m = %d\n", m);
- }
- //运行结果
- m/2=2
- (float)(m/2) = 2.000000
- (float)m/2 = 2.500000
- m = 5
常用的标准数学函数
//L3-8
- #include <stdio.h>
- #include <math.h>//C的标准数学函数库提供了丰富的数学函数
- //使用这些数学函数时,只要在程序的开头加上如下的编译预处理命令即可
- main()
- {
- float a, b, c, s, area;
- printf("Input a,b,c:");
- scanf("%f,%f,%f", &a, &b, &c);
- s = (float)(a + b + c) / 2;
- area = sqrt(s * (s - a) * (s - b) * (s - c));
- printf("area = %f\n", area);
- }
- //运行结果
- Input a,b,c:3,4,5
- area = 6.000000
常用的标准数学函数
sqrt(x) | 平方根 |
fabs(x) | 绝对值 |
log(x) | 自然对数 |
log10(x) | 以10为底的对数 |
exp(x) | 指数 |
pow(x,y) | x的y次方 |
sin(x) | 正弦 |
cos(x) | 余弦 |
C语言程序设计(三) 简单的算术运算和表达式的更多相关文章
- 《C语言程序设计》课程教学目录
<C语言程序设计>课程教学目录 不要去精确定义单个论题,应将一整套问题组织成体系.--黎曼(1826-1866)德国著名数学家 教学过程 2018年秋季学期 C语言程序设计I-第一周教学 ...
- 基于C#程序设计语言的三种组合算法
目录 基于C#程序设计语言的三种组合算法 1. 总体思路 1.1 前言 1.2 算法思路 1.3 算法需要注意的点 2. 三种组合算法 2.1 普通组合算法 2.2 与自身进行组合的组合算法 2.3 ...
- C语言程序设计I—第三周教学
由于本课程是从教学周的第二周开始上课,所以第二次授课是发生在第三周,为了让PTA.云班课和博客能统一,所以将教学周作为随笔的标题.本周由于处理外聘教师随意退课等事情,总结有些延后了. 第三周教学安排 ...
- C语言程序设计:现代方法(第2版)第三章全部习题答案
前言 本人在通过<C语言程序设计:现代方法(第2版)>自学C语言时,发现国内并没有该书完整的课后习题答案,所以就想把自己在学习过程中所做出的答案分享出来,以供大家参考.这些答案是本人自己解 ...
- C语言程序设计:模拟简单运算器的工作
目录 C语言程序设计:模拟简单运算器的工作 1.题目 2.分析 3.代码实现 4.结尾 C语言程序设计:模拟简单运算器的工作 1.题目 模拟简单运算器的工作,输入一个算式(没有空格),遇等号&qu ...
- C语言程序设计入门学习五步曲(转发)
笔者在从事教学的过程中,听到同学抱怨最多的一句话是:老师,上课我也能听懂,书上的例题也能看明白,可是到自己动手做编程时,却不知道如何下手.发生这种现象的原因有三个: 一.所谓的看懂听明白,只是很肤浅的 ...
- C语言程序设计第4堂作业
大家注意:本次作业稍有增加,由于放假期间大家空闲时间比较充足,将之前学习过程中遗留的问题必须在假期解决. 本次课学习主要内容: 分支结构中的二分支结构.多分支结构和else-if语句 掌握字符型数 ...
- 160809209_李梦鑫_C语言程序设计实验3 循环结构程序设计
<C语言程序设计>实验报告 学 号 160809209 姓 名 李梦鑫 专业.班 计科16-2班 学 期 2016-2017 第1学期 指导教师 黄俊莲 吉吉老师 实验地点 C05 ...
- 中国大学MOOC-翁恺-C语言程序设计习题集-解答汇总
中国大学MOOC-翁恺-C语言程序设计习题集 PAT 习题集 02-0. 整数四则运算(10) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standar ...
随机推荐
- VB.Net制作-历朝通俗演义
原先的回数,全是汉语数字,为此我先转换成了阿拉伯数字,遗憾的是阿拉伯数字100居然排在1和2之前!所以必须设置为3位数字才行!否则顺序是乱的. 以下是用VBA批量重命名的代码: Dim FSO As ...
- 浮动框架iframe
浮动框架式一种比较特别的框架,和frame比较类似.不过frame必须在frameset中才可以,而iframe不一样,首先, 他是一种内联框架,其次,他可以放在网页中的任何位置. 所以,iframe ...
- 与项目欧拉速度比较:C vs Python与Erlang vs Haskell
我从问题#12 ProjectEuler作为编程练习,并比较我在C,Python,Erlang和Haskell中的实现(当然不是最优)实现.为了获得更高的执行时间,我搜索了第一个有1000个以上因子的 ...
- Trailing Zeroes (III) LightOJ - 1138 二分+找规律
Time Limit: 2 second(s) Memory Limit: 32 MB You task is to find minimal natural number N, so that N! ...
- MyBatis学习笔记二:MyBatis生产中使用环境搭建
这里是在上一个环境的基础上修改的,这里就不在给出所有的配置,只给出哪里修改的配置 1.修改POJO对象为注解方式 2.创建Dao层接口 package com.orange.dao; import c ...
- 吴裕雄--天生自然python编程:pycharm常用快捷键问题
最近在使用pycharm的时候发现不能正常使用ctrl+c/v进行复制粘贴,也无法使用tab键对大段代码进行整体缩进.后来发现是因为安装了vim插件的问题,在setting里找到vim插件,取消勾选即 ...
- webstorm active code
6ZUMD7WWWU-eyJsaWNlbnNlSWQiOiI2WlVNRDdXV1dVIiwibGljZW5zZWVOYW1lIjoiSmV0cyBHcm91cCIsImFzc2lnbmVlTmFtZ ...
- 任务框架--Quartz 配置文件
配置文件 Quartz 有一个叫做quartz.properties的配置文件,它允许你修改框架运行时环境.缺省是使用 Quartz.jar 里面的quartz.properties 文件.你应该创建 ...
- Linux下无法生成core文件的解决办法
1.检查ulimit [root ~]# ulimit -c 0 0:表示禁止生成core文件,此时需要执行ulimit -c unlimited(临时生效),或者在.bashrc中添加“ulimit ...
- 关于配置cordova的一些细节
网上多数资料都是:安装nodejs->通过node js安装cordova->JDK->设置环境变量JAVA_HOME->安装android SDK->设置环境变量AND ...