博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代表真,条件成立。