0

c语言学习_wx62b2cc56a6272的技术博客_51CTO博客

 1 year ago
source link: https://blog.51cto.com/u_15693972/5432550
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

                分支和循环(1)

正文

一.分支语句和循环语句

if       switch

while       for        do while       go to语句

什么是语句?

c语言中由一个分号(;)隔开的是一条语句。

;//是语句,空语句

1.分支语句(选择结构)

1).if语句

if语句的语法结构:

if(表达式)                    或                  if(表达式)

语句;                             者                  语句1;

if(表达式1)

else if(表达式2)

如果表达式的结果为真,则语句执行(0表示假,非零表示真)

#include <stdio.h>
int main()
{
int age = 111;
if (age < 18)
printf("未成年\n");
else if (age >= 18 && age < 20) //&&表示逻辑与,如果表达式的结果为真,则语句执行(0表示假,非零表示真)
printf("青少年\n");
else if (age >= 20 && age < 50)
printf("壮年\n");
else if (age >= 50 && age < 90)
printf("老年人\n");
else
printf("老不死\n");
return 0;
}

如果条件成立,要执行多条语句,应该使用代码块

#include <stdio.h>

int main()

if(表达式)

语句列表1;

语句列表2

return 0;

#include <stdio.h>
int main()
{
int age = 111;
if (age < 18)
{
printf("未成年\n"); //语句列表1
printf("不能谈恋爱\n"); //可以打印多个printf
}
else
{
if (age >= 18 && age < 20)
printf("青少年\n");
else if (age >= 20 && age < 50) //语句列表2
printf("壮年\n");
else if (age >= 50 && age < 90)
printf("老年人\n");
else
printf("老不死\n");
}
return 0;
}

这里的{}就是一代码块

悬空else

#include <stdio.h>
int main()
{
int n = 2;
int m = 2;
if (1 == n)
if(2==m) //尽量与else对其
printf("你好\n");
else //else和离的最近的未匹配的if匹配
printf("你真不好\n");

return 0;
}
输出的结果为空,能运行

//适当的使用{}可以使代码的逻辑更加清楚

//代码风格很重要

练习:输出1~100之间的奇数

#include <stdio.h>
int main()
{
int n=1;
while(n<100)
{
if(1==n%2)
printf("%d\n",n);
n++;
}

return 0;
}
2).switch语句

switch语句的语法结构:

switch(整型表达式)

语句项是什么?

//是一些case语句

//如下:

case整型常量表达式:

//switch语句里面可以有if语句

#include <stdio.h>
int main()
{
int day = 0;
scanf("%d",&day); //&取地址符,取出变量day
if (1 == day) //判断变量day是否等于1,是的话输出星期一
printf("星期一\n");
else if(2 == day)
printf("星期二\n");
else if (3 == day)
printf("星期三\n");
else if (4 == day)
printf("星期四\n");
else if (5 == day)
printf("星期五\n");
else if (6 == day)
printf("星期六\n");
else if (7 == day)
printf("星期日\n");
return 0;
}
//用else if...else if 比较复杂,用switch多分支语句比较简单
#include <stdio.h>
int main()
{
int day = 0; //day为整型变量
scanf("%d", &day);
switch (day) //day为整型表达式
{
case 1: //case 1(1为常变量表达式):
printf("星期一\n");
break; //break是结束循环的意思
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期日\n");
break;
}

return 0;
}
//总结:通俗易懂

在switch语句中的break:

在switch语句中,我们没法实现分支,搭配了break就可以实现真正的分支了。

练习:输入1~5,输出“weekday”;输出6~7,输入“weekend”

#include <stdio.h>
int main()
{
int day=0;
scanf("%d",&day);
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("weekday\n");
break;
case 6:
case 7:
printf("weekend\n");
break;
default: //default可以放在switch的任何地方,当switch表达式的值不等于case标签的值时,这个时候default后面的语句就会执行。
printf("输入错误\n");
break;
}
return 0;
}

break语句的实际效果是把语句列表划分为不同的部分。

default子句(default和case没有顺序可言,放在那里都可以用)

如果表达的值与所有case标签的值不一样该怎么样?

其实也没什么,结果就是所有语句都被跳过而已;程序不会终止,也不会报错,因为这种情况在c中并不认为适合报错。

如果你并不想忽略不匹配所有标签的表达式的值时该怎么办?

你可以在语句列表中增加一条default子句,把下面的标签default:写在任何一个case标签可以出现的位置(当switch表达式的值并不匹配所有case标签的值时,这个default子句后面的语句就会被执行。所有,每个switch语句中只能出现一条default子句,但是它可以出现在语句列表中的任意位置,而且语句流会向贯穿case标签一样贯穿default子句。)

#include <stdio.h>
int main()
{
int n = 1;
int m = 2;
switch (n)
{
case 1:m++;
case 2:n++;
case 3:
switch (n)
{//switch允许嵌套使用
case 1:n++;
case 2:m++; n++; break;
}
case 4:m++;
break;
default:
break;
}
printf("m=%d,n=%d\n", m, n);
return 0;
}

1.循环语句

while       for     do while

1).while语句

while语法结构:(while语句,可实现循环)

while(表达式)

循环语句;

练习:在屏幕上打印1~10

#include <stdio.h>
int main()
{
int a=1;
while(a<=10)
{
printf("%d\n",a);
a++;
}
return 0;
}

break停止

#include <stdio.h>
int main()
{
int i=1;
while(i<=10)
{
if(5==i)
break;
printf("%d\n",i);
i++;
}
return 0; //打印为1,2,3,4
}

continue跳过,进行下一次循环的入口判断

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
if (5 == i)
continue;
printf("%d\n", i); //打印1,2,3,4,光标还在闪烁(程序没结束)
i++;
}
return 0;
}

结论:continue表示死循环(循环没结束)


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK