zoukankan      html  css  js  c++  java
  • 第一次博客园作业

    一.思维导图

    二.写出自己对以下语法的认识

    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学到了:科学计数法的表示及读入。

  • 相关阅读:
    Regular进阶: 几点性能优化的建议
    总结常见的违背Rest原则的接口设计做法
    如何进行用户访谈更容易获得全面而有效的信息
    关于以太坊智能合约在项目实战过程中的设计及经验总结(2)
    关于以太坊智能合约在项目实战过程中的设计及经验总结(1)
    字节码执行方式--解释执行和JIT
    Redis数据库结构与读写原理
    移动端工程架构与后端工程架构的思想摩擦之旅(2)
    类文件结构与javap的使用
    JVM垃圾收集器(1)
  • 原文地址:https://www.cnblogs.com/cjt0722/p/11668935.html
Copyright © 2011-2022 走看看