C语言博客作业04-数组

| 这个作业属于哪个班级 | C语言--网络2011/2012 |
| ---- | ---- | ---- |
| 这个作业的地址 | (https://edu.cnblogs.com/campus/jmu/2020C/homework/11598) |
| 这个作业的目标 | 学习数组及相关知识。 |

0pta总分截图


1本章学习总结

1.1学习内容总结

  • 数组中查找数据
    1:直接
#include <stdio.h>
int main()
{
int x;
int i;
int flag;
int a[10];
scanf("%d",&x);
for(i=0;i<10;i++)
{
  if(a[i]==x)
   flag=1;
}
  if(flag)
  printf("%d",i);
return 0;
}

2:二分查找

int a[100];
int n=10;
int x; 
int low;
int high;
int mid;
int loca;
scanf("%d",&x);
loca=0;
low=0;
high=n-1;
if((x<a[0]||(x>a[n-1]))
loca=-1;
while(loca==0&&low<=high)
{
mid=(low+high)/2;
 if(x==a[mid])
{
  loca=mid;
  printf("%d",loca+1);
  break;
}
 else if(x<a[mid])
   high=mid-1;
 else
   low=mid+1;
}
return 0;
}
  • 数组中插入数据
for i=0 to n-1
i++;
if num>a[i] then
insert=i;
end for
  • 删除数据
    1:在原数组中删除
for i=0 to i=n-1
i++;
j++;
if a[i]==x then 
for j=i to j<n-2 
j++;
n--;
a[j]=a[j+1]
end for

2:重构数组

for i=0,j=0 to i=n-1
i++;
j++;
if a[i]!=x then 
b[j]=a[i]
end if
end for
  • 排序方法
    1:冒泡
    从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们。通过一遍扫描,则最后一个元素必定是最大的元素。然后用同样的方法对前N−1个元素进行第二遍扫描。依此类推,最后只需处理两个元素,就完成了对N个数的排序。
	/*冒泡法排序,需要从头到尾进行相邻两个元素比较,对于一组n个数,第一次扫描比较需比较n-1次,第二次需n-2次*/
	for (i = 0; i < n; i++)
		scanf("%d", &a[i]);/*读入数据,保存该数组*/
	for (i = 0; i < k; i++)/*对数组从头到尾全部扫描的次数*/
		for (j = 0; j < n - 1 - i; j++)/*每次扫描一遍需比较的次数*/
		{
			if (a[j] > a[j + 1])/*交换位置*/
			{
				temp = a[j + 1];
				a[j + 1] = a[j];
				a[j] = temp;
			}
		}

2:选择

	for (i = 0; i = n - 1; i++)
	{
		max = i;/*max存放最大值下标*/
		for (j = i + 1; j < n; j++)/*找最大值下标*/
		{
			if (a[j] > a[max])
				max = j;
			
		}/*先找最大值下标,再进行交换下标*/
				temp = a[max];
				a[max] = a[i];
				a[i] = temp;/*最大元素下标与下标为i(i从0—n-1)的元素交换*/					
	}
  • 数组做枚举用法
    扔骰子概率、统计文本单词个数、查找整数

  • 哈希数组用法
    有重复数据

  • 字符数组、字符串特点及编程注意事项
    1、对于字符串组需要有结束标志'\0',
    2、scanf函数对于字符串的输入' '及'\n'时停止录入并且会自动在输入字符后加上'\0'的结束符,scanf("%s",str[i])不用加“&”
    3、fgets函数对于字符串的输入对于'\n'会收入,并自动加上'\0'结束标识符,fgets(str,数组长度,stdin)
    4、定义数组长度时,应比实际个数+1('\0')

2pta实验作业

2.1题目名:删除数字字符

2.11伪代码

for i=0 to n-1
if 某个元素不是数字字符(a[i]!=x)
then 将该元素存入数组(a[j++]=a[i])
end if
end for
处理过的字符串加上结束表标志'\0'

2.12代码截图

2.13同学代码及各自特点

吕以晴的代码截图

她的特点:不用重新将非数字字符再赋值到数组中直接输出
我:将非数字字符再赋值到数组中,并还得加上结束符'\0'

2.2鞍点

2.21伪代码

for i=0 to n-1
i++
for j=0 to n-1
j++
if 同行比较列,若某一列的数大于col上的数,则交换列下标(a[i][j] >= a[i][col]   col = j)
end if
end for
此时找到某一行上最大的数所在的列 (flag=1)
for k=0 to n-1
k++
if 对刚才找到的列比较不同行,若更大则没找到(a[k][col] < a[i][col])
没找到鞍点,退出循环,继续下一轮寻找(flag=0)
end if
end for
if 找到鞍点,退出循环(flag)
end if
end for
if 找到鞍点,输出下标
else 输出NONE
end if

2.22代码截图

2.23与超星的区别

超星:通过判断下标的值来判断是否找到鞍点。优点:少设一个变量,让代码更简洁。
我:设一个变量flag通过改变flag来判断是否找到鞍点。缺点:多设一个变量,增加代码的复杂性。

2.3切分表达式

2.31伪代码

while i<n
if 某一元素为'(' ')' '*' '/'
then 输出"该元素\n"
i++
continue
end if
if 某一元素是数字字符或'.'
if 该元素的后一元素也是数字字符或'.'
then 输出"该元素"
else
输出"该元素\n"
i++
continue
end if
if 某一元素为'+'或'-'
if i==0或前一个元素为'('
then 输出该元素
end if
else
输出"该元素\n"
i++
end if
end while

2.32代码截图

2.33与超星视频做法区别

看了超星后做的题目,没有区别。
超星做法的优点:将切分表达式的功能分装成函数,使代码分块,让人更易看懂。

posted @ 2020-12-13 22:02  Morri  阅读(57)  评论(0编辑  收藏  举报