首先,c语言是结构化程序设计语言,分为三种结构,分别是顺序结构、选择结构、循环结构。接下来我会详细的讲讲~
顺序结构只要你逻辑不出错,一步一步往下走就行了,我们重点讲的是选择结构和循环结构,一般用if、switch来实现选择,用for、while、do while来实现循环
1.if语句
在c语言中,0为假,非0为真;也就是说表达式的结果为0,则语句不执行
我们来举个例子:输入一个整数,判断是不是偶数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int n;
printf("请输入一个整数:");
scanf("%d", &n);
if (n % 2 == 0)
{
printf("是偶数!\n");
}
return 0;
}
当输入5时if语句不执行,可自己敲着试试~
if不执行那么会执行什么呢?下面引出了else
1.2 else
如果一个数不是偶数,那么就会是奇数,可以通过if else来演示,我们在原代码上加个else就能达到目的了,else是否则的意思
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int n;
printf("请输入一个整数:");
scanf("%d", &n);
if (n % 2 == 0)
{
printf("是偶数!");
}
else {
printf("是奇数!");
}
return 0;
}
1.3 分支中包含多条语句
默认if else只能控制单条语句
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int n;
printf("请输入一个整数:");
scanf("%d", &n);
if (n % 2 == 0)
{
printf("是偶数!\n");
}
else
{
printf("是奇数!\n");
}
printf("无问要记得学习");
return 0;
}
可以看到无论是那条语句,无问要记得学习都会被输出;if或者else只会控制一条语句,为了规范的表达,建议if语句的代码用大括号{}
1.4 嵌套if
即有多个判断条件的时候可以用else if
那么如何实现if的嵌套呢?
举个例子:13-17为青少年,18-40为青年,41-65为中年,65以上为老年
#include<stdio.h>
int main()
{
int age;
scanf("%d", &age);
if (age >= 13 && age <= 17)
{
printf("青少年");
}
else if (age >=18 && age <= 40)
{
printf("青年");
}
else if (age > 40 && age <= 65)
{
printf("中年");
}
else
{
printf("老年");
}
return 0;
}
对于年龄的界定我们不讨论,只是想说可以用else if来做多个判断
1.5 悬空else问题
如果有多个if和else,else总是与它最近的且没有配对的if配对
如果想使用多个,大括号就很重要了
2.关系操作符
C语言用于比较的表达式,称为“关系表达式”,使用的运算符为关系运算符
主要有 >大于运算符,<小于运算符,>=大于等于运算符,<=小于等于运算符,==相等运算符
!=不等于运算符;注意编写的时候>=之间是没有空格的,==为关系运算符,=为赋值运算符
关系表达式通常返回0或1;分别表示假和真;
3.条件操作符
也叫三目运算符,需要接受三个操作数;三目操作符会让代码行少一些,但是注意过于复杂还是不建议使用,读者的阅读性不好;
三目操作符的运用:两个数中谁最大的问题
意思是a>b吗如果大于就printf a,否则printf b
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int a, b;
scanf("%d %d", &a, &b);
int m = a > b ? a : b;
printf("%d", m);
}
4. 逻辑操作符
&& 与 (并且的意思)口诀:全真才真,一假则假
|| 或 口诀:有真则真
!非 为取反运算符,比如a为非0,那么!a为0
下面是例子~判断是不是闰年
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int year;
scanf("%d", &year);
if (year % 4 == 0 && year % 10 != 0 || year % 400 == 0)
{
printf("是闰年");
}
else
{
printf("不是闰年");
}
return 0;
}
5.switch语句
switch 语句是⼀种特殊形式的 if...else 结构,⽤于判断条件有多个结果的情况。它把多重 的 else if 改成更易⽤、可读性更好的形式。
switch的用法和case,break搭配,注意格式switch()里的是mark必须是整型表达式;case后的必须是常量表达式 ,break为跳出switch语句,为了程序的健壮性,记得加上defalut;
例子:分数对应的等级(50分以下为E,60~70为D,以此类推)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main ()
{
int score,mark;
printf("Input score:");
scanf("%d",&score);
mark=score>=0&&score<=100?score/10:-1;
switch(mark)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
printf("grade:E\n");
break;
case 6:
printf("grade:D\n");
break;
case 7:
printf("grade:C\n");
break;
case 8:
printf("grade:B\n");
break;
case 9:
printf("grade:A\n");
break;
default :printf("Input error\n");
}
return 0;
}
练习:输入一个1~7的数字,打印出对应的星期几
6.while循环
和if语句差不多,都是while(表达式)为真就执行{}里的语句,区别就是while可以循环
while循环的执行流程是,如果表达式为真就进入循环,一直反复,直到为假就跳出循环
打印出1~10的数字
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int n=1;
while (n<=10)
{
printf("%d ", n);
n++;
}
return 0;
}
7.for循环
for 循环是三种循环中使⽤最多的,for循环的语法形式为for(初始化表达式;判断表达式;转化表达式)
用for循环在屏幕上打印1~10的值
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int n=0;
for(n=1;n<=10;n++)
{
printf("%d ", n);
}
return 0;
}
对比来看,for语句更集中
8. do while循环
根据流程图来看,do while循环至少执行了一次,while和for都是先判断;
注意:while()后面要加分号
接下来看下这个代码
输入一个数,判断有多少位
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int n;
int count = 0;
scanf("%d", &n);
do
{
count++;
n = n / 10;
} while (n);
printf("%d\n", count);
return 0;
}
do while 适用于至少做了一次的场景,比如上面的代码,输入0也是一位
9.break和continue语句
break为跳出本循环,continue为继续循环,而不进行continue后的语句
while和for的continue有差别,我们以打印1~10的数字为例
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int n = 1;
while (n <= 10)
{
if (n == 6)
continue;
printf("%d ", n);
n++;
}
return 0;
}
打印的结果为1 2 3 4 5 陷入死循环
for循环呢?
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int n = 0;
for (n=1;n <= 10;n++)
{
if (n == 6)
continue;
printf("%d ", n);
}
return 0;
}
答案是不打印6。因为continue不执行下面的语句,去到n++;为真又进入循环
do while 和while循环一样陷入死循环
10. 循环的嵌套
就是for while do while三种循环一起用
比如计算100~200中的素数
素数:2~i-1之间有数字能整除i,则i不是素数,如果都不能整除,则i是素数。
可以通过试除法,比如9就用2~8去整除9,发现3能整除,那么就不是素数
这里我们引入一个变量flag,判断的标志
看代码~
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int i=0;
for (i = 100; i <= 200; i++)
{
int flag = 1;//假设i是素数;
int j = 0;
for (j = 2; j <i; j++)
{
if (i % j == 0)
{
flag = 0;//不是素数
break;
}
}
if (flag == 1)
{
printf("%d ", i);
}
}
return 0;
}
也可以加上count看循环了多少次和素数的个数
11. goto语句
C语⾔提供了⼀种⾮常特别的语法,就是 goto 语句和跳转标号, goto 语句可以实现在同⼀个函数 内跳转到设置好的标号处。
比如循环打印无问要记得学习
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
again:
printf("无问要记得学习\n");
goto again;
return 0;
}
goto语句尽量不要使用;因为多次跳转会让程序的执行混乱;但在某些特定情景下,使用挺方便
比如在多个循环里,要跳出循环用break就会快点,用break要跳几次