大一第四周

课程:C语言程序设计II
作业要求:19大一下期四周
课程目标:能够独立进行简单程序编辑,团队进行较大型程序设计
作业目标:对数组进一步加深了解
参考文献:C语言程序设计II

7-2 选择法排序 (20 分)

本题要求将给定的n个整数从大到小排序后输出。

输入格式:
输入第一行给出一个不超过10的正整数n。第二行给出n个整数,其间以空格分隔。

输出格式:
在一行中输出从大到小有序的数列,相邻数字间有一个空格,行末不得有多余空格。

程序

#include<stdio.h>
int main()
{
	int a[10],n,i,b,c;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	}
	for(i=0;i<n;i++)
	{
		for(b=i;b<n;b++)
		{
			if(a[i]<a[b])
			{
				c=a[i];
				a[i]=a[b];
				a[b]=c;
			}
		}
	}
	for(i=0;i<n;i++)
	{
		printf("%d",a[i]);
		if(i!=n-1) 
		printf(" ");
	}
 } 

设计思路

在数组中第一个数和后面的数依次比较大小如大于第一位则交换,然后进行第二个数和后面的数依次比较大小如大于第二位则交换……直至最后一位。

3)本题调试过程碰到问题及解决办法

简单,常用的排序方式但输入空格的方式的确无语了,没有想到其他方法,就简单粗暴以判断方式输出

4).运行结果截图

7-1 找鞍点 (20 分)

一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。

本题要求编写程序,求一个给定的n阶方阵的鞍点。

输入格式:
输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。

输出格式:
输出在一行中按照“行下标 列下标”(下标从0开始)的格式输出鞍点的位置。如果鞍点不存在,则输出“NONE”。题目保证给出的矩阵至多存在一个鞍点。

程序

#include<stdio.h>
int main()
{
	int a[6][6],j,k,n,b,i,c,d=0;//数组、行、列、 
	
	scanf("%d",&n);
	
	for(j=0;j<n;j++)
	{
		for(k=0;k<n;k++)
		{
			scanf("%d",&a[j][k]);
		}
	 } 
	 
	 
	for(j=0;j<n;j++)
	{
		b=a[j][0];
		for(k=0;k<n;k++)
		{
			if(a[j][k]>=b)
			{
				b=a[j][k];
				c=k;
			}
		}
		for(i=0;i<n;i++)
		{
			if(a[i][c]<b)
			{
				break;
			}
			if(i==n-1)
			{
				printf("%d %d",j,c);
				d=1;
			}
		}
	}
	 if(d==0)
	 printf("NONE");
}
 } 

设计思路

在数组中首先找到最大值然后在列中比较判断是否为最小值

3)本题调试过程碰到问题及解决办法

这道题有bug,在一行中有相同的数且有鞍点而且不是最后一个相同为鞍点的时候就会错误

3
8 8 8
9 9 9
7 9 7
NONE
--------------------------------
Process exited after 23.66 seconds with return value 0
请按任意键继续. . .

因为时间问题并未写出代码,但可以对每一行中相等的数进行特定比较,虽然会增加步骤但不会错

4).运行结果截图

挑战作业

7-1 冒泡法排序 (10 分)
输入1个正整数n(1<=n<=10),然后输入n个整数并存放在数组中,将这n个整数从大到小排序后输出,相邻数字间有一个空格,行末不得有多余空格。

输入格式:
输入第一行给出一个不超过10的正整数n。第二行给出n个整数,其间以空格分隔。

输出格式:
在一行中输出从大到小有序的数列,相邻数字间有一个空格,行末不得有多余空格

程序

#include<stdio.h>
int main()
{
	int i,j,k,n;
	scanf("%d",&n);
	int a[n]; 
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	}
	for(k=0;k<n;k++)
	{
		for(i=0;i<n-k-1;i++)
		{
			if(a[i+1]>a[i])
			{
				j=a[i];
				a[i]=a[i+1];
				a[i+1]=j;
			}
		}
	}
	for(i=0;i<n;i++)
	{
		printf("%d",a[i]);
		if(i!=n-1)
       printf(" ");
	}
}

设计思路

第一个和第二个比,再第二个和第三个比……然后第二个和第三个比……

3)本题调试过程碰到问题及解决办法

较简单

4).运行结果截图

5).本题用时3小时30分钟,30用与写与调试,3小时阅读思考

周/日期 这周所花的时间 代码行 学到的知识点简介 目前比较迷惑的问题
3/2-3/8 3天 300 指针、文件、数组 getchar()不知道
3/9-3/13 2天 200 指针 文件
3/13-3/22 3天 300 数组 对代码高效性欠缺 -

posted on 2019-03-22 21:07  凯*凯  阅读(147)  评论(2编辑  收藏  举报

导航