C语言学习第2周-计算

数据类型 / 计算 

 第一部分

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int foot = 0;
	int inch = 0;
	scanf("%d %d", &foot, &inch);
	printf("%f\n", (foot + inch / 12.0)*0.3048);
	return 0;
}

在C语言中整数/整数只能是整数,如果相除之后含有小数部分,则直接省去小数部分。

在C语言中如果是整数/浮点数,那么就会把运算符号两边的都自动转化为浮点数,得到的结果也是浮点数。

在上述代码中inch是整数,12.0是浮点数。C语言就会把inch转换为浮点数后进行运算。如果是inch/12,当inch=7时,左右两边都是整数,但是相除的结果是浮点数,C语言会只得到一个整数,省去小数部分。

第二部分 

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	double  foot = 0;
	double  inch = 0;
	scanf("%lf %lf", &foot, &inch);
	printf("%f\n", (foot + inch /12)*0.3048);
	return 0;
}

在这段代码中也是和第一段代码的原理一样,这里inch/12中,inch是浮点数,而12是整数。C语言会自动把12转化为浮点数,然后得到的结果就是一个浮点数,打印的时候就要用%f。

  例子:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int a, b;
	scanf("%d %d", &a, &b);
	double c = (a + b )/ 2.0;
	printf("%f\n", c);
	return 0;
}

 定义C为double类型的数据(a+b)为整数类型,2.0为浮点数,那么结果就是浮点数。如果是(a+b)/2,左右两边都是整数,那么得到的结果中如果有小数部分也会被去除,只保留整数部分。如:(2+3)/2这个结果就是2,(2+3)/2.0这个结果就是2.5。 

第三部分

数据类型

  • 整数  int            printf("%d",.....);     scanf("%d %d",......,.....);
  • 小数 double      printf("%f",.....);     scanf("%lf  %lf",......,.....); 

 表达式 / 计算

第一部分

 a=b+5中,a,b,5都是算子,无论是变量还是常量都是算子,这里面的+,=是运算符。+,-,*,/,%分别表示加,减,乘,除,取余。表达式是由算子和运算符组成的。而程序是由数据和算法组成的。

计算时间差:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int hour1=0, minute1=0, hour2=0, minute2=0;
	printf("请输入第一个时间_小时_分钟\n");
	scanf("%d %d", &hour1, &minute1);
	printf("输入的第二个时间为_小时_分钟\n");
	scanf("%d %d", &hour2, &minute2);
	int a = hour1 * 60 + minute1;
	int b = hour2 * 60 + minute2;
	int t = b - a;
	printf("两个时间的时间差为%d小时%d分钟\n", t / 60, t % 60);
	return 0;
}

输入第一个时间如:2 40,中间有一个空格,然后回车键,输入第二个时间:3 50,然后回车键,就得到了时间差。

该段代码中用到了除法和取余,其中除法t/60,左右两边都是整数,但是结果可能不是整数,那么C语言就会把不是整数的部分中的小数部分去除掉,只保留整数。在取余会舍去商数只得余数,这样就可以得到小时数与分钟数了。

第二部分 

运算的优先级,结合关系,赋值运算符

运算的优先级:单目+(正号),单目-(取负),*(乘法),/(除法),%(取余),+(加法),-(减法),=(赋值)。最应该理解的就是赋值=,赋值不是一个语句而是一个运算符,运算后是有结果的。

结合关系:单目运算符和赋值运算符=是自右向左,其余都是自左向右。

int result = a = b = c + 5;

上面代码中先计算c+5,然后让c+5的结果赋值给b,然后把b的结果赋值给a,然后把a的结果赋值给result。其中c+5是自左向右运算,赋值运算符是自由向左运算。

第三部分

交换两个变量

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int a = 5;
	int b = 6;
	int c;
	c = a;
	a = b;
	b = c;
	printf("a=%d,b=%d\n", a, b);
	return 0;
}

这段代码就体现了运算符的重要性,首先定义了a=5,b=6。然后准备了变量c,把a的值赋给c,然后c=a=5,然后把b=6赋值给a,就变成了a=b=6,最后把c中的值赋值给b,得到b=c=5。就完成两个变量的交换。重点就是赋值运算符的运算是自右向左进行的。还有初学者肯定不会想到这种方法,我们管这种码农比较常用的方法称为套路。和学习英语一样,单词你可以记住,但是怎样组成语言让别人听的懂,那就听听别人是怎么说的。学习C语言也是一样,遇到这件事情,人们是怎么做的。当你要交换两个变量的时候,人们是怎么做的,当你要做一个加法的时候人们是怎么做加法的,当你要做一个复杂的表达式计算的时候,人们是怎么做计算的。很多事情都有一般的做法,这个就是学习C语言的套路。这些套路的学习,靠阅读,你看别人是怎么做的,你看别人是怎么说的。你就跟着做,你就跟着说,你就知道了这件事该怎么做了

第四部分

复合赋值递增递减

复合赋值:total+=5的意思就是total=total+5。这个和运算顺序也有关系,先自左向右算total+5,然后自右向左赋值给total。先算total+5,再算total=total+5。

递增递减:a++,++a的区别。a++是等于+1之前的值,++a表示+1之后的值。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int a = 20;
	int b = a++;
	printf("a=%d b=%d\n", a, b);
	/*这段代码的先执行b=a,然后在执行a=a+1。输出的结果是b=20,a=21*/
	return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int a = 20;
	int b = ++a;
	printf("a=%d b=%d\n", a, b);
	/*这段代码的先执行a=a+1,然后在执行b=a。输出的结果是a=21,b=21*/
	return 0;
}

第五部分

求按位逆序的数。如输入321,输出123。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int num = 0;
	printf("请输入一个三位数\n");
	scanf("%d", &num);
	int a = 0;
	int b = 0;
	int c = 0;
	a = num / 100;
	/*因为a是一个整数变量,所以如果除完之后有小数的话会自动去除。
	这个运算过后就得到了百位的数字*/
	b = (num % 100) / 10;
	/*这个是先把三位数除100取余得到一个两位数,再把两位数除10,
	可能会有一个小数,但是因为b是一个整数变量,有小数的话会自动去除。
	这个运算过后就得到了三位数中的十位上的数字*/
	c = num % 10;
	/*这个就是把三位数除10取余,三位数除10 之后,再取余就是个位上的数字。
	如456/10后得到45余6,其中6就个位数字*/
	int d = c * 100 + b * 10 + a;
	printf("%d\n", d);
	return 0;
}

这个就是前面说的套路,人们在解决这个问题的时候,是这样解决的。其中用到了除法和取余。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值