第三章 简单的算术运算和表达式

算数运算符:一元、二元、三元(条件运算符)

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语言程序设计(三) 简单的算术运算和表达式的更多相关文章

  1. 《C语言程序设计》课程教学目录

    <C语言程序设计>课程教学目录 不要去精确定义单个论题,应将一整套问题组织成体系.--黎曼(1826-1866)德国著名数学家 教学过程 2018年秋季学期 C语言程序设计I-第一周教学 ...

  2. 基于C#程序设计语言的三种组合算法

    目录 基于C#程序设计语言的三种组合算法 1. 总体思路 1.1 前言 1.2 算法思路 1.3 算法需要注意的点 2. 三种组合算法 2.1 普通组合算法 2.2 与自身进行组合的组合算法 2.3 ...

  3. C语言程序设计I—第三周教学

    由于本课程是从教学周的第二周开始上课,所以第二次授课是发生在第三周,为了让PTA.云班课和博客能统一,所以将教学周作为随笔的标题.本周由于处理外聘教师随意退课等事情,总结有些延后了. 第三周教学安排 ...

  4. C语言程序设计:现代方法(第2版)第三章全部习题答案

    前言 本人在通过<C语言程序设计:现代方法(第2版)>自学C语言时,发现国内并没有该书完整的课后习题答案,所以就想把自己在学习过程中所做出的答案分享出来,以供大家参考.这些答案是本人自己解 ...

  5. C语言程序设计:模拟简单运算器的工作

    目录 C语言程序设计:模拟简单运算器的工作 1.题目 2.分析 3.代码实现 4.结尾 C语言程序设计:模拟简单运算器的工作 1.题目 ​ 模拟简单运算器的工作,输入一个算式(没有空格),遇等号&qu ...

  6. C语言程序设计入门学习五步曲(转发)

    笔者在从事教学的过程中,听到同学抱怨最多的一句话是:老师,上课我也能听懂,书上的例题也能看明白,可是到自己动手做编程时,却不知道如何下手.发生这种现象的原因有三个: 一.所谓的看懂听明白,只是很肤浅的 ...

  7. C语言程序设计第4堂作业

    大家注意:本次作业稍有增加,由于放假期间大家空闲时间比较充足,将之前学习过程中遗留的问题必须在假期解决.   本次课学习主要内容: 分支结构中的二分支结构.多分支结构和else-if语句 掌握字符型数 ...

  8. 160809209_李梦鑫_C语言程序设计实验3 循环结构程序设计

    <C语言程序设计>实验报告 学 号 160809209 姓 名 李梦鑫 专业.班 计科16-2班 学    期 2016-2017 第1学期 指导教师 黄俊莲 吉吉老师 实验地点 C05 ...

  9. 中国大学MOOC-翁恺-C语言程序设计习题集-解答汇总

    中国大学MOOC-翁恺-C语言程序设计习题集 PAT 习题集 02-0. 整数四则运算(10) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standar ...

随机推荐

  1. Tomcat远程调试模式及利用Eclipse远程链接调试

    1.启动tomcat到调试模式 进入到tomcat的bin目录下,执行命令./catalina.sh jpda run 启动日记会提示打开调试端口默认为8000 2.调试Eclipse远程连接tomc ...

  2. Spring-增强方式注解实现方式

    SpringAOP增强是什么,不知道的到上一章去找,这里直接上注解实现的代码(不是纯注解,纯注解后续会有) 创建业务类代码 @Service("dosome")//与配置文件中&l ...

  3. eclipse 设置字体与自动提示

    1.设置字体与字体大小 至此,字体与大小设置完毕. 2.设置自动提示 在输入框中输入 1-9 a-z A-Z .点击“Apply”保存. 开启JavaScript 自动提示 灰色未激活,先点击复选框激 ...

  4. hadoop配置文件详解、安装及相关操作补充版

    一.      Hadoop伪分布配置           首先应该现在profile文件添加hadoop_home操作如下: export JAVA_HOME=/usr/java/jdk expor ...

  5. php 依赖注入 和 控制反转 php设计模式

    https://blog.csdn.net/zyddj123/article/details/82753650 什么是依赖注入?IOC:英文全称:Inversion of Control,中文名称:控 ...

  6. python反转链表和成对反转

    https://www.cnblogs.com/tianqizhi/p/9673894.html https://blog.csdn.net/weixin_34168700/article/detai ...

  7. 亚马逊Prime会员的杀价,能说明会员+会越来越便宜吗?

    前段时间,京东又坑了!京东调整了物流方案--从原来的购物不满49元只需6元运费,调整到购物不满46元运费15元,运费猛涨了9元!原本京东PLUS会员每月有5张免运费券,但在运费涨价后运费券限制在6元, ...

  8. mysql-5.7.25解压版本安装和navicat 12.1版本破解-4.8破解工具

    1.配置环境变量 百度网盘下载https://pan.baidu.com/s/1tbOJiOG9l87HbIzsLApX4A 提取码  t657  (mysql-5.7.25大小300M解压后1.6G ...

  9. HTTP接口抓包工具之Fiddler

    Fiddler的基本功能介绍: Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据,Fiddler包含了 ...

  10. centos7上Jenkins通过rpm包方式直接安装及使用war包方式升级

    一.通过rpm包方式直接安装jenkins 1.官网下载rpm安装包(前提是安装jdk) wget https://pkg.jenkins.io/redhat-stable/jenkins-2.121 ...