一.思维导图
二.写出自己对以下语法的认识
1.if-else
if(表达式){ 语句1; }else{ 语句2; }
遇到的问题:有时候遇到嵌套的if-else容易看错 { 和 },导致编译错误。
解决的方法:严格按照规范形式写代码。
注意点:判断两者是否相等的时候要用 == 而不是=;else总是和距离它最近的if配对。
2.switch
switch(表达式){ case 常量表达式1: 语句1; break; ······ case 常量表达式n: 语句n; break; default: 语句n+1; break; }
遇到的问题:基本没有
注意点:break和default都可根据实际情况而省略,如果省略default,若case的常量表达式都不满足条件,则不执行任何语句。
3.for
for(语句1;语句2;语句3){ 循环体; }
遇到的问题:基本没有
注意点:语句1为循环的初始化条件(即使不满足语句二的条件,未进入循环体,语句1执行后的结果依旧保留下来);语句2为判断循环是否进行的条件;语句3为每次循环结束执行的操作。
4.while
while(循环条件){ 循环体; }
遇到的问题:无
注意点:无
5.do-while
do{ 循环体; }while(循环条件);
遇到的问题:无
注意点:while(循环条件)后要有分号; 与while循环的区别在于:先进入循环体,再判断循环条件,即至少循环一次。
6.break以及continue
break:结束循环 或 跳出switch-case语句。
continue:不执行continue后的语句,直接开始下一次循环。
三.pta分数截图
四.pta代码分析
题目1:
#include<stdio.h> #include<math.h> int main(){ int m,n,i; scanf("%d %d",&m,&n); double sum=0.0,a; for(i=m;i<=n;i++){ a = pow(i,2)+1.0/i; sum += a; } printf("sum = %.6f",sum); return 0; }
1.思路:题目要求计算序列和,又已知m和n,很明显需要用到for循环 令i从i=m循环至i=n,同时使用变量sum求和,最后根据题目要求精确到小数点后6位 用%.6f输出sum。
2.错误及原因:在计算1/m及1/(m+1)等等表达式时,忘记了是用int定义的m和n,导致出错。改进方法有两个:一个是用double定义m和n;还有一个方法是用1.0/m 。
3.学到了:以后再遇到/号要格外小心变量是整型还是浮点型。
题目2:
#include<stdio.h> int main(){ int i,letter=0,blank=0,digit=0,other=0; char x; for(i=0;i<10;i++){ scanf("%c",&x); if((x>='a'&&x<='z') || (x>='A'&&x<='Z'))/*判断是否为英文字母*/{ letter++; }else if(x>='0' && x<='9')/*判断是否为数字*/{ digit++; }else if(x==' '|| x=='\n')/*判断是否为空格或回车*/{ blank++; }else other++/*其他字符*/; } printf("letter = %d, blank = %d, digit = %d, other = %d",letter,blank,digit,other); return 0; }
1.思路:已经确定输入十个字符,那就要用到for循环且循环十次,每次都读入一个字符,并判断字符属于题目划定的哪个类型,其他的思路见注释。
2.遇到的问题或错误:通过这道题初步认识了字符,原先不知道字符每次仅读了一个东西而不是一串字母或数字,而且空格和回车也会被读入,百度了才知道这些。
3.学到了:用char定义字符,且要加单引号' ',会读入空格或回车。
题目3:
#include<stdio.h> int main(){ int i=1,flag=1.0; double sum=0.0,eps,a; scanf("%le",&eps); do{ a=1.0/i*flag; sum += a; i=i+3; flag=-flag; if(a<0){/*如果a是负的,那a就会小于正实数eps,会退出循环,所以如果a是负的就再乘一个-1,即让a的绝对值和eps去比较*/ a=-a; } }while(a>eps); printf("sum = %.6f",sum);/*精确到小数点后六位*/ return 0; }
1.思路:先读入一个给定精度eps,由于不知道会循环几次,所以用while循环,直到最后一项的绝对值不大于给定精度eps后跳出循环。由于序列是正负交错的,所以定义了flag用来变号。在循环时,除了变号外,每一项的分母逐项加3,所以需定义一个变量i来充当分母,每次计算完a的值i都加3,并将a的值累加到求和变量sum上。最后输出sum。(少部分解释见代码)
2.错误或问题:科学计数法!! 4E-2的值是4*10^-2,并且需要用%le读入(百度是这么说的);忘记了计算a 的绝对值,直接用a去和eps比较。
3学到了:科学计数法的表示及读入。
来源:https://www.cnblogs.com/cjt0722/p/11668935.html