• 第四周作业


    2019年春季学期第四周作业

    这个作业属于哪个课程 C语言程序设计II
    这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/2774
    我在这个课程的目标是 希望以后碰见类似的题目时能够不出错误的做出来
    这个作业在哪个具体方面帮助我实现目标 告诉我学会运用二维数组解题,也通过找鞍点这个题巩固了自定义函数的运用
    参考文献 C语言程序设计(第3版)

    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

    输出:

    No

    代码

    #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]
    (3分)) {	
    			    
    found=0
    ;          
               	            break;
           	                 }
    		}
    		if (
    !found
    ){
    			break;
       		}
      	}
    
      	if (found != 0){
      		printf("Yes
    ");
      	}  
      	else{
      		printf("No
    ");
      	}  
    
    	return 0;
    }
    

    由题目所给知道前面需要比较a[i][k]与a[k][i]是否相等,若不相等found=0;后面一空即若没有找到。

    7-2 选择法排序 (20 分)

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

    输入格式:

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

    输出格式:

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

    输入样例:

    4
    5 1 7 6

    输出样例:

    7 6 5 1

    1,实验代码

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

    2,设计思路


    3,遇到的问题及解决方法

    问题:for语句中对i后面的数字的for循环的表达式出现错误

    解决方法:询问同学,知道了i后面的一个数字应该从k=i开始,且for语句中i的表达式的范围应该为i<n-1;

    问题:错误的输入了一个printf

    解决方法:自己仔细分析画流程图后发现是错的,然后删除;

    问题:一开始写没有考虑到最后一个数字的空格问题

    解决方法:写出代码后询问同学仔细审题然后解决;

    4,运行图片

    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 a[100][100];
    int solve(int n,int flag1,int flag2)
    {
    	for(int i=0;i<n;i++)
    	if(a[flag1][flag2]<a[flag1][i])
    	return 0;
    	for(int j=0;j<n;j++)
    	if(a[flag1][flag2]>a[j][flag2])
    	return 0;
    	
    	return 1;
    }
    int main (void)
    {
    	int n,i,j,flag1,flag2,found=0;
    	flag1=0;flag2=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(j=0;j<n;j++){
    		if(solve(n,i,j)){
    				printf("%d %d",i,j);
    				found++;
    		}
    	}
    	if(found==0)
    	  printf("NONE");
    	return 0;	
     }
    

    设计思路



    遇到的问题及解决方法

    问题:不知道如果进行行与列的下标的比较

    解决方法:询问同学,用自定义函数解决

    问题:对数组进行输入后不知道后面的步骤怎么做

    解决方法:与同学交流用两个for语句对行与列进行循环

    问题:有地方的小问题没有注意

    解决方法:运行结果错误了之后,自己找出错误

    运行图片

    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,tmp;
        scanf ("%d",&n);
        int a [n];
        char op=' ';
        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]) {
                tmp=a [j];
                a [j] = a [j+1];
                a [j+1] = tmp;
              }
        for (i=0; i<n; i++) {
            printf ("%d",a [i]);
            if (i<n-1) {
                printf ("%c",op);
            }
        } 
        return 0;
    }
    

    设计思路:


    遇到的问题及解决方法:

    问题:看到题目不懂冒泡法是什么

    解决方法:自己查找资料,知道原理就是:冒泡排序需要多次遍历列表,比较相邻的项并交换那些无序的项,每次遍历列表将下一个最大的值放在正确的位置。如果在列表中有n个项目,则第一遍需要比较n-1个项

    这个题目因为书上有例题所以问题较少

    运行图片:

    学习进度条

    周/日期 这周所花的时间 代码行数 学到的知识点 目前比较疑惑的问题
    2/25-3/3 三天 45 学习数组及用法 数组的长度问题
    3/4-3/10 三天 40 文件的处理问题 文件指针的用法
    3/11-3/15 四天 50 对数组的遍历 关于遍历的范围还有不理解的地方
    3/16-3/22 四天 80 用一维数组和二维数组编程 冒泡算法的运用

    感悟

    知识开始变得越来越难了,完成作业的时间所花的时间越来越多,对个人的能力要求也就会越来越高。

    对pta的两个题目(选择排序,冒泡法)的区别还是有些不理解

  • 相关阅读:
    TSQL--按某字段列分组,在将各组中某列合并成一行
    疑难杂症--SQL SERVER 2012下数据库内存异常回收
    TSQL--删除登陆相关的用户
    杂谈--一次”失败“问题处理过程
    layer.open如何关闭自身弹出窗口
    简单的Http请求数据保存到Hdfs
    layui栅格布局问题
    redis单机版安装
    redis详细配置文件
    批量修改mysql数据库引擎
  • 原文地址:https://www.cnblogs.com/hxy2017826779/p/10564391.html
Copyright © 2020-2023  润新知