本人0基础开始学编程,我能学会的,你也一定可以,学会多少写多少。
下载安装请从官网入手,社区版本即可,这里主要使用的软件是VS2019,图标如下。
上一篇:从0开始学c语言-10-结构体以及一些作业_阿秋的阿秋不是阿秋的博客-CSDN博客
C语言是结构化的程序设计语言:顺序结构、选择结构、循环结构
C语句可分为以下五类:1. 表达式语句2. 函数调用语句3. 控制语句4. 复合语句5. 空语句
控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成, C 语 言有九种控制语句,可以分为以下三类:1. 条件判断语句也叫分支语句: if 语句、 switch 语句;2. 循环执行语句: do while 语句、 while 语句、 for 语句;3. 转向语句: break 语句、 goto 语句、 continue 语句、 return 语句。
目录
if语句
语法结构
第一种 | 第二种 | 第三种(多分支) |
if ( 表达式 )
语句 ;
|
if ( 表达式 )
语句 1 ;
else
语句 2 ;
|
if ( 表达式 1 )
语句 1 ;
else if ( 表达式 2 )
语句 2 ;
else
语句 3 ;
|
由一个 分号隔开的就是一个 语句
如果表达式 为真就执行语句,为假就不执行。
代码演示
int main()
{
int age=20;
if (age >= 18)
printf("成年人");
return 0;
}
这是第一种书写方式。
int main()
{
int age=99;
if (age >= 18)
printf("成年人");
else
printf("未成年人"); //else只管这句
printf("不能结婚"); //这句独立的,如果要两句一起需要加大括号
return 0;
}
这是第二种书写方式,注意注释中的解释。
int main()
{
int age = 45;
if (age < 18)
printf("未成年");
else if (age <= 30) //age>=18 && age<=30,也可以这么写,因为else已经默认>=18
printf("最好的年纪");
else if (age <= 40)
printf("漫长的十年");
else if (age <= 50)
printf("富有的日子");
else
printf("有趣的日子"); //else不是必须有
return 0;
}
else if (18 <= age < 30)
printf("最好的年纪");
请思考这么写行不行?
答案:这样写会恒为真,18<=age为真就判定为1,然后1<30就为真,就执行语句。
注:0表示假,非0表示真。
书写风格
else的位置
int main()
{
int a = 2;
int b = 9;
if (a == 3)
if (b == 9)
printf("love");
else
printf("aqiu");
return 0;
}
猜猜这段代码打印出来的结果是?
什么也不会打印出来!
因为else和离他最近的if语句进行匹配,所以什么都没有打印。
所以这段代码实际上应该是这样子更加清晰的,
int main()
{
int a = 2;
int b = 9;
if (a == 3)
{
if (b == 9)
printf("love");
else
printf("aqiu");
}
return 0;
}
虽然两段代码意思一样,但是不同的书写风格会带来很大的区别。
良好风格建议:看这本书,高质量c/c++编程(小白看前三章就行了)
(后续免费补充资源,好多都要积分的呀)
return的认识
int ai() //注意加函数的括号
{
if (1)
return 9;
return 0;
}
int main()
{
ai();//执行函数的时候按f11
return 0;
}
请猜猜最后会执行哪几个return?
答案是两个。
return 语句可以有多个,可以出现在函数体的任意位置,但是每次调用函数只能有一个 return 语句被执行,所以只有一个返回值。
return和else的终极混合
看两段代码,判断一下他们的意思是否一样。
if (condition)
{
return x;
}
return y;
if(condition)
{
return x;
}
else
{
return y;
}
答案:一样。
虽然第一段代码并没有else,但是因为有return的影响,所以两段代码达到了一样的效果。当if语句为 真,两段代码都只执行return x。当if语句为 假,两段代码都只执行return y。
常量与“=”
int main()
{
int a = 3;
if (a = 4) //会有警告但是能够运行(能运行是因为为真,这里不是等于而是赋值的意思
printf("aqiu");
return 0;
}
是不是没注意到“=”和“== ”的区别呢?
int main()
{
int a = 3;
if (4 == a) //书写的时候把常量放在左边,如果忘了=就不运行
//!=也是一样的道理,这就是好的代码风格
printf("aqiu");
return 0;
}
我们把常量放在左边就不会忘记是两个“=”了,因为它会提示错误。
练习
判断一个数是不是奇数
int main()
{
int a = 0;
scanf("%d", &a); //别加\n,加了有点问题
int c = a % 2;
if (0 != c)
printf("是奇数");
else
printf("是偶数");
return 0;
}
输出1到100之间的奇数
写了四种,大家看看区别。
第一种:使用了函数、static修饰的局部变量、while循环。
void add()
{
static int c = 1;
printf("%d\n", c);
c = c + 2;
}
int main()
{
int i = 0;
while(i<50)
{
add();
i++;
}
return 0;
}
第二种:while循环语句中的static修饰的局部变量、if语句
int main()
{
int i = 0;
while (i<100)
{
static int a = 0;
if (0 != (a % 2))
printf("%d\n", a);
a++;
i++;
}
return 0;
}
第三种:for循环
int main()
{
int i = 0;
for (i = 1; i <= 100; i+=2)
{
printf("%d ", i); //%d后面加个空格,不然会挤在一起
}
return 0;
}
第四种:for循环中if语句
int main()
{
int i = 0;
for (i = 1; i <= 100; i++)
{
if (i % 2 == 1)
printf("%d ", i); //%d后面加个空格,不然会挤在一起
}
return 0;
}
小白可能看不懂for语句,后续会讲。
switch语句
语句结构
switch(整型表达式)
{
语句项;
}
语句项是这样的
//语句项是一些case语句
case 整型常量表达式:
语句;
代码演示
按照上面的结构,写一个这样的代码:
int main()
{
int day = 0;
scanf("%d", & day);
switch ( day ) //day必须是整型
{
case 1: //入口,1必须是常量表达式,写成1+0也可以
printf("星期1\n");
case 2:
printf("星期2\n");
case 3:
printf("星期3\n");
case 4:
printf("星期4\n");
}
return 0;
}
可以看到,并没有达到我们想要的结果。
按理来说,1应该只输出星期1才对,但是它把不符合情况的都打印了。
这时候就需要
加上break
int main()
{
int day = 0;
scanf("%d", & day);
switch ( day ) //day必须是整型
{
case 1://入口,1必须是常量表达式,写成1+0也可以
printf("星期1\n");
break;//出口
case 2:
printf("星期2\n");
break;
case 3:
printf("星期3\n");
break;
case 4:
printf("星期4\n");
break;
}
return 0;
}
break结束离他最近的switch。
它的实际效果是把语句列表划分为不同的分支部分。
但是,如果我输入的数字在case中没有对应的情况该怎么办?
这时候就请
加上default
每个switch语句中只能出现一条default子句。但是它可以出现在语句列表的任何位置,而且语句流会像执行一个 case 标签一样执行 default 子句。
int main()
{
int day = 0;
scanf("%d", &day);
switch (day) //day必须是整型
{
case 1:
case 2:
case 3:
printf("玩\n"); //123的情况是玩
break;
case 4:
printf("学习\n");
break; //break结束离他最近的switch
default: //指其他情况
printf("睡大觉");
break;
//这其中的default等没有顺序要求,可以写在前面
}
return 0;
}
输入小数会发生什么?
可以看到,只会取整数部分。
编写注意
1、在最后一个 case 语句的后面加上一条 break语句。(可以避免出现,在之前的最后一个 case 语句后面忘了添加 break语句)。2、 在每个 switch 语句中都放一条default子句是个好习惯,在后边再加一个 break 。
练习
猜猜m和n等于什么?
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、找break和switch
这是第一个switch和它所对应的break。
这是第二个switch和它所对应的break。
输入case对应整型表达式结果后并执行相应语句,在遇到break之前,把输入对应case之后的所有case后的语句都执行,不管是否符合case所对应的情况。
2.判断应该执行的语句
switch这里的配图有点问题,
我写着写着当成if语句了,不用考虑括号里的是否为真才对
按照上面那句话的结论,
输入case对应整型表达式结果后并执行相应语句,在遇到break之前,把输入对应case之后的所有case后的语句都执行,不管是否符合case所对应的情况。
那么我们应该执行的语句是从case1 到case4。
3.执行时候注意break
答案已经出现了,m=5,n=3。
switch这里的配图有点问题,
我写着写着当成if语句了,不用考虑括号里的是否为真才对
总结
1.由一个分号隔开的就是一个语句
如果表达式为真就执行语句,为假就不执行。
2.else和离他最近的if语句进行匹配
4.break结束离他最近的switch。它的实际效果是把语句列表划分为不同的分支部分。
5.每个switch语句中只能出现一条default子句。 但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。
6.好的编写习惯
1、在最后一个 case 语句的后面加上一条 break语句。(可以避免出现,在之前的最后一个 case 语句后面忘了添加 break语句)。2、 在每个 switch 语句中都放一条default子句是个好习惯,在后边再加一个 break 。