zoukankan      html  css  js  c++  java
  • C博客作业04--数组

    这个作业属于哪个班级 C语言--网络2011,2012(集美大学)
    这个作业的地址 C博客作业04--数组
    这个作业的目标 学习数组相关内容
    姓名 张官德

    0.展示PTA总分

    1.本章学习总结

    1.1 学习内容总结

    • 数组查找数据法
      1)遍历数组(效率较低)
      2)尝试二分法(效率高)

    • 数组插入数据

    输入n个数
    定义数组num[10];
    定义N=n+1//让输出时数组不越界
    遍历数组
    	for (i = 1; i < n; i++) {
    		if (x > num[i-1] && x < num[i])//输入的数据在俩个数之间 {
    			
    			for (j = n; j>i ; j--) {
    				num[j] = num[j-1];
    				
    			}//前面的赋值给后面
    
    			num[i] = x;//x赋值给num[i]所在的地方
    			
    			break;
    		}
    	}
    
    			
    
    • 数组中删除数据
      1)重构数组
      把不删除的数据加入一个新的数组中,注意新建数组范围即可

    2)数组移动
    将待删除的数据后一位“掩盖”它就好
    例如:

    for (j = 1; j <= k; j++) {
    		scanf("%d", &digit);//待删除的位置
    		for (i = digit - 1; i < n-1; i++) {
    			a[i] = a[i + 1];
    		}
    	}
    
    • 数据排序方法
      1)冒泡法
    for (j = 1; j <= k; j++)//控制排序次数 {
    		for (i = 1; i < n; i++)//遍历数组把每一个小的数与后一个比较大的交换 {
    
    			if (num[i - 1] > num[i]) {
    				temp = num[i];
    				num[i] = num[i - 1];
    				num[i - 1] = temp;
    
    			    }
    		}
    	}
    

    2)选择排序法
    即 一次循环后第一个数变为最大,第二次后第二个数变成次大数,以此类推

    
    	for (i = 0; i < n-1 ; i++) {
    		for (j = i+1; j < n; j++) {
    			if (num[i] < num[j]) {
    				temp = num[j];
    				num[j]=num[i];
    				num[i] = temp;
    			}
    		}
    	}
    
    • 数组做枚举用法的案例
      枚举在c语言中表示一个被命名的整型常数的集合
      1 删除重复数据
      2 查找整数
      3 插入数据
      ...

    • 哈希数组用法
      1) 这题可以用该思想做

    2)

    void hash(char a[]) {
    	static int hash[256];
    	int i;
    	for (i = 0; a[i]!=''&&a[i]!='
    '; i++) {
    		hash[a[i]] = 1;
    	}
    	for (i = 0; i < 256; i++) {
    		if (hash[i] == 1) {
    			printf("%c", i);
    		}
    	}
    
    }
    
    • 字符数组、字符串特点及编程注意事项
    1. 注意scanf读入空格或者回车结束。
    2. 字符数组以‘’结尾,fgets 以“”与“ ”结尾。 注意别越界。
    3. 循环时以读到‘’结束,不用关注字符数组长度

    2.PTA实验作业

    2.1

    题目:

    我的代码:

    定义俩个数组num与num_;
    左移位数为m;
    for (i = 0; i < m; i++) {
    		num_[i] = num[i];
    	}//前m个数据保存在num_数组中
    
    for (i = 0; i < n-m; i++) {
    		num[i] = num[i + m];
    	}//开始最后m个数左移
    
    
    for (i = n - m, j = 0; i < n; i++, j++) {
    		num[i] = num_[j];
    	}//将前面的m个数填补缺失的后m个数
    
    输出 for(i=0;i<n;i++){
             printf num[i];
                }
    
    

    同学的代码:

          m = m % n;
          scanf(整个数据);
          int一个数组;
          for(i = m;i < n ;i++)
                printf数组;
          for(i = 0;i < m ;i++)
                printf数组;
    
    • 代码展示
      我的:

    同学的:

    • 特点
      我的:定义了又一个数组存放,在数据上进行修改。
      他的:对该数组的输出方式进行修改。
      总结:殊途同归。

    2.2

    • 伪代码
          遍历数组 行 for (i = 0; i < n; i++) {
    		 列   for (j = 0; j < n; j++) {
    
    			for (k = 0; k < n; k++) {
    
    				行最大  if (num[i][j] < num[k][j]) {
    					flag1++;
    				}
    				列最小  if (num[i][j] < num[i][k]) {
    					flag2++;
    				}
    				
    			}
    		行列要求达标 if (flag1 ==n-1  && flag2 ==0 ) {
    				printf("%d %d", i, j);
                                  }
    			重新初始化 flag1 = 0;
    			          flag2 = 0;
    
    		}
    	}
    
    • 代码


    • 和超星视频的区别
      思路相像,但方法没有那么巧妙。而且感觉应该在函数分装上下功夫。

    2.3

    • 代码:

    • 和超星视频差异
      总体思路走向差不多,但对拆分有了更进一步的了解,觉得还能有所提升。

  • 相关阅读:
    最简单的非交互ssh远程执行命令expect脚本
    [转]解决Adobe Reader X中金山词霸不能取词故障
    《TCP/IP Sockets 编程》笔记1
    Visual Studio 2005中无法调试CLR C++的枚举类型
    查找字符串中字符间不同的最大子串
    《C++ Primer》关于自增自减操作符的描述错误
    LVM逻辑卷管理
    《TCP/IP Sockets 编程》笔记2
    《TCP/IP Sockets 编程》笔记7
    Linux文件
  • 原文地址:https://www.cnblogs.com/zhangguande/p/14130902.html
Copyright © 2011-2022 走看看