C语言学习第五节-表达式、第二个c语言程序

2020-04-02 05:40 阅读 247 次 评论 0 条

什么是表达式

表达式就是运算。就是1+1或2*5或9/6

int a,b; //声明a和b两个变量是整型
a = 10 + 5; //a作为一个变量,给a的赋值是自然数10加自然数5 = 15
b = a + 1; //b作为一个变量,给b的赋值是截止上一行,a的值加自然数1 = 16

那么在赋值符号右侧的赋值操作里涉及到的运算单独来看就是表达式。好像没什么可说的。就先认识几个符号,做一个综合的实例。

tips:本表中优先级最高的是1,最低的是4

运算符 运算功能 运算方向 运算优先级
+ 单目运算符:正 注意:从右向左 1级
- 单目运算符:负 注意:从右向左 1级
* 从左向右 2级
/ 除以 从左向右 2级
% 取余 从左向右 2级
+ 从左向右 3级
- 从左向右 3级
= 赋值 注意:从右向左 4级

再画个表简单解释一下功能

运算符 例子 结果
单目运算符:正:+ +5+2 正5加正2等于7,正省略。结果:7
单目运算符:负:- -10*3 负10乘3等于负30,负不省略。结果:-30
乘:* 2*20 2乘20等于40。结果:40
除以:/ 30/5 30除以5等于6。结果:6
取余:% 7%4 7除以4等于1余3。结果:3
加:+ 2+3 2加3等于5。结果:5
减:- 3-1 3减1等于2。结果:2
赋值:= a = 10 把10赋给a。结果:10

再解释一下为什么单目运算符是从右向左的逻辑。

比如一个数字是(-5),读作:负五,但是逻辑上是五的负数。这个其实可以不记,也不影响什么。其它的运算例如加减乘除取余的顺序都是从左向右,这个没什么好说,与数学完全一致。但是赋值例外,赋值是把rvalue赋给lvalue,从右向左。“把10赋给a”与“让a等于10”是一个意思,但是等于在c语言中用的是“==”,而“=”表示的是赋值。

总结来说:C语言在运算我写程序的时候,会优先先计算单目运算符,就是判断这些待计算的数字是正的还是负的(1级优先级),然后从左向右计算乘、除、取余(2级优先级),然后从左向右算加、减(3级优先级),结果从右向左赋值给变量(4级优先级)。当然有括号还是要先算括号内的,与数学完全一致。

比如计算一个数,c语言的运算流程如下:

8*(7+6)-(-5)*4%3+3/2

=8*(7+6)+5*4%3+3/2(第一步:首先计算单目运算符)

=104+20%3+1.5(第二步:计算乘除)

=104+2+1.5(第二步:计算取余,为理解,我分开写了第二步)

=107.5(第三步:计算加减)

……(赋值给变量)

 

实例

要求:需要计算三个整数的平均数

实例思路

综合变量、赋值的知识,以及实际问题。

 

第一。首先考虑数据类型,三个整数,那么三个变量都用int类型。

//实例1:需要计算三个整数的平均数
#include <stdio.h>
int main()
{
	int a,b,c; //定义三个变量
	int average; //定义平均数变量  但如果结果不是整数呢?下文解决。
	return 0;
}

 

第二。变量要初始化/赋值,这里我们直接赋值。如果不做这一步操作,就会得到一个随机而且没有规律的数字,这个参考第四节的知识,必须赋值。

//需要计算三个整数的平均数
#include <stdio.h>
int main()
{
	int a,b,c; //定义三个变量
	int average; //定义平均数变量
	//赋值开始
	a = 8;
	b = 65;
	c = 23;
	//赋值结束
	return 0;
}

 

第三。考虑如何实现平均数的计算。

在这之前,需要了解的是,c语言不懂什么是平均数,因此:

向计算机发出指令:给我算一下这三个数的平均数。

计算机:我不懂你说什么。

用c语言写下意图:a=8;b=65;c=23;计算a,b,c三个数之和再除以3是多少;把这个数值赋给average,然后把average告诉我。

编译器:明白,average的结果是……

数学逻辑:

3个整数的平均数就是3个数之和除以3

n个数的平均数就是n个数之和除以n

所以average在本实例中的表达式为(a+b+c)/3。把这个值赋给average,输出average的值就知道结果。

//需要计算三个整数的平均数
#include <stdio.h>
int main()
{
  int a,b,c; //定义三个变量
  int average; //定义平均数变量
  //赋值开始
  a = 8;
  b = 65;
  c = 23;
  //赋值结束
  average = (a+b+c)/3; //通过计算,得出average的值
  return 0;
}

 

