循环函数数组

#pta提交作业

#循环

7-1

设计思路:本题是道简单的循环累加题,首先在每一次循环内算出每一项的值,然后对每一项进行累加,最后输出累加和的值。

流程图:

调试过程:本题无调试过程

7-2

设计思路:本题乍看之下是道简单的循环题,但是在题目之下隐藏着许多细节。首先应建立循环,然后在每一次循环内调用平方根函数sqrt,算出每一项的值,再定义sum进行累加,此处应注意sqrt函数包含在math.h头文件内。最后,输出时应注意格式,并且精确到小数点后面两位。

流程图:

 

 

调试过程:1,

如图,在输出函数printf处,因没有注意题目中所指的输出格式导致错误,应在“=”的左右侧各填上一个空格。

2,

如图,本次调试过程较图一无任何修改,因为还没有找出错误,仅仅是为了看看错误类型而提交。

3,

如图,在这里已经弄清楚题意,但是仍有考虑不周的地方,就是当输入n极大的时候单精度型浮点数可能会有误差,应把对sum和a的定义由float改为double

7-6

设计思路:本题是要对给定区间内的素数进行统计,首先需要建立循环,每一步循环内要对当前循环数进行是否为素数的判断,所谓素数,就是除一和本身外没有其他因数的数。具体判断过程如下:对于一个大于一的整数,从2开始用循环计数i去除此数,若余数不为零,则循环计数i自加,循环继续,否则跳出循环。在循环之外,设计一个判断,若循环计数i等于这个数的一半,则这个说明从2开始到其本身没有其他因数,则这个数是素数,否则这个数不是素数。

流程图:

调试过程:如图

本题只进行了一次调试过程,就是没有考虑到如果循环计数从一开始,虽然最后也能得到类似的结果,但是若是输入的区间包含整数一,那么按照算法,在i=1时跳出循环,那么判断过后1也为素数,这样就与常理不符,应把循环的起点,i=1改为i=2

#函数

7-10

设计思路:本题需要判断一个正整数数是否为素数,所谓素数,就是除一和本身外没有其他因数的数。具体判断过程如下:对于一个大于一的整数,从2开始用循环计数i去除此数,若余数不为零,则循环计数i自加,循环继续,否则跳出循环。在循环之外,设计一个判断,若循环计数i大于这个数的平方根,则这个说明从2开始到其本身没有其他因数,则这个数是素数,否则这个数不是素数。

流程图:

调试过程:1,

如图,编写错误,循环结束的标志写成了i<n,应该改为i<count

2,

如图,循环结束条件i<n/2,导致运行超时,应把其及所有条件改为sqrt(n)

3,

如图,上方循环结束条件已改为i<sqrt(n),但是下方的判断条件却仍为i>n/2,应该为一致。

4,

如图,当取最大整数时出错,应讲定义的n改为双精度浮点型

5,

如图,输入最大最大整数时,无论是否提前跳出循环,i都不满足i>sqrt(n),应将整个函数改为整型,用return返回较为合适

7-4

设计思路:本题要求验证哥德巴赫猜想,即验证一个大于2的的偶数总能表示为两个素数的和这句话是否正确,正常的思路应该是从小到大排出素数,若其中两个素数的和等于输入的偶数,则取出这两个素数。但是这样做未免太过麻烦,程序的长度先不说,运行的时间也大大超出限制,所以应当换种思路,从2开始,用所输入的偶数减去一个素数,然后判断所得差是否为素数,若是,则按格式输入这两个素数,若不是,用下一个素数做减数继续循环。

流程图:

调试过程:本题没有进行调试。

7-3

设计思路:本题是简单的循环题,但是要将主要运算步骤放于子函数内,首先写入<math.h>头文件,然后在主函数内输入n的值,将此值作为实参传给子函数,子函数内设计循环,以循环计数i从1到n为止,在每一次循环内调用pow函数求幂,然后对其进行累加

流程图:

 

调试过程:

 

 如图,输入的n并没有被定义,应在上方补充整形定义

 #数组

7-2

设计思路:本题要求处理数据并输出最大值及其对应的最小下标,首先输入n,然后定义一个长度为n的数组用于存储数据,定义m=a[0],n=0,从a[1]开始与m进行比较,若某项大于m,就把该项的值赋给m,同时把其下标的值赋给n.循环结束后,输出当前的m和n

