一.C语言的结构分类与语句
C语言是一门结构化的程序设计语言
生活中的结构:
1.顺序结构
2.选择结构
3.循环结构
顺序结构是指从上往下执行,不进行任何的选择与循环
选择结构指有选择性的执行相关语句
循环结构指可能会一直执行某条语句进入循环,直到跳出循环
选择结构在C语言中体现出来的是if语句与switch语句
循环结构在C语言中体现出来的是while\for\do...while 这三类语句
什么是语句?
在C语言中由一个分号分开的就是一条语句,如以下代码
#include<stdio.h>
int main(void)
{
int a = 10;
return 0;
}
若将int a =10后面的分号去掉则是语法错误,编译器将无法进行编译,如图所示:
注意:只有一个分号也算是一条语句
二.if语句的语法结构
1.if(表达式1)
语句1;
当if语句中表达式1为(真)非0值的时候,则执行语句1,如果为(假)0值的时候则什么都不执行
2.if(表达式1)
语句1;
else
语句2;
当if语句中表达式1为(真)非0值的时候,则执行语句1,如果为(假)0值的时候则执行else中的语句2
3.if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
当if语句中表达式1为(真)非0值的时候,则执行语句1,如果为(假)0值的时候则判断else if语句中的表达式2的值,若表达式2为(真)非0值的时候则执行语句2,若为(假)0值的时候则执行else语句中的语句3
我们先来看一下第一种情况:
#include<stdio.h>
int main(void)
{
int age = 10;
if(age<18)
printf("未成年!\n");
return 0;
}
因为 10<18 所以这时候编译器会输出未成年,我们如果将变量age的值改为20,则什么都不会输出
接下来是第二种情况:
#include<stdio.h>
int main(void)
{
int age = 20;
if(age<18)
printf("未成年!\n");
else
printf("成年!\n");
return 0;
}
因为 20>18 所以这时候编译器会输出成年,我们如果将age的值改为10,则 10<18 满足if的条件,所以会输出未成年
我们再来看一下最后一种情况
#include<stdio.h>
int main(void)
{
int score = 95;
if(score<60)
printf("不及格!\n");
else if(score>=60 && score<=74)
printf("及格!\n");
else if(score>=75 && score<85)
printf("良好!\n");
else if(score>=85 && score<=99)
printf("优秀!\n");
else
printf("满分!\n");
getchar();
return 0;
}
当score的值小于60的时候则会输出不及格,当score的值大于等于60且小于等于74的时候则会输出及格,当score的值大于等于75且小于85的时候会输出良好,当score的值大于等于85且小于等于99的时候则会输出优秀,当所有条件都不满足时则输出满分,如图所示:
注意:当表达式需要表示多个条件时,每一个条件用 && 隔开
注意:在C语言中一切非0的数表示真,0表示假
2.如果if语句中表达式条件成立,需要执行多行语句则需要使用{},这就是代码块,如以下代码:
if(表达式1)
{
语句列表1;
}
else
{
语句列表2;
}
示例:
3.悬空else,如以下代码:
#include<stdio.h>
int main(void)
{
int a = 0;
int b = 2;
if(a==1)
if(b==2)
printf("厉害!\n");
else
printf("太厉害了!\n");
return 0;
}
以上代码执行的结果是什么都不会输出,为了方便讲解,我们把代码放在VS中观察:
我们可以发现a不等于1,所以为假,则不执行if的相关语句,此时else与if(b2)是一堆,为if else语句,既然if(a1)都为假了,那么if(b==2)中的语句将不会被执行,如果if语句都没有被执行,else语句也同样不会被执行,所以输出的是空
由此得出结论:else语句是和最近的if语句相匹配的
4.代码可读性以及=与==的区别,我们猜一下以下代码编译运行后会输出什么结果:
#include<stdio.h>
int main(void)
{
int num = 3;
if(num=5)
{
printf("Hello");
}
getchar();
return 0;
}
这段代码输出结果是Hello,可能有的人就不理解了,明明num=3,3不等于5,怎么还会输出Hello呢?
原因是一个 = 代表的是赋值,也就是将5赋给num,这时候num=5,满足表达式条件,所以会输出Hello,而需要判断两个数字是否相等需要使用 == ,当我们使用 == 时由于num的值为3不等于5,所以不会输出任何东西,如图所示:
所以为了避免这样的错误,我们需要加强代码的可读性,以及限制自己出错的机会,如以下代码可以很好的避免 = 与 == 混淆
#include<stdio.h>
int main(void)
{
int num = 3;
if (5==num){
printf("Hello");
}
getchar();
return 0;
}
我们将num与5的位置换了一下,使得常量5在的左侧,变量num在的右侧,如果这时候我们不小心漏掉了一个=,这时候编译器将报错,因为代码将变成 5=num 也就是将变量的值赋给常量,这样的代码风格可以很好的避免这种情况的发生,如图:
题目:判断并输出1-100中的奇数
方法一:
#include<stdio.h>
int main(void)
{
int i = 0;
while(i<100)
{
int x = i % 2;
if(x==1)
{
printf("%d ",i);
}
i++;
}
getchar();
return 0;
}
首先声明变量i并为其赋值,使i=0,然后创建while循环语句,当i<100的时候则进入循环,声明变量x,x的值为i % 2 的值,我们都直到一个数除以2如果余1则这个数为奇数,如果余0则为偶数,使用if语句判断x的值是否等于1,如果等于1则调用printf函数进行打印,最后让i进行自增,这样就可以输出1-100中的奇数了
方法二:
#include<stdio.h>
int main(void)
{
int i=1;
while(i<=100)
{
printf("%d ",i);
i+=2;
}
getchar();
return 0;
}
首先声明了变量i并为其赋值,使i=1,然后创建while循环语句,当i<=100的时候进入循环,调用printf()函数输出i的值,随后让i+2,一个奇数加上2,则结果还是等于奇数,利用这个原理我们可以循环输出i的值,最后一样可以输出1-100中所有的奇数
2023/7/18
王起舟