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]!='\0'&&a[i]!='\n'; i++) {
		hash[a[i]] = 1;
	}
	for (i = 0; i < 256; i++) {
		if (hash[i] == 1) {
			printf("%c", i);
		}
	}

}
  • 字符数组、字符串特点及编程注意事项
  1. 注意scanf读入空格或者回车结束。
  2. 字符数组以‘\0’结尾,fgets 以“\0”与“\n”结尾。 注意别越界。
  3. 循环时以读到‘\0’结束,不用关注字符数组长度

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

  • 代码:

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

posted @ 2020-12-13 22:53  此处应该有名字  阅读(102)  评论(0编辑  收藏  举报