一:改错题

(1)输出指定信息:

将给定源代码输入编译器;



执行编译命令,发现编译器报错,错误信息如下:



经检查,发现源程序将“stdio.h”误拼为“stido.h”,为拼写错误。

经过改正,将“stiod”改为“stdio”,继续执行编译命令,发现编译器报错,错误信息如下:



经检查,发现在第六行的printf语句中缺少“””(引号);

经改正,将引号补足,继续执行编译命令,编译器仍报错,错误信息如下:



经检查,发现在第五行的printf后缺少“;”。

经改正,将“;补足”,继续执行编译命令,编译器仍然报错,错误信息如下:



经检查,源程序将“main”拼写为“mian”,为拼写错误。

经过改正,将“mian”改为“main”,继续编译,发现能正确编译,结果如图:



点击运行,输出结果,为期望结果,效果如图:

----------------------------------------------分隔符--------------------------------------------------------------------------------------------

(2)将X的平方赋给Y:

将给定源代码输入编译器:



执行编译命令,编译器报错,错误信息如下:



经检查,发现源程序将预处理命令的“stdio.h”编辑为“stdio”,缺少“.h”。

经改正,将“.h”补足,继续编译,发现报错,错误信息如下:



经检查,发现第七行后的内容全部变为蓝色,变为注释内容,发现源程序的多行注释符缺少“/”,因而将注释后内容全部变为注释。如下图:



经改正,将“/
”改为单行注释所用“//”,效果如下图:



执行编译命令,发现编译成功,如下图:



点击运行,结果如下:



显然不符合期望,经过检查,发现在第七条与第八条的“printf”语句中,缺少需要取用的变量。

经过改正,将缺少的变量“x与y”补入原语句,效果如下:



点击编译,编译成功。

运行,发现结果如下:



显然不符合期望,经过检查,发现源程序未将变量初始化。

经改正,将x初始化为3,y初始化为0,。编译成功。

运行,结果仍不符合条件,如下图:



经检查,发现第八条的printf语句中,缺少一个“%”,而第七条printf缺少转义字符“\n”

经过改正,编译成功。

运行结果如图,



符合实验预期。

二:学习总结

(1)根据所给源代码求short型变量所占字节数:

将给定源代码输入编译器,如图:



运行,得到如下结果:



结果正确;

(2)求int整型变量所占字节:

将源程序做修改,如下:

#include <stdio.h> 

 int main()
{
printf("int: %d字节\n",sizeof(int));
return 0;
}

编译,运行,结果如图:



符合预期;

(3)求long 长整型变量所占字节数:

再次修改源程序,如下图:

#include <stdio.h> 

int main()
{
printf("long: %d字节\n",sizeof(long));
return 0;
}

编译,运行,结果如下:



符合预期;

(4)求float浮点型变量所占字节:

修改源程序,如下图:

#include <stdio.h> 

int main()
{
printf("float: %d字节\n",sizeof(float));
return 0;
}

编译,运行,结果如下:



符合预期;

(5)求double浮点型所占字节:

修改源程序,如下:

#include <stdio.h> 

int main()
{
printf("double: %d字节\n",sizeof(double));
return 0;
}

编译,运行,结果如下:



符合预期;

(二)求最大与最小值:

(1)将给定源代码输入,得到如下结果:



经过查证,证实结果正确;



原博链接如下:http://blog.sina.com.cn/s/blog_4fcd1ea30101689y.html

http://blog.sina.com.cn/s/blog_4fcd1ea30101689y.html

2)修改源程序,将i变为i+1:

代码如下图:



编译,运行结果如下:



发现INT_MAX变为与INT_MIN相同的值,结合所给资料得知若int整形变量超出最大值时,会导致溢出,即从最小值开始计起,所以得到上图结果,因此在编程中应当考虑该类问题;

2)修改源程序,将j变为j-1:

代码如下图:



发现INT_MIN的值变为与INT_MAX相同,结合所给资料与上题所得结论,可以认定当INT_MIN继续减去一个大于零的数值时,同样会导致数值溢出,即类似所给形容(汽车仪表盘),返回最大值;

(三)根据所给程序,输入100 144 64:

将所给源代码输入编译器,如图:



运行并输入所给数值,得到如下结果:



发现输入的数虽不相同,但得到的结果却相同,通过检查代码,发现原因在于输入语句的格式化符号:

