一、思维导图
二、语法认知
1. if-else语句
if(条件1) { 语句1; } else { 语句2; }
使用方法:
满足条件1时将执行语句1,若不满足则执行语句2.
遇到的问题:
当多个if-else时不打{}程序容易出错.
解决方法:
注意格式规范,养成打{}的习惯.
注意事项:
else后不要加条件否则会出现编译错误,else if 后需要加条件.
2. switch语句
switch(表达式) { case 常量表达式1: 语句1;break; case 常量表达式2: 语句2;break; default: 语句3;break; }
使用方法:
先计算switch后的表达式的值,再将这个值与每一个case后的常量或常量表达式比较.
执行一致的case语句后的语句,遇到break直接跳出switch.
若表达式的值与每一个case后的值都不一样,则执行default后的语句,然后再跳出switch.遇到的问题:
漏写break导致结果出错.
解决方法:
按照题目要求打上需要的break.
注意事项:
switch(表达式) 表达式的值的类型应该是整型或是可以转换为整型的数值类型.
break可有可无,具体看题目要求.
多个case可以共用一条输入语句.
switch中的case可以不用按序排列.
3. for语句
for(初始化; 条件表达式; 表达式1) { 循环语句; }
使用方法:
初始化是一个赋值语句,用来给变量赋值.
条件表达式则是关系表达式,它决定跳出循环的条件.
表达式1表示每循环一次后变量的变化.
这三个部分之间需要“;”.
遇到的问题:
误把“;”打成“,”导致程序错误.
解决方法:
牢记for()里是“;”.
注意事项:
尽量使循环体内工作量达到最小化,不要进行过多循环.
for()中的两个“;”不可省略.
4. while语句
while(循环条件) { 循环体语句; }
使用方法:
循环条件是作为进行循环的条件,循环条件为真的时候执行循环体语句,为假时则跳出循环.
遇到的问题:
循环条件不合理导致出现死循环情况.
解决方法:
根据题目要求合理设置循环判断条件.
注意事项:
while()后不要加“;”,while(){}后同样不加.
while(){}里定义的变量,外面不能用.
5. do-while语句
do { 循环语句; }while(循环条件);
使用方法:
和while类似但有不同的地方,do-while会先进行一次循环语句再进行循环条件的判断.
遇到的问题:
while()后没加“;”.
解决方法:
注意区分do-while 和while的格式.
注意事项:
在do{}中定义的变量在循环外不可用.
6. break和continue
for(表达式1; 表达式2; 表达式3) { 语句1; break; 语句2; } for(表达式4; 表达式5; 表达式6) { 语句3; continue; 语句4; }
使用方法:
进入第一个for循环时执行语句1,遇到break时将不再执行语句2,直接跳出第一个for循环进入第二个for循环.
进入第二个for循环时执行语句3,遇到continue时将不再执行语句4,直接结束这次循环执行表达式6,然后判断表达式5看看是否进入下一次循环.
遇到的问题:
break和continue用反,导致程序结果出错.
解决方法:
注意break是直接跳出循环,continue是跳出当前循环进行下一次循环.
注意事项:
嵌套循环时break只能跳出当前的循环还要执行外面的循环.
三、pta分数截图
2.3,2.4
第三章
4.1
四、pta代码分析
#include<stdio.h> int main() { int letter=0,digit=0,blank=0,other=0;//首先定义四种变量出现次数为零 int i; char ch; for(i=0;i<=9;i++){ scanf("%c",&ch);//利用循环输入字符简单快捷 if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) //进行letter种类判断 letter++; else if(ch>='0'&&ch<='9') //进行digit种类判断 digit++; else if(ch==' '||ch=='\n') //进行blank种类判断 blank++; else //进行other种类判断 other++; } scanf("%c",&ch);//最后输入的回车不计入出现次数 printf("letter = %d, blank = %d, digit = %d, other = %d",letter,blank,digit,other); return 0; }
1. 代码思路在上方注释里.
2. 发生过的错误:把最后一次输入归到for循环里,导致blank多出现一次.
3. 完成该题后,我学会了利用for循环来输入字符并统计字符出现次数.
#include<stdio.h> int main() { int A,B,C,D,E,N,i,score; A=B=C=D=E=0;//首先初始化每个等级人数为零 scanf("%d",&N); for(i=1;i<=N;i++){ scanf("%d",&score);//循环输入成绩来逐一判断该成绩的等级 if(score>=90) A++; else if(score>=80) B++; else if(score>=70) C++; else if(score>=60) D++; else E++; } printf("%d %d %d %d %d",A,B,C,D,E);//输出等级人数 return 0; }
1. 代码思路在上方注释里.
2.完成该题后,我学会了利用多重if-else结构来统计成绩.
#include<stdio.h> #include<math.h> int main(){ int denominator, flag; double esp, item, sum; scanf("%lf", &esp);//输入一个正实数eps flag=1; denominator=1; sum=0; item=1.0; do{ item=flag*1.0/denominator;//item为每一项的数字 sum=sum+item;//将其加在总和里 flag=-flag;//实现"+""-"间的转变 denominator=denominator+3;//分母的变化 }while(item>esp); printf("sum = %.6f\n", sum); return 0; }