第一次作业1.2
一,思维导图:
二,语法认知:
1.if-else:
if(条件) {语句1} else {语句2}
遇到的问题:初次使用时不清楚if与else的配对关系,再出现多个if-else的复合语句中易犯错误。
解决的办法:在多次练习中找出规律即(else与最近的if配对)。
补充:要时刻分清==与=的区别。
2,switch:
switch(表达式)
{
case 值1: //若符合执行代码; break; case 值2: //若符合执行代码; break; case 值3: //若符合执行代码; break; default: //若以上都不符合执行此代码; break; }
遇到的问题:没有理解“case”与“default”在语句中的实际作用。
解决的办法:加强记忆与练习。
3,for:
for(赋值;循环条件;改变循环变量的表达式) { 循环式; }//若带入值不再符合条件则跳出循环。
遇到的问题:没有注意部分细节如“;”。
解决的办法:多次练习。
4,while:
while(表达式) { 循环条件 }
遇到的问题:偶尔会与for弄混(使用方式)
解决的办法:加强记忆与练习。
补充:要注意for与while的小区别。
5,do-while:
do { 循环体语句 }while(表达式);
遇到的问题:开始时do-while的运作方式不太了解。
解决的办法:打开书本,查看do-while方面的基础知识。
6,break以及continue:
for (表达式1;表达式2;表达式3) { if(表达式){ break; }//跳出循环。 } for (表达式1;表达式2;表达式3) { if(表达式) { continue; }//直接进行下一个循环。 }
遇到的问题:目前所做的题目量较少,使用不熟练。
解决的办法:没什么好说的,打开pta刷刷刷!:)
三,pta分数:
补充:4.1作业有三题未在规定时间内完成,(自我检讨)后在模拟题集中完成。截图如下:
四,pta代码分析:
1,
(1)思路:素数是一个除1,自己本身以外无法被整除的整数。因此我们从素数的定义出发编写代码:(思路注释中)
#include<stdio.h> #include<math.h> int main() { int a,b,n,i,q=0,w=0,e=0; scanf("%d %d",&a,&b); for(i=a;i<=b;i++)//第一个循环用来列举待判断的数据。 { for(n=1;n<=i;n++)//第二个循环的作用是列举数字观察能否整除第一个循环中的i { if(i%n!=0)//如果一个数i未被第二个循环中的数整除则e=e+1; e++; } if(e==i-2)//根据上述循环内地表达式我们发现如果一个数i-2等于这个数所对应的e,那么这个数i就为素数。 { q=q+1; w=w+i; } e=0;//不要忘记在循环结尾将e归零进行下一次判断。 } printf("%d %d",q,w); return 0; }
(2)易错点:第一次做的时候没有理解素数的定义,没有想到用循环的思路去解题。另外这题的另一个易错点在一对判断素数方法的选择,这里我使用的是定义变量e来计算。(当然是借助了部分外界力量)
(3)获得经验:这题可以看出数学的知识在编程中的重要性,所以时不时复习一下数学知识很重要。:)
2,
(1)思路:这题又和数学挂钩,求最大公约数最小公倍数,同样是用循环来列举和判断,但是又复杂了许多,我们还是从定义出发:(思路注释中)
#include<stdio.h> int main() { int m, n; int a, b, ret; scanf("%d %d", &m, &n); if (m > 0 && n >0)//正整数m,n。 { a = m; b = n; ret = a % b;//ret为a与b相除的余数 while (ret != 0) //如果ret不等于0说明a与b无法整除。 { a = b; b = ret; ret = a % b; //于是在循环语句中将b值赋予a将ret赋予b,重新求ret,直到a与b整除。那么b就为原mn的最大公约数,m*n/b就为mn的最小公倍数。 } printf("%d", b); printf(" %d", m * n / b); } return 0; }
(2)易错点:求最大公约数和最小公倍数的过程容易晕😵,所以明白一个简明有效的判断方法很重要。
(3)获得经验:数学很重要逻辑思维很重要......(心里默念一百遍)
3,
(1)思路:......这题重点在于sum+=pow(2,i)这里,具体思路很简单。(思路注释中)
#include<math.h> int main() { int n,sum=0,i; scanf("%d",&n); for(i=1;i<=n;i++)//循环用来列举数字进行加法计算。 { sum+=pow(2,i);//这里注意不要用sum=sum+pow(2,i)因为这个近似于sum++而sum+=pow(2,i)近似于++sum。
} printf("result = %d",sum); return 0; }
(2)易错点:区分a++与++a的区别,不然常年计算错误都不知道错在哪....
(3)获得经验:编程中细微的数字字符顺序变化也会引起计算结果的变化,要时时刻刻保持严谨性。
THE END