根据查证,发现%o为八进制整数的输入格式,%x为16进制整数的输入格式;

而在输出语句,发现格式化输出符号均为十进制整数的输出格式,因而认定这是导致上述运行结果的原因;

根据查表与计算,得到如图结果:



笔者将十进制整数100输入转换器,得到如上图结果,再结合源程序的输入语句,可以发现原因。

实际上虽然看似输入的数值不一样,但由于格式化输入符号不同,计算机内部自动将对应的数值转换为所对应进制数字的数值,经过转化后的数字实际上值是相等的。而在printf语句中,又将计算机内部的数字转换为十进制数字,因而产生运行的结果,即三数相等,十分有趣。

再次输入另一数据:“150 226 96”,结果如下图:



结果相同,均为150,。

附上转换器地址:

http://tool.lu/hexconvert/

(四)我认为此章应总结的内容:

我认为顺序结构应当为C语言中最基础也是最简单的结构,因此应当熟练掌握。而这个看似简单的章节,实际上要牢固掌握并且熟练运用也是要付出一定努力的。对于编程,实际上在入门难度就可以打死一片人,符号也好,逻辑关系也罢,都绝不是靠死记硬背能掌握的,更重要的在于理解,理解运行规律,逻辑以及在不断的错误中积累经验,这样才能在逐渐加深的知识中不至于被落下。

个人总结起来,重点应放在一些基础变量类型的使用以及运算规律上。例如不同变量类型混合运算,得到的应当是所占字节数最大的。再例如对变量的初始化问题上,虽然不是必要过程,但是在编程过程中,也确实有过因未将变量初始化而导致错误的案例,因此为自己敲响警钟,也希望同学们不要再犯。

其次,在编程习惯上,虽然不是必要的,但是习惯一旦形成,就很难改正。现在我们又是处于初期,更应在开始就养成良好的习惯。例如应有的缩进,必要的注释,运算符前后的空格。这些虽然有些不是必要的工作,但是却是一个优秀编程者所应具备的素质。因此,我督促自己,也希望同学们能养成良好的习惯。

而对于一些相对低级的错误,例如scanf语句中的取地址符(&),相信也是老生常谈,我也犯过这样的错误,但是犯错是人之常情,但是每犯一次错误,在未来的工作中就可能会避免一次错误,所以应当把每一次错误当成一次宝贵经验,争取不再犯。

三:实验总结:

1:厘米换算英尺英寸:

(1)流程图:



(2)源代码:

#include<stdio.h>

int main(void)
{
int cm;
int foot, inch;
scanf("%d",&cm);
foot= cm / 30.48;
inch= 12 * (cm / 30.48 - foot);
printf("%d %d\n", foot, inch);
return 0;
}

(3)测试数据及运行结果:

1)输入样例数据170cm,结果如下图:



结果符合预期,再次输入第二组数据:

输入200,单位为cm,结果如下:



根据公式以及数学推算,结果符合预期,可以认为是可靠;

(4)实验分析:

1)本题在流程图上为顺序结构,结构上较为简单,但在数据换算上较为复杂,因此笔者以及同学在这里花费了一定的时间,但是经过与结对同学以及同学的商议,最终得出了正确结果。

2)错误分析:

本题虽然结构上较为简单,但是在Reptor的使用上却出现了一定的障碍:

问题一:笔者最初的流程图如下:



可以从左侧的数据看出,最初输出的foot(即英寸)为非整数,进而影响后面inch(即英寸)的计算结果,后经过分析得出结论:在Reptor中,除法运算符“/”与C语言不同,不会自动取整。

经过调查相关公式以及改正,将"floor"插入其中的赋值运算框中,因而可以取整,得到正确结果。

问题二:经过改正后,却又在输出上陷入了疑惑,运行结果如图:



不难发现,输出后两结果之间没有空格,而尝试多次,结果不是编译错误就是未显示空格,后经过询问老师以及尝试,最终得到正确结果:

改正后的关键部分如图:



即将需要未经处理直接输出的字符(空格)包含在引号中,之后需要输出的值用“+”连接,否则“+”会被编译器认为是赋值运算,因而导致编译错误。

在此感谢指导老师的耐心解答;

2:A乘以B:

(1)流程图:



(2)源代码:

