• 2019春季学期第四周编程总结



    实验代码:

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

    设计思路:

    出现错误及其原因:

    后面空格错误,输出数组应该在后面加空格。

    前面交换数值错误,应该找最小元素与下标为k的元素交换。
    运行结果截图:


    PS:此题在多名同学的帮助下才完成,同学们非常有耐性的帮我找出错误,非常感谢。

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

    #include<stdio.h>  
    int main()  {
          int a[10][10],n;
    	        scanf("%d",&n);      
    			int i,j;      
    			for(i=0; i<n; i++)          
    			for(j=0; j<n; j++){              
    			scanf("%d",&a[i][j]);
    			}      
    			int Rmax=0,Cmin=0,found=1,k=0;    \Rmax表示行最大值,Cmin表示列最小值,k中间变量
    		 
    			for(i=0; i<n; i++)         
    			 {           
    			    Cmin=i;       
    		     for(k=0; k<n; k++){
    			     if(a[i][Rmax]<=a[i][k]){                     
    				  Rmax=k;}              
    				  }             
    				   for(j=0; j<n; j++){                  
    				   if(a[Cmin][Rmax]>a[j][Rmax]){                     
    				Cmin=j;
    				 break; 
    				  }
    				  } 
    				   if(i==Cmin) {  
    				   found=0; 
    				    break; 
    			 }          
    			}         
    			if(found==0)              
    			printf("%d %d",i,Rmax);
    			else 
    			printf("NONE");
    		    
    			return 0; 
    			 }  
    
    

    设计思路:

    出现问题及解决办法:
    问题1:

    找了很久,和室友一起讨论,发现是在赋值给Cmin是错误, 应将“if(a[Cmin][Rmax]>=a[j][Rmax])”改为“ if(a[Cmin][Rmax]>a[j][Rmax])”,
    改正后:
    问题2:

    是输出时结果错误,,应该是将前面的字符型变量搞混淆了,于是便将前面定义的变量一一套进去试(虽然费时间,但还是解决问题了),后面输出时应该是“printf("%d %d",i,Rmax),将j换成Rmax。
    修改后运行截图:


    PS:这道题花费了我比较多的时间,代码雏形写好后,还要不断修改完善,特别是出现答案错误后,花了不少时间(差不多两小时)找错误。还询问了同学,这才解决问题。以后要在数组这方面还要多下功夫。

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

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

    NOTE:由于对冒泡排序法还不是特别了解,因此这题直接用了前面“选择排序法”的代码。23333333

    周作业小结:这周作业做得不是特别好,特别是不清楚如何将文字用程序流程图表示出来;对于冒泡排序法还要多多看视频学习学习,要多向学的好的同学请教;在以后的编码道路上要越走越得劲,还要抽时间学习前沿知识,扩大视野。

  • 相关阅读:
    两类斯特林数的整理
    SXOI2019游记
    3.13校内测试
    Python Flask 实现移动端应用接口(API)
    CentOS下实现Flask + Virtualenv + uWSGI + Nginx部署
    iOS组件化开发入门 —— 提交自己的私有库
    Runtime ----- 带你上道
    iOS核心动画以及UIView动画的介绍
    GCD中各种队列和任务执行方式的组合
    iOS消息转发机制和使用
  • 原文地址:https://www.cnblogs.com/ImportantMagic/p/10575310.html
Copyright © 2020-2023  润新知