zoukankan      html  css  js  c++  java
  • 2019年大一下学期第四周作业编程总结

    7-1 找鞍点 (20 分)
    一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。
    本题要求编写程序,求一个给定的n阶方阵的鞍点。
    输入格式:
    输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。
    输出格式:
    输出在一行中按照“行下标 列下标”(下标从0开始)的格式输出鞍点的位置。如果鞍点不存在,则输出“NONE”。题目保证给出的矩阵至多存在一个鞍点。

    一,实验代码:

    #include<stdio.h>
    int main()
    {
    	int i,I,j,J,N,value[6][6],a[6],max[6],min[6],index=0,point=0;
    	
    	scanf("%d",&N);
    	for(i=0;i<=N-1;i++) //用来输入行 
    	{
    		for(I=0;I<=N-1;I++) //用来控制列 
    		{
    			scanf("%d",&value[i][I]); 
    			a[I]=value[i][I];
    			if(i==0)
    				min[I]=a[I];
    		}
    		max[i]=a[index];
    		for(I=0;I<=N-1;I++) //找当前行最大的数 
    		{
    			if(a[index]<a[I])
    			{
    				max[i]=a[I];
    				index=I;
    			}	
    		}
    		for(j=0;j<=N-1;j++) //找当前每列最小值 
    		{
    			if(min[j]>a[j])
    			{
    				min[j]=a[j];
    			}
    		} 
    		index=0;
    	}
    	for(I=0;I<N;I++) //比较最大值与最小值 
    	{
    		for(i=0;i<N;i++)
    		{
    			if(max[I]==min[i])
    			{
    				printf("%d %d",I,i); //相等则输出下标 
    				point++;
    			}		
    		}	
    	} 
    	if(point==0)
    		printf("NONE");
    	
    	return 0;
    }
    

    二,设计思路:

    大致思路是先输入一行数,然后开始找这一行的最大值和每列当前的最小值。
    

    代码分为四部分,第一部分为6-15行,用来输入一行数。第二部分为16-24行,用来找这一行的最大值,最大值保存在max数组中。第三部分为25-32行。用来找当前每列的最小值,最小值保存在min数组中。第四部分为34-46行。用来寻找max数组与min数组中相等的数,若有,则这个数为鞍点,并输出坐标;若无,则无鞍点,输出‘NONE’。
    以下为流程图:

    三,调试时遇到的问题及解决方案:

    如何找每列的最小值?
    一开始我有两种思路,第一种是在矩阵输入完整后,建立一个两层嵌套循环,外循环控制列,内循环控制行,从第0列第0个开始逐个向下比较,将最小值保存到min数组中,比完N-1次就换列,直到第N列第N行。第二种是每输入完一行就开始找当前每列的最小值。而我实际使用的是第二种,因为代码较第一种更简单。如下:
    
    for(j=0;j<=N-1;j++) //j表示列
    		{
    			if(min[j]>a[j])
    			{
    				min[j]=a[j];//替换min数组与a数组中的值
    			}
    		} 
    

    min数组需要初始化,所以在第13,14行用来初始化min数组,这里a数组用来保存当前循环输入的行的数。我们只需要比较a数组的数与min数组中的数即可,若小于就需要替换min数组中的值,反之则不需要。

    四,运行结果截图:

    7-2 选择法排序 (20 分)
    本题要求将给定的n个整数从大到小排序后输出。
    输入格式:
    输入第一行给出一个不超过10的正整数n。第二行给出n个整数,其间以空格分隔。
    输出格式:
    在一行中输出从大到小有序的数列,相邻数字间有一个空格,行末不得有多余空格。

    一,实验代码:

    #include<stdio.h>
    int main()
    {
    	int N,i,j,value[10],t;
    	scanf("%d",&N);
    	for(i=0;i<N;i++) //输入整数于数组中 
    	{
    		scanf("%d",&value[i]);
    	}
    	for(i=0;i<N;i++) //控制比较数的位置 
    	{
    		for(j=0;j<N;j++) //控制被比较数的位置 
    		{
    			if(value[i]>value[j]) //大于则将大值的位置调至前面 
    			{
    				t=value[i];
    				value[i]=value[j];
    				value[j]=t;
    			}
    		}
    	} 
    	for(i=0;i<N;i++) 
    	{
    		printf("%d",value[i]); //按顺序输出调整完后的数组 
    		if(i<N-1)
    			printf(" ");
    	}
    	
    	return 0;
    }
    

    二,设计思路:

    我的思路是先将数组中0位置的数与1到N-1位置的数相比较,如果遇到小于的数就将该位置的数与0位置的数交换,比较完第一轮后,就再从1位置的数开始与之后位置的比较,此时0位置的数不参加比较,以此类推,直到比完为止,我们就得到一个从大到小顺序的数组。
    以下为流程图:
    

    三,调试过程遇到的问题及解决方案:

    这题比较简单,调试时没有语法错误和逻辑错误,基本上一次过。
    

    四,运行结果截图:

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

    一,实验代码:

    #include<stdio.h>
    int main (void)
    {
    	int n,a[10];
    	int i,j,t;
    	
    	scanf("%d",&n);
    	for(i=0;i<n;i++)  //输入数组 
    	{
    		scanf("%d",&a[i]);
    	}  
    	for(i=0;i<n;i++) //控制比较的轮数 
    	{
    		for(j=0;j<n-1;j++) //控制相邻数的比较 
    		{
    			if(a[j]<a[j+1]) //前一位小于后一位,交换位置 
    			{
    				t=a[j];
    				a[j]=a[j+1];
    				a[j+1]=t;
    			}
    		}
    	} 
    	for(j=0;j<n;j++) //按顺序输出调整后的数组 
    	{
    		printf("%d",a[j]);
    	    if(j<n-1) //防止最后一位输出空格 
    	    printf(" "); 
    			
    	} 
    	
    	return 0; 
    }
    

    二,设计思路:

    冒泡排序法的思路就是让相邻的数进行比较,将大的数调到前面,小的调到后面,然后再用小的与后一位相邻的比较,以此类推。如:2,3,1,4 先让2与3比较,3>2,交换位置,数组变为3,2,1,4 再让2与1比较,2>1,不换,再用1与4比较,交换,数组变为3,2,4,1。至此,第一轮比完,进行第二轮……。
    以下为流程图:
    

    三,调试时遇到的问题及解决方案:

    这题思路与上题相似,且比较简单,所以暂无问题。
    

    四,运行结果截图:

    作业时间:

    题目 完成时间
    选择排序法 大约一小时
    找鞍点 两小时三十分钟
    冒泡排序法 三十分钟
    总计 四小时
  • 相关阅读:
    虚拟目录的配置
    php7.0.24-nts配置步骤
    什么是PHP
    网络篇-NSURLSessionDownloadTask上传
    网络篇-NSURLConnection原生上传
    网络篇-NSURLConnection进度下载
    网络篇-NSURLSessionDownloadTask进度下载(续上节)
    网络篇-NSURLSession介绍
    网络篇-解析XML
    多线程篇-RunLoop
  • 原文地址:https://www.cnblogs.com/noacgnnolife/p/10580498.html
Copyright © 2011-2022 走看看