流程控制
1.什么是流程控制【C语言的第一个重点】
程序代码执行的顺序;
2.流程控制的分类
顺序执行:
选择执行:
定义:
某些代码可能执行,也可能不执行,有选择的执行某些代码;
分类:
if
1.if最简单的用法
格式:
if(表达式)
语句;
功能:
如果表达式为真,执行语句,否则,不执行
2.if的范围问题
1.格式:
if(表达式)
语句A;
语句B;
2.if(表达式)
{语句A;
语句B;}
3.if...else...的用法
4.if...else if...else...的用法
5.C语言对真假的处理
非零是真,零是假;
例题:if(90<=score<=100)其中90<=score是逻辑表达式,返回值是0或者1,均小于100,所以,表达式永远成立;
修改:if(90<=score&&score<=100)
6.if举例-求分数等级、两个数交叉互换、三个数字的最大值
三个数排序
#include<stdio.h>
int main(void)
{
int a,b,c;
int t;
printf("请输入三个整数(中间以空格分开):");
scanf("%d %d %d",&a,&b,&c);
if(a<b)
{
t=a;
a=b;
b=t;
}
if (a<c)
{
t=a;
a=c;
c=t;
}
if (b<c)
{
t=b;
b=c;
c=t;
}
printf("%d %d %d\n",a,b,c);
return 0;
}
1.判断一个数字是否是素数/回文数
2.编程实现求一个十进制数字的二进制形式
3.求一个数字的每位是奇数的数字取出来组合形成的新数字
4.求一个数字倒过来的数字
7.if的常见问题解析
1.空语句的问题
if(3>2);
等价于
if(3>2)
;
2.分号问题:
if(表达式)
A;
else
B;
3.if(表达式1)
A;
else if (表达式2)
B;
else if(表达式3)
C;
else
D;
4.if(表达式1)
A;
else if (表达式2)
B;
else if(表达式3)
C;
5.if(表达式1)
A;
else if (表达式2)
B;
else if(表达式3)
C;
else (表达式4)
D;
第7行的语法错误订正:
1.else
D;
2.else if(表达式4)
D;
6.else (表达式4);
D;
等价于
else
(表达式4);
D;
如何看懂一个程序,三部曲:
1.流程;
2.每个语句的功能;
3.试数;
循环执行:
定义:
某些代码会被重复执行
分类:
for
1.格式:
for(1;2;3)
{
语句A;
}
2.执行的流程【重点】
1.单个for循环的使用;
#include<stdio.h>
int main(void)
{
int i;
int sum=0;
for (i=1;i<11;i++)
sum =sum+i;
printf("sum=%d\n",sum);
return 0;
}
说明:
❶ ❷ ❸
for (i=1;i<11;i++)
❹
sum =sum+i;
先执行❶,再执行❷判断条件是否满足,
满足执行❹,最后执行❸,一次循环结束;
再执行❷判断条件是否满足,
满足执行❹,最后执行❸,二次循环结束;
其中❶只在第一次循环时执行一次;
若是❷不成立则执行printf()语句;
2.求和1~100之间能被3整除的数的和
将上述循环体
for (i=1;i<11;i++)
sum =sum+i;
修改为
for (i=1;i<100;i++)
if(i%3==0)
sum =sum+i;
课外题:求1到100之间的奇数之和、偶数之和;
求1到100之间的奇数的个数;
求1到100之间的奇数的平均值;
#include <stdio.h>
int main(void)
{
int i;
int sum1 = 0, sum2 = 0, count = 0;
float ave;
for (i = 1; i<101; i++)
{
if (i % 2 == 1)
{
sum1 = sum1 + i;
count++;
ave = (float)(sum1) / count;
}
if (i % 2 == 0)
sum2 = sum2 + i;
}
printf("奇数之和是:%d\n", sum1);
printf("奇数的个数是:%d\n", count);
printf("平均值是:%.2f\n", ave);
printf("偶数之和是:%d\n", sum2);
return 0;
}
2.多个for循环
2.多个for循环的使用;
for(1;2;3)
{
for(4;5;6)
A;
}
B;
3.范围问题
4.举例:
1+2+3+…+100;
1+1/2+1/3+…+1/100;
#include <stdio.h>
int main(void)
{
int i;
float sum=0;
for (i=1;i<101;i++)
sum =sum +1/i;
printf("sum=%.3f\n",sum);
return 0;
}
while
do...while
break和continue
试数的详细步骤:
强制类型转换:
格式:
(数据类型)(表达式)
功能:
把表达式的值强制转化为前面所执行的数据类型
举例:(int)(4.5+2.2) 最终值6
(float)(5) 最终值5.000000
浮点数存储带来的问题
#include<stdio.h>
int main(void)
{
float i;
float sum=0;
for (i=1;i<101;i++)
sum =sum +1/i;
printf("sum=%f\n",sum);
return 0;
}
浮点数的存储所带来的问题
float和double都不能保证可以精确的存储一个小数;
举例:
有一个浮点型的变量x,如何判断x的值是否是零
if(|x-0.000001|<=0.000001)
是零值;
else
非零值;
为什么循环中更新的变量不能是浮点型?
浮点数不能保证准确存储;