一.思维导图
二.写出自己对以下语法的认识
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
#include
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
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
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学到了:科学计数法的表示及读入。