• 第四周编程总结


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

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

    1)设计思路:
    第一步:引用头文件,定义自己需要的整数型变量;
    第二步:用for语句把数据输入进去,
    第三步:就是开始寻找最大值,从第一个开始找到最后;
    第四步:依次进行寻找之后,进行储存数据,最后进行输出排序;
    流程图:

    2)遇到的问题:
    一开始根据书本上的,把寻找最大值弄成了找最小值,结果导致了有错误出现,经过多次的查找才找出这个错误,因为
    赋值语句比较,所以搞混淆了;
    3)解决方法:
    出现了答案错误之后就去编译器进行调试,通过查看变量,最后发现了是一开始把最小值弄出来了;
    导致了一开始就出现6,之后就又对了,所以调试后就发现了;
    4)正确和错误截图:

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

    1)实验代码:

    int main()
    {
    	int i,j,n,a[6][6],max[6],min[6],point=0;
    	int m=0,k=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++)
       {
                for(m=0;m<n;m++) 
                {
                    if(a[i][k]<=a[i][m])
                    {
                        k=m;
                        max[i]=a[i][m];
                        k=m;
                    }
                }
    	}
    	m=0; 
    	for(j=0; j<n; j++)
        {
            	for(i=0;i<n;i++)
    			{
    				if(a[i][j]<=a[m][j])
            		{
            			min[j]=a[i][j];
            			m=i;
    				}
    			}
        }
    	for(i=0;i<n;i++)
    	{
    		for(j=0;j<n;j++)
    		{
    			if(max[i]==min[j])
    				{
    					printf("%d %d",i,j);
    					point++;
    				}
    		}
    	}
    	if(point==0)
    		printf("NONE");
    	return 0;
    }
    

    2)设计思路:
    第一步:应用头文件,定义自己需要的数组以及其他整形变量;
    第二步:按行列进行数组数据的输入,
    第三步:用两个for语句控制行列,找出每一行中的最大值;
    第四步:同样的用两个for语句,找出每一列中的最小值;
    第五步:再把找出来的最大值和最小值放入数组中,看这两个值是否同时满足题目要求;最后输出行列;
    3)流程图:

    3)遇到的问题:
    一开始看这个题目经过理解之后很快就找到了这个思路,然后再写完代码之后发现找不出鞍点,经过了多次尝试之后还是找不出错误的原因,
    因为是结对编程,所以用了另外一种思路,找出行的最大值之后,记下列,然后再看这个数是不是列的最小值,最后发现这个好像看似简单
    但是操作比较复杂,容易搞混淆,所以就坚持了第一种方法,经过同学和助教的帮助,最后是输出结果的判断条件错误;
    4)解决方法:
    一开始通过调试的方法去看最大值和最小值是否正确,经过无数次的调试和修正终于把最大值和最小值找出来了,再同学的帮助和提示下发现了
    最后判断条件错误,经过修正后,结果正确;
    5)截图:

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

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

    2)设计思路:
    第一步:引用头文件,并且用bubble()函数;
    bubble()函数是实现数组元素的的排序。它有两个形参,a是等待数组排序的整形数组名,n是指明数组a待处理的数组元素的数量。
    第二步:用for语句循环找出最大值;输出结果;
    3)流程图

    4)遇到的问题:
    这个题目和选择排序法类似,况且书本上也有类似的题目,虽然没学但是不是太难;在这个过程中把找最大值弄成了找最小值:
    5)解决方法:
    答案错误,我就去编译器运行,刚开始还是没有发现这个问题,最后看了输出提示之后才发现,弄反了;
    6)截图:

    心得:
    这一周的学习是老师上课说的二维数组的练习,二维数组和一维数组差不多,就是在输入输出方面差不多,有差别的地方就是,
    二维数组要同时控制行列,在进行判断方面也要复杂一点点,在这一周的编程过程中,发现了自己对赋值数据不是很清楚,很容易
    弄混淆,同时在二维数组条件判断中也存在不足,还有就是编程过程中细节主要有了提高,但是省题还需要加强;
    这一周所花的时间就是每天晚上九点到十一点半,不懂的地方就是二维数组的应用和条件的处理;

  • 相关阅读:
    reStructuredText学习
    PYTHON编码处理-str与Unicode的区别
    如何参与一个GitHub开源项目?
    Boost库编译安装
    git push失败the remote end hung up unexpectedly
    VBox虚拟机安装debian
    debian设置英文模式
    python 使用json.dumps() 的indent 参数添加缩进空格数,格式化字符串后输出
    unittest之装饰器 @classmethod
    jmeter正则提取信息头数据
  • 原文地址:https://www.cnblogs.com/lyl68/p/10580461.html
Copyright © 2020-2023  润新知