流程图:

调试过程:1,

如图,没有考虑到输入单个数时不用进行判断,应把n=1和n>1的情况分开

2,

如图,在前一个提交的基础上,仅仅是加上当n=1的情况,但是当n>1时,n=1的情况都是存在的,因此会输出两遍导致错误,应在其后加上判定条件if(n>1)

7-3

设计思路:本题要求将数组中的数据逆向存放,首先输入n,建立数组,然后输入n个值。对于子函数中,只要将第i个数和第n-1-i个数交换即可,一直进行到i>=n/2

流程图:

调试过程:

 

如图,没有注意到题目格式的要求,输出时最后一项后时没有空格的,因此只有当输入一个数时才能运行正确,应分为两种情况,当i=n-1时,输出不带空格的值,否则输出带空格的值。

7-4

 

设计思路:本题要求再给定的n个整数中查找某个数,首先应输入n,建立数组,输入n个值。然后输入待查整数,建立一个循环,从a[0]开始,若a[i]等于待查整数,则输出i,若知道a[n-1]都没找到,则输出Not found

流程图:

调试过程:

如图,没有将i=n与i!=n的情况区分开,导致出现两个结果,应在第二个输出前补上else

#同学互评

 图一为我的代码,图二为同学代码。

不同处:

1,我在子函数的命名上使用了标准的fact,二同学只是简单的用单个字母命名,我认为我这样做使得代码更明了,更容易读懂。

2,在定义结果值是,我使用了double型,而同学使用的是float型,我认为直接按照题目意思来可以避免出错,但是从长远的角度来看,本题要求使结果在double精度范围内,同学使用float型必然符合,但是若题目稍加改变,我出错的可能性比他大得多,这是他的主要优势。

3,在循环结构上,我的方式是由i=0开始,结束条件为i<n。同学的方式为从i=1开始,结束条件为i<=n。此处不同至少单纯的风格不同,并没有对错之分。按我个人观点,我认为我这样做对于后面数组题目有帮助,同样的写法可以增加自己的熟练度,从而有效地避免编写代码时造成不必要的失误。

#本周pta排名

 #本周学习总结

1,本周我学会了使用数组存储数据,数组这个概念的引入大大方便了我们编写代码,对于一组数据,在以前我们要定义相同个数的变量来存储这些数据,费时费力,而现在只要定义一个数组,在定义时写上数组长度,就可以得到所需要的多个变量。

不仅如此,数组的引入使得以前复杂的变量引用变得方便,以前很多题目无从下手,因为在不同循环过程中,无法用同一条语句去引用同类型的不同变量,于是我们要么束手无策,要么就得花大量的时间,设计更为复杂的分支,这样的程序是没有意义的。而有了数组之后,我们可以在循环里调用数组中的元素,使用循环变量来控制,从而解决了很多以前无法解决的问题。

2,本周的内容,对于用数组存储字符引申出字符串这一块我还不是很熟练,getchar和scanf存在许多区别,用scanf存储字符进入字符型数组时总会不小心把回车符一同录入,而用getchar时有觉得略显麻烦

3,(1)这次期中考试与以往的任何考试都不同,尤其是在编程题上,原本机写的程序要用笔写,在框架构造上就增大了难度,再加上无法调试,这是失分的重要原因。基础知识的薄弱是另外一个原因,选择题和改错题有很多是显而易见的,但是因为对书本上的知识掌握不足导致错选。

(2)对于这次考试的结果暂时不太满意,希望接下来的时间,能主动去课外多找写书面题目来做,毕竟课堂课后我们从来没有做过书面作业,代码固然重要,但是考试的形式是无法愉悦的鸿沟

(3)c语言是一门高深莫测的语言,比起英语它更值得我们去学习,人不一定要说英语,但却免不了接触网络,接触电脑,学好了c语言,不仅仅是对学业,对以后找工作有帮助,更重要的是,它让我们多了一项优于他人的技能,希望我能在这上面花更多的时间,尽自己所能去理解这门科目。

posted @ 2017-12-30 19:06  zzb1234  阅读(498)  评论(0编辑  收藏  举报