#include<stdio.h>
int main(void)
{
int A = 0,B = 0,c = 0;
scanf("%d%d",&A,&B);
c = A * B;
printf("%d",c);
return 0; }

(3)测试数据及运行结果:

输入数据“5 5”,结果如下图:



结果符合预期,再次输入“-50 25”,结果如下图:



结果符合预期,认为可靠;

(4)实验分析:

该问题仍然是简单的顺序结构,难度较低。主要运用一元运算符以及输入(scanf)以及输出(printf)语句,可以锻炼熟练度,而该实验过程可以说是十分顺利,并未遇到问题,因此略过错误分析;

3:整数四则运算:

(1)流程图:(该流程图较长,因此分割为两份)





2:源代码:

#include<stdio.h>
int main(void)
{
int a = 0,b = 0,c = 0, d = 0,e = 0,f = 0;
scanf("%d%d",&a,&b);
c = a + b;
d = a - b;
e = a * b;
f = a / b;
printf("%d + %d = %d\n",a,b,c);
printf("%d - %d = %d\n",a,b,d);
printf("%d * %d = %d\n",a,b,e);
printf("%d / %d = %d\n",a,b,f);
return 0; }

(3)测试数据及运行结果:

第一次输入“7 6”,运行结果如下图:



符合预期;

再次输入“-9 8”,运行结果如下:



符合实验预期,认为可靠;

(4)实验分析:

1)该题目仍是顺序结构,不存明显障碍,需要注意的只有输出格式,容易出现错误。笔者的习惯是在声明变量时将变量初始化为该数型的“0”,这样做虽然不是必要的,但是可以避免一些意想不到的错误,因此在此希望同学们也可以养成这样的习惯,唯一需要注意的就是一定 要初始化为对应数型的“0”;例如“double a = 0.0”而不是“double a = 0”,否则会发生错误;

2)错误分析:

问题一:在流程图的编辑阶段,却发生了意想不到的错误,如下图:



在给变量赋值时,无论如何都无法继续进行,后经过查证,发现“e”为已有变量,因而不能使用,希望大家也能注意,不要犯和我一样的错误;

后经过改正,将原有的“e”改为“f”,流程图能流畅运行,实验成功;

4:整数152的各位数字:

(1)流程图:



(2)源代码:

#include<stdio.h>
int main(void)
{
int a = 152,b = 0, c = 0,d = 0;
b = a % 10;
c = (a / 10) % 10;
d = a / 100;
printf ("152 = %d + %d*10 + %d*100",b,c,d);
return 0; }

(3)测试数据及运行结果:



符合预期,结果正确;

(4)实验分析:

1)该题目主要考察几种基本运算符号,“%”取余;“/”除法“(保留整数);以及一定的数学思维能力,但较为简单;

但在C语言编译阶段,并未遇到问题,而在流程图时,果不其然遇到了意想不到的错误;

2)错误分析:

错误一:笔者在编辑完流程图并第一次运行时,结果如下:



显然与预期不符,首先,数值不符,其次,输出格式不符;

经过查证,发现错误原因之一与之前的题目即厘米换算英尺英寸相同,即忘记在赋值运算框中遗漏“floor”,导致数值为浮点数,偏离输出格式,后补入“floor”,以及在输出框中补足“+”以及“ ”(空格)后,能正确显示结果,证明错误分析正确;实验结束;

四:PTA提交列表:

顺序结构(1)提交列表:





而顺序结构(2),因笔者在提交完毕后第二天为检查是否有误,再次回到提交页面并且提交,导致间隔时间过短且结果均为正确。为避免有抄袭之嫌,已向指导老师说明情况,望理解,并附上提交列表:







本次作业如上。

