这个作业属于哪个班级 | 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,控制每行应该输出的个数;