第十四,十五周作业
Posted 张乐五班
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第十四,十五周作业相关的知识,希望对你有一定的参考价值。
题目一:求任意10个整数中的偶数的和。
1.实验代码
#include<stdio.h> int main() { int i,sum=0; int a[10]; for(i = 0;i < 10;i++) { scanf("%d" , &a[i]); } for(i = 0;i < 10;i++) { if(a[i]%2==0){ sum=sum+a[i];} } printf("s=%d",sum); return 0; }
2.设计思路
(1)主要描述题目算法
第一步:本题要求十个数组中的偶数和,首先要定义一个数值为十的数组a[10],然后还要定义一个循环所需的变量i,以及所求的偶数和sum。
第二步:利用for循环实现十个数组的输入,如果某个数组除以二取余为零,则证明其为偶数,进行累加。
第三步:当i大于10后结束循环,输出sum的值。
(2)流程图
3.本题调试过程碰到问题及解决办法
本题在设计思路上并没有什么问题,只在编译时出现了一些小的失误,通过错误提示改正。
4.本题PTA提交列表
题目二输出小于均值的数
1.实验代码
#include<stdio.h> int main() { int i,sum=0; int a[10]; double average; for(i = 0;i < 10;i++) { scanf("%d" , &a[i]); sum=sum+a[i]; } average=sum/10; for(i = 0;i < 10;i++) { if(a[i]<average) printf("%d ",a[i]); } printf("\n"); return 0; }
2.设计思路
(1)主要描述题目算法
第一步:本题要求输入10个整数,计算这些数的平均值,再输出所有小于平均值的数。
第二步:先定义一个数值为十的数组a[10],再定义一个循环所需的变量i,以及一个数组和sum和平均数average。
第三步:利用for循环实现数组的输入以及和的累加计算出平均数。
第四步:如果某个数大于平均数就进行输出。注意输出的格式每个数字后面必须有一个空格,即“%d "。
(2)流程图
3.本题调试过程碰到问题及解决办法
本题和老师在课上讲的才不多,我觉得将两个for循环并到一起写应该没什么影响,但提交后显示答案错误。通过调试发现平均数是不能进入循环的,所以必须使用两个for循环。
4.本题PTA提交列表
题目三 将数组中的数逆序存放
1.实验代码
#include <stdio.h> int main() { int i,n,t,a[10]; scanf("%d", &n); for (i= 0;i<n;i++) scanf("%d",&a[i]); for (i=0; i<n/2;i++) { t=a[i]; a[i]=a[n-1-i]; a[n-1-i]=t; } for (i=0;i<n-1;i++) printf("%d ",a[i]); printf("%d\n",a[n-1]); return 0; }
2.设计思路
(1)主要描述题目算法
第一步:本题将给定的n个整数存入数组中,将数组中的这n个数逆序存放,再按顺序输出数组中的元素。
第二步:先定义一个循环所需的变量i,输入数值的个数n,以及一个替换变量x。再定义一个大小为10的数组a[10]。
第三步:先利用for输出所有的数组,在利用for循环对原数组进行逆序存放,此循环作用是将对称的元素的值互换,然后按要求输出所有的数组。
注:要求行末不得有多余空格,所以在输出最后一个数组的时候应该以printf("%d",a[n-1])这种情况输出。
(2)流程图
3.本题调试过程碰到问题及解决办法
本题开始没有注意到输出的格式没有考虑到最后没有空格的情况。
4.本题PTA提交列表
题目四fibonacci数列
1.实验代码
#include <stdio.h> int main( ) { int i; int a[12]={1, 1}; printf ("%6d",a[0]); printf ("%6d",a[1]); for (i=2;i<12;i++) { a[i]=a[i-2]+a[i-1]; printf ("%6d",a[i]); if ((i+1)%3==0) { printf ("\n");} } return 0; }
2.设计思路
(1)主要描述题目算法
第一步:本题要求用数组计算fibonacci数列的前12个数,并按每行打印3个数的格式输出。即前两个数相加得第三个数。
第二步:先定义一个数值为十二的数组,给出前两个数的数值,再定义一个循环所需的变量i。
第三步:利用for循环依次算出十二个数值,注意:因为前两个数值的大小已经给出,所以i要从2开始。
第四步:本题要求使用%6d的格式输出,所以输出格式为“%6d"。
第五步:要求在输出最后一个数字后,有一个换行,所以i加1等于数组的个数后进行除3取余,实现三个数换行。
(2)流程图
3.本题调试过程碰到问题及解决办法
本题和老师讲的基本一样,只是更改了每行的个数,只在编译上出了点小问题,看错了每行的个数以及误将for循环中的分号打成了句号。
4.本题PTA提交列表
题目五 求最大值及其下标
1.实验代码
#include<stdio.h> int main() { int n,i,index; scanf("%d",&n); int a[n]; for(i=0;i<n;i++) { scanf("%d ",&a[i]); } index=0; for(i=1;i<n;i++) { if(a[i]>a[index]){index=i;} } printf("%d %d",a[index],index); return 0; }
2.设计思路
(1)主要描述题目算法
第一步:本题要求在给出的n个数中找到最大值及其下标。
第二步:先定义出所需的字符,i代表循环所需的变量,index代表下标,max代表最大值,n代表输入数值的个数。同时还要定义一个数组a[N],按要求N最大为10。
第三步:首先利用for循环输入所有的数组值,然后假设a[0]为最大值,其下标也为0。
第四步:将所有的数组与最大值max比较大小,如果给出的数组a[i]比max大,就进行交换,使max永远保持最大,利用for循环实现所有数组的比较。
第五步:按要求输出最终的结果。
(2)流程图
3.本题调试过程碰到问题及解决办法
本题在思路上还是比较清晰的,出现了一些小的问题,在编译上还是会粗心丢三落四的,没有注意到输出方式。
4.本题PTA提交列表
题目六 题目七 选择法排序
1.实验代码
#include<stdio.h> int main() { int i,k,a[10],n,temp,max; scanf("%d",&n); for(i=0;i<n;i++){ scanf("%d",&a[i]); } for(k=0;k<n-1;k++){ max=k; for(i=k+1;i<n;i++) if(a[max]<a[i]) max=i; temp=a[max]; a[max]=a[k]; a[k]=temp; } for(i=0;i<n;i++){ if(i+1==n) printf("%d",a[i]); else printf("%d ",a[i]); } return 0; }
2.设计思路
(1)主要描述题目算法
第一步:本题要求将给定的n个整数从大到小排序后输出。
第二步:先定义编译所需的变量,循环所需的变量i,t,数组a[10],输入的数组个数N以及交换大小的变量t。
第三步:利用for循环输入所有的数组。假设最大值的下标max=k,利用for循环,如果最大值a[max]小于数组a[i],就进行交换,让max=i,将最大值换给a[k],直到完成所有的排序结束循环。
第四步:本题要求行末不得有多余空格,所以最后一个值的输出格式应为 printf("%d ",a[i])。
(2)流程图
3.本题调试过程碰到问题及解决办法
本题先按照老师上课时讲的打出了一部分,但是后续的就不会打了,对一些循环的条件的意义有些不理解,通过百度进行逐句地解释,再通过不断的调试,然后解决了本道题
4.本题PTA提交列表
题目八 求矩阵各行元素之和
1.实验代码
#include <stdio.h> #define M 10 #define N 10 int main() { int a[M][N]; int sum[M]; int m,n,i,j; scanf("%d %d",&m,&n); for(i=0;i<m;i++) { sum[i]=0; for(j=0;j<n;j++) { scanf("%d",&a[i][j]); sum[i]+=a[i][j]; } } for(i=0;i<m;i++) { printf("%d\n",sum[i]); } return 0; }
2.设计思路
(1)主要描述题目算法
第一步:本题要求矩阵各行元素之和,要将每行的两个数相加求和,再依次输出。
第二步:先定义此数组有m行n列,再定义循环所需的变量为i,j,所求的和为sum,初始值为0。定义矩阵数组为a[m][n]。
第三步:利用for的双层循环输入矩阵数组的所有值。外循环代表行,内循环代表列。
第四步:再利用for的双层循环依次求出每行的和。
(2)流程图
3.本题调试过程碰到问题及解决办法
4.本题PTA提交列表
【2】
1.git地址:
2.git截图:
【3】
个人总结
(1)学习内容:近两周,先学习了数组。这其中包括什么是数组,如何使用,定义数组,二位数组的元素的存放方式。之后通过数组延伸到排序问题,最为经典的是冒泡排序。还学习了矩阵相关的一些编译问题。变换各种题型进行了练习。
收获:除了对新学的知识有所收获以外,对编程有了更深的认识。感觉编程很神奇,不同的代码可以编译成不同的东西,千变万化,值得去探究。
(2)难点:我觉得选择排序以及冒泡排序比较难,过程很复杂,利用for的双层循环加大了理解难度。
不明白:对于冒泡排序理解的还是不透彻,有些循环的概念有一些模糊。
互评和学习进度:
点评作业:
表格及折线图
1.表格
以上是关于第十四,十五周作业的主要内容,如果未能解决你的问题,请参考以下文章