这个作业属于哪个班级 C语言--网络2011/2012
这个作业的地址 博客作业04--数组
这个作业的目标 学习数组相关内容
姓名 郑俊佳

0.展示PTA总分

1.本章学习总结

1.1 学习内容总结

1.1.1一维数组知识

定义:类型名 数组名 [数组长度]
定义时数组长度是整型常量

引用数组:数组名 [下标]
引用时下标可以是整型表达式,但一定要在数组长度内。最大下标时所定义数组的长度-1

1.1.2二维数组知识

定义:类型名 数组名 [行数长度][列数长度]
定义时长度都是整型常量

引用数组:数组名[行下标][列下标]
引用数组时与一维数组类似,但要同时控制行跟列的下标

使用二维数组:
输入一个二维数组:
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++)//内循环控制列下标
printf("%d",&a[i][j]);
}

1.1.3字符数组知识

字符串:
一串字符的结束标志是'\0',字符串的有效长度就是有效字符的个数。

存储--赋值和输入:
注意:区分"a"和'a'
​ "a"是字符串常量,包括'a'和'\0'两个字符。
​ 'a'是字符常量,只有'a'一个字符。

字符串的输入

字符串输入:
scanf("%s",str);
当输入字符串时输入'\n'、' '时停止录入,并且系统会自动在输入字符后加上'\0'的结束符标志。

循环输入:
法1:
while((str[i]=getchar())!='\n')
i++;
str[i]=0//循环结束后,一定要在最后赋值0;
法2:
for(i=0;str[i]!='\0';i++)

函数输入:
引用fgets()函数
读取到换行符、文件尾或读完n-1个字符结束,但是输入字符长度少于n-1,会多带一个换行符。
fgets(数组名,数组数,stdin)
当输入字符串时输入'\n'结束录入并且会将回车键录入,后函数在其末尾加上'\0'的结束符标志

1.2常用数组方法总结

1.2.1查找数据

顺序查找法:
应用循环依次查找数组内数据,如一致则输出下标。
int x;
scanf("%d",&x);
for(i=0;i<n;i++)
if(a[i]==x)//如果在数组a中找到了数据x
printf("%",i);//输出相应的数组下标

二分查找法:
将n个元素分成数组长度相等的两部分,取数组中间值a[n/2]与数据x做比较;
如果x=a[n/2],则找到x;
如果x<a[n/2],则需在数组a的左半部分继续搜索数据x;
如果x>a[n/2],则只要在数组a的右半部搜索数据x。
直到查到x值,程序结束。
while (low <= high)
{
int middle = (low + high) / 2;
if (target == num[middle])
{
return middle;
}
else if (target > num[middle])
{
low = middle + 1;
}
else if (target < num[middle])
{
high = middle - 1;
}
}
return -1;

1.2.2插入数据

插入排序:
在排好的数列中插入x,按照原有的顺序,插入后得到的新数列也是像原数列一样的顺序。

1.2.3删除数据

数组元素的删除:
删除数组元素,先找到该元素,然后将数组依次向前推进。最终得到新的数组。

1.2.4排序方法

冒泡排序:
从头到尾相邻的元素做比较,如果在前的元素较大就与在后的元素进行交换。
针对所有的元素重复以上的步骤,除了最后一个元素。

选择排序:
要排序的一组数中,选出最小(或最大)的一个数与第一个位置的数交换;
在剩下的数当中找最小的与第二个位置的数交换,即顺序放在已排好序的数列的最后,如此循环,直到全部数据元素排完为止。

2.1数组循环左移

2.1.1 伪代码

  • 定义:n,m
  • 输入:n,m
  • 求应该将数组元素向前推移多少单位,如果m比n大也可以具体算出数组元素应该向前推进多少单位长度:m=m%n
  • 定义数组:a[101]
  • 输入数组元素:for i=0至i=n-1,i++
  • 定义中间变量:temp
  • 进入数组元素互换前后元素调换:for i=0至i=j||i>j,j=n-1至j<i||j=i,i++,j--
  • 进入数组元素的前半部分元素调换:for i=0至i=j||i>j,j=n-1-m至j<i||j=i,i++,j--
  • 进入数组元素的后半部分元素调换:for i=n-m至i=j||i>j,j=n-1至j<i||j=i,i++,j--
  • 输出数组元素:for i=0至i=n-1

2.1.2 代码截图

2.1.3 代码比较

2.2 杨辉三角

2.2.1 伪代码

  • 定义:int N
  • 输入:N
  • 定义二维数组并给予初始化:a[10][10]=
  • 定义循环内参量:int i,j;
  • 外层循环控制行:for i=0至i=9;
  • 内层循环控制列:for j=0至j=9;
  • 判断:
  • if j0||ji,就令其a[i][j]=0;
  • else a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
  • 输出:外层循环控制行:for i=0至i=N;
  • 内层循环控制列:for j=0至j=i;//j=i,控制每行应该输出的个数;

2.2.2 代码截图

2.3 二维数组每列排序

2.3.1 伪代码

2.3.2 代码截图

posted on 2020-12-13 21:17  jioky  阅读(245)  评论(0编辑  收藏  举报