C博客作业04--数组
|  这个作业属于哪个班级    |  C语言--网络2011/2012 |
| ---- | ---- | ---- |
|    这个作业的地址  |  C博客作业04--数组 |
|    这个作业的目标  |  学习数组相关内容   |
|    姓名           |  宋宇龙  |
0.展示PTA总分(0----2)


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);
		}
	}
}
- 字符数组、字符串特点及编程注意事项
 
- 注意scanf读入空格或者回车结束。
 - 字符数组以‘\0’结尾,fgets 以“\0”与“\n”结尾。 注意别越界。
 - 循环时以读到‘\0’结束,不用关注字符数组长度
 
2.PTA实验作业(7分)
2.1 7-7 数组循环左移(3分)
题目:

2.1.1 伪代码
我的:
      m = m % n;
      scanf(整个数据);
      int一个数组;
      for(i = m;i < n ;i++)
            printf数组;
      for(i = 0;i < m ;i++)
            printf数组;
/*实际上我没改变数组的顺序,值改变了输出的顺序*/
同学的:
      m = m % n;
      int两个数组;
      scanf(m个数据到第一个数组);
      scanf(剩下的到数组b);
      把第一个数组输到b中;
      for(i = 0;i < n ;i++)
            printf数组;
2.1.2 代码截图
我的:

2.1.3 找一份同学代码(尽量找思路和自己差距较大同学代码)比较,说明各自代码特点。
同学的:

2.2 找鞍点(2分)
题目:

代码截图

鞍点这介绍二维数组。并说明和超星视频做法区别。
- 区别:思路有些相似,都是找行列符合条件的并记录。
 - 超新星中的代码用函数把代码进行了分装,增强了代码的可读性,并且使主函数更加易懂整洁。
 
2.2.1 伪代码
      定义二维数组;
      读入n和数组;
      for找出第一行的最大值
      for判断是否为每列最小值
      符合条件就修改标识符令其鞍点输出
      若都不符合啧标识符没修改即无鞍点就输出NONE
2.3 切分表达式——写个tokenizer吧(2分)

2.3.1 伪代码
      for+if判断是否为数字或.是则直接输出并判断下一位来是否printf("'\n'");
      否则判断是否为加减,加减需判断是否printf("'\n'");
      若是首个或者上一个括号则不printf("'\n'");
2.3.2 代码截图

2.3.3 请说明和超星视频做法区别,各自优缺点。
- 区别:思路不太相同,我自己的代码是将-和+进行判断,而超星中是对小数点、括号等分开进行判断。超新星中的代码用函数把代码进行了分装,增强了代码的可读性,并且使主函数更加易懂整洁。
 
                    
                
                
            
        
浙公网安备 33010602011771号