2019春季学期第四周作业

2019春季学期第四周作业


这个作业属于那个课程 C语言程序设计Ⅰ
这次作业要求在哪里 2019春季学期第四周作业
我在这个课程的目标是 我希望能够更加掌握循环和排序
参考文献

选择法排序

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

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

输出格式

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

输入样式

4
5 1 7 6

输出样例

7 6 5 1

1. 代码块

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

2. 设计思路(流程图)

3.有对自己作业的评价

存在问题和解决办法:
这次作业是书上一样的,所以问题不大。主要因为老师在课堂上讲解了
心得:
让我学会了选择排序法。

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()
{
	int n,i,j,k,index1,index2;
	scanf("%d",&n);
	int a[n][n],flag=0;
	for(i=0;i<n;i++){
        for(j=0;j<n;j++){
            scanf("%d",&a[i][j]);
        }
    }
    index1=index2=0;
      for(i=0;i<n;i++)
      {
        index2=i;
        for(k=0;k<n;k++) 
        {
            if(a[i][index1]<=a[i][k])
            {
                index1=k;
            }
        }
        for(j=0;j<n;j++)
        {
            if(a[index2][index1]>a[j][index1])
            {
                index2=j;
                break;
            }
        }
        if(i==index2)
        {
            flag=1;
            break;
        }
      }
    
      if(flag!=0)
         printf("%d %d",i,index1);
     else 
        printf("NONE");

       return 0;
   }

2. 设计思路(流程图)

3.有对自己作业的评价

存在问题和解决办法:
本次找鞍点的题目我遇到的问题是我知道思路,但是不知道怎么写,这是很难受的,然后在室友的点拨下我敢于去尝试。但是现实很残酷在写完输入二维数组的时候,后面就卡住了,我不知道要用几个循环,这还是在我向我室友求救才解答的出来。
心得:
这次作业让我对循环进一步加强了

4.程序运行结果图

冒泡法排序

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

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

输出格式

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

输入样式1

4 
75 71 77 76

输出样例1

77 76 75 71

1. 代码块

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

2. 设计思路(流程图)

3.有对自己作业的评价

存在问题和解决办法:
本次挑战作业需要用冒泡排序法,这个毕竟是挑战作业,所以和书上的选择排序法有点不同。我通过室友的讲解知道,所谓冒泡排序法就是第一个数和第二个数比较,然后第二个数和第三个数比较,这样以此类推。所以就通过这样的思路去写的。此次作业遇到的问题也还是循环的问题。我发现循环是我的天敌。
心得:
对循环有更多的了解。

4.程序运行结果图

时间消耗
学习进度条
周/日期 这周所花的时间 代码行 学到的知识点简介 目前比较困惑的问题
3/18-3/22 3天 100 选择排序法和了解冒泡排序法 循环有点小问题
原文地址:https://www.cnblogs.com/ct1314/p/10580215.html