第14、15教学周作业
题目 交换最小值和最大值
1.实验代码
#include<stdio.h>
#define N 10
int main()
{
int a[N];
int i,n,max,min,j,m1,m2,c1,c2,k;
scanf("%d",&n);
for(i=0;i<n;i++)
{scanf("%d",&a[i]);
if(i==0)
{max=a[i];
m1=0;}
if(a[i]>max)
{ max=a[i];
m1=i;
}}
c1=max;
a[m1]=a[n-1];
a[n-1]=max;
for(k=0;k<n;k++)
{
if(k==0)
{min=a[k];
m2=0;}
if(a[k]<min)
{ min=a[k];
m2=k;
}}
c2=min;
a[m2]=a[0];
a[0]=c2;
for(j=0;j<n;j++)
{
printf("%d ",a[j]);
}
return 0;
}
2 设计思路
(1)主要描述题目算法
第一步:用循环语句找出最大值
第二步:设立第三值使最大值和目标交换
第三步:在排好序的数字序列中找到最小值
第四步:重复1,2步
第五步:输出排好的序列
(2)流程图
3.本题调试过程碰到问题及解决办法
一开始直接找出最大最小值,发现会产生交换已交换的数。经过思考修改思路,解决问题。
题目 数组元素循环右移问题
1.实验代码
#include <stdio.h>
int main()
{
const int N=100;
int k,c=0,i=0,n,m,j,b=0,y;
int a[N];
scanf("%d %d",&n,&m);
y=m%n;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(j=0;j<n;j++)
{ if(j+y+1>n)
{
printf("%d",a[j]);
c++;
if(c<n)
{printf(" ");
}
}
}
for(k=0;k<n-y;k++)
{printf("%d",a[k]);;
if(k<n-y-1)
{printf(" ");
}
}
return 0;
}
2 设计思路
(1)主要描述题目算法
第一步:定义数组,并根据输入的n值给数组赋值。
第二步:通过改变数字的输出顺序做到向右移动。
(2)流程图
3.本题调试过程碰到问题及解决办法
一开始尝试过交换数组中各个数字的位置,无果。后更改思路,解决问题。
题目 冒泡法排序
1.实验代码
#include <stdio.h>
#define N 100
int main()
{
int a[N];
int i,j,n,c,k,l,b;
scanf("%d %d",&n,&k);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(l=0;l<k;l++)
{
for(j=0;j<n-1-l;j++)
{
if(a[j]>a[j+1])
{
c=a[j];
a[j]=a[j+1];
a[j+1]=c;
}
}
}
for(b=0;b<n;b++)
{printf("%d",a[b]);
if(b<n-1)
{printf(" ");
}
}
2 设计思路
(1)主要描述题目算法
第一步:定义数组。
第二步:初始化数组。
第三步:冒泡排序。
第四步:依次输出。
(2)流程图
3.本题调试过程碰到问题及解决办法
解题过程遗忘循环条件,列出本题,希望自己多牢记。
git地址
https://git.coding.net/Donahue_Xu/14-and-15-Homework.git
截图
本周学习内容
(1)本周你学习了哪些内容?收获了什么?
一维数组,二维数组的定义及其使用时的注意事项。数组的运用方法(冒泡排序法,选择排序法等)。
(2)本周所学内容中你觉得哪些是难点?有哪些知识点还不明白?
实际运用中缺少方法,难题中缺少解题思路,无法很好运用。
点评同学
刘炜旗:http://www.cnblogs.com/ryo-/p/7927967.html
赵寅胜:http://www.cnblogs.com/2017023960ZYS/p/7966581.html
史泽文:http://www.cnblogs.com/shilcz/p/7967522.html
点评截图
1.
2.
3.
表格
折线图