• 第一次博客作业


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

    一.思维导图


    二.对以下语法的认识

    (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
    ",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)。

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

  • 相关阅读:
    VS项目配置halcon、opencv等(附加包含目录、包含目录等)
    Qt 异常总结(ubuntu环境)
    linux简单分区
    U盘启动盘制作工具
    Ubuntu常用命令
    Ubuntu安装后的基本设置(系统主题,终端字体,更换源,浏览器等)
    makefile
    Ubuntu终端执行单个cpp
    Windbg内核调试之四: Dump文件分析
    浅议Windows 2000/XP Pagefile组织管理
  • 原文地址:https://www.cnblogs.com/qijing-cy/p/11679187.html
Copyright © 2020-2023  润新知