一、思维导图
二、 写出自己对以下语法的认识
1、if-else(选择判断语句):
If(条件){ 语句1; } else { 语句2; }
该语句用于实现分支结构,根据表达式的值来选择其中的一条来执行。常用于计算二分段函数,。
问题:一开始常常忘记大括号,格式不够标准。
解决方法:参照一定格式的代码,多次练习。
2、switch 语句:
switch(整形表达式) { case 常量表达式1: 语句1;break; case 常量表达式2: 语句2;break; case 常量表达式n: 语句n;break; default: 语句n+1; }
该语句先计算表达式的值,然后与其后面的常量表达式相比较,当所计算的值与某个常量表达式的值相等时,即执行其后的语;,若均不相等,则执行default后的语句。
问题:有时把用于判断讲条件的‘··· ···’加上括号,case后有时使用大括号,过于依赖switch语句写出的代码比较繁琐,不易于他人理解。
解决方法:多用编译器调试检查错误,只在switch语句有明显优势时使用switch语句。
注意事项:1,在case后的各常量表达式的值不能相同,否则会出现错误。
2,switch语句中的break语句并不是每个case语句后都必须有。
3、for 语句:
for(表达式1; 表达式2; 表达式3) { 循环体语句 }
问题:控制不好for语句的循环次数,导致运算结果错位。
思考代码时思路不够清晰,常常出现答案错误的问题。
解决方法:先取小一点的数字手动运行一次,再写程序。
注意事项:for语句中:表达式1只是负责在开始时提供一个起点,只运算一次。
表达式2是是否再一次执行循环的判断条件。
表达式3为循环提供变量,避免程序陷入死循环。
4、while 语句:
while(循环条件) { 循环体语句 }
注意事项:while语句中的表达式可以是任意的合法表达式。
while语句是循环语句的一员,其他循环语句写出的代码几乎都能化为while语句,自己读不懂某个循环代码时,可以将其化为while语句。
5、do while 语句:
do { 循环体语句 }while(循环条件)
注意事项:do while语句和while语句的区别在于do while语句是先执行一次,在判断条件;而while语句是先判断条件在执行程序,这就导致两种语句在某些情况下第一次的输值不一样,在选择时两种语句时要稍加注意。
6、break 语句:
switch(整形表达式) { case 常量表达式1: 语句1;break; … case 常量表达式n: 语句n;break; default: 语句n+1; } for(表达式1; 表达式2; 表达式3) { 语句1; continue; 语句2; }
注意事项:break语句可以出现在选择结构和循环结构里,但continue语句只能用在循环语句中,continue语句使用后,本次循环直接结束,不再执行continue之后的语句,直接进行下一轮循环。break语句是跳出当前执行行的语句,二者各有特色,各有各的作用。
如果执行语句段1,在执行完语句段1后,有break,则会跳出switch结构,而如果没有break,则顺序向下。
三:pta分数截图
2.3 2.4
第三章作业
4.1作业
四:PTA分析
求阶乘序列前N项和
#include <stdio.h> int main(){ int n,sum=0,a=1; scanf("%d",&n); for(int i=1;i<=n;i++){ for(int b=1;b<=i;b++){ a *= b; }sum += a; a=1; } printf("%d",sum); return 0; }
思路分析:用*=来计算n的阶乘,用++使每次所乘的数加一。
用“+=”使每次乘法得出的值加在sum上去。
查询水果价格
#include <stdio.h> int main(){ int a; printf("[1] apple\n[2] pear\n[3] orange\n[4] grape\n[0] exit\n"); for(int i=1;i<=5;i++){ scanf("%d",&a); if(a==0){ break; } switch (a){ case 1:printf("price = 3.00\n");break; case 2:printf("price = 2.50\n");break; case 3:printf("price = 4.10\n");break; case 4:printf("price = 10.20\n");break; default:printf("price = 0.00\n");break; } } return 0; }
分析思路:当连续查询次数超过5次时,程序应自动退出查询,所以调用for循环完成;
用户输入0即退出,所以用if结构判断输入值是否为0;
由于choice情况多,所以选择使用switch多分支结构,应对各种case;
我学会了:对于switch case语句,可以考虑改变格式,使代码更美观。
高空坠球
#include <stdio.h> int main(){ long a,n; int i; double h,s=0.0,b; scanf("%ld %ld",&a,&n); h=1.0*a; if(n==0){ printf("%.1f %.1f",0.0,0.0); }else{ for(i=1;i<=n;i++){ if(i==1){ s += h; h=1.0/2*h; }else{ s += 2*h; h=1.0/2*h; } } printf("%.1f %.1f",s,h); } return 0; }
思路分析:由于0比较特殊可以先用if语句将n=0的情况排除掉,再用for循环进行计算。
因为最后一次没有弹起,所以应该减去最后第n次的高度。
错误:对球动态过程分析不到位,导致公式错误,对细节把握的不太好。
收获;在Devc++上面进行断点调试,选用特殊的情况调试,可以大大缩短代码改正时间。