C语言第二次作业-----顺序结构的更多相关文章

  1. C语言第二次作业——顺序结构

    一.改错题 1.输出带框文字:在屏幕上输出以下3行信息. (1)源程序 对程序进行编译,发现错误信息1 错误原因:stdio拼写错误 改正方法:将stdio正确拼写 对程序进行编译,发现错误信息2 错 ...

  2. C语言程序设计第二次作业--顺序结构

    C语言程序设计第二次作业--顺序结构 1.输出带框文字:在屏幕上输出以下3行信息. ************* Welcome ************* 源程序 #include <stido ...

  3. C语言程序设计第二次作业——顺序结构

    (一)改错题 1.输出带框文字:在屏幕上输出以下3行信息. 错误信息1: 错误原因:i和d位置错误 改正方法:i和d位置互换 错误信息2: 错误原因:\n后缺了一个" 改正方法:\n后加一个 ...

  4. C语言程序设计第二次作业—————顺序结构改

    1.输出带框文字:在屏幕上输出以下3行信息. ************* Welcome ************* 源程序 #include <stido.h> int mian() { ...

  5. C语言程序设计第二次作业—————顺序结构

    (一)改错题 1.输出带框文字:在屏幕上输出以下3行信息. ************* Welcome ************* 源程序 include int mian() { printf(&q ...

  6. c语言博客作业——顺序结构,分支结构

    1.PTA截图 2.本章学习总结 2.1学习内容总结 数据的输入和输出:%d表示输入输出整数 %.lf表示输入浮点数 %.nf表示输出结果保留n位小数 if-else的分支结构可以有限个分类情况进行处 ...

  7. C语言第二次作业---分支结构

    一.PTA实验作业 题目1:计算分段函数[2] 1.实验代码 double x,y; scanf("%lf",&x); if(x>=0){ y=sqrt(x); } ...

  8. C语言第二周作业----分支结构

    一.PTA实验作业 题目1.7-1计算分段函数 本题目要求计算下列分段函数f(x)的值: 注:可在头文件中包含math.h,并调用sqrt函数求平方根,调用pow函数求幂. 1.实验代码 int ma ...

  9. C语言第二周作业——分支结构

    一.PTA实验作业 题目1.7-1计算分段函数 本题目要求计算下列分段函数f(x)的值: 1实验代码 double x,result; scanf("%lf",&x); i ...

随机推荐

  1. 使用 VSCode 编写 .NET Core 项目之初体验

    注:本文在根据 微软官方文档指导下,根据自己的学习中整理,并不完全照搬文档,但也大体和文档学习路线相似,主要为记录学习过程. 官方学习地址: https://code.visualstudio.com ...

  2. spring-oauth-server实践:授权方式四:client_credentials 模式下access_token的产生

    授权结果 获取access_token成功, 访问资源服务器API http://localhost:9000/api-gateway-engine/unity/user_info?access_to ...

  3. mysql中text数据类型

    有个小问题记录下: 需要从第三方api接口获取数据,返回的数据的长度不定,设计表的时候设计成了varchar(256):结果存数据的时候提示表字段长度不够. 一直从300改到500,600,700都一 ...

  4. 如何从0开发一个Atom组件

    最近用Atom写博客比较多,然后发现一个很严重的问题..没有一个我想要的上传图片的方式,比如某乎上边就可以直接copy/paste文件,然后进行上传.然而在Atom上没有找到类似的插件,最接近的一个, ...

  5. 教你如何用AST语法树对代码“动手脚”

    个推安卓工程师,负责公司移动端项目的架构和开发,主导移动端日志管理平台系统架构和开发工作,熟悉前后端的技术线,参与个推SDK主要业务研发工作,善于解决项目中遇到的痛点问题. 作为程序猿,每天都在写代码 ...

  6. 1024MySQL事物提交机制

    转自 http://www.cnblogs.com/exceptioneye/p/5451960.html MySQL作为一种关系型数据库,已被广泛应用到互联网中的诸多项目中.今天我们来讨论下事务的提 ...

  7. WPF 自定义TabControl控件样式

    一.前言 程序中经常会用到TabControl控件,默认的控件样式很普通.而且样式或功能不一定符合我们的要求.比如:我们需要TabControl的标题能够居中.或平均分布:或者我们希望TabContr ...

  8. (hdu-4280)Island Transport~测试网络流模板速度~要加挂才能过啊

    Problem Description In the vast waters far far away, there are many islands. People are living on th ...

  9. seacms6.5 注入漏洞1

    ---恢复内容开始--- 需要开启/data/admin/isapi.txt   ,当里面的数值为1时,就可以报错注入 存在漏洞的页面:zyapi.php function cj() { global ...

  10. [HNOI2016]最小公倍数

    题目描述 给定一张N个顶点M条边的无向图(顶点编号为1,2,...,n),每条边上带有权值.所有权值都可以分解成2a∗3b2^a*3^b2a∗3b 的形式. 现在有q个询问,每次询问给定四个参数u.v ...