c语言循环结构知识点总结,c语言分支结构和循环结构
在的第一篇博文中
以下是我在哔哩哔哩学习C语言循环和分支模块的一些笔记:
我们通过一些代码进行分析:
一、分行声明:
如果
转换
示例1:
#包含stdio.h
int main()
{
int a=0;
int b=1;
如果(a==1)
{
如果(b==1)
Printf(谢谢\ n );
其他
Printf(不客气\ n );
}
返回0;
}
我们可以看到例1中这段代码的输出结果是什么都没有,那么为什么不输出“不客气”呢?
因为我们的else是和最近的if匹配的,虽然上面的else是和第一个if对齐的,实际上计算机最终会自动把这个else和第二个if对齐。如果想让这个else和第一个If匹配,可以加一对{},框起来。如实施例2所示:
示例2:
#包含stdio.h
int main()
{
int a=0;
int b=1;
如果(a==1)
{
如果(b==1)
Printf(谢谢\ n );
}
其他
Printf(不客气\ n );
返回0;
}
If可用于单分支语句或多分支语句。以下示例3和4都是正确的:
示例3:
# define _ CRT _ SECURE _ NO _ WARNINGS 1
#包含stdio.h
int main()
{
int t=0;
Printf(请输入当前温度:\ n );
scanf(%d ,
如果(t 15)
printf( cold \ n );
其他
{
如果(t=15 t 22)
printf( cool \ n );
else if (t=22 t 28)
Printf(微热\ n );
else if (t=28 t 36)
Printf(好热\ n );
其他
Printf(天热\ n );
}
返回0;
}例4:
# define _ CRT _ SECURE _ NO _ WARNINGS 1
#包含stdio.h
int main()
{
int t=0;
Printf(请输入当前温度:\ n );
scanf(%d ,
如果(t 15)
printf( cold \ n );
else if (t=15 t 22)
printf( cool \ n );
else if (t=22 t 28)
Printf(微热\ n );
else if (t=28 t 36)
Printf(好热\ n );
其他
Printf(天热\ n );
返回0;
}
示例5:
int main()
{
int month=0;
scanf(%d ,月);
开关(月)
{
案例1:
printf(一月\ n );
案例二:
printf( Febuary \ n );
案例三:
printf( March \ n );
案例4:
printf( April \ n );
案例5:
printf( May \ n );
案例6:
printf( June \ n );
案例7:
printf( July \ n );
案例8:
printf( August \ n );
案例9:
printf(九月\ n );
案例10:
printf(十月\ n );
案例11:
printf(十一月\ n );
案例12:
printf( December \ n );
默认值:
Printf(输入错误\ n );
}
返回0;
}
如例5所示,如果我输入一个2,我就从例2开始进入循环,依次输出例2之后的数据,但如果我在例2之后加上break,结果就不一样了,如例6所示。
示例6:
int main()
{
int month=0;
scanf(%d ,月);
开关(月)
{
案例1:
printf(一月\ n );
打破;
案例二:
printf( Febuary \ n );
打破;
案例三:
printf( March \ n );
打破;
案例4:
printf( April \ n );
打破;
案例5:
printf( May \ n );
打破;
案例6:
printf( June \ n );
打破;
案例7:
printf( July \ n );
打破;
案例8:
printf( August \ n );
打破;
案例9:
printf(九月\ n );
打破;
案例10:
printf(十月\ n );
打破;
案例11:
printf(十一月\ n );
打破;
案例12:
printf( December \ n );
打破;
默认值:
Printf(输入错误\ n );
打破;
}
返回0;
}
如示例6所示,在每个事例中添加break后,只输出当前内容。但是,不必在每个案例之后添加break,应该根据需求来决定,如示例7所示。
示例7:
int main()
{
int month=0;
scanf(%d ,月);
开关(月)
{
案例12:
案例1:
案例二:
printf( winter \ n );
打破;
案例三:
案例4:
案例5:
printf( Spring \ n );
打破;
案例6:
案例7:
案例8:
printf( summer \ n );
打破;
案例9:
案例10:
案例11:
Printf(秋\ n );
打破;
默认值:
Printf(输入错误\ n );
打破;
}
返回0;
}
像例7这样的代码可以更直观的看到你的代码想要表达的意思。
注意事项:
1.switch()case()语句只能是整数常量(char字符类型对应的ASCII值也是整数)
2.switch语句可以嵌套,如示例8所示:
实施例8:
int main()
{
int a=1;
int b=2;
开关(b) //从案例2进入
{
案例一:a;
案例二:b;//此时,b=3进入情况3
案例三:
开关(b) //从案例3进入
{
案例一:b;
案例二:a;
案例三:a;b;打破;//a=2,b=4,然后跳出循环,跳到情况4
}
案例四:b;//b=5跳出循环
默认值:
打破;
}
printf(%d,%d ,a,b);//a=2,b=5
返回0;
}二。循环语句:
正在…
为
做什么
示例9:
int main()
{
int I=0;
while (i=10)
{
如果(i==5)
继续;
printf(%d\n ,I);
我;
}
返回0;循环,等到i=5,continue从i=5开始一直循环,I没有机会改变。
实施例10:
int main()
{
int I=0;//初始化
While (i=10) //判断
{
我;//调整
如果(i==5)
继续;
printf(%d\n ,I);
}
返回0;
}当I放在前面,i=5在I后面时,i=5不输出结果(即跳过i=5的循环结果),继续让i=5进入循环,I=6,继续循环,直到I=10。
所以break语句用来跳出循环,continue语句用来跳过一个循环,即continue之后的语句不执行,而是跳转到while的判断部分。
实施例11:
int main()
{
int I=0;
//初始化;判断;调整
for(I=1;i=10我)
{
如果(i==5)
继续;
printf(%d ,I);
}
返回0;
}
for循环的第二项是判断条件。判断条件是否为真,取决于这个循环能否执行。如实施例12所示。
实施例12:
int main()
{
int I=0;
int k=0;
for (i=0,k=0;k=0;我,k)
k;
返回0;
}
如你所见,我们的结果是空的。原因是在for循环的判断条件中,k=0,即k为假,所以循环无法进行。而当k=非0时,就会进入无限循环。因此,当循环条件已知时,for循环是适用的。
实施例13:
int main()
{
int I=1;
做
{
如果(i==5)
继续;
printf(%d ,I);
我;
}
while(I=10);
返回0;
}//做的区别.while语句和while语句是do.while语句会无条件执行一次然后判断循环条件是否可以继续,而while语句在循环条件不成立的情况下不会执行一次。
三。goto语句:
实施例14:
#包含字符串. h
int main()
{
char input[20]=0;
系统(关闭-s-t60 );//执行系统命令
再次重申:
Printf(电脑将在60秒后关机,请输入:如果你得到一个好的提议,你可以取消关机\ n请输入
scanf(%s ,输入);
If (strcmp(input, get a good offer)==0)//strcmp()用于比较两个字符串
{
系统(“关断-a”);
}
其他
{
再次转到;
}
返回0;
}可以看出,goto语句也是用来跳出循环的,但与break不同的是,goto语句可以跳出如图14.1所示的多级嵌套循环,也可以跳到任何地方。
图14.1
以下是一些练习的详细说明:
问题1:判断一个数是否为奇数,输出1到100的奇数。
# define _ CRT _ SECURE _ NO _ WARNINGS 1
#包含stdio.h
int main()
{
for(int I=1;i=100我)
{
if(i % 2==1)
{
Printf(%d是奇数\n ,I);
}
}
返回0;
}问题二:算1!2!10!
int main()
{
int n=10
int Jie=1;
int sum=0;
for(int I=1;我我)
{
Jie=Jie * I;
sum=sum杰;
}
printf(%d ,sum);
返回0;
}问题3:在有序数组中求一个特定的数N
方法:
int main()
{
int a[]={ 0,1,2,3,4,5,6,7,8,9 };
int b=6;
int I;
int s=sizeof(a)/sizeof(a[0]);
for(I=0;我我)
{
if (b==a[i])
{
Printf (found,下标:%d\n ,I);
打破;
}
}
如果(i==s)
Printf(未找到\ n );
返回0;
}方法:用二分法开始搜索(效率更高)
int main()
{
int a[]={ 0,1,2,3,4,5,6,7,8,9,10 };
int b=6;
int I;
int s=sizeof(a)/sizeof(a[0]);
int L=0;//左下标
int R=s-1;//元素数量-1
while (L=R)
{
int m=(L R)/2;
如果(a[m] b)
{
r=m-1;
}
else if (a[m] b)
{
l=m ^ 1;
}
其他
{
Printf (found,下标:%d\n ,m);
打破;
}
If (L R)//超出范围
{
Printf(未找到\ n );
}
返回0;
}
}二分法原理说明图:
问题4:演示多个字符从两端移动到中间汇聚。
方法:
#包含字符串. h
#包含windows.h
int main()
{
char a[]=获得优惠!;
char b[]= # # # # # # # # # # # # # # ;
int s=strlen(a);//字符串的大小
int L=0;
int R=s-1;
while (L=R)
{
b[L]=a[L];
b[R]=a[R];
printf(%s\n ,b);
睡眠(1000);//休息一秒钟(带上头文件windows.h)
l;
r-;
}
返回0;
}
方法:
#包含字符串. h
#包含stdlib.h
#包含windows.h
int main()
{
char a[]=获得优惠!;
char b[]= # # # # # # # # # # # # # # ;
int s=strlen(a);//字符串的大小
int L=0;
int R=s-1;
while (L=R)
{
b[L]=a[L];
b[R]=a[R];
printf(%s\n ,b);
睡眠(1000);//休息一秒钟(带上头文件windows.h)
系统(“cls”);//清屏(自带头文件stdlib.h)
l;
r-;
}
printf(%s ,b);//使用了清屏函数,会把最后的结果清掉。如果要显示,在循环外再打印一次。
返回0;
}
除了strlen(a)-1,这个问题还可以用sizeof(a)/sizeof(a[0])-2来表示。至于后面为什么需要-1或-2,我们可以用下图来说明:
问题5:模拟用户登录场景(只允许输入三个密码。如果你三次输入错误的密码,你将退出系统。)
#包含字符串. h
int main()
{
int I=0;
char p[20]={ 0 };
for(I=0;我我)
{
Printf(请输入密码:\ n );
scanf(%s ,
//==不能用于比较两个字符串是否相等,应使用strcmp函数。
//如果密码等于“12356”,则返回0,
//如果密码“12356”将返回大于0的数,否则将返回小于0的数。
if (strcmp(p, 0317)==0)
{
Printf(登录成功\ n );
打破;
}
其他
{
Printf(密码错误\ n );
}
}
如果(i==3)
{
Printf(密码输入错误三次,系统退出\ n );
}
返回0;
}
问题6:打印1000年到2000年之间的闰年。
方法:
int main()
{
int c=0;
//1.它能被4整除,但不能被100整除吗?
//2.它能被400整除吗?
for(int I=1000;i=2000我)
{
if (i % 4==0 i % 100!=0)
{
printf(%d\n ,I);
c;
}
else if (i % 400==0)
{
printf(%d\n ,I);
c;
}
}
printf(\nc=%d\n ,c);
返回0;
}方法:
int main()
{
int c=0;
for(int I=1000;i=2000我)
{
if (i % 4==0 i % 100!=0 i % 400==0)
{
printf(%d\n ,I);
c;
}
}
printf(\nc=%d\n ,c);
返回0;
}
前面的结果没有被裁剪出来。从1000年到2000年有243个闰年。
问题7:判断100到200之间的质数。
方法:
int main()
{
int I=0;
int c=0;
for(I=100;i=200我)
{
int j=0;
//质数只能被1和它本身整除
for(j=2;j j)
{
If (i% j==0)//没有能被2整除到i-1的数是质数。
{
打破;
}
}
如果(j==i)
{
c;
printf(%d\n ,I);
}
}
printf(\nc=%d\n ,c);
返回0;
}方法:
#包含数学. h
int main()
{
int c=0;
int I=0;
//100到200之间的偶数不能是质数
for(I=101;i=200i 2)
{
int j=0;
//i=a*b示例:24=4*6=3*8
//使用sqrt函数带来头文件math.h
//至少一个数字=平方I
for(j=2;j sqrt(一);j)
{
如果(i % j==0)
{
打破;
}
}
if (j sqrt(i))
{
c;
printf(%d\n ,I);
}
printf(\nc=%d\n ,c);
}
返回0;
}
问题8:打印99乘法表。
int main()
{
int I=1;
int j=1;
for(I=1;我我)
{
//用I控制项数,第一项循环几次,打几项。
for(j=1;j j)
{
//%-二维左对齐,-右对齐
printf(%d*%d=%-2d ,I,j,I * j);
}
printf( \ n );
}
返回0;
}
问题9://打印1/1-1/2 1/3-1/4 1/5 … 1/99-1/100的值。
int main()
{
int I=0;
双和=0.0;
int f=1;
for(I=1;i=100我)
{
sum=f * 1.0/I;
f=-f;//一次实现正数,下次实现负数
}
printf(%lf\n ,sum);//%lf是一个双格式字符。
返回0;
}
问题10:
int main()
{
int I=0;
int c=0;
for(I=1;i=100我)
{
If (i% 10==9)//位是9
c;
//两个99不会和else if语句一起出现,
//因为如果满足if的条件,就不会执行else if语句。
Else if (i/10==9)//第十位是9。
c;
}
printf(c=%d\n ,c);
返回0;
}
问题11:求十个整数的最大值。
int main()
{
int a[]={-3,-2,-1,0,1,2,3,4,5,6 };
int max=a[0];//max在这里不能等于0。我们应该假设第一个数字是最大值,然后进行比较。
int I=0;
int s=sizeof(a)/sizeof(a[0]);
for(I=1;I)//第一个数字已经被设置为最大值,所以我们要从第二个数字开始比较。
{
如果(a[i] max)
{
max=a[I];
}
}
printf(max=%d\n ,max);
返回0;
}
最后,我想说,编程是一个累积的过程,不可能一蹴而就。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。