zoukankan      html  css  js  c++  java
  • 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);输入字符串时输入' '、 ' '时停止录入并且会自动在输入字符后加上''的结束符。
    fgets(num,100,stdin);输入字符串时输入' '结束录入并且会将回车键录入,后在其末尾加上''的结束符

    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("
    ");
    
        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]!='';i++){
        if(ch[i]>='0'&&ch[i]<='9'){
            item=i;
            while(((ch[i]>='0'&&ch[i]<='9')||ch[i]=='.')&&ch[i]!='')
                i++;
            for(j=item;j<i;j++)
                printf("%c",ch[j]);
                i--;
            putchar('
    ');
        }
        else if(ch[i]=='-'){
            if(ch[i-1]>='0'&&ch[i-1]<='9'||ch[i+1]=='(') {
                    putchar('-');
                    putchar('
    ');
            }
            else
                putchar('-');
        }
        else  if(ch[i]=='+') {
            if(i==0)
                printf("%c",ch[i]);
            else printf("%c
    ",ch[i]);
        }
        else{
            printf("%c",ch[i]);
            putchar('
    ');
        }
        }
        return 0;
    }
    

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

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

  • 相关阅读:
    [SDOI2016]排列计数
    Broken robot
    环路运输
    naptime
    Accumulation Degree
    选课
    没有上司的舞会
    金字塔
    Polygon
    石子合并
  • 原文地址:https://www.cnblogs.com/WangBo020809/p/14110810.html
Copyright © 2011-2022 走看看