zoukankan      html  css  js  c++  java
  • C博客作业04--数组

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

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

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

    1.1 学习内容总结

    数组中如何查找数据

    1. 遍历数组查找
    • 特点:从第一个判断最后

    #include<stdio.h>
    int main() {
    	int n;
    	int i;
    	int m;
    	int k = 0;
    	int flag = 0;
    	scanf("%d", &n);
    	scanf("%d
    ", &m);
    	int a[20];
    	for (i = 0; i < n; i++)
    	{
    		scanf("%d", &a[i]);
    	}
    	for (i = 0; i < n; i++)
    	{
    		if (a[i] == m) 
    		{
    			k = i;
    			cnt++;
    			break;
    		}
    	}
    	if (k > 0 && flag) 
    	{
    		printf("%d", k);
    	}
    	else if (flag)
    	{
    		printf("0");
    	}
    	else 
    	{
    		printf("Not Found");
    	}
    	return 0;
    }
    
    1. 二分查找
    • 特点:在一组从小到大的数组中从中间进行比较比一次数据少一半,数据比较大时更能体现好处。
      例子:二分查找
    int BinSearch(int* a, int n, int key, int* count)
    {
        int loca = 0;
        int top = n - 1;
        int bot = 0;
        int min;
    
        while (loca == 0 && top >= bot)
        {
            *count = *count + 1;
            min = (top + bot) / 2;
            if (*(a + min) == key)
            {
                loca = min;
                return loca;
            }
            else if (key < *(a + min))
            {
                top = min - 1;
            }
            else bot = min + 1; 
        }
        if (bot >= top)
        {
            loca = -1;
            return loca;
        }
    }
    

    3.哈希查找

    1. 建立一个哈希数组按ASCII码表排序的。都赋值为0。
    2. 读取数组的时候把数据对应哈希数组的标识符修改
    3. 输出的时候按哈希数组的标识符进行输出

    举例:A-B

          int haxi[256];
          if(和哈希中相同)
                haxi[a[]]++;
    

    /*这题可以用但是我没用,我太废物了*/

    1.2 数组中如何插入数据

    • 插入数据前要可以把数据全后移一位。
    • 或者把插入的数据放最后在与前面的交换
      例子:简化的插入排序

    #include <stdio.h>
    int main()
    {
    	int n;
    	int k;
    	int i;
    	int temp;
    	int a[11];
    
    	scanf("%d
    ", &n);
    	for (i = 0; i < n; i++)
    	{
    		scanf("%d ", &a[i]);
    	}
    	scanf("
    ");
    	scanf("%d", &a[i]);
    	for (i = 0; i < n ; i++)
    	{
    		if (a[n] < a[i])
    		{
    			temp = a[n];
    			a[n] = a[i];
    			a[i] = temp;
    		}
    	}
    	for (i = 0; i <= n; i++)
    	{
    		printf("%d ", a[i]);
    	}
    	return 0;
    }
    

    1.4 数组中如何删除数据

    • 删除数组之后将数组左移,重排列一次数组。再进行下一次删除
    • 另一种可以用标识符来标记是否输出。
    #include <stdio.h>
    int main() {
        int i;
        int j;
        int n;
        int k;
        int flag = 0;
        int a[100] = { 0 };
        int del;
    
        scanf("%d
    ", &n);
        for (i = 0; i < n; i++) {
            scanf("%d", &a[i]);
        }
        scanf("
    ");
        scanf("%d
    ", &k);
        for (i = 0; i < k; i++)
        {
            scanf("%d", &del);
            for (j = del - 1; j < n; j++)
            {
                a[j] = a[j + 1];
            }
        }
        for (i = 0; i < n - k; i++)
        {
            if (!flag)
            {
                printf("%d", a[i]);
                flag++;
            }
            else 
            {
                printf(" %d", a[i]);
            }
        }
        return 0;
    }
    

    1.5数组中目前学到排序方法

    1. 冒泡法排序
    • 思路:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们。
    • 也就是只需处理两个元素,就完成了对N个数的排序。

    例子:冒泡法排序

    #include <stdio.h>
    int main() 
    {
    	int n;
    	int k;
    	int i;
    	int j;
    	int flag = 0;
    	int temp;
    	int a[100];
    
    	scanf("%d %d
    ", &n, &k);
    	for (i = 0; i < n; i++)
    	{
    		scanf("%d", &a[i]);
    	}
    	for (j = 0; j < k; j++)
    	{
    		for (i = 0; i < n - 1 - j; i++)
    		{
    			if (a[i] > a[i + 1])
    			{
    				temp = a[i];
    				a[i] = a[i + 1];
    				a[i + 1] = temp;
    			}
    		}
    	}
    	for (i = 0; i < n; i++)
    	{
    		if (!flag) 
    		{
    			printf("%d", a[i]);
    			flag++;
    		}
    		else
    		{
    			printf(" %d", a[i]);
    		}
    	}
    	return 0;
    }
    
    1. 选择法排序
    • 把一堆数据从小到大排序。

    例子:选择法排序

    #include<stdio.h>
    main()
    {
    	int a[10], n,i,j,k,temp;
    	scanf("%d",&n);
    	for (i = 0; i < n; i++)
    	{
    	scanf("%d",&a[i]);
    	}
    	for (i = 0; i < n - 1; i++)
    	{
    		k = i;
    		for (j = i + 1; j < n; j++)
    		{
    			if (a[j] > a[k])
    			{
    				k = j;
    			}
    		}
    		if (k != i)
    		{
    			temp = a[k];
    			a[k] = a[i];
    			a[i] = temp;
    
    		}
    	}printf("%d",a[0]);
    	for (i = 1; i < n; i++)
    	{
    		printf(" %d",a[i]);
    	}return 0;
    }
    

    1.6数组做枚举用法

    查找整数
    选择排序法
    找鞍点
    删除重复数据

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

    读取字符串

    1. scanf("%s",&a);
    • 其结尾为''。
    1. fgets函数能接收带空格的字符串。
    • 其结尾为' ''',若不够则没有' '

    2.PTA实验作业(7分)

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

    题目:

    2.1.1 伪代码

    我的:

          m = m % n;
          scanf(整个数据);
          int一个数组;
          for(i = m;i < n ;i++)
                printf数组;
          for(i = 0;i < m ;i++)
                printf数组;
    /*实际上我没改变数组的顺序,值改变了输出的顺序*/
    

    同学的:

          m = m % n;
          int两个数组;
          scanf(m个数据到第一个数组);
          scanf(剩下的到数组b);
          把第一个数组输到b中;
          for(i = 0;i < n ;i++)
                printf数组;
    

    2.1.2 代码截图

    我的:

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

    同学的:

    2.2 找鞍点(2分)

    题目:

    代码截图

    鞍点这介绍二维数组。并说明和超星视频做法区别。

    • 区别:思路有些相似,都是找行列符合条件的并记录。
    • 超新星中的代码用函数把代码进行了分装,增强了代码的可读性,并且使主函数更加易懂整洁。

    2.2.1 伪代码

          定义二维数组;
          读入n和数组;
          for找出第一行的最大值
          for判断是否为每列最小值
          符合条件就修改标识符令其鞍点输出
          若都不符合啧标识符没修改即无鞍点就输出NONE
    

    2.3 切分表达式——写个tokenizer吧(2分)

    2.3.1 伪代码

          for+if判断是否为数字或.是则直接输出并判断下一位来是否printf("'
    '");
          否则判断是否为加减,加减需判断是否printf("'
    '");
          若是首个或者上一个括号则不printf("'
    '");
    

    2.3.2 代码截图

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

    • 区别:思路不太相同,我自己的代码是将-和+进行判断,而超星中是对小数点、括号等分开进行判断。超新星中的代码用函数把代码进行了分装,增强了代码的可读性,并且使主函数更加易懂整洁。
  • 相关阅读:
    Navigator is deprecated and has been removed from this package
    ES6 Promise
    SectionList的使用
    FastList使用
    react native touchable
    react native获取屏幕的宽度和高度
    RN导航栏使用
    2020-11-04:java里,总体说一下集合框架。
    2020-11-03:手写代码:链表如何快速找到中间节点?
    2020-11-02:go中,s:=make([]string,10);s=append(s,“test“);fmt.Println(s[0]),打印什么?
  • 原文地址:https://www.cnblogs.com/lz02/p/14130398.html
Copyright © 2011-2022 走看看