第一次博客作业

---恢复内容开始---

一.思维导图

 

 


 

 

二.对以下语法的认识

(1)if-else:

 

1 if ( 条件 )
2 {
3      语句一
4 }else {
5      语句二
6 }

 

用法:如果条件成立,则执行语句一,否则执行语句二;

遇到的问题:条件设置错误使其恒成立或恒不成立,如原本条件应是a==1错写成a=1。(所以打代码时可以将a==1打成1==a,这样如果少打一个等号编译器会提示你编译错误)

注意事项:1.如果出现if—else的嵌套结构,则if和最近的else配对。

 

(2)switch:

 

 1 switch(表达式) {
 2 case 常量表达式1:语句段1;break 3 
 4 ​ …
 5 
 6 case 常量表达式n:语句段n; break;
 7 
 8 default: 语句段n+1; break;
 9 
10 }

 

用法:根据表达式来在常量表达式中寻找相同,然后执行相应case后的语句段,最后在break跳出。

遇到的问题:switch()误加分号和case后的冒号打成分号导致编译错误。(代码完成后认真检查一遍)

注意事项:1.case语句之后即使需要执行多条语句,也不需要加大括号。

     2.case后的常量必须互不相同。

     3.switch中break是可选的,break语句会立即终止switch语句的执行。

     4.switch语句是顺序检查,但每种情况的次序是无关紧要的,例如,可以先出现default语句,再出现case语句。

 

(3)for:

1 for(语句1;条件;语句2) 
2 { 3 循环体语句 4 }

 

 

 用法:语句1通常赋值一个初始量,利用初始量进行条件的判断,如成立则运行循环体语句,跳出循环后再次进行条件判断,接着进行语句2,然后再一次进去循环体语句直到条件不成立。

遇到的问题:条件设立错误,导致结果与答案不同。(如果一时想不出问题根源,可以用笔在纸上模拟一遍程序的运行流程)

注意事项:1.for循环中的语句1、条件。语句2都可以省略,分别表示不初始化、不判断、省略后什么也不执行。

 

(4)while:

1 while(条件){
2 循环体语句
3 }

用法:进行条件的判断,如成立则进行循环体语句,直到条件不成立则退出循环。

遇到的问题:while循环的括号后面误加分号,导致编译错误;while循环控制的条件变量未能使其随循环进行而更新,导致陷入死循环。

(代码完成后认真检查;while循环控制的条件变量一定要更新,保证循环能够正常结束)

注意事项:1.while的大括号{}后加不加;都一样,均能通过编译。

     2.如果条件不满足,while循环一次都不执行。   

 

(5)do-while:

 

1 do{
2 循环体语句
3 
4 }while(条件)

 用法:与while循环类似。

遇到的问题:do-while循环和while循环非常相似却又略有不同,编写代码有时会混淆。(多尝试运行while与do-while语句,领会其不同)

注意事项:1.就算条件不满足,do-while循环也会至少执行一次。

     其他与while相似。

 

 

(6)break,continue:

 1 switch(整形表达式)
 2 { 
 3     case 常量表达式1:  语句1;break;
 4  5     case 常量表达式n:  语句n;break;
 6     default:  语句n+1;
 7 
 8 }
 9 
10 for(语句1; 语句2; 语句3)
11 {
12     语句1;
13      continue;
14     语句2;
15         
16 }

 用法:break,用来跳出最近的一整个循环。

   continue,跳过其后续的循环语句。

遇到的问题:对break和continue各自的用法不够明确,出现错用的情况。(在本地编译器自行运行,发现规律)

注意事项:暂时未遇到明显需要注意的地方。

 


 

 

三.PTA成绩截图

2.3、2.4

 

 第三章

 

 4.1

 

 


 

 

四.PTA代码分析

