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


    这个作业属于哪个班级 C语言--网络2011/2012
    这个作业的地址 (https://edu.cnblogs.com/campus/jmu/2020C/homework/11598)
    这个作业的目标 学习数组及相关知识。

    0pta总分截图


    1本章学习总结

    1.1学习内容总结

    • 数组中查找数据
      1:直接
    #include <stdio.h>
    int main()
    {
    int x;
    int i;
    int flag;
    int a[10];
    scanf("%d",&x);
    for(i=0;i<10;i++)
    {
      if(a[i]==x)
       flag=1;
    }
      if(flag)
      printf("%d",i);
    return 0;
    }
    

    2:二分查找

    int a[100];
    int n=10;
    int x; 
    int low;
    int high;
    int mid;
    int loca;
    scanf("%d",&x);
    loca=0;
    low=0;
    high=n-1;
    if((x<a[0]||(x>a[n-1]))
    loca=-1;
    while(loca==0&&low<=high)
    {
    mid=(low+high)/2;
     if(x==a[mid])
    {
      loca=mid;
      printf("%d",loca+1);
      break;
    }
     else if(x<a[mid])
       high=mid-1;
     else
       low=mid+1;
    }
    return 0;
    }
    
    • 数组中插入数据
    for i=0 to n-1
    i++;
    if num>a[i] then
    insert=i;
    end for
    
    • 删除数据
      1:在原数组中删除
    for i=0 to i=n-1
    i++;
    j++;
    if a[i]==x then 
    for j=i to j<n-2 
    j++;
    n--;
    a[j]=a[j+1]
    end for
    

    2:重构数组

    for i=0,j=0 to i=n-1
    i++;
    j++;
    if a[i]!=x then 
    b[j]=a[i]
    end if
    end for
    
    • 排序方法
      1:冒泡
      从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们。通过一遍扫描,则最后一个元素必定是最大的元素。然后用同样的方法对前N−1个元素进行第二遍扫描。依此类推,最后只需处理两个元素,就完成了对N个数的排序。
    	/*冒泡法排序,需要从头到尾进行相邻两个元素比较,对于一组n个数,第一次扫描比较需比较n-1次,第二次需n-2次*/
    	for (i = 0; i < n; i++)
    		scanf("%d", &a[i]);/*读入数据,保存该数组*/
    	for (i = 0; i < k; i++)/*对数组从头到尾全部扫描的次数*/
    		for (j = 0; j < n - 1 - i; j++)/*每次扫描一遍需比较的次数*/
    		{
    			if (a[j] > a[j + 1])/*交换位置*/
    			{
    				temp = a[j + 1];
    				a[j + 1] = a[j];
    				a[j] = temp;
    			}
    		}
    

    2:选择

    	for (i = 0; i = n - 1; i++)
    	{
    		max = i;/*max存放最大值下标*/
    		for (j = i + 1; j < n; j++)/*找最大值下标*/
    		{
    			if (a[j] > a[max])
    				max = j;
    			
    		}/*先找最大值下标,再进行交换下标*/
    				temp = a[max];
    				a[max] = a[i];
    				a[i] = temp;/*最大元素下标与下标为i(i从0—n-1)的元素交换*/					
    	}
    
    • 数组做枚举用法
      扔骰子概率、统计文本单词个数、查找整数

    • 哈希数组用法
      有重复数据

    • 字符数组、字符串特点及编程注意事项
      1、对于字符串组需要有结束标志'',
      2、scanf函数对于字符串的输入' '及' '时停止录入并且会自动在输入字符后加上''的结束符,scanf("%s",str[i])不用加“&”
      3、fgets函数对于字符串的输入对于' '会收入,并自动加上''结束标识符,fgets(str,数组长度,stdin)
      4、定义数组长度时,应比实际个数+1('')

    2pta实验作业

    2.1题目名:删除数字字符

    2.11伪代码

    for i=0 to n-1
    if 某个元素不是数字字符(a[i]!=x)
    then 将该元素存入数组(a[j++]=a[i])
    end if
    end for
    处理过的字符串加上结束表标志''
    

    2.12代码截图

    2.13同学代码及各自特点

    吕以晴的代码截图

    她的特点:不用重新将非数字字符再赋值到数组中直接输出
    我:将非数字字符再赋值到数组中,并还得加上结束符''

    2.2鞍点

    2.21伪代码

    for i=0 to n-1
    i++
    for j=0 to n-1
    j++
    if 同行比较列,若某一列的数大于col上的数,则交换列下标(a[i][j] >= a[i][col]   col = j)
    end if
    end for
    此时找到某一行上最大的数所在的列 (flag=1)
    for k=0 to n-1
    k++
    if 对刚才找到的列比较不同行,若更大则没找到(a[k][col] < a[i][col])
    没找到鞍点,退出循环,继续下一轮寻找(flag=0)
    end if
    end for
    if 找到鞍点,退出循环(flag)
    end if
    end for
    if 找到鞍点,输出下标
    else 输出NONE
    end if
    

    2.22代码截图

    2.23与超星的区别

    超星:通过判断下标的值来判断是否找到鞍点。优点:少设一个变量,让代码更简洁。
    我:设一个变量flag通过改变flag来判断是否找到鞍点。缺点:多设一个变量,增加代码的复杂性。

    2.3切分表达式

    2.31伪代码

    while i<n
    if 某一元素为'(' ')' '*' '/'
    then 输出"该元素 "
    i++
    continue
    end if
    if 某一元素是数字字符或'.'
    if 该元素的后一元素也是数字字符或'.'
    then 输出"该元素"
    else
    输出"该元素 "
    i++
    continue
    end if
    if 某一元素为'+'或'-'
    if i==0或前一个元素为'('
    then 输出该元素
    end if
    else
    输出"该元素 "
    i++
    end if
    end while

    2.32代码截图

    2.33与超星视频做法区别

    看了超星后做的题目,没有区别。
    超星做法的优点:将切分表达式的功能分装成函数,使代码分块,让人更易看懂。

  • 相关阅读:
    computed的用法
    地址列表展开功能/默认选中功能
    简易编辑器
    用vue做todolist
    用vue做的购物车结算的功能
    如果数据返回没有那个字段,怎么加上去?
    vue中全局filter和局部filter怎么用?
    editorconfig
    eslint 配置
    react typescript 单元测试
  • 原文地址:https://www.cnblogs.com/zxcvbnmlk/p/14129886.html
Copyright © 2020-2023  润新知