第四。将average的值输出出来

//需要计算三个整数的平均数
#include <stdio.h>
int main()
{
  int a,b,c; //定义三个变量
  int average; //定义平均数变量
  //赋值开始
  a = 8;
  b = 65;
  c = 23;
  //赋值结束
  average = (a+b+c)/3; //通过计算,得出average的值
  printf("%d\n", average); //输出结果
  return 0;
}

输出文字内容abc写作

printf("abc\n");

输出整型变量a,b,c写作

printf("%d%d%d\n",a,b,c); //内容还是在引号内,但是变量写在引号""后的逗号,后,每个变量用逗号,隔开

内容还是在引号内,但是变量写在引号""后的逗号,后,每个变量用逗号,隔开

那么输出整型变量average写作

printf("%d",average);

 

第五:查看一下结果,结果是32

 

第六:验算一下是否准确。

a+b+c=8+65+23

8+65+23=96

average=(a+b+c)/3=96/3=32

发现是没问题。但是换一组数试试,换成2,5,7,会得到平均数是4的结果。

 

第七:所以验算一定是多方面多范围的,需要考虑实际。尤其要验算特殊数据。2+5+7=14,14/3口算一下得出结果是4.666,无限循环。所以要注意定义a,b,c为int整型,而且赋值是整数,这没有问题。但是计算结果可能是分数(小数),可能是有限小数(比如两个数求平均值,无非就是多了个0.5),可能是无限小数(比如三个数甚至更复杂的计算)。

这就要用到一个新类型:浮点型。来表达小数部分。我们对程序进行改进

//需要计算三个整数的平均数
#include <stdio.h>
int main()
{
  int a,b,c; //定义三个变量
  double average; //定义平均数变量
  //赋值开始
  a = 2;
  b = 5;
  c = 7;
  //赋值结束
  average = (a+b+c)/3.0; //通过计算,得出average的值
  printf("%f\n", average);
  return 0;
}

对比实例中 int 与 double(至于 浮点型的两种double与float以后再说)

int double
类型: 整型 浮点型
定义变量: int average; double average;
格式化输出: %d %f
实例表达式: (a+b+c)/3 (a+b+c)/3.0

看一下结果:

 

第八:优化输出结果。

//需要计算三个整数的平均数
#include <stdio.h>
int main()
{
  int a,b,c; //定义三个变量
  double average; //定义平均数变量
  //赋值开始
  a = 2;
  b = 5;
  c = 7;
  //赋值结束
  average = (a+b+c)/3.0; //通过计算,得出average的值
  printf("a,b,c三个数的平均数是%f\n", average); 
  return 0;
}

看着是舒服多了

 

第九:例如实际应用还要求保留小数点后2位,遵循的是四舍五入的原则。要对%f再做处理。

//需要计算三个整数的平均数
#include <stdio.h>
int main()
{
  int a,b,c; //定义三个变量
  double average; //定义平均数变量
  //赋值开始
  a = 2;
  b = 5;
  c = 7;
  //赋值结束
  average = (a+b+c)/3.0; //通过计算,得出average的值
  printf("a,b,c三个数的平均数是%0.2f(保留小数点后两位)\n", average);
  return 0;
}

给%f的中间加上一个0.2,即表示保留小数点后两位,写作%0.2f,保留三位,写作%0.3f。这是强制写的,即使结果恰好是整数,比如2,3,4的平均数是3,如果声明average的类型是double,在格式化输出里写作printf("%0.2f",average); 最终的值也是会变成3.00。

 

上一篇:C语言学习第四节-变量、赋值、初始化

下一篇:C语言学习第六节-第三个c语言程序

 

本文代码存储:

https://yaozi.org/Code/wenroudeye.com/C/C-5

 

超纲交流:

  1. 按照本文最终的代码,把一个double的变量格式化输出时保留小数点后2位写作%0.2f。
    写法 结果 判断
    %0.2f 4.67 正确
    %15f 4.666666666666667 正确
    %16f 4.6666666666666670

    %16f似乎并不符合实际需要,但为什么会出现这种情况。

嘤嘤嘤嘤嘤呜呜呜呜呜叭叭叭叭叭嘿嘿嘿嘿嘿哟哟哟哟哟 (10 次评分, 平均分: 4.50 out of 5)
Loading...
版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
转载请注明:C语言学习第五节-表达式、第二个c语言程序 | 温柔的夜
分类:C语言 标签:

发表评论


表情