• C语言博客作业04--数组


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

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


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

    1.1 学习内容总结

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

    • 1.遍历法
      从数组中的第一个数一直检索到数组的最后一个数,如果找到用户想要的那个数据就提前退出。
    int num[6]={1,2,3,4,5,6};  //数组num;
    int x;//用户想要找的数据;
    输入用户想要找的数据x
    for i=0 to 5
       if x的值和num[i]的值相等
            输出该数字在数组中的下标i的值
            break
       end if
    end for
    if i>=6 //没有找到用户需要的数字;
       输出"not find"
    end if
    
    • 2.二分查找法
      适用于已经按照大小顺序排列好的一组数据。其做法为:找出左边界和右边界,并找出中间元素与所找数据进行比较,如果相等则找出,若不相等,则根据大小判断其中一个边界换为中间元素的上一个元素或下一个元素,继续查找,直到找出或最终也没找到。
    int a[10]={10,9,8,7,6,5,4,3,2,1};//有序数组;
    int x ;//用户输入的数;
    int m ;//找到的数所在的下标;
    
    输入用户想要寻找的数;
    
    int low = 0//数组第一位开始,左界下标;
    int high = n-1//从数组的最后一位开始,右界下标;
    int mid; //中间位置;
    
    while(low<=high)
        mid = (low+high)/2;
        if  x==a[mid]
           说明找到x的位置,break跳出循环;
        else if x小于a[mid]
           改变查找范围:low=mid+1;
        else  x大于a[mid]
           改变查找范围:high=mid-1;
        end if
    end while
    if low<=high //表示找到x的位置;
        输出该值下标   
    else //表示没有找到x的位置
        输出"not found"
    end if
    

    数组中如何插入数据

    按照一定大小顺序寻找所要插入所给数据的位置,插入后将其后数据均向右移动一个位置,插入后的数组元素也是该顺序。

    int num[N] ;
    int n;//插入数据的个数;
    int data;//插入的数据
    
    输入数据个数n;
    for i=1 to n
       输入数据,赋给num[i];
    end for
    输入插入的数据data;
    for i=0 to n
        if data<=num[i]
           for j=n to i   //插入后,将后面的元素往右移一位;
               num[j]=num[j-1]
           end for
           break;//退出循环;
        end if
    end for
    插入数据data,num[i]=data;
    输出数组
    

    数组中如何删除数据

    1.从要删除的数开始到数组末尾,让数组前一位等于后一位,即数组左移,直接覆盖要删除的数字,还要考虑数组下标的特别情况

    例如:删除数字字符

    2.重新定义一个数组,重新存放除要删除的数据之外的所有数据

    例如:A-B

    数组中目前学到排序方法

    • 选择排序(从大到小排序)
      在未排序的n个元素中找到最大值,将它与a[0]交换;在剩下的n-1个元素中找到最大值,将它与a[1]交换;......在剩下未排序的2个元素中找到最大值,将它与a[a-2]交换。
    #include<stdio.h>
    int main()
    {
    	int n, i, j, t;
    	int a[11];
    	scanf("%d", &n);
    	
    	for(i = 0;i < n;i++)
    		scanf("%d",&a[i]);
    		
    	for(i = 1;i < n;i++)
    	{
    		for(j = 0;j < n - i;j++)
    		{
    			if(a[j] < a[j + 1])
    			{
    				t = a[j];
    				a[j] = a[j + 1];
    				a[j + 1] = t;
    			}
    		}
    	}
    	for(i = 0;i < n;i++)
    	{
    		if(i < n - 1)
    			printf("%d ", a[i]);
    		else
    			printf("%d
    ", a[n - 1]);
    	}
    	return 0;
    }
    
    • 冒泡排序
      从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们。通过一遍扫描,则最后一个元素必定是最大的元素。然后用同样的方法对前N−1个元素进行第二遍扫描。依此类推,最后只需处理两个元素,就完成了对N个数的排序。

      例如:

    数组做枚举用法

    • 1.调查节目受欢迎程度
    • 2.寻找重复数据

    哈希数组用法(有重复数据)

    以空间换时间,设计辅助数组hash[],其下标为数组元素,数组初值为0;输入一个数n,判断hash[n]是否为1,若为1,则重复

    int static hash[]={0};
    for i=1 to n;
        输入一个数data;
        if hash[data]==1
           有重复数据
           return 0;
        else
           hash[data]=1;
        end if
    end for
    return 1;
    

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

    字符串的输入 注意点
    scanf("%s",数组名) 该输入方式不能输入空格
    (str[i]=getchar()) !=' ' 需要加上结束标志str[i]=''
    fgets(数组名,数组长度,,stdin) 可输入任何字符
    字符串的输出
    putchar(str[i])
    printf("%s",数组名)
    puts(数组名)

    2.PTA实验作业

    2.1 数组循环左移

    2.1.1 伪代码

    用代码渲染符号```渲染伪代码。注意:伪代码不是翻译代码,必须是代码+中文文字描述。
    数据处理可以用C语言符号介绍。具体参考看课件!!!

    void  ArrayShift(int a[], int n, int m);//将循环左移功能分装成函数实现
    int main()
    {
        int n, m;//n为数组长度,m为移动次数
        int i,a[MAX];//i为数组下标
        数组元素输入;
        调用循环左移函数ArrayShift(a, n, m);
        左移后数组元素输出;
    }
    void ArrayShift(int a[], int n, int m);
    {
      for k=1 to m
        for i=1 to n-1
            数组左移一个位置
            第一个数放在最后一个位置
        end for
    end for
    }
    

    2.1.2 代码截图

    贴图展示代码,不要复制。

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

    #include <stdio.h>
    int main()
    {
        int n, m, a[110];
        int i;
        scanf("%d %d", &n, &m);
        for(i=0; i<n; i++)
            scanf("%d", &a[i]);
        //8 3
        //1 2 3 4 5 6 7 8
        //4 5 6 7 8 1 2 3
        m %= n;
        if(n == m)
        {
            for(i=0; i<n; i++)
            {
                if(i == 0)
                printf("%d", a[i]);
                else
                printf(" %d", a[i]);
            }
        }
        else
        {
            for(i=m; i<n; i++)
            {
            if(i == m)
                printf("%d", a[i]);
            else
                printf(" %d", a[i]);
            }
            for(i=0; i<m; i++)
            printf(" %d", a[i]);
        }
    }
    
    

    2.2 找鞍点

    2.2.1 伪代码

    for i=0 to n 
       for j=0 to n
           输入该数组元素;
       end for
    end for
       if n==1
          输出特殊情况"0 0"
       end if
    for i=0 to n
       for j=1,temp=a[i][0] to n
          if temp<a[i][j]
             temp=a[i][j];//找出一行的最大值存入temp
          end if
       end for
       for j=0 to n
         if temp==a[i][j]//有可能每行有多个元素的值等于最大
            l=j;   //固定该列
    	for h=0,f=0;h to n//判断该元素是否为该列最小
                 if(temp>a[h][l])
                     f++;//是鞍点的标志
                  end if
             end for
         end if
       end for
    if !f
       是鞍点,输出
    end for
       输出"NONE";       
    

    2.2.2 代码截图



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


    超星视频中分装成函数来做,思路差不多都是想找出每行的最大元素在锁定该元素所在列找出最小值是否为该元素。老师的做法更高效,代码更简洁,可读性更高。我的看上去乱了些,循环多有些不好读懂。。

    2.3 切分表达式

    选择切分表达式这题介绍字符数组。

    2.3.1 伪代码

    定义字符型数组;
    输入数组数据;	
    	while ch[i]!=''
    if ch[i]>='0'&&ch[i]<='9' //判断数字
       temp=i;
    while  ((ch[i]>='0'&&ch[i]<='9')||ch[i]=='.')&&ch[i]!=''
        i++; 
    for j=temp to i
            输出ch[j]
          end for
            输出"
    "
    	i--;
    end if
    else if ch[i]=='-'  //判断负号 
     if(ch[i-1]>='0'&&ch[i-1]<='9'||ch[i+1]==')')
            输出- //作为运算符 
     else 
            输出-//作为负数 
    end if
    else if ch[i]=='+'//判断加号 
      if i==0 输出"+"
      else 输出"+
    "
    end if
    else 输出ch[i]
       i++;
           end while
    

    2.3.2 代码截图


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



    超星视频中分装了函数,程序运行更高效,更简单可读性高。

  • 相关阅读:
    RESTful API 设计指南
    理解RESTful架构
    django-mysqlclient_1193错误
    获取当前脚本所在的目录和路径
    20191007
    20191005
    20191001
    20190927
    20190922
    莫比乌斯反演证明
  • 原文地址:https://www.cnblogs.com/chtdeboke/p/14123977.html
Copyright © 2020-2023  润新知