一.制作思维导图
二.写出自己对以下语法的认识
1.if-else
使用方法:
if(表达式){ 语句1; } else { 语句2; }
出现问题:容易混淆if与else的配对关系,在多分支语句中更容易出现。
解决方法:先写完一组if-else的语句再去加入其他分支语句。
注意:if-else语句如果后面不加花括号就只能执行后面第一个语句,一般加入花括号更容易读懂。
2.switch
使用方法:
switch(表达式){ case 常量表达式 1:语句段1;break; case 常量表达式 2:语句段2;break; ··· case 常量表达式 n:语句段n;break; default: 语句段n+1;break; }
switch语句可以与if-else语句相互转换。switch的break可以根据题目的需求进行删减,但要注意删减完会执行下一句表达式。
3.for
使用方法:
for(表达式1;表达式2;表达式3;){ 循环体语句; }
for语句中,用两个分号隔开三个表达式,即使有表达式不需要,也要以“ ;”空语句的形式打出,不然可能会编译错误。
4.while
使用方法:
while(表达式){ 循环体语句; }
不要将表达式中的‘ == ’与‘ = ’搞混,不然容易陷入死循环,使得出的结果与设想的不同。
5.do-while
使用方法:
do{ 循环体语句; }while(表达式);
do-while语句会先执行一次循环体语句在进行表达式判断,一般用于先循环、后判断的情况。但do-while语句也可与while语句和for语句相互转换。
三.pta分数截图
作业2.2,2.3:
第3章作业:
4.1作业:
四.pta代码分析
1.
#include<stdio.h> int main() { int munber, times, guess, guesstimes = 0; scanf("%d %d", &munber, ×); for (int i = 0; i <= times; i++) { scanf("%d", &guess); guesstimes++; if ((guesstimes > times) || (guess < 0 && guesstimes <= times)) { printf("Game Over\n"); break; } if (guess > munber) { printf("Too big\n"); } else if (guess < munber) { printf("Too small\n"); } else { if (guesstimes == 1) printf("Bingo!\n"); else if (guesstimes <= 3) printf("Lucky You!\n"); else printf("Good Guess!\n"); break; } } return 0; }
解题思路:
本题要对猜数与被猜数进行比较应采用分支语句列出三种情况,而且可能进行多次比较所以采用循环语句。
还要注意当被猜数小于0和超过猜测的最大次数的情况。
错误原因:
将 ‘==’ 与 ‘=’ 混淆,导致输出的答案全为 "Bingo!"
学会了赋值= 与 ==的区别。
2.
#include<stdio.h> #include<math.h> int main() { int flag, denominator; double sum, eps, item; scanf("%lf", &eps); flag = 1; denominator = 1; sum = 0; item = 1; if (eps >= item) sum = 1; while (fabs(item) > eps) { item = flag * 1.0 / denominator; flag = -flag; denominator = denominator + 3; sum = sum + item; } printf("sum = %f", sum); return 0; }
解题思路:
定义一个’flag‘转换项数的正负,在利用循环语句求解。要注意即使一开始eps大于等于1也要加第一项,所以利用do-while语句更加方便。
出现问题:
一开始没有注意eps大于1也要加第一项。
3.
#include<stdio.h> int main(void) { int digit, letter, blank, other; char ch; int i; digit = letter = blank = other = 0; for(i = 0;i <= 9;i++){ scanf("%c",&ch); if ((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) letter++; else if(ch>='0'&&ch<='9') digit++; else if(ch ==' '||ch =='\n') blank++; else other++; } printf("letter = %d, blank = %d, digit = %d, other = %d\n",letter,blank,digit,other); return 0; }
本题要注意各个表达式之间的关系,例如ch>='a'&&ch<='z'和ch>='A'&&ch<='Z'之间不能直接用||连接要分别加圆括号,不然容易产生错误。