1.

 

 

 

 

 1 #include<stdio.h>
 2 #include<math.h>
 3 int main()
 4 {
 5     int i,flag;
 6     double item=1.0,s,eps;
 7     sum=0;
 8     flag=1;
 9     i=1;
10     scanf("%lf",&eps);
11     if(eps>=1){
12         printf("sum = 1.000000");
13     }
14     else{
15     while(fabs(item)>eps)
16     {
17         item=flag*1.0/i;
18         sum=sum+item;
19         i=i+3;
20         flag=-flag;
21         }
22         printf("sum = %.6f",sum);
23         }
24     return 0;
25 }

 

(1). 代码分析:首先,考虑到eps大于等于1和小于1时是两种不同的情况,所以先用if-else语句分支出这两种情况分别要执行的代码。

eps>=1时,依题目要求显然输出1.000000。

eps<1时,分别假设题目中各个分式的分母为i,各个分式的值为item,所有项和为sum。又考虑到每一项的正负是交错改变的,所以增加一个flag来控制每一项前的符号。

题目要求最后一项的绝对值不大于eps,循环次数不可知,应该采用while循环。由关键词“最后一项”易知应用item的值和eps的值相比,并先用fabs函数求item的绝对值。

(2).出现的错误:刚开始未能弄清给定精度eps的含义,直接计算该式总和。(审题要仔细,避免因审题错误浪费大量时间)

                          未考虑到eps大于等于1的情况,导致答案部分正确。(要有全局观念,考虑问题要全面)

       printf函数写到了while函数里面。(这个比较傻......)(打代码过程中要细心,避免出现低级错误浪费时间) 

(3).收获感悟(见上红字与下)

学会了使用fabs函数。

(4).代码已修改规范,如仍有不规范恳请指出。


2.

 1 #include <stdio.h>
 2 #include <math.h>
 3 int main()
 4 {
 5     int m,n,i,j;
 6     double sum=0;
 7     double M=0;
 8     double N=0;
 9     scanf("%d %d",&m,&n);
10 
11     for(i=m;i<=n;i++){
12         M=M+1.0*pow(i,2);
13     }
14     for(j=m;j<=n;j++){
15         N=N+1.0/j;
16     }
17     sum=M+N;
18     printf("sum = %lf",sum);
19     return 0;
20 
21 }

 

 

 

 

 

(1) .代码分析:题中式子初看较复杂,但其实可以拆为两部分,m的平方到n的平方的和与m分之一到n分之一的和,所以分别设M与N两个变量存放它们和的值。

又因为该式中要用到的两个循环的循环次数可知,故采用for循环。将两个for循环得到的M和N相加赋给sum,即可得到答案。

(2).出现的错误:搞错了两个for循环中的边界数,导致答案错误。(使用for循环时要考虑边界问题,实在难以搞清可以用笔在纸上演算一遍)

(3).收获感悟(见上红字与下)

较为正式的接触到了接触到了pow函数。(ps:pow函数计算效率较低,所以在不是计算较为复杂的次方时,可以自己编写一串代码来计算)

(4).同1(4)。

 


 

3.

 

 

 1 #include <stdio.h>  
 2 int main()  
 3 {  
 4     int a,b,c,t;  
 5     scanf("%d %d %d",&a,&b,&c);  
 6     if(a > b)  
 7     {  
 8         t = a;  
 9         a = b;  
10         b = t;  
11     }  
12     if(a > c)  
13     {  
14         t = a;  
15         a = c;  
16         c = t;  
17     }  
18     if(b > c)  
19     {  
20         t = b;  
21         b = c;  
22         c = t;  
23     }  
24     printf("%d->%d->%d\n",a,b,c);  
25     return 0;  
26 }

 

 

(1).码思路:题目要求将随机三个整数由小到大排序,第一时间想到的就是if-else的分支结构。定义a、b、c、t这四个变量,其中t作为中间变量。

首先,判断a是否大于b,是就交换a、b的值,否就不变。同理,再分别判断a与c、b与c的关系,始终使a为最小值,c为最大值,最后按题目要求分别输出a、b、c。

(2).出现的错误:无。

(3).收获与感悟:灵活运用中间参数可以大大简化代码。

(4).同1(4)。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

---恢复内容结束---

posted on 2019-10-15 21:18  漆靖  阅读(185)  评论(1编辑  收藏  举报

导航