0.展示PTA总分
1.本章学习总结
1.1学习内容总结
(1)数据类型及其范围
整型 int 取值范围:-2147483648~+2147483648
短整型 short 取值范围:-32768~+32768
长整型 long 取值范围:-2147483648~+2147483648
字符型 char 取值范围:-128~+127
单精度浮点型 float 取值范围:-/+3.4e38
双精度浮点型 double 取值范围:-/+1.7e308
--其中float和double,在没有特殊要求下,用double即可,若有字节要求,则要选用float。
(2)格式化输入与输出
1、printf()用于格式化输出,格式控制字符串用双引号括起来。
2、scanf()用于格式化输入,需要特别注意的是:在需要输入的变量前一定要加上“&”进行取地址运算,否则会出现变量无法读入的情况。(萌新的我经常在这地方出错)
3、getchar()用于字符输入,设ch是字符型变量,该函数一般调用格式为“ch = getchar( );”功能是从键盘输入一个字符,并赋值给变量ch,但是该函数只能读入一个字符。
4、putchar()用于字符输出,设ch是字符型变量,该函数一般调用格式为“getchar(输出参数);”功能是输出输出参数的字符型变量或常量,该函数只能输出一个字符。
(3)if-else语句
if-else的基本结构如下:
if()
{
}
else
{
}
if-else语句中我认为重要且经常犯错的几点:
1、if()后不用加分号;,就像#include<stdio.h>和int main()一样。
2、虽然说单个语句是没有严格要求用大括号,但为了格式一致以及代码的整洁,我们还是都要加大括号。
3、else后不用加小括号,而else if后面要加。
4、else是对最近的if进行否定,这在嵌套式结构中容易出错。
(4)for循环语句
for循环的基本结构如下:
for(表达式1;表达式2;表达式3;)
{
循环体语句
}
for语句的执行流程为:先计算表达式1(计算且只计算1次),再判断表达式2,若值为“真”,则执行循环体语句,并接着计算表达式3,然后继续循环;
若值为“假”,则结束循环,继续执行for的下一条语句。
(5)switch语句
switch语句的基本结构如下:
switch(表达式)
{
case常量表达式1:语句段1;
break;
case常量表达式2:语句段2;
break;
...
case常量表达式n:语句段n;
break;
default:语句段n+1;
break;
}
switch语句可以处理多分支选择问题。在使用switch语句时,有几点要特别注意:
1、case后面必须是常量表达式。
2、若无break,则会一直执行下去。
3、default后不用再加(表达式),这一点与else类似。
4、可以利用上述第二点的特点来巧妙解答一些问题,即不用每个case后都加break,来得到期望的答案,但是一定要有default,否则什么都不执行。
(6)关系与逻辑运算符
(7)常见的数学函数
1、平方根函数sqrt(x),如sqrt(4.0)的值为2.0。
2、绝对值函数fabs(x),如fabs(-3.56)的值为3.56。
3、幂函数pow(x,n),如pow(1.1,2)的值为1.21。
4、-指数函数exp(x),如exp(2.3)的值为9.974182。
5、以e为底的对数函数log(x),如log(123.45)的值为4.815836。
**调用数学函数要在加#include <math.h>
1.2本章学习体会
1、刚开始时,我只在网上看翁恺老师的课,觉得听起来也挺简单的,但其实我自己连VS都还不怎么会用,当第一份PTA作业下来时我就蒙圈了,不知道从何下手,一开始,提交的作业都是编译错误(因为一开始觉得在网页上写比较方便,后面才在VS上写,这样容易找出自己的编译错误点),在舍友们的耐心帮助下,才一点点熟悉怎么敲代码。事实证明,学编程还是得亲手实践才行。其次,PTA上我一般情况下只会做一些偏简单的题,一些难题我有时候都不知道用什么语法去做,或者是太复杂思路很乱,(如“于明看到日期又哭了”一题)我觉得在接下来的阶段得搞懂每一道题,不能马马虎虎算出答案就过了,因为我发现再难的代码也是由一部分一部分小的代码组成的,打好基础才是关键。
2、这两周的代码量518行。
2.PTA实验作业
2.1三个数由小到大输出
2.1.1数据处理:
a,b,c分别表示三个数字,依题意三个数字都是整型。
(刚做这题时,我没有想到用t来交换a,b,c的数字来做,当时想到的最简单的方法是3个数字排大小就只有6中情况,一一列举就可以完成这道题了。)
2.1.2代码截图:
2.1.3本题可拓展内容:
即我上述所讲的一般解法:
这个简单的方法用起来不仅节省了大量代码,而且思路清晰。
2.1.4PTA提交列表及说明:
前两次提交编译错误一次是scanf语句忘了加&符号,还有一次是scanf那一句后面忘了加分号;
最后一次也就是用最笨的方法完成了这道题。后面了解了舍友的代码才知道一般的解法,自己也在VS上试了下。
2.2判断一个三位数是否为水仙花数
2.2.1数据处理:
分别用hundred、ten、digit表示百位、十位、个位,且其数据类型都是int。
用int1表示需要输入的整数N,由题意,其数据类型也是int。
2.2.2代码截图:
2.2.3本题可拓展内容:
求十位数时有两种方法:
一种就是上面写的ten =int1/10%10
还有一种就是ten=int1%100/10
2.2.4PTA提交列表及说明:
前两次提交都是因为没有发现低18行代码中等于时”==“而不是”=“,看了很久才看出这个错误。
2.3计算天数
2.3.1数据处理:
用year、month、day分别表示年、月、日。 由题意,数据类型都是int。
2.3.2代码截图:
2.3.3本题可拓展内容:
这是我舍友写的,我觉得这个代码写的非常巧妙。巧妙地利用了switch语句中不写break就会一直进行下去的特点,比起我的代码,可以减少计算量。
十分值得我的学习。
2.3.4PTA提交列表及说明:
这题提交了两次都是答案错误是因为我把中间某个月的天数算错了,应该是30结果算成31,后面发现加起来不是365天就逐月检查最后发现了错误。
3.阅读代码
代码功能:将输入的24小时制的时间转化为12小时制的时间输出
优点:1、用while循环结构和getchar()巧妙解决了题意中需要输入多个数据的问题。循环结构的题目中会经常用到,值得我的学习。
2、用到了strcpy函数。strcpy是一种C语言的标准库函数,strcpy把含有'\0'结束符的字符串复制到另一个地址空间,返回值的类型为char*。如此使用既简化了代码,又使界面更加整洁,避免了不必要的重复,值得我的学习。