|这个作业属于哪个课程| C语言程序设计II |
| -------- | -----: | :----: |
|这个作业要求在哪里|[2019年春季学期第四周作业](https://edu.cnblogs.com/campus/zswxy/software-engineering-class1-2018/homework/)|
|我在这个课程的目标是| 我希望通过学习能提高对数组的熟练度|
|这个作业在哪个具体方面帮我实现目标|让我知道了多个排序法的运用|
|参考文献|课本C语言程序设计II |
7-1 找鞍点
1).实验代码
#include<stdio.h>
int main()
{
int a[6][6];
int n,i,j,x,y,k,max,min,flag=0;
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
for(i=0;i<n;i++) //扫描所有的行
{
max=a[i][0]; y=0; //首元素先作为行上“最大”的数
for(k=1;k<n;k++)
if(max<=a[i][k]) //找出行上的最大值
{
max=a[i][k];
}
for(j=1;j<n;j++)
if(max==a[i][j]) //检查行上最大值的列
{
y=j; //记录本行上最大的数,及其列号y
min=a[i][y]; //把a[i][y]当作y列上最小的数
for(k=0;k<n;k++) //找出y列上最小的数及所在的列号
if(min>=a[k][y]) //等于号出现相同的两个数都为最小值(最大值)
{
x=k;
min=a[k][y];
}
if(min==max) //找到一个鞍点
{
printf("%d %d",x,y);
flag=1;
}
}
}
if(flag==0)
printf("NONE");
return 0;
}
2).设计思路
3).本题遇到的困难
解决方法:未考虑n=1的情况和一行或一列出现相同的数字为最大值或最小值
4).程序运行截图
7-2 选择法排序
1).实验代码
#include <stdio.h>
int main(void)
{
int a[10];
int i,n,index,k,t;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(k=0;k<n-1;k++)
{
index = k;
for(i=k+1;i<n;i++)
if(a[i]>a[index]) index=i;
t=a[index];
a[index]=a[k];
a[k]=t;
}
printf("%d",a[0]);
for(i=1;i<n;i++)
printf(" %d",a[i]);
return 0;
}
2).设计思路
3).本题遇到的问题
解决方法:pta的格式出错,需要仔细仔细再仔细
4).程序运行截图
7-1 冒泡法排序
1).实验代码
#include<stdio.h>
int main(void)
{
int i,k,n,temp,index;
int a[10];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(k=0;k<n-1;k++)
{
index=k;
for(i=k+1;i<n;i++)
if(a[i] > a[index])
index=i;
temp=a[index];
a[index]=a[k];
a[k]=temp;
}
printf("%d",a[0]);
for(i=1;i<n;i++)
{
printf(" %d",a[i]);
}
return 0;
}
2).设计思路
3).本题遇到的错误
把空格当成了
导致了格式错误
大问题没有
4).程序运行截图