C博客作业01--分支、顺序结构
| 这个作业属于哪个班级 | C语言--网络2011/2012 |
| ---- | ---- | ---- |
| 这个作业的地址 | C博客作业00--我的第一篇博客 |
| 这个作业的目标 | 初步认识C语法,掌握数据表达、printf、scanf语法及分支结构内容 |
0.展示PTA总分
1.本章学习总结
1.1 学习内容总结
1.字符型数据的输入与输出
输入输出时,变量用%c读入输出:
char ch;
scanf("%c",&ch);
printf("%c",ch);
getchar()【括号内无参数】可以接收一个字符,putchar()【括号内有参数】则输出一个字符。
※注意事项
空格是一个字符,在输入时会被当做输入字符;在使用字符型常量时需要用一对单引号将字符括起来。
2.关系运算符
关系运算符用于关系运算,用来判断真假。如5>3为真,则数值为1,相反若3>5为假,则数值为0.
关系运算符有:
<
<=
>
>=
==//等于
!=//不等于
※注意事项
'=='代表的是等于,而'='用于赋值,二者不等同,与数学上存在差异。
3.如何控制输出位数
%xd——当数的位数少于x,则在数的左侧多出x-数的位数个空格。
%-xd——当数的位数少于x,则在数的右侧多出x-数的位数个空格。
如:
#include <stdio.h>
int main()
{
int num1,num2;
double num3;
scanf("%d %d %lf", &num1,&num2,&num3);
printf("%5d%-5d%5.3f", num1,num2,num3);
return 0;
}
4.随机数
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int number; //定义随机数的变量
srand(time(0)); //生成种子
number = rand() % 100; //生成随机数的范围为0-100
printf("%d", number); //输出随机数
return 0;
}
若想要生成的随机数有指定区间,可把number=rand()%100改为number=x+rand()%(100-x)。
1.2 编程技巧总结
1.利用flag改变数值正负
这种方法相比于利用pow函数计算的更快。
如:
#include<stdio.h>
#include<math.h>
int main()
{
int denominator, flag;
double item, pi;
flag = 1;
denominator = 1;
item = 1.0;
pi = 0;
while (fabs(item) >= 0.0001)
{
item = flag * 1.0 / denominator;
pi += item;
flag = -flag;
denominator += 2;
}
pi *= 4;
printf("pi=%.4f\n",pi);
return 0;
}
2.求中间数
利用中间变量存储所要求得的中间数。
如
#include<stdio.h>
int main()
{
int a,b,c,t;
scanf("%d %d %d",&a,&b,&c);
if(a>b){
t=a;
a=b;
b=t;
}
if(b>c){
t=b;
b=c;
c=t;
}
if(a>b){
t=a;
a=b;
b=t;
}
printf("%d",b);
return 0;
}
1.3 本章学习体会
在思维上感受到了数学与计算机的差别,意识到了以后不能够再用数学的思维来思考问题。
对于结构的理解不够深刻,往往碰到一道题的时候要思考很久才能够想出如何编写代码。
在格式上我认为自己得到了很大的提升,有意识的开始让自己定义的变量见名知意,也有意识的开始使用驼峰命名法。
2.PTA实验作业
2.1 前天是哪天
数据表达:用到的变量均为整型变量。有表示年份的year、有表示月份的month、有表示天数的day。
数据处理:首先判断是否为闰年,其次按照每个月天数的不同进行分支。
2.1.2 代码截图
2.1.3 PTA提交列表及说明
-
Q1:一开始跨月显示出现错误,但语法并没有错误。
-
A1:后来经过调试后发现是跨月的表达式写错了,跨月时的天数增加了一天,经过修改后正确。
-
Q2:没有考虑到非闰年的条件。
-
A2:经过长时间的思考,最终也没能想出一个更好的方案,只是把闰年情况下的所有语句复制粘贴一次后,将if判断条件改为非闰年。经过修改后正确。
-
Q3:当输入年数为闰年时,输出的结果总为两个数据。
-
A3:经过单步调试,发现原因是在判断是否为闰年时使用的是两个if语句,而每条if语句都会执行,导致如果是闰年的话年份减一变为非闰年,这样就会执行非闰年的if语句,最终输出两个数据。把if改为else if后最终答案正确。
2.2 计算油费
数据表达:加油量a,汽油品种b,服务类型c,须支付金额price。其中a、b为整型变量,c为字符型变量,price为双精度浮点型变量。
数据处理:将输入的数据先进行服务类型的判断,然后按照不同汽油的价格进行分支计算,得到最终结果。
2.1.2 代码截图
2.1.3 PTA提交列表及说明
-
Q1:编译出现错误,无法执行,查看后似乎没有错误
-
A1:翻书找了找相关资料后,发现字符型常量在使用时需要加一对单引号
-
Q2:编译还是出现了错误,再次查看,
好像还是没有错误 -
A2:在编写的时候没有第一时间把数据表达放在前列,而是想到什么变量就就势写在那一行,结果把
char ch;
放在了scanf底下。将其移到scanf前列后答案正确。
2.3 单步调试————龟兔赛跑
2.3.1 单步调试截图
设置断点并输入数据
单步调试一次循环后的数据
2.3.2 代码截图
2.3.3 PTA提交列表及说明
虽然pta是一次成功,但在自己调试的过程中还是发现了思维上的错误,即一开始用做数学的角度来思考问题,导致出现了过多变量,最后自己也分不清哪个是哪个,于是重新思考后写出了当前的代码。