可以用来设定变数值的运算子,前面用过的 =
就是其中一种,执行时会先将等号右边的值算出来,再指派给左边的变数
除此之外还有: +=
, -=
, *=
, /=
, %=
,代表 先算出右边的值,再算出左边变数值和右边做数学运算的结果,最後指派给左边的变数
也就是说: a=a+2
和 a+=2
是一样的意思,a=a-2
和
a-=2
是一样的意思,a=a*2
等效 a*=2
,a=a/2
等效 a/=2
,a=a%2
等效 a%=2
,
#include<stdio.h>
#include<stdlib.h>
int main(){
int x=0;
printf("%d\n", x);
x+=1;
printf("%d\n", x);
x+=1;
printf("%d\n", x);
x+=1;
printf("%d\n", x);
return 0;
}
++
, --
这两个运算子也可以设定变数的值,功能分别是 设为变数值+1 和 设为变数值-1
也就是说 ++
/--
的功能和 +=1
/-=1
相同
#include<stdio.h>
#include<stdlib.h>
int main(){
int x=0;
printf("%d\n", x);
x++;
printf("%d\n", x);
x++;
printf("%d\n", x);
x++;
printf("%d\n", x);
return 0;
}
#include<stdio.h>
#include<stdlib.h>
int main(){
int x=0;
printf("%d\n", x);
x--;
printf("%d\n", x);
x--;
printf("%d\n", x);
x--;
printf("%d\n", x);
return 0;
}
用来表示重复执行的指令,有 while()
和 for()
两种
语法和 if()
一样,会先判断条件,成立时执行区块中的内容,不成立则跳过区块
while(<条件>){
<条件成立时执行的内容>
⋮
<条件成立时执行的内容>
}
差别在一个 if()
只会执行一次,while()
会不断地执行,直到条件不成立为止
也就是说,执行的顺序是: 判断(成立)→区块→判断(成立)→区块→...→区块→判断(不成立)→结束
下面例子中,变数 x
先被设为0,执行到 while()
会先进行条件判断:
x
递增1,现在的 x
等於1
x
递增1,现在的 x
等於2
x
递增1,现在的 x
等於3
#include<stdio.h>
#include<stdlib.h>
int main(){
int x=0;
while(x<3){
printf("%d\n", x);
x+=1;
}
printf("End!\n");
return 0;
}
找出100以内所有2的次方:
#include<stdio.h>
#include<stdlib.h>
int main(){
int x=1;
while(x<100){
printf("%d\n", x);
x*=2;
}
return 0;
}
C语言的 for()
其实和 while()
没有太大的差异,都是先判断,後执行,直到条件不成立,只是 for()
多了 初始化 和 更新 两个部分
for(<初始化>; <条件>; <更新>){
<条件成立时执行的内容>
⋮
<条件成立时执行的内容>
}
<初始化>
和 <更新>
是两个任意的指令,当执行到 for()
时会先执行一次<初始化>
,再开始条件判断,之後执行区块,区块结束後会执行一次 <更新>
,才继续判断条件是否成立,但之後不会再执行 <初始化>
也就是说,执行的顺序是: <初始化>
→判断(成立)→区块→<更新>
→判断(成立)→区块→<更新>
...→区块→<更新>
→判断(不成立)→结束
下面两段程序码的效果相同
int i;
for(i=0; i!=5; i++)
printf("%d\n", i);
whlie()
前的 i=0
就相当於上面 for()
回圈的 <初始化>
,printf()
後的 i++
就相当於 for()
的 <更新>
int i;
i=0;
while(i!=5){
printf("%d\n", i);
i++;
}
<初始化>
或 <更新>
有多个指令时可以用逗号隔开
#include<stdio.h>
#include<stdlib.h>
int main(){
int sum, k;
scanf("%d", k);
int i;
for(i=1, sum=0; i<=k; i++){
sum+=i;
}
printf("%d\n", sum);
return 0;
}
假设输入3,i
和 sum
会先被设为1和0:
i
一开始是1,i<=k
成立,所以会执行区块,区块执行後 sum
为1(0+1),i
为2i!=k
成立,区块执行後 sum
为3(1+2),i
为3i!=k
成立,区块执行後 sum
为6(3+3),i
为4i!=k
不成立,回圈结束 sum
为6利用回圈计算 n
的 k
次方
除了像前面一样另外用一个变数(i
)来记录回圈执行的次数,如果区块中的内容和次数无关,也可以用倒数的方式控制回圈
#include<stdio.h>
#include<stdlib.h>
int main(){
int n, k, ans;
scanf("%d%d", &n, &k);
for(ans=1; k!=0; k--){
ans*=n;
}
printf("%d\n", ans);
return 0;
}
假设输入2和3:
k
一开始是3,k!=0
成立,所以会执行区块,区块执行後 ans
为2(1×2),k
为2k!=0
成立,区块执行後 ans
为4(2×2),k
为1k!=0
成立,区块执行後 ans
为8(4×2),k
为0k!=0
不成立(此时 i
等於3和 k
相同),回圈结束,ans
为8假设输入2和0:
k!=0
不成立,回圈结束,ans
为1break
可以强制停止区块的执行,在回圈中常和 if()
一起使用
因为回圈只有在执行区块前才会判断条件,如果条件在区块中已不成立,就需要另外用 if()
做判断,并用 break
结束回圈
下面例子中,在 n
等於16时:
n<20
成立,n
递增2变成18,视窗显示18n<20
成立,n
递增2变成20,视窗显示20n<20
不 成立,回圈结束所以20还是会被显示
#include<stdio.h>
#include<stdlib.h>
int main(){
int n=0;
while(n<20){
n+=2;
printf("%d ", n);
}
return 0;
}
在 printf()
前用 if()
判断,如果 n
大於等於20就结束回圈,20就不会被显示
#include<stdio.h>
#include<stdlib.h>
int main(){
int n=0;
while(n<20){
n+=2;
if(n>=20)
break;
printf("%d ", n);
}
return 0;
}
continue
则是跳过这次的区块,但回圈不会结束(除非回圈的条件也不成立)
下面例子中,当 x
等於16时会执行 continue
,所以16会被跳过,但後面的数字仍会被显示出来
#include<stdio.h>
#include<stdlib.h>
int main(){
int n=0;
while(n<20){
n+=2;
if(n==16)
continue;
printf("%d ", n);
}
return 0;
}
在较新的版本中,可以用<初始化>
宣告变数,不过变数只能在 for()
的区块中使用
所以下面例子中的 sum
必须在 for()
之前宣告
#include<stdio.h>
#include<stdlib.h>
int main(){
int sum=0, k;
scanf("%d", k);
int i;
for(int i=1; i<=k; i++)
sum+=i;
printf("%d\n", sum);
return 0;
}
挖坑清单:
main()
前面的 int
,和最後一行的 return 0;
\0
在字串、字元中的意思
>>: day24 : kong api gateway(上)
今天的影片内容为介绍分析项目清单与表格文件的方法 而在影片的後半部,会带大家离开新手村,爬取一个真正...
之前打某个程序码时 刚好要设流水号变数 那时用eval 但会出现can't assign to fu...
L1 Convex Hull 解法:Divide-and-conquer One-Center Pr...
欧欧欧,竟然已经到第29天了,时间真的是咻咻咻就过了呢!明天就要结束了,真是感伤(☍﹏⁰) (解脱了...
Odoo模组开发实战 目录 1.增加商务逻辑 第一章 增加商务逻辑 1.自动计算 於租金总额栏位设置...