数组

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

0.展示PTA总分(0----2)


展示2张关于“数组题目集”分数截图。

1.本章学习总结(3分)

1.1 学习内容总结

整理数组这章学习主要知识点,必须包含内容有:

  • 数组中如何查找数据,有哪些做法
	for (i = 0; i <= n; i++)
        {
		if (a[i] == number)
		{
			printf("%d", i);
                }
        }
  • 数组中如何插入数据,怎么做,可以写个伪代码或动态图展示方法
输入数组
输入插入数字
for(i=0;i<n;i++)
{
if(a[i]<数字)i++
else
a[i+1]=a[i+2]
a[i]=数字
}

  • 数组中如何删除数据,这个有多种做法,请一一展示。
输入数组a[i]
输入要删的数字,该数字的下标为j
for(m=j;m<n——一共多少数字;m++)
{
a[m-1]=a[m]
}
n-1//若要删多个数字则将在程序外套一个循环

  • 数组中目前学到排序方法,主要思路?
    冒泡法从小到大
for(j=0;j<k;j++)//k为从新比较的次数,次数越多,答案准确率越高
for(i=0;i<n;i++)
{
  if(a[i]>a[i+1]
  {
   a[i]=temp
   a[i]=a[i+1]
   a[i+1]=temp
  }
}

选择排序法从小到大

输入数组
比较数组中的数将该数组的最小数与a[0]交换
数组从a[1]开始,比较数组中的数将该数组的最小数与a[1]交换
数组从a[2]开始,比较数组中的数将该数组的最小数与a[2]交换,以此类推
  • 数组做枚举用法,有哪些案例?
  • 哈希数组用法,目前学过哪些案例,举例展示。

#include<stdio.h>
int main()
{
	char a[82];
	int i;
	int static b[256];
	fgets(a, 81, stdin);
	for (i = 0; a[i]!='\n'; i++)
	{
		if (a[i] != '\n')
		{
			b[a[i]] = 1;
		}
	}
	for (i = 1; i < 256; i++)
	{
		if (b[i] == 1)
			printf("%c", i);
	}
	return 0;

}
  • 字符数组、字符串特点及编程注意事项。
    1.数组数字是从0开始数的,因此要格外注意
    2.字符串要考虑结尾有没有\0,因为这是他的结束标志
scanf("%s",a)//当输入回车和空格时,结束输入,并自动在结尾加上'\0'

2.PTA实验作业(7分)

2.1 题目名1(3分)

调查电视节目受欢迎程度

2.1.1 伪代码

我的

输入数组a[i]
for(i=0;i<n;i++)
for(j=1;j<=8;j++)
if(a[i]==j) c[j-1]++
for(i=1;i<=8;i++)
printf("%4d%4d",i,c[i-1])

2.1.2 代码截图

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

同学

#include<stdio.h>
int main()
{
	int a[8] = { 1,2,3,4,5,6,7,8 };
	int b[8] = { 0,0,0,0,0,0,0,0 };
	int n;
	int number;
	int i;
	scanf("%d", &n);
	for (i = 1; i <= n; i++)
	{
		scanf("%d", &number);
		switch (number)
		{
		case 1:b[0]++; break;
		case 2:b[1]++; break;
		case 3:b[2]++; break;
		case 4:b[3]++; break;
		case 5:b[4]++; break;
		case 6:b[5]++; break;
		case 7:b[6]++; break;
		case 8:b[7]++; break;
		}

	}
	for (i = 0; i < 8; i++)
	{
		printf("%4d%4d\n", a[i], b[i]);
	}
	return 0;
}

他用switch语法,我用数组,他的代码多而简单,我的代码少

2.2 题目名2(2分)

找鞍点

2.2.1 伪代码

输入数组
for(i=0; i<n; i++)//先挑出行的最大值
        {
            y=i;
            for(p=0; p<n; p++) 
            {
                if(a[i][k]<=a[i][p])
                {
                    k=p;
                }
            }
            for(j=0; j<n; j++)//再比较该行最大是不是列最小值
            {
                if(a[y][k]>a[j][k])
                {
                    y=j;
                    break;不是则跳出
                }
            }
            if(i==y)
            {
                flag=0;是的话用flag变量来表示
                break;
            }
        }

2.2.2 代码截图

2.2.3 请说明和超星视频做法区别,各自优缺点。

我的和超星视频的思路差不多,不同的是他用函数来表示

2.3 题目名3(2分)

切分表达式

2.3.1 伪代码

输入字符
如果下标为0,字符为‘-’或‘+’
printf("%c",s[i]);
下标不为0时,如果字符s[i]为‘-’当s[i-1]不为数字printf("%c\n",s[i]),else printf("%c",s[i])
当字符为数字或‘.’时,如果s[i+1]不为数字或‘.’printf("%c\n",s[i]),else printf("%c",s[i])
当字符不为数字,‘.’,'+','-'时printf("%c\n",s[i])

2.3.2 代码截图


2.3.3 请说明和超星视频做法区别,各自优缺点。

我的思路和超星视频的思路差不多,不同的是他发现了i!=0时,‘-’前如果是负数则会有‘(’,

posted @ 2020-12-13 22:43  山高念做垚  阅读(132)  评论(0编辑  收藏  举报