1>视频内容
流程控制
一、选择结构
if结构
1、类型及结构:
单分支(if(表达式))
语句;
......;
双分支 (if (表达式) )
语句;
else
语句;
if嵌套 (if(表达式)) 多分支 if (表达式)
{ {
if(表达式) 语句;
语句: else if(表达式)
语句; 语句;
} else
语句;
}
2、注意的问题:
- if无break和continue跳转语句,除非其为循环的
子句
- 在多分支存在多个else与if,那么else一定是和最近的if配对
switch结构
1、格式
switch(表达式)
{
case 常量表达式1:语句;
[break;]
case 常量表达式2:语句;
[break;]
[defalt:语句]
[break;]
......
}
[]表示可要可不要,其中defalt表示默认,搞清楚其流程即可
2、注意事项:
- 表达式的值应与常量表达式对应上
- case与defalt都表示一个程序运行入口的意思。当程序运行时,当表达式的值与某个常量表达式对应上时,则从这个入口进,然后从上往下运行,没遇到break,则就继续执行,直至遇到break跳出程序。
- switch只有break,无continue,除非作为循环的
子句
二、循环结构
for结构
1、格式:
for(1;2;3)
语句;
其中1、2、3均为表达式
2、空语句:只有一个 ;就代表了一个语句,所以不要 for();这样没意义
while结构
1、格式
while(表达式)
语句;
2、注意
while可以与for进行互换
例如:1; for(1;2;3)
while(2) 等价于 语句;
语句;
3;
do while结构
注意不可与while和for进行呼唤。因为它一定会执行一次循环
三、break和continue的用法
break
1、break功能是跳出该流程(循环,switch),然后继续执行流程外的语句
2、break不能用于if,除非if结构为循环内部的一个子句
例子:for(1;2;3)
{
if(表达式)
break;//如果if成立,那么break终止该循环
printf("....");
}
3、在多层循环(多层switch)中,break只终止最近的那个循环,看下面两个例子,表明是终止最近的循环
当有break时
当无break时
continue
1、continue的功能表示继续该结构,且直接跳过后面语句,然后按照流程执行
例如;for(1;2;3)
{
A;
B;
continue;
C;
D;
}
则在运行时通过A,B语句后,遇到continue,
则将跳过C,D语句,然后到3去然后在循环
四、结构里的一些问题
范围问题:
1、if,while,for,switch都是默认只包含一个语句,所以说为啥for()不要;(单独分号就表示一个语句了)。当其包含语句超过两个,用花括号括起来{}
如何增加流程的可读性?
1,当多个结构并排在一起的时候,我们可以采用花括号或结构结构之间空一行进行区分,便于模块化处理
花括号使模块化:
空行使模块化:
C语言对真假的处理
1.计算机对真假的*判断*结果为:非零即是真,零则为假
2.计算机对真假的*显示*结果为:真用1表示,假用0表示
if和while()里表达式问题
()里只要为非零,则就成立
运算符
一、类型及优先级
运算符 | 类型 | 优先级 |
---|---|---|
逻辑非 | ! | 2 |
自增自减 | i++,i--,++i,--i | 2 |
算术运算符 | *,/,% | 3 |
算术运算符 | +,- | 4 |
关系运算符 | <=,>=,>,< | 6 |
关系运算符 | ==,!= | 7 |
逻辑与和逻辑或 | &&和|| | 11,12 |
条件运算符 | C?A:B | 13 |
赋值运算符 | =,+=,-=,*=,/= | 14 |
逗号运算符 | (,,,) | 15 |
二、逻辑运算符
短路原则(重点)
逻辑与,逻辑或都有个特性:是逻辑与只要一个为0(假)则值就为零(假),逻辑或只要一个值为1(真)则就为1(真)
所以对于逻辑与:
假如(3<2)&&(b=2)
易知第一个表达式就不成立,为零(假),
则整个表达式一定为假
则第二个表达式将不被执行
对于逻辑非:
假如(3>2)||(a=2)
易知第一个表达式成立,为1(真)
则整个表达式一定为真
则第二个表达式将不被执行
**这就是短路原则**
三、自增自减
1.明白i++,++i的两者区别点在哪
2.尽量避免在复杂运算中使用,以免看不懂
3.通常单独做一个表达式用,代码精炼,速度更快
四、三目运算符
格式
A?B:C 等价于 if(A)
B;
else
C;
( A,B,C均为表达式)
五、运算符中的一些注意事项
1、关系运算符和&&和||的最终结果
均为0(假)或者1(真)
2、尽量不要弄复杂计算,使可读性降低
3、最好你想表达某个式子,可以多用括号括起来,增强可读性
其他一些知识
一、强制类型转换
格式
(数据类型)(已被赋值的变量或常量)
例如:int i=1;
float k;
k=(float)(i)/5
printf("%f",k)
则k输出为0.200000,如果无这个强制转换,则输出0.000000
用途
用于整除运算
中
二、进制转换原理
十进制转换r进制
即为对数对r一直取余,直至取余结果为0,然后在将排列的取余结果倒过来即可
r进制转换十进制
十六进制:0x63f6=6*16^3+3*16^2+15*16^1+6*16^0
其他进制相同做法
三、浮点数存错带来的一些问题
float和double都不能保证可以精确的存储一个小数
判断一个数是否为零:
老师传授的经验
一、对待那些怪异,难题的题。
思考了之后,不必纠结,只需看懂流程,分析答案流程后,背下来即可。如何去看懂才是关键,想要看懂就要弄懂其核心 流程-每个语句功能-试数
二、做一道难算法程序步骤
尝试-敲代码-看答案-看懂-再次敲代码-尝试修改其中步骤-总结
三、试数的关键
帮助我们检验代码,理清代码流程,看懂代码。
2>作业
5.10
第七题
打印的内容为sos:5 5.0000
第十三题
a:x--;
b:m=n%k;
c:p=q/b-a;
d:(a+b)/c*d;
5.11
第三题
代码
int main()
{
int a, b, c;
printf("输入天数:");
scanf("%d", &a);
while (a > 0) //循环输入天数,当输入天数为一个非正值,循环结束。
{
b = a / 7;
c = a % 7;
printf("%d days are %d weeks, %d days\n", a, b, c);
printf("输入天数:");
scanf("%d", &a);
}
return 0;
}
运行结果如下:
第八题
看不懂题目。。。。
6.16
第五题
代码如下
int main()
{
char a, t, g;
int i, j, k, n;
printf("输入一个大写字母:");
scanf("%c", &a);
for (i = 1; i <= 5; i++)
{
a = a - 1;//不要(2)
for (j = 1; j <= 5 - i; j++) //按照行来循环打印空格
printf(" ");
for (k = 0; k <= i - 1; k++) //按照行来循环打印升序字母
{
a = a + 1;//替换g=a+1(2)
printf("%c", a);
}
for (n = 1; n <= i - 1; n++) //按照行来循环降序打印字母
{
a = a - 1;//替换t=g-1(2)
printf("%c", a);
}
printf("\n"); //换行
}
return 0;
}
运行后如下
第十二题
代码如下
int main()
{
int i, j, n = -1;
int k;
float s = 0, t = 0;
printf("输入你想循环的次数:");
scanf("%d", &k);
for (i = 1; i <= k; i++) //计算只加的和
s = s + 1.0 / i;
printf("%f\n", s);
for (i = 1; i <= k; i++) //计算加减相间的和
{
for (j = 1; j <= k; j++) //循环正负相间
{
n = n * -1;
}
t = t + n * (1.0 / i);
}
printf("%f\n", t);
return 0;
}
运行后如下
第十八题
代码如下
int main()
{
int i, n = 5;
for (i = 1; i > 0; i++) //i>0的无限循环
{
n = 2 * (n - i);
if(n>150)
break;
printf("第%d周,Rabnud博士的朋友数量为:%d\n", i, n);
}
return 0;
}
7.11
第二题
a:number>=90&&number<100;
b:ch!='k'||ch!='q';
c:number>1&&number<9&&number!=5;
d:number>=9||number<=1;
第十题
代码如下
int main()
{
char ch;
while ((ch = getchar()) != '#')
{
if (ch == '\n')
while ((ch = getchar()) == '#' || (ch = getchar()) == '\n')
;//空语句作用
printf("step 1\n");
if (ch == 'c')
while ((ch = getchar()) == '#' || (ch = getchar()) == '\n' || (ch = getchar()) == 'c')
;//空语句作用
else if (ch == 'b')
break;
else if (ch == 'h')
printf("step 3");
else
printf("step 2");
}
return 0;
}
运行后如下: