2019年春季学期第四周作业


一:本周完成作业
题目1:5-1
输入一个正整数 n (1≤n≤10)和n 阶方阵a的元素,如果方阵a中的所有元素都沿主对角线对称,输出“Yes”, 否则,输出“No”。主对角线为从矩阵的左上角至右下角的连线,方阵a中的所有元素都沿主对角线对称指对所有i, k,a[i][k]和a[k][i]相等。输入输出示例如下:

输入:

3
1 2 3
4 5 6
7 8 9
1)实验代码

  #include <stdio.h>
  int main(void)  
  {   
  int found, i, k, n;
  int a[10][10];

  scanf ("%d", &n);
  for (i = 0; i < n; i++) 
     for (k = 0; k < n; k++)
         scanf("%d", &a[i][k]);

  found = 1;
  for (i = 0; i < n; i++){    
     for (k = 0; k < i; k++){
        if ( a[i][k]!=a[k][i])  {   
                        found=0;          
                       break;
                     }
      }
     if (found==0){
         break;
     }
  }

  if (found != 0){
     printf("Yes
");
  }  
  else{
      printf("No
");
  }  

    return 0;
  }

2)设计思路

3)本题调试过程碰到的问题及解决办法
无问题
4)结果运行截图

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

   #include<stdio.h>
   int main()
   {
    int i,index,k,n,temp;
    int a[10];
    char op=' ';
    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("%c%d",op,a[i]);
            printf("
");

            return 0;
      } 

2)设计思路

3)本题调试过程碰到的问题及解决办法

本题书上有讲过的例题,写完之后运行结果错误,最后发现一个本该独立的for循环让我与其他循环搞一起去了,导致运算时跳出程序的时候出现错误。改后正确。
4)运行结果截图

题目3
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
1)实验代码

  include <stdio.h>
  int main(void)
  {
   int i,j,n,b,c,d,flag;
  scanf("%d",&n);
   int a[6][6];

       for(i=0; i<n; i++)
       for(j=0; j<n; j++)
        scanf("%d",&a[i][j]);
       b=c=d=0;
       flag=0;
    
      for(i=0;i<n;i++)
      {
        c=i;
        for(d=0;d<n;d++) 
        {
            if(a[i][b]<=a[i][d])
            {
                b=d;
            }
        }
        for(j=0;j<n;j++)
        {
            if(a[c][b]>a[j][b])
            {
                c=j;
                break;
            }
        }
        if(i==c)
        {
            flag=1;
            break;
        }
      }
    
      if(flag!=0)
         printf("%d %d",i,b);
     else 
	    printf("NONE");

       return 0;
   }

2)设计思路

3)本题调试过程碰到的问题及解决办法

结果运行错误,最后发现在找列的最小值的时候,没有将列的所有元素进行一个一个的比较,导致运行错误,改正正确。
4)运行结果截图

题目4:挑战题
冒泡法排序 (10 分)
输入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 ()
  {
  int i, j, n, temp=0;
  int a[10];
  char op = ' ';
  scanf ("%d", &n);

  for(i=0; i<n; i++)
 {
   scanf ("%d", &a[i]);
 }
  for(i=1; i<n; i++)
 {
  for(j=0; j<n-i; j++)
 {
     if(a[j]<a[j+1])
     {  
          temp = a[j];
          a[j] = a[j+1];
          a[j+1] = temp;
        }
   }
 }
  printf ("%d",a[0]);
 for(i=1; i<n; i++)
 {
    printf ("%c%d",op,a[i]);
 }
 printf ("
");
return 0;
}

2)设计思路

3)本题调试过程碰到的问题及解决办法

本题最后结果的76没有输出来,最后发现是自己漏了一个大括号,改正结果运行正确。
4)运行结果截图

二:学习进度条

三:心得与感悟
很多东西他是有规律,一个知识点就可以运用在多个题目当中,有些东西看似相似,实则他们有有着区别。

原文地址:https://www.cnblogs.com/1234-tst/p/10573457.html