• 2019 第四周作业


    2019春季第四周作业

    这个作业属于哪个课程 C语言程序设计ll
    这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/2774)
    我在这个课程的目标是 希望能多了解数组的算法,以后碰见类似的题目时能够不出错误的做出来
    这个作业在哪个具体方面帮助我实现目标 这个作业让我大概了解了选择排序法和冒泡排序法,并且对数组有了更深入的了解
    参考文献 https://blog.csdn.net/bruno231/article/details/6668024)

    一、 选择法排序

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

    输入格式:

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

    输出格式:

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

    输入样例:

    4
    5 1 7 6
    

    输出样例:

    7 6 5 1
    

    (1)实验代码

    #include<stdio.h>
    int main(void)
    {
    	int i,k,n,temp,index; 
    	int a[10];
    	char op=' ';
    	
    	scanf("%d",&n);
    	for(i=0;i<n;i++)       //将输入数依次赋给数组a的n个元素a[0]~a[n-1] 
    		scanf("%d",&a[i]);
    	for(k=0;k<n-1;k++)     //对n个数排序
    	{
    		index=k;            //index存放最小值所在的下标 
    		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++)        //输出n个数组元素的值 
    	{
    		printf("%c%d",op,a[i]);
    	}
    	printf("
    ");
    	
    	return 0;
     } 
    

    (2)设计思路

    (3)本题调试过程中碰到问题及解决方法

    问题1:没有注意空格输出的格式,导致提交作业的时候格式错误
    解决方法:定义了一个空格字符之后格式就对了

    问题2:按照书上的写法,定义空格字符之后,在运行结果之前多一个空格
    解决方法:在对数进行排序之后先输出数组a[0]

    (4)运行结果截图

    二、找鞍点

    一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。
    本题要求编写程序,求一个给定的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
    

    (1)实验代码

    #include<stdio.h>
    int main(void)
    {
    	int n,i,j,x,y,t,z;
    	int a[6][6];
    	
    	scanf("%d",&n);
    	for(i=0;i<n;i++)
    	{
    		for(j=0;j<n;j++)
    		{
    			scanf("%d",&a[i][j]);
    		}
    	}
    	x=y=z=0;
    	t=1;
    	for(i=0;i<n;i++)          
    	{
    		z=i;
    		for(y=0;y<n;y++)     //找行最大值
    		{
    			if(a[i][x]<=a[i][y])  //数组元素之间比较,若比a[i][x]大,则将数组列标赋给x
    		    {
    			   x=y;
    		    } 
    		}
            for(j=0;j<n;j++)        //判断是否为列最小值
            {
             	if(a[z][x]>a[j][x]) //若此行最大值不是列所在最小值,把小的行标赋给z
             	{
             		z=j;
             		break;
    			 }	
    		}
    		if(i==z)         //行最大且列最小,判断条件行标不改变
    		{
    			t=0;
    			break;
    		}
    	}
        if(t==0)
    	{
            printf("%d %d",i,x);
    	}
        else
        {
        	printf("NONE");
    	}    
    	
    	return 0;
     } 
    

    (2)设计思路

    (3)本题调试过程中遇到的问题及解决方法

    问题1:判断大小的时候搞反了符号,导致一直编译错误
    解决方法:一直运行还是没发现哪里错误,后来问的同学

    问题2:定义的变量有点多,赋值赋错了,导致头都被绕晕了
    解决方法:一个一个的检查,找到赋值错误的变量

    问题3:整个题思路不太清晰
    解决方法:对照书上的例题改写的

    (4)运行结果截图

    三、挑战题--冒泡法排序

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

    输入格式:

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

    输出格式:

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

    输入样例:

    4 
    75 71 77 76
    

    输出样例:

    77 76 75 71
    

    (1)实验代码

    #include<stdio.h>
    int main(void)
    {
    	int i,k,n,temp;
    	int a[10];
    	char op=' ';
    	
    	scanf("%d",&n);
    	for(i=0;i<n;i++)       //将输入数依次赋给数组a的n个元素a[0]~a[n-1] 
    	{
    		scanf("%d",&a[i]);
    	}
    	for(k=0;k<n-1;k++)     //对n个数排序
    	{
    		for(i=k+1;i<n;i++) 
    		{
    			if(a[i] > a[k])
    			{
    			    temp=a[i];
    			    a[i]=a[k];
    			    a[k]=temp;
    	    	}
    		}
    	} 
    	printf("%d",a[0]);
    	for(i=1;i<n;i++)        //输出n个数组元素的值 
    	{
    		printf("%c%d",op,a[i]);
    	}
    	printf("
    ");
    	
    	return 0;
     } 
    

    (2)设计思路

    (3)本题调试过程中遇到的问题及解决方法

    问题1:按照书上的写法在数字对换的过程中,7和6的位置总是反的
    解决方法:把for语句中的变量换了,让数字直接对换就对了

    问题2:不太清楚选择排序法和冒泡排序法的区别
    解决方法:查了资料,然后搜了百度,现在了解了一点

    (4)运行结果截图

    四、学习进度条

    周/日期 这周所花的时间 代码行数 学到的知识点简介 目前比较迷惑的问题
    2/25-3/3 三天 45 数组的认识及用法 数组长度的理解
    3/4-3/10 两天 37 编写程序时处理文件 fscanf与fprintf的具体用法
    3/11-3/17 三天 112 二维数组的使用及文件插入 二维数组的用法、上三角的判断及文件的处理
    3/18-3/24 两天 113 选择排序法、二分查找法、二维数组的引用与矩阵 不清楚选择排序法和冒泡排序法的区别

    五、学习感悟

    本周学习了:
    一维数组:选择排序法、二分查找法,老师提了一下冒泡排序法
    二维数组:定义、引用、初始化,二维数组与矩阵
    目前对选择排序法和冒泡排序法的区别比较疑惑

    感悟:冰冻三尺非一日之寒!

  • 相关阅读:
    Memcached: 目录
    Memcached: temple
    Redis: Redis支持五种数据类型
    互联网市场
    java实现猜生日
    java实现汉诺塔计数
    java实现汉诺塔计数
    java实现汉诺塔计数
    java实现汉诺塔计数
    java实现汉诺塔计数
  • 原文地址:https://www.cnblogs.com/zmzhang/p/10571950.html
Copyright © 2020-2023  润新知