C博客作业04--数组

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

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


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

1.1 学习内容总结

1.1.1数组中如何查找数据,有哪些做法

用循环让数组的下标逐个变化,再一一进行对比,判断出要寻找的数。
将要找的数放在一个数组中,再在另一个数组中循环输入被查找的数组。

1.1.2数组中如何插入数据,怎么做,可以写个伪代码或动态图展示方法

找到插入位置
记录该位置
for循环将该位置及以后的数组向后移动一个位置
将插入数据输入标记位置

1.1.3数组中如何删除数据,这个有多种做法,请一一展示。

直接将要删除的数后面的数向前移动

将符合要求的字符输入另一个数组中重新排列

1.1.4数组中目前学到排序方法,主要思路?

选择排序法:把每一次从待排序的du数据元素中选zhi出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完
冒泡排序法:相邻的两个数进行对比再根据需求交换位置,并且重复多次即可达到排序的目的。

1.1.5数组做枚举用法,有哪些案例?

骰子六面的投掷概率
选择排序法
A-B在A字符串中去除B中所含有的元素
统计一行文本的单词个数
查找整数

1.1.6哈希数组用法,目前学过哪些案例,举例展示。

用一个数组的下标与输入数据关联,再将输入数据与数组下标进行对照,从而进行记录。
记录输入字符中每种大写字母的个数
将26个字母与数组从1-26的下标一一对应,对输入数据进行判断,但判断符合时,对应变量num[i]++

1.1.7字符数组、字符串特点及编程注意事项。

SCANF("%s",num);输入字符串时输入'\n'、 ' '时停止录入并且会自动在输入字符后加上'\0'的结束符。
fgets(num,100,stdin);输入字符串时输入'\n'结束录入并且会将回车键录入,后在其末尾加上'\0'的结束符

2.PTA实验作业(7分)

2.1 7-7 数组循环左移(3分)

2.1.1 伪代码

分别输2个整数代表数组中数字个数和左移位置
for 循环输入数组的值
for 重复每次向左移动
嵌套for 将数组右移一位
输出数组第一个数
for 循环输出剩下的数

2.1.2 代码截图

王博

#include<stdio.h>
int main()
{
	int n, m,i,temp,a;
	int num[100];
	scanf("%d %d", &n, &m);
    	if (m >= n)
		m = m % n;
	for (i = 0; i < n; i++)
	{
		scanf("%d", &num[i]);
	}
	for (a = 1; a <= m; a++)
	{
		for (i = 0; i < n - 1; i++)
		{
			temp = num[i + 1];
			num[i + 1] = num[i];
			num[i] = temp;
		}
	}

	printf("%d", num[0]);
	for (i = 1; i < n; i++)
	{
		printf(" %d", num[i]);
	}
	return 0;
}

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

陈宇航

#include <stdio.h>
#define MAXN 100

int ArrayShift( int a[], int n, int m );

int main()
{
    int a[MAXN], n, m;
    int i;

    scanf("%d %d", &n, &m);
    for ( i = 0; i < n; i++ ) scanf("%d", &a[i]);

    ArrayShift(a, n, m);

    for ( i = 0; i < n; i++ ) {
        if (i != 0) printf(" ");
        printf("%d", a[i]);
    }
    printf("\n");

    return 0;
}

int ArrayShift(int a[], int n, int m)
{
	for (int i = 0; i < m; i++)
	{
		int temp = a[n - 1];
		a[n - 1] = a[0];
		for (int A = 0; A < n - 2; A++)
		{
			a[A] = a[A + 1];
		}
		a[n - 2] = temp;
	}
    return 1;
}

我自己的代码比较中规中矩,陈宇航的代码将C语言的知识充分运用,虽然思路程序都差不多,都是陈宇航将右移的代码分装为了一个函数,值得我去学习,提升了代码的简洁性和可读性,而且他的代码中还运用了许多课外小知识,对于C语言的基础内容我还需要加强。

2.2 找鞍点(2分)

2.2.1 伪代码

for找每行的最大值并记录
for找到每列最小值并记录
用行标和列表对比是否相等
相等则为鞍点输出,并flag=1记录
若flag=0即无鞍点则输出NONE

2.2.2 代码截图

#include<stdio.h>
int main() {
	int n=0, i, j, min, max, tmp, flag=0;
	scanf("%d",&n);
	int num[n][n], a[n];
	for(i=0; i<n; i++)
    {
	    for(j=0; j<n; j++)
        {
		scanf("%d",&num[i][j]);
		if(j==0)
            {
                max=num[i][j];//最大值一开始默认为每行的第一个
            }
		    if(max<=num[i][j])// 找到每行的最大值 
            {
		        max=num[i][j];
		        a[i]=j;//行最大的坐标i,j 
	        }
	    }
	}
	for(j=0; j<n; j++)
    {
	    for(i=0; i<n; i++)
        {
		    if(i==0)
            {
                min=num[i][j];
            }
		    if(min>=num[i][j])//列最小 
            {
		        min=num[i][j];
		        tmp=i; 
		    }
	    }
	   if(j==a[tmp])//根据列最小的行角标i,判断它们的纵角标j是否相等
       {
	      printf("%d %d", tmp ,j);
	      flag=1;
	      break;
	   }
    }
     if(flag==0)printf("NONE"); 
     return 0;
}

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

超星中对判断条件的代码进行了分装,有利于代码的阅读,并且使主函数更加整洁。
其他思路与我的代码差不多

2.3 切分表达式

2.3.1 伪代码

for循环判断数组是否为数字
如果是item=1
再通过while推算至该数字结束
输出数字
如果是负号
判断-前后字符是否合理合理则输出负号或负号加回车
如果为加号判断是否为开头。开头则不输出+
如此循环至不满足条件

2.3.2 代码截图

#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    char ch[41];
    int i,j;
    int item;
    gets(ch);
    
    for(i=0;ch[i]!='\0';i++){
    if(ch[i]>='0'&&ch[i]<='9'){
        item=i;
        while(((ch[i]>='0'&&ch[i]<='9')||ch[i]=='.')&&ch[i]!='\0')
            i++;
        for(j=item;j<i;j++)
            printf("%c",ch[j]);
            i--;
        putchar('\n');
    }
    else if(ch[i]=='-'){
        if(ch[i-1]>='0'&&ch[i-1]<='9'||ch[i+1]=='(') {
                putchar('-');
                putchar('\n');
        }
        else
            putchar('-');
    }
    else  if(ch[i]=='+') {
        if(i==0)
            printf("%c",ch[i]);
        else printf("%c\n",ch[i]);
    }
    else{
        printf("%c",ch[i]);
        putchar('\n');
    }
    }
    return 0;
}

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

超星中对判断条件的代码进行了分装,有利于代码的阅读,并且使主函数更加整洁。
超星中是对小数点、括号等分开进行判断,而我自己的代码是主体分为-和+进行判断,超星中的写法更有利于代码的阅读和理解,也更容易编写。

posted @ 2020-12-12 20:50  2011王博  阅读(142)  评论(0编辑  收藏  举报