上一次我们讲到float等浮点型的数据范围和数据类型长度,以及sizeof可以查看变量、表达式、数据类型的字节数即所占内存。
除法/和乘法*
我们继续用计算器这个例子来学习其他语法。先来看最初我们写成的代码:
#include<stdio.h>
int Add(int a, int b)
{
int c = a + b;
printf("%d\n", c);
}
int Sub(int a, int b)
{
int c = a - b;
printf("%d\n", c);
}
int main()
{
int a;
int b;
scanf_s("%d", &a);
scanf_s("%d", &b);
Add(a,b);
Sub(a,b);
return 0;
}
我们仅仅是完成了加法和减法的运算,接下来我们试试进行除法和乘法的运算:
现在就需要引入除了+、-之外的算术操作符:/ 、*。/是用来进行除法的,而*是用来乘法的。
我们最常见的除法是整数之间相除,并且分有余数和无余数这两种情况,前者比如20/3,商是6余2,后者比如15/3是为整除,商是5。我们在VS2022来看一下会不会输出我们期望中的结果:
(以后省略头文件)
int main()
{
int a;
int b;
scanf_s("%d %d", &a, &b);
int c = a / b;
printf("%d", c);
}
当我们在控制台输入a=20,b=3时,会发现如下的结果:只有商,并没有余数
再来测试一组:输入15和3
当我们要对整型数据进行除法运算时,/会自动舍弃余数,那要是定义成浮点数呢?
int main()
{
float a;
float b;
scanf_s("%f %f", &a, &b);
float c = a / b;
printf("%f\n", c);
}
看到控制台会发现没有舍弃余数,所以可以看出最后的结果跟定义的数据类型有关
假如只是将结果的数据类型变成浮点型,进行除法运算的两个数依旧是整数:
会发现结果虽然有小数部分,但是还是将余数舍弃掉了。所以当进行/除法运算时,一定要注意数据类型的选择,会直接影响结果。
乘法的话基本没有变化。那我们来补充一下计算器中除法和乘法的函数:当输入数据是整型类型时:
//输入数据为浮点型时将int改成float,占位符将%d改成%f
void Mul(int a, int b)
{
int c = a * b;
printf("%d\n", c);
}
void Div(int a,int b)
{
int c = a / b;
printf("%d", c);
}
while循环
当我们前面要进行多组测试时,会发现每次都要关闭控制台然后再重新运行一次,那有没有办法是可以一次运行就可以进行多次测试的呢?当然有,这时候就要引入我们的循环语句了。就比如现在这种情形,我们想要进行多组测试那借助循环语句while可以这么写:
int main()
{
int a;
int b;
while (scanf_s("%d %d" , &a, &b) != EOF)//括号里面的语句是指当一直有输入需求时会进行下面大括号里面的内容
{
int c = a / b;
printf("%d\n", c);
}
}
我们编译运行一下:
会看到只要我们不主动关闭控制台就可以一直进行测试。
while翻译成英文有一个意思是:当......;所以我们可以理解成当满足了while后面括号里边的内容那么就可以进行随之而来的大括号里面的内容。括号里面出现了和赋值(=)、等于(==)很像的(!=),它指的是不等于;来解释一下scanf_s("%d %d" , &a, &b) != EOF,那我们得先看看输入函数究竟会返回什么值:暂且定义输入函数返回值类型为整型:
int a;
int b;
int result=scanf("%d %d",&a,&b);
printf("%d\n",result);
当我们像下面这样输入了两个值,result==2(result等于2)
当我们只正确输入一个值时,result==1
当我们两个数都没有正确输入时,result==0
所以我们可以知道输入函数的返回值是有效输入的个数。EOF的值是-1,所以scanf_s("%d %d" , &a, &b) != EOF指输入函数返回值不等于-1,即满足输入函数的返回值不等于-1这个条件时便可进行大括号内的除法操作。满足条件指括号里面的判断语句为真;当然也可以写scanf_s("%d %d" , &a, &b) ==2,但是EOF的用得更加普遍。
for循环
while循环中我们可以进行任意次数的多组测试,当想要结束时需要手动关闭。当进行固定组数的测试时,可以用for循环——
for(int i=0;i<5;i++)//表示进行5次的测试,可以看作是一个计数器
{
int a;
int b;
scanf_s("%d %d", &a, &b);
int c = a * b;
printf("%d\n", c);
}
这次是程序自己主动退出来的。for后面的括号里面有三个表达式,第一个表达式用赋值符号来初始化计数器,第二个表达式是计数器结束的条件,第三个则是计数器的迭代变化。i++表示每次经过for语句都会增加一次,即自增。
操作符
++属于单目操作符。而我们前面说的+、-、*、/属于算术操作符,前面出现的==、!=、<都是关系操作符。