前言:
C语言是一种结构化的程序设计语言,包含:顺序结构,分支结构和循环结构。
直观来看,流程图分别如下:
目录
1.顺序结构
顺序结构构如其名,就是按顺序一行一行按顺序进行编译和链接。
2.分支结构(选择结构)
1.if···else语句
if 程序会让语句执行以下处理:
判断表达式的值,如果结果为真(非0),则执行相应的语句。
1.运算符
1.关系运算符
注:一般0为假,非0为真,且以上结果类型皆为int
< //a<b是结果为1,反之为0;
> //a>b是结果为1,反之为0;
<= //a<=b是结果为1,反之为0;
>= //a>=b是结果为1,反之为0;
== //表示a与b相等;
!= //表示a与b不等;
2.逻辑运算符
&& //逻辑与运算符 (两侧都为真,则为真,否则为假)
|| //逻辑或运算符 (至少一侧为真,则为真,否则为假)
! //逻辑取反运算符 (改变单个表达式真假)
3.条件运算符
a ? b : c //如果a为真,则结果是b的值,否则为c
2.if 语句的两种格式
- if (表达式) 语句
if(表达式)语句
- if (表达式) 语句 else语句
if(表达式)
{
语句1; //没有{}时,执行其后最近的语句
}
else
{
语句2; //没有{}时,一般与最近的if匹配
}
括号内对条件进行判断的表达式称为控制表达式(control expersssion)。
3.if-else的嵌套
如果条件成立,又执行多条语句时,通常使用if-else嵌套语句。一个简单的例子:
#include<stdio.h>
int main()
{
int a = 0, b = 2;
if(a == 1) //为假,直接跳出循环
{
if(b == 2)
{
printf("aaaaa\n");
}
else
{
printf("bbbbb\n");
}
}
return 0;
}//无法运行出结果,仅示例作用
1.输出 a, b, c中最大的数:
#include<stdio.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
int max = 0;
if (a > b)
{
if (a > c) // a>b>c
{
printf("max=%d\n", a);
}
else // c>a>b
{
printf("max=%d\n", c);
}
}
else if (b > c) // b>a && b>c
{
printf("max=%d\n", b);
}
else // b>a && c>b
{
printf("max=%d\n", c);
}
return 0;
}//输出 a, b, c中最大的数,仅示例
此外,使用条件运算符同样能够表示选择结构:
max = (a > b) ? a : b;
max = (max > c) ? max : c; //输出 a, b, c中最大的数,仅示例
2.输出闰年:
//能被4整除并且不能被100整除是闰年
//能被400整除是闰年
int main()
{
int year;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
printf("%d\n", year);
return 0;
}//输出闰年年份
2.switch语句
1.switch语句和break语句
switch 语句和 if-else 类似,都可以作为条件分支判断,当分支判断较少的适合推荐使用 if-else ;当分支判断比较多的时候推荐使用 switch 语句,具体使用的一般性式表示为:
switch (表达式)
{
case 常量表达式1:
语句块1;
break;
……
case 常量表达式m:
语句块m;
break;
default:
语句块m+1;
break;
}
程序执行时,首先计算表达式的值,若与 case 后面的常量表达式值相等就执行对应部分的语句块,执行完后利用 break 语句跳出 switch 分支。若表达式的值与所有的 case 后的常量表达式均不匹配,则执行 default 项对应的语句 m+1 ,执行后跳出 switch 分支语句。
1.说明:
- 语句块可以是一条语句,或其它复合语句,可以不用{};
- switch 匹配的表达式可以是:①byte、short、char、int类型及这4种类型的包装类型;②枚举类型;③String 类型;
- case 后面的常量表达式只能是整型、字符型或枚举型常量的一种,各 case 语句表达式的值各不相同;
- case 语句并不会终止程序执行,通常需要执行 break 语句来跳出分支;若某 case 语句的语句块被执行后,若其后没有 break 语句,则顺序执行其它 break 语句,直到遇到 break 语句或后面所有 case 语句全部执行完,再跳出 switch 分支语句;
- 各个 case 和 default 出现的先后次序,并不影响执行结果;
- default 语句不是必须的,但建议加上作为默认情况处理项。
2.输出星期
#include <stdio.h>
int main()
{
int a;
printf("请输入数字1-7: ");
scanf("%d", &a);
switch (a)
{
case 1:
printf("Monday\n");
break;
case 2:
printf("Tuesday\n");
break;
case 3:
printf("Wednesday\n");
break;
case 4:
printf("Thursday\n");
break;
case 5:
printf("Friday\n");
break;
case 6:
printf("Saturday\n");
break;
case 7:
printf("Sunday\n");
break;
default:
printf("error!\n");
break;
}
return 0;
}
2.switch语句的嵌套
输出工作日及休息日
#include <stdio.h>
int main()
{
int day = 0;
printf("请输入今天是星期几:");
scanf("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
default:
printf("输入错误,请输入1-7范围内的数字\n");
break;
}
return 0;
}
3.循环结构
循环语句就是一些语句重复执行多次。
1.while循环语句
while(表达式)
语句; //如果循环体要加入更多语句,可以加上大括号
当表达式的值为真(非零)时,重复执行循环语句,直到表达式的值为假(零),则跳出循环,执行其他语句。
1.while循环中的break和continue
- break在while循环中的作用:终止循环;
- continue在while循环中的作用:跳出本次循环,进行下一次循环。
2.三位数的逆序打印
#include<stdio.h>
int main()
{
int num = 0; //初始化赋值
scanf("%d", &num);
while (num > 0) //条件判断
{
printf("%d", num % 10); //循环体{}
num /= 10;
}
return 0;
}//仅示例
3.求S=1+2+3+···+99+100
#include<stdio.h>
int main()
{
int i = 1; //初始化赋值
int sum = 0;
while (i <= 100) //条件判断
{
sum += i; //循环体{}
i++;
}
printf("1+2+3+...+99+100=%d\n", sum);
return 0;
}
2.for循环语句
for 循环把初始化,调整,判断三个部分放在了一起,是三种循环中使用最多的,语法形式如下:
for(表达式1:表达式2:表达式3)
//循环变量初始化 : 循环结束条件的判断 : 循环变量调整
语句; //如果循环体要加入更多语句,可以加上大括号
1.循环执行的过程
在这里我们给出简单示例:
#include<stdio.h>
int main()
{
int i = 0; //循环变量
for (i = 1; i <= 10; i++) //i++与++i效果上没有求别
{
printf("%d\n", i);
}
return 0;
}//输出1-10
- for循环的初始化部分只被执行一次;
- 然后执行循环控制语句( i<n )如果循环控制语句为真( i<10 ),执行循环体;如果循环控制语句为假( i>=10 ),结束本次循环;
- 执行表达式 i++;
- 继续执行循环控制语句,直到循环控制语句为假,退出循环。
2.计算1到100间所有3的倍数的和
#include <stdio.h>
//法一
int main()
{
int i = 0;
int sum = 0;
for (i = 1; i <= 100; i++)
{
if(i%3 == 0)
sum = sum + i;
}
printf("%d\n", sum);
return 0;
}//计算1到100间所有3的倍数的和
#include <stdio.h>
//法二
int main()
{
int i = 0;
int sum = 0;
for (i = 3; i <= 100; i += 3)
{
sum = sum + i;
}
printf("%d\n", sum);
return 0;
}//计算1到100间所有3的倍数的和
3.求S=1+2+3+···+99+100
#include<stdio.h>
int main()
{
int i = 1;
int sum = 0;
for (i = 1; i <= 100; i++)
sum += i;
printf("1+2+3+...+99+100=%d\n", sum);
return 0;
}
3.do-while循环
循环语句中,do-while使用的最少,语法如下:
do
语句;
while(表达式);
1.do-while循环打印1~10:
#include <stdio.h>
//使用 do while 循序在屏幕上打印1~10的值
int main()
{
int i = 1;
do
{
printf("%d ", i);
i++;
}while (i<=10);
return 0;
}
说明:
- do while与while基本相同,while循环判断表达式为真才会执行循环语句;
- do while第一次执行时不会判断表达式(表达式为假也会执行一次循环语句);
- 适用于某个功能必须执行一次,后续是否执行通过是否满足条件判断。
2.求S=1+2+3+···+99+100
#include<stdio.h>
int main()
{
int i = 1; //初始化赋值
int sum = 0;
do
{
sum += i; //循环体{}
i++;
} while (i <= 100); //循环条件判断
printf("1+2+3+...+99+100=%d\n", sum);
return 0;
}
本篇仍有诸多不足,欢迎留言讨论。