昨天我们算术操作符的除法和乘法,以及引入while和for循环,今天我们来看新的内容。
借助我们之前写的计算器代码来深入学习一下其他东西。
单目操作符——++、--、&
除了昨天说的那些操作符之外,记不记得输入函数中有一个&这么一个符号,实际上它跟++一样都是单目操作符。
++在昨天的时候讲到是用于for循环计数器i的迭代,每次经过一个循环就会使得i+1,其实除了i++,也有++i,只不过两者有点区别:
int i = 4;
int j = 4;
int a = i++;
int b = ++j;
printf("%d\n", a);
printf("%d\n", b);
printf("%d\n", i);
printf("%d\n", j);
控制台:可以明显看到结果是不一样的,a是i原来的值,而b是j+1后的值,说明++在后面的(即后置++)是先被使用去赋值给a,然后+1,而++在前面的(即前置++)是先+1后被使用去赋值给b,共同的特点是都会实现自增,但是若旁边有赋值的符号时就要考虑到它们两个的区别了。可以这样记忆:前置的先+1后被使用,后置的先使用后+1.
--和++仅是含义上的不同,但是前置和后置之间的区别是一致的。
在输入时为什么需要用到&这个单目操作符呢?是因为在输入时scanf需要获取变量的内存地址才能进行输入对变量进行赋值(变量的内存地址是在编译时被给定的)。
do while循环
昨天我们说了while循环和for循环,其实还有另外一种循环:do-while循环。这三种循环for循环最多,而do-while用得最少。
//方式一: while
int a;
int b;
while (scanf_s("%d %d" , &a, &b) != EOF)//括号里面的语句是指当一直有输入需求时会进行下面大括号里面的内容
{
int c = a / b;
printf("%d\n", c);
}
//方式二: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循环还可以改一下while,可以变成下面这样写:
//方式三:while——新
int a;
int b;
int i=0;
while (i<5)//括号里面的语句是指当一直有输入需求时会进行下面大括号里面的内容
{
int c = a / b;
printf("%d\n", c);
i++;
}
而do-while其实和while相差不太大:计数变量i定义也是要在循环之外。
int i = 0;
do
{
int a;
int b;
scanf_s("%d %d", &a, &b);
int c = a * b;
printf("%d\n", c);
i++;
} while (i < 5);
do-while和while的区别
其实区别在于do-while会先进入循环体内而不是先进行判断(while和for都是),这里的例子不是很能区别这其中的差别,下面举一个新的例子:计算一个整数的位数。
用while循环是这样的:
int n;//先定义输入的数
scanf_s("%d", &n);//输入整数
int count = 0;//计数count置为0
while (n)//括号里面是判断条件,结果为真是指不为零便可进行下面的语句
{
count++;//count自增,每次进入循环就可以进行+1,进入多少次等于最终的结果即会是整数的位数
n = n / 10;//这里的n是整数,每次除以10就说明舍弃最后面的一位:比如123/10=12,12/10=1,1/10=0,三次刚好为零这时循环结束。
}
printf("%d\n", count);
可以看到控制台输出:
再用do-while来试试:
int n;
scanf_s("%d", &n);
int count = 0;
do
{
n = n / 10;
count++;
} while (n);
printf("%d", count);
依旧是可以:
但是我们如果计算0的位数会发现while循环出现了错误,而do-while依旧可以正确计算,这就是它们的区别所在:前者先进行条件判断,所以n=0时连循环都进不去,而后者是先进入循环体后面才进行条件判断,所以n=0是进得去的,计数变量count自然也能+1。