0.展示PTA总分
1.本章学习总结
1.1学习内容总结
- 第一章:了解C语言的产生和应用领域,学习了C语言的主要“单词”。
标识符:由字母、数字和下划线组成,其中第一个字符必须是字母或者下划线。
常量:有整型常量123,实型常量12.34,字符常量'a',字符串常量"Hello World!"等。
运算符:有+(加)、-(减)、*(乘)、/(除)、%(求余)、>(大于)、**>=(大于等于)**、**==(等于)**、**=(赋值)**等。
分隔符:有;、[、]、(、)和#等。
- 第二章:
学习了解C语言中的数据类型,包括int(整型),char(字符型),float(单精度浮点型),double(双精度浮点型)。
学习了数据格式化输出函数printf(),数据格式化输入函数scanf(),字符输出函数putchar(),字符输入函数getchar()。
- 第三章:
学习如何运用if语句和switch语句来解决各种问题。
- 小知识点
- 单行注释://注释内容;多行注释:/* 注释内容 */。
- 基本数据类型占用空间:char(1个字节),int(4个字节),float(4个字节),double(8个字节)。
- 表达式count++的值为count原来的值,表达式count--的值为count后来的值。
- %d输出10进制整数;%md输出m位,不足左补空格,其他正常输出;%c输出字符串;%f输出实数。
- 优先级:赋值运算符<关系运算符<算数运算符。
1.if语句的使用
- 语法:
if(表达式)
{
语句1
}
else
{
语句2;
}
- 注意:
if语句表达式可以接收所有的数据类型。
if语句后面不能加分号。
else子句是if语句的一部分,必须与if配对使用,不能单独使用。
else与最靠近它的、没有与别的else匹配过的if相匹配。
2.switch语句的使用
- 语法:
switch(表达式)
{
case '值1'://若值1==表达式的值,执行语句1
语句1;break;//阻止当前程序的执行
case '值2':
语句2;break;
case '值3':
语句3;break;
default://若表达式的值不满足case的任何一种情况,则执行default下的语句
}
- 注意:
case后面注意有一个空格。
case后面的常量表达式不能相同。
break语句只能用于循环语句和switch语句中,不能单独使用。
3.for语句的使用
- 语法:
for(表达式1;表达式2;表达式3)
{
循环体语句;
}
- 说明:
表达式1对循环变量赋初值,若前面有赋初值,这里可不填。
表达式2作为循环的条件,若省略则会成为死循环。
表达式3设置循环的步长,改变循环变量的值。 - 注意:
若循环体语句由多条语句组成,必须用大括号括起来。
必须用两个分号分隔三个表达式,但for后面无分号。
1.2本章学习体会
- C语言是我们学习计算机的基础课程。在学习过程中,我发现自身存在许多不足,基础较为薄弱。自己预习的时候已经对教材内容有了大概了解,课堂上也了解比较清晰,但是一到实验却不知道如何操作。主要的问题还是眼高手低,刷题太少,导致自己对语法的应用不熟练。再有是做题不严谨,写的代码也不是很规范,应该自己学会进行测试,自己制造数据,并学会自己寻找错误。
- 代码量为497行。
2.PTA实验作业
2.1 7-12 判断一个三位数是否为水仙花数
2.1.1数据处理
- 数据表达:仅需定义一个整型变量N。
- 数据处理:
表达式:N>=100&&N<=999,Npow(N%10,3)+pow((N/10)%10,3)+pow(N/100,3)
流程结构:输入一个整数N,若N满足表达式N>=100&&N<=999则进入if语句,否则直接输出"Invalid Value!"当N再满足表达式Npow(N%10,3)+pow((N/10)%10,3)+pow(N/100,3)输出"Yes"否则进入其else子句,输出"No"。
2.2.2代码截图
2.1.3本题可扩展功能
- 本题可扩展为输出100到999之间的水仙花数及个数
2.1.4PTA提交列表及说明
- 把if()后面的分号去掉。
- N==pow(N%10,3)+pow((N/10)%10,3)+pow(N/100,3)漏了一个等于号。
- N==pow(N%10,3)+pow((N/10)%10,3)+pow(N/100,3)中第三个pow()里把%改为/。
2.2 7-2 求幂级数展开的部分和
2.2.1数据处理;
- 数据表达:定义一个变量i,给它赋值1,变量n作为循环次数,i,n都是整型变量。浮点型变量:item表示某一项的值;x表示输入的实数;number作为分子;product作为分母;sum表示累加起来的项。
- 数据处理:
表达式:item>= 0.00001,number = number * x,product = product * i,i++,sum = sum + item,item=number/product。
流程结构:输入一个实数x,当item>= 0.00001时,进入while循环,当item< 0.00001时,跳出循环,累加各项,输出sum的值。
2.2.2代码截图
2.2.3本题可扩展功能
- 使用for语句循环及if语句
2.2.4PTA提交列表及说明
- 表达式item>=0.00001漏了一个0
- 错误给item赋值为0,后改为1
- 将item的类型改为double
- 在item类型前面加上long
2.3 7-3 输出三角形面积和周长
2.2.1数据处理
- 数据表达:定义四个整型变量a,b,c,s,分别是三角形的三条边及周长的一半,浮点型变量area,perimeter,分别是面积和周长。
- 数据处理:
表达式:s=(a+b+c)1.0/2,area=sqrt(s(s-a)(s-b)(s-c)),perimeter=a+b+c,(a+b>c)&&(a+c>b)&&(b+c>a)
流程结构:输入三个整数a,b,c,如果满足表达式(a+b>c)&&(a+c>b)&&(b+c>a)则输出面积和周长,否则输出"These sides do not correspond to a valid triangle"。
2.2.2代码截图
2.2.3本题可扩展功能
- 本题可扩展为在三条边能构成三角形的条件下,能构成何种三角形。若三条边满足表达式(a2+b2=c2||a2+c2=b2||c2+b2=a^2),则三条边能构成直角三角形;若三条边满足表达式(ab||ac||b==c),则三条边能构成等边三角形;若以上都不满足则为锐角三角形。
2.2.4PTA提交列表及说明
- s=(a+b+c)1.0/2忘记了1.0/2。
- 把(a+b>c)||(a+c>b)||(b+c>a)改成(a+b>c)&&(a+c>b)&&(b+c>a)。
- printf("area = %.2f; perimeter = %.2f",area,perimeter)中间漏了分号。
3.阅读代码
- 代码功能:用公式(y-y0)=-ax2计算第一条抛物线在building2的y,用公式(y-y0)=-b(x-x0)2计算第二条抛物线在building2的y,最后判断y>=h2是否成立。
- 代码优点:
使用eps控制迭代精度,以免double类型不精确,不能和0直接比较。
使用多个if语句和while语句,逻辑清晰,层次分明。
使用了const ,便于进行类型检查,消除了一些隐患。
代码写得很规范,没有明显的安全问题。