博2之顺序分支结构

| 这个作业属于哪个班级 | C语言--网络2011/2012 |
| ---- | ---- | ---- |
| 这个作业的地址 | C博客作业01·--顺序分支结构 |
| 这个作业的目标 | 初步认识C语法,掌握数据表达、printf、scanf语法及分支结构内容 |

0.PTA顺序,分支题集展示


1.本章学习总结

1.1本章学习内容总结

1.1.1顺序结构:

  • 整除问题
#include <stdio.h>
int main()
{
    int num1,num2;
    scanf("%d %d",&num1,&num2);//输入数据
    if(num1%num2==0)//做出判断
    {
        printf("YES");
    }
    else
    {
        printf("NO");
    }
    return 0;
    
}

注意点:scanf中的&记住加;判断数据类型(整型,字符型,浮点型);注意题目中格式输出要求(特别是空格);新定义的量要让人易懂。

  • 输出各位数字
#include <stdio.h>
int main()
{
    int num;
    scanf("%d", &num);//输入数据
    printf("%d,%d,%d",(num/100)%10,(num/10)%10,num%10);
    return 0;


}

注意点:因为题目要求,所以"%d,%d,%d"之间用逗号隔开。

1.1.2.分支结构

  • 判断一个三位数是否为水仙花数
#include <stdio.h>
#include <math.h>//
int main()
{
    int N, a, b, c;
    scanf("%d", &N);
    if (N < 100 || N>999)
    {
        printf("Invalid Value.");
    }
    else
    {
        a = N / 100;

        b = (N / 10) % 10;
        c = N % 10;
        if (N == pow(a, 3) + pow(b, 3) + pow(c, 3))
        {
            printf("Yes");
        }
        else
        {
            printf("No");
        }
        return 0;
    }
}

注意:用||表示或者。

  • 出租车计价
#include <stdio.h>
int main()
{
    double mileage,charge1,charge2;
    int time;
    scanf("%lf %d",&mileage,&time);
    if(mileage<=3)
    {
        charge1=10;
    }
    else if(mileage<=10)
    {
        charge1=10+(mileage-3)*2;
    }
    else
    {
        charge1=10+14+3*(mileage-10);
    }
    if(time>=5)
    {
        charge2=time/5*2;
    }
    else
    {
        charge2=0;
    }
    printf("%.0f",charge1+charge2);
    return 0;
}

注意:结果四舍五入应该为%.0f

1.2 编程技巧总结

1.取某一位数(num)个位做法
eg.取数235个位:235%10
2.判断整除做法
eg.235是否能被5整除:if(235%5==0)

1.3 本章学习体会

1.感受:通过本章的学习,我终于对顺序和分支更了解一些。同时也意识到自身严重存在不足,已经被甩开一大段距离,所以我要多做PTA以增加题量。
2.对教师教学建议:希望老师上课进度能放慢些。
3.这两周多写了一些代码(虽然还不多👀)

2.PTA实验作业

2.1 前天是哪天

2.1.1 数据处理

  • 数据表达:用了day,month,year这三个变量。
    根据题目要求需要输入日期,格式为"yyyy-mm-dd",所以我采用了day,month,year这三个变量。
    都属于int变量。
  • 数据处理:表达式:eg.month = month - 1 day >= 3 && day <= 31 month == 2 || month == 4 。
    流程结构: 用到了顺序结构和分支结构。

2.1.2 代码截图




2.1.3 PTA提交列表及说明


说明:1.部分正确因为没有理清思路而导致的解题错误。即把图片里的数字写成了大月份数字。
2.在纠正以上错误后答案正确。
反思:对于一个题目,不仅要做到格式,编译正确,更重要的是要先想好自己的思路,否则极有可能造成答案而不方便修改。

2.2.3

2.2自选一题(内容要和字符型数据处理有关的题目)

7-2计算油费

2.2.1数据处理

本体字符型数据为service:1.定义变量时要写成char service; 2.在if语句中要加单引号if (service =='m') 特别注意m的旁边有没有空格(因为单引号之间放的应该是字符,如果多敲一个空格就变成字符串了)

2.2.2代码截图


2.2.3PTA提交列表及说明


说明:1.编译错误为未加分号。2.答案错误因为'm'的中间多加了空格变成了'm '(这里不易找出,困扰很久)。

2.3自选一题,介绍单步调试如何检查错误(选择一题,介绍如何用单步调试找出错误。如程序代码没有进入你设计的分支、变量数据读入不正确。)


7-6找出三位水仙花数

2.3.1单步调试截图

2.3.2 代码截图

2.3.3 PTA提交列表及说明


说明:错因1.未清楚N和M的顺序,把其写成了scanf("%d%d",&N,&M);而未看到导致答案错误
错因2.因为把999输成900导致答案错误。
错因3. else的位置未放正确,把else放在了第一个if的里面导致else和第二个if匹配最终导致答案错误。

#include <math.h>
int main()
{
    int num, N, M;
    int a, b, c;
    scanf("%d %d %d", &num, &N, &M);
   if= (M >= 100 && M <= N && N <= 900 && num >= M && num <= N)//判断输入数字是否合法
    {
        for (num = M; num <= N; num++)
        {
            a = num / 100;
            b = num / 10 % 10;
            c = num % 10;

        }
        if (pow(c, 3) + pow(b, 3) + pow(a, 3) == num)//判断是否为水仙花数
        {
            printf("%d\n", num);//如果是则输出
        }
        else
        {
            printf("Invalid Value.");
        }

    }

    return 0;



}

注意
if (i%2) 是什么意思?
答:
if(i%2)就是判断i除以2的余数是否为零,不为零就执行if内的语句,如果余数为零,就不执行if内的语句。
if(条件){   }是条件判断语句,条件为零,不执行if内的语句,条件不为零就执行if内的语句。

i%2是求i除以2的余数。
如:

if(i%2){i++;}

当 i=8时,i%2=0

执行后i还是为8

当i=9时,i%2=1

执行后i=9

易错题:

(选B)先赋值,然后用变量的值判断是否赋值成功,此时x=3,返回值为3,3代表真,条件成立。

posted @ 2020-11-08 22:53  蓝胖子WHM  阅读(158)  评论(0编辑  收藏  举报