zoukankan      html  css  js  c++  java
  • C博客作业01分支、顺序结构 1911

    0.展示PTA总分

    • 顺序结构

    • 分支结构

    1.本章学习总结

    1.1 学习内容总结

    1.学习简单的三个数按顺序排列。

    #include<stdio.h>
    int main()
    {
    int num1,num2,num3;    //定义3个基本整型变量来存放三个数num1、num2、num3
    int n;             //定义第4变量来进行之后的数字交换处理
    
        scanf("%d%d%d",&num1,&num2,&num3);    //输入任意3个数
    
        if(num1>num2)    //如果num1大于num2,借助中间变量n实现num1与num2值的互换
        {
            n = num1;
            num1 = num2;
            num2 = n;
        }
        if(num1>num3)    //如果num1大于num3,借助中间变景n实现num1与num3值的互换
        {
            n = num1;
            num1 = num3;
            num3 = n;
        }
        if(num2>num3)    //如果num2大于num3,借助中间变量n实现num2与num3值的互换
        {
            n = num2;
            num2 = num3;
            num3 = n;
        }
        printf("%d %d %d",num1,num2,num3);    //输出函数顺序输出num1、num2、num3的值
    return 0;
    }
    

    2.学习了随机数函数。

    #include<stdio.h>
    #include<stdlib.h>              //随机数必备
    #include<time.h>              //随机数必备
    int main()
    {
    int number;
    srand(time(0));             //生成不同随机种子
    number = rand()%100;         //生成随机数赋值给number (%100表示随机数的范围是0~99)
    printf("%d",number);
    return 0;
    }
    

    3.学习了while、for语句的简单运用以及字符型变量的简单应用。

    while( )           //当条件不满足括号内表达式时停止循环
    {
    
                       //循环语句
    
    }
    
    for(  ;   ;  )       //第一个空开始循环时执行一次,总共执行一次,第二个空为判断条件是否成立,第三个空当循环语句执行完后进行。
    {
    
                          //循环语句
    
    }
    
    char a,b;             //定义字符型变量a,b
    a=getchar();         //输入一个字符
    /*或*/
    scanf("%c",&b);        //同是输入一个字符
    
    putchar(a);             //输出字符a
    /*或*/
    printf("%c",b);          //输出字符b
    

    4.多个函数。

    • sqrt(x):求平方根。
    • pow(a,b):计算a的b次方。
    • fabs(x):计算绝对值

    1.2 本章学习体会

    • 由于开学前有对c语言进行适中的预习跟练习,这使得我在平常课程中并没有不习惯或者听得晕头转向的情况,所以刚开学的课程我会感觉比较的轻松,当然后面的课程毕竟会越来越难,我也会继续不断的预习练习。
    • 至于老师的话,我并没有太多的意见跟建议,毕竟大学学习还是主要靠自己。
    • 代码量
    时间 题数 代码行数
    两周 54~60 1242~1346

    2.PTA实验作业

    2.1 7-8 念数字

    2.1.1 数据处理

    数据表达:变量有int类型的num,bit,flag,count,x,y。其中num为输入的整数、bit为整数各个位的数字、flag表示状态,即是否输入第一个拼音、count为计整数位数、x跟y均为在后面代码中来储存杂数。
    数据处理:
    num:scanf("%d",&num);                    //输入整数num
    
    count:                    //由于后续代码须用到num所以不直接使用num进行计位数
    x = num;							
    while (x > 0)
        {
    	x = x / 10;
    	count++;                    //计算位数
        }
    
    bit:                    //bit将处于循环语句中,这里先显示主要语句
    x = pow(10, count - 1);
    bit = num / x;
    
    flag:                    //先令flag=1,此时执行第一个输出,输出结束后令flag=0,转移到后续第2、3···项的输出
    flag=1;                                               
    
    

    2.1.2 代码截图


    2.1.3 本题可扩展功

    • 由于原代码在对于一个或多个零结尾时比较繁琐,所以既然是读数字,那能不能用字符输入来做呢?因此我改变思路,重新编写了代码,如图

    并且答案也是正确的

    2.1.4 PTA提交列表及说明(此代码为扩展前的代码)

    • Q1:对sum取各个位数的代码有部分的缺漏导致运行超时。
    • A1:vs进行调试后才发现缺漏,于是补上了相关代码。然而只是部分正确。
    • Q2:对于以一个或多个0结尾的调试并不满足答案。
    • A2:经调试后发现凡是以0结尾,均不会输出“ling”,于是我通过计算这整数结尾部分0的位数再进行对“ling”的循环输出才解决了问题。当然,在正确的过程中也是不断的调试。

    2.2 7-9 龟兔赛跑

    2.2.1 数据处理

    数据表达:类型为int的变量T储存输入的时间、int rabbitDistance;int TortoiseDistance分别表示兔子的距离跟乌龟的距离、int flag用flag来表示兔子的状态int runTime;int restTime分别表示兔子持续跑的时间以及休息时间。
    数据处理:
    T:
    scanf("%d",&T);                    //输入时间
    
    int rabbitDistance=0;
    int TortoiseDistance=0;                    //后续做累加,先让初始值为0
    
    flag=1;                    //令flag=1表示兔子跑的状态
    

    2.2.2 代码截图


    2.2.3 本题可扩展功能

    • 能不能不用累加的方式,通过找时间跟距离的规律作为判断兔子跟乌龟的根据呢?所以我花了较多的时间,想去找到恰好兔子休息完开始跑时的距离跟乌龟距离相同的时间点,在这个时间段内对时间进行分段分析。分析如下:
      其中runover表示兔子10每分钟跑完;restover表示兔子30分钟休息完

    时间|兔子|乌龟|两者|距离
    --|:--:--:--:----:
    0| | |✔|0
    10/runover|✔| | |90
    30| | |✔|90
    40/restover| |✔| |120
    45| | |✔|135
    50/runover|✔| | |180
    60| | |✔|180
    80/restover| |✔| |240
    90/run| | |✔|270

    • 可见当时间到90时两者持平此时兔子将继续跑符合上述的恰好时间点。此时判断T%90的值处于哪个时间段即可判断输赢
    • 但是,这种方法对于距离的计算较于繁琐,我并没有深究。

    2.2.4 PTA提交列表及说明

    • Q1:测试发现时间小于40分钟答案正确,一旦超过就错误,不过也有碰巧的答案。
    • A1:通过断点调试,发现当兔子休息时间达30时没有初始为0,导致结果错误。后续补上。
    • Q2:补上之后发现数据较小时(0<T<45),答案正确,其余错误。
    • A2:调试发现兔子在跑时,当乌龟距离大于兔子,runTime由于在if (runTime == 10 && rabbitDistance > TortoiseDistance)的判断句下没有被初始为0.所以将判断句分割为嵌套句并将runTime=0放在外层。

    2.3 7-12 任务06-02-01 于龙遇见日期,又哭了!

    2.3.1 数据处理

    数据表达:定义类型为int的变量year,month,date来储存年,月,日。int num1,num2,num3;分别表示按顺序输入的三个数,char ch1,ch2;表示两数间的字符。
    数据处理:
    
    scanf("%d%c%d%c%d", &num1, &ch1, &num2, &ch2, &num3);            //将数字储存在num中
    
    year:
    对三个num取最大值将最大值赋值给year。
    
    month与date将在判断句中被赋值。
    

    2.3.2 代码截图



    2.2.3 本题可扩展功能

    • 原代码采用了大量的if判断语句,所以我项能不能用数组的知识来解决,但由于本人预习不深,只有初步的想法,并不能付诸实践。

    2.3.4 PTA提交列表及说明

    • Q1:当num2与num3的值均较大时,答案不符合。
    • A1:**经调试发现均大于12输出"Invalid Date!"后程序没有停止,所以在后面加上的return 0;语句。
    • Q2:当输入的三个数据有两个数据相同时,答案错误。
    • A2:通过断点调试,发现赋值语句由于大意打错,更改后答案正确。

    3.阅读代码

    ACM题库: poj 1664 放苹果


    • 代码理解:m个苹果放到n个盘子
      • 当m=0时,此时无论多少盘子仅有一种,或当n=1时,无论多少苹果也仅有一种放法。
      • 当n>m时,则空下的盘子至少有n-m个,所以此时m放n个与m放m个结果一样。
      • 当m>=n时
        1.每个盘子均有苹果,此时可表示为m-n个苹果放n个盘子。
        2.空一个盘子,此时表示为m-1个苹果放n个盘子。
      • 之后每一步均按此循环直到m=0或者n=1,此时返回值为1,即+1。
    • 值得学习的地方。
      1.此代码采用了递归算法,将复杂的排序简化,从而使得代码简练。
      2.学习了如何在函数内的循环 ,更新了我对函数进一步的理解。
  • 相关阅读:
    Java 下载网络资源
    Java11 ThreadLocal的remove()方法源码分析
    软件测试的术语SRS,HLD,LLD,BD,FD,DD意义
    2020年12月2日
    20201129
    2020年11月28日
    程序员的三门课
    中间件到底是个什么鬼东西?
    接口测试框架的形成过程
    一个字符到底等于多少字节
  • 原文地址:https://www.cnblogs.com/gdlkblue/p/11624033.html
Copyright © 2011-2022 走看看