选择、循环
- C语言
- 2024-03-21
- 6612热度
- 0评论
选择、循环
双目运算符
单目运算符
在编程中,单目运算符和双目运算符是两种不同类型的运算符,它们的主要区别在于操作数的数量。
-
单目运算符:
- 单目运算符是一元运算符,它只作用于一个操作数。
- 这意味着它只对一个值进行操作。
- 示例包括递增(++)、递减(--)、取反(-)、逻辑非(!)等。
- 例如,对于表达式
++x
,只有一个操作数x
被递增。
-
双目运算符:
- 双目运算符是二元运算符,它作用于两个操作数。
- 这意味着它需要两个值来执行操作。
- 示例包括加法(+)、减法(-)、乘法(*)、除法(/)等。
- 例如,在表达式
x + y
中,有两个操作数x
和y
,它们执行加法操作。
总的来说,单目运算符和双目运算符在编程中用于执行不同类型的操作,单目运算符仅作用于一个操作数,而双目运算符则作用于两个操作数。
关系表达式和逻辑表达式
算术运算符的优先级高于关系运算符、关系运算符的优先级高于逻辑与和逻辑或运算符、相同优先级的运 算符从左至右进行结合等,那么表达式 5>3&&8<4-!0 的最终值是多少?
读者注意,不能只考虑!的优先级,在遇到&&和||时,需要注意短路问题。
if-else语句
if 判断条件(表达式)为真,就执行某个语句,反之不执行这个语句,或者跳到else对应的语句进行执行。
if 语句和 else 语句也可以多个同时使用(多分支语句)。但是,无论有多少个 if 语句或 else if 语句,程序都只会执行其中的一个语句。下面是一个关于用电量的例子:用电量越高,电的单价越高,但最终 cost 只会被赋值一次。同时,if 语句也支持多层嵌套,在if 语句中又包含一个或多个 if 语句称为 if 语句的嵌套。
#include <stdio.h>
#include <stdlib.h>
int main(){
int elect;
scanf("%d",&elect);
if(elect>500)
{
printf("cost=0.15");
}else if(elect>300)
{
printf("cost=0.10");
}else if(elect>100)
{
printf("cost=0.075");
}else if(elect>50)
{
printf("cost=0.05");
}else
{
printf("cost=0");
}
return 0;
}
if 嵌套语句时,要考虑“悬空else”的问题,C语言中的 else 子句从属于最靠近它的不完整的 if 语句,所以在代码编写的过程中,最好使用花括号对else的归属问题进行限定。
#include <stdio.h>
#include <stdlib.h>
int main(){
int i;
scanf("%d",&i);
if(i>1)
if(i<10) //他们是一对
{
printf("i>1 and i<10\n");
}
else //他们是一对
{
printf("no,they are not\n");
}
return 0;
}
此代码在输入1时,屏幕无返回信息,代表else语句并不会执行,而在输入2或者11时,都能正常返回printf结果,证明else字句从属最靠近它的不完整的if语句。如果想让else从属第一个if语句,那么可以用一个花括号把第二个 if 语句包含在一个单独的代码块内。在 if 语句中的语句列表前后加上花括号,也可以防止不小心加了一句代码后,使实际未被包含的语句被包含在某个 if 语句中的错误。
int main(){
int i;
scanf("%d",&i);
if(i>1){ //他们是一对
if(i<10)
{
printf("i>1 and i<10\n");
}
}
else //他们是一对
{
printf("no,they are not\n");
}
return 0;
}
while循环
while 语句用来实现“当型”循环结构,其一般形式为“while(表达式) 语句;”,当表达式 的值非 0 时,执行 while 语句中的内嵌语句。其特点是:先判断表达式,后执行语句。当表达式的值非 0 时,就会执行语句,从而实现语句多次执行的效果。为了避免程序进入死循环(不停地进行循环操作),在语句中需要有让表达式趋近于假的操作来使程序跳出循环。
使用 while 语句计算 1 到 100 之间所有整数之和的例子。通常会将 while语句使用花括号进行限定,哪怕while 语句只有一句,这么做是因为一个程序往往会经过多次修改,使用花括号可以让程序更加清晰,避免向循环内添加语句时出错。
#include <stdio.h>
#include <stdlib.h>
int main(){
int i=1;
int total=0;
while(i<=100) //不能在此处加分号
{
total = total+i;
i++; //此处要有趋于假的条件,这样才能突破while的条件,跳出循环
}
printf("total=%d",total);
return 0;
}
for循环
C 语言中的 for 循环语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以 用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替 while 循环语句。其一般形 式为
for(表达式 1;表达式 2;表达式 3) 语句;
for 循环语句的执行过程如下,具体流程如下所示。 (1)先求解表达式 1。 (2)求解表达式 2,若其值为真(值为非 0),则先执行 for 语句中指定的内嵌语句,后执行第(3)步。若表达式2其值为假(值为 0),则结束循环,转到第(5)步。 (3)求解表达式 3。 (4)转回第(2)步继续执行。 (5)循环结束,执行 for 语句下面的语句
下面是 for 循环语句计算 1 到 100 之间的所有整数之和的例子,for 循环语句中必须且只能有两个分号,用于分割表达式 1、表达式 2 和表达式 3。for 循环的可读性要比 while 循环的好,所以能使用 for 循环时不要强制改为 while 循环。
#include <stdio.h>
#include <stdlib.h>
int main(){
int i;
int total=0;
for(i=1;i<=100;i++) //此处不能加分号,虽然不会死循环,但是输出结果为101
{
total = total+i;
}
printf("total=%d",total);
return 0;
}
continue语句
continue 语句的作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行是否执行下一次循环的判断。下面是for循环对 1 到 100 之间的奇数进行求和的例子。
#include <stdio.h>
#include <stdlib.h>
int main(){
int i;
int total=0;
for(i=1;i<=100;i++) //此处不能加分号,虽然不会死循环,但是输出结果为101
{
if(i%2==0)
{
continue;
}
total = total+i;
}
printf("total=%d",total);
return 0;
}
break语句
break 语句的作用是结束整个循环过程,不再判断执行循环的条件是否成立。
#include <stdio.h>
#include <stdlib.h>
int main(){
int i;
int total=0;
for(i=1;i<=100;i++) //此处不能加分号,虽然不会死循环,但是输出结果为101
{
if(total>2000)
{
break;
}
total = total+i;
}
printf("total=%d,i=%d",total,i);
return 0;
}
例子从 1 开始累加,当累加的和大于 2000 时,结束 for 循环,同时打印此时 total 的 值 和 i 的 值 。 一 旦 执 行 break 语 句 , 下 一 句 要 执 行 的 就 是“printf("total=%d,i=%d\n",total,i);”。break 语句也可用在 while 循环和 do while 循环中,起结束对应循环的作用。
附带一道王道oj的练习题,输出n!的值
#include <stdio.h>
#include <stdlib.h>
int main(){
int i,j;
int total=1;
scanf("%d",&j);
for(i=1;i<=j;i++)
{
total *= i;
}
printf("%d",total);
return 0;
}