zoukankan      html  css  js  c++  java
  • C语言博客作业--一二维数组

    C语言博客作业--一二维数组

    一、PTA实验作业

    题目1:简化的插入排序

    1. 本题PTA提交列表

    2. 设计思路

    定义循环变量i,交换变量时的暂存变量t,第一行输入几个数据n,判断标志变量flag=0,插入的变量number
    输入n,定义一维数组num[n+1]为有序序列
    for i=0 to n-1
        输入num[i]
    end
    输入要插入数
    for i=0 to n
        如果flag为0且number>=num[i] 结束这轮循环,进入下一轮循环
        否则交换num[i]和number并且flag 为1
    end
    for i=0 to n
        输出num[i]
    end
    

    3.代码截图

    4.本题调试过程碰到问题及PTA提交列表情况说明。

    多种错误
    1:找到了插入的位置,最后一位的值异常
    分析:因为我用的是continue,遍历数组,如果number比num[i]小不再跳过后面的语句,所以能找到正确的位置,且刚开始交换出来的数会比后面的数小,会继续叫唤下去,但是到达最后一位时由于,没定义最后一位数,比较结果无法确定,所以排序后最后一位无法确定。
    解决方法:引入flag,判断是否进行了交换,一旦进行交换,便一直交换到数组结束

    2:格式错误
    没有仔细看题目,以为还是和之前一样,最后一个数没空格,以为很对,还是错误
    解决方法:输出后跟空格就可以

    题目2:加法口诀表

    1. 本题PTA提交列表

    2. 设计思路

    定义循环变量i,j,k,输入n和repeat
    输入repeat
    for k=1 to repeat
        输入n
        定义二维数组array[n+1][n+1]
        for i=0 to n
            for j=0 to n
                array[i][j]=0初始化数组为0
            end
        end
        for j=1 to n
            array[0][j]=j首列为递增数列
        end
        for i=1 to n
            array[i][0]=i首行为递增数列
        end
        for i=1 to n
            for j=1 to i
                题目要求位置的数等于列数加行数
            end
        end
        for i=0 to n
            for j=0 to n
                if首行首列输出+
                else if到每行末或为0时,换行并结束该行输出
                else
                    if 最后一个输出array[i][j]不加空格
                    else输出array[i][j]并占4个空格
            end
        end
    

    3.代码截图

    4.本题调试过程碰到问题及PTA提交列表情况说明。

    格式错误
    刚开始全部的输出%-4d,输出结果看着都一样,到就是格式错误
    解决方法:加了几句判断条件,让它在每行最后一个输出时不加空格

    题目3:杨辉三角

    1. 本题PTA提交列表

    2. 设计思路

    定义i,j,k为循环变量,n为输入的数
    输入n
    定义二维数组array[n][n]
    for i=0 to n-1
        for j=0 to n-1
            array[i][j]=0初始化数组
        end
    end
    for i=0 to n-1
        array[i][0]=1第一列赋值为1
    end
    for j=0 to n-1
        array[0][j]=0第一行除第一个数赋值为0
    end
    for i=1 to n-1
        for j=1 to n-1
            array[i][j]等于上一行数加左上方的数
        end
    end
    for i=0 to n-1
        for j=0 to n-1
            if为首行或行数和列数相等,输出array[i][j]换行,结束该行输出
            else 输出%4d的array[i][j]
        end
    end
    

    3.代码截图

    4.本题调试过程碰到问题及PTA提交列表情况说明。

    格式错误
    题目说每个数据占4列,因为前面的题目,便以为是%-4d,结果写出来后格式错误,有想办法去掉后面多出来的空格,还是格式错误
    解决方法:看了同学的代码,意识到了是哪里出错,很快就改对了

    二、截图本周题目集的PTA最后排名。

    三、同学代码结对互评

    1.互评同学名称

    李金谣

    2.我的代码、互评同学代码截图


    3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。

    • 不同点:
      1.数组定义:
      我的代码是先输入长度再定义数组,同学的代码是定义数组长度,再决定用的范围,而且他定义两个数组,我只有一个。
      2.数列顺序的重新排列
      我是在原有的数组中进行操作,同学是将原来的数组中的数转移到另一个数组中。
      3.其他不同
      同学的代码还添加了几种条件的判断才可以实现题目要求的功能,而我的代码不用

    • 各自优势
      我的优势:代码长度短,数组的使用较少,根据要求定义数组长度,节省使用内存
      同学的优势:思路直白简单,只要将数组的数转移到宁一个数组即可,比起我还要改变原有数组的值,操作简单。

    • 代码风格
      我更喜欢我的代码,比较简短,不用判断数组为0时的情况,而且数组的定义较少,能更有效利用数组。

    四、本周学习总结

    1.你学会了什么?

    1.1 C中如何存储字符串?

    定义字符型数组

    1.2 字符串的结束标志是什么,为什么要结束标志?

    结束标志:‘’
    原因:定义字符数组是由于无法直接知道字符串中字符个数,通常会定义一个长度远大于要存入字符串的长度,所以如果没有结束标志,数组将全部遍历完才能停止,这样可能造成运行超时,或者无法预料的错误,所以要在使用的字符范围后加上结束标志。

    1.3 字符串输入有哪几种方法?

    设ch为字符变量或字符数组的数组名
    1.scanf("%c",&ch);输入单个字符
    2.ch=getchar();输入单个字符
    3.scanf("%s",ch);输入字符串,不用&,直接放数组名,遇到空格停止
    4.gets(ch);输入字符串,可以吸收空格

    1.4 数字字符怎么转整数,写个伪代码?

    单个转换:数字字符-‘0’
    多位转换:
    假设字符数组中有a[1]='1',a[2]='2',a[3]='3',转换成123
    1.定义循环变量i,sum=0
    2.i=0
    3.如果a[i]!='',进行以下循环
    4.sum=sum*10+(a[i]-'0')
    5.i++

    1.5 16进制、二进制字符串如何转10进制?写伪代码?

    假设字符数组a[]中存了该16进制数或二进制数的每一位

    • 16进制

    1.定义循环变量i,sum=0
    2.i=0
    3.如果a[i]!=''进行以下循环
    4.如果a[i]是数字字符,则sum=sum16+(a[i]-'0')
    5.如果a[i]是A-F,则sum=sum
    16+(a[i]-'A'+10)
    6.如果a[i]是a-f,则sum=sum*16+(a[i]-'a'+10)
    7.i++

    • 二进制

    1.定义循环变量i,sum=0
    2.i=0
    3.如果a[i]!='',进行以下循环
    4.sum=sum*2+(a[i]-'0')
    5.i++

    2.本周的内容,你还不会什么?

    虽然会了一点点编程,但是明显感觉自己的代码量明显不够,思路跟不上,同样的题要花比别人长的时间才能写出,而且有些错误要调很久才能完全正确,对于字符数组要用的范围完全不能掌握,提交pta运行时错误只能不断扩大数组范围。

    以下为错题:

    1.有以下定义:char x[ ]="abcdefg"; char y[ ]={'a', 'b', 'c', 'd', 'e', 'f', 'g'}; 则正确的叙述为()。
    A、数组x和数组y等价
    B、数组x和数组y的长度相同
    C、数组x的长度大于数组y的长度
    D、数组x的长度小于数组y的长度
    答案:C,错选B
    数组中,字符与字符串存到数组中长度是不同的,字符串存入数组时会自动添加一个结束符号‘’,因而字符串会比单个字符输入多一个长度

    2.输入10个整数,用选择法排序后按从小到大的次序输出。

    #define  N   10
    main( )
    {
    int  i,j,min,temp,a[N];
    for(i=0;i<N;i++)
    scanf("%d",  【1】);
    printf("
    ");
    for(i=0;  【2】;  i++)
    {min=i;
    for(j=i;j<N;j++)
    if(a[min]>a[j])  【3】 ;
    temp=a[i];
    a[i]=a[min];
    a[min]=temp;
     }
    for (i=0;i<N;i++)
    printf("%5d",a[i]);
    printf("
    ");
    }
    

    参考答案
    &a[i]
    i<N-1
    min=j
    我的作答&a[i] i<N a[min]=a[j]
    应该是下标交换即可

    3.期中考试小结

    3.1 你认为为什么没考好?

    1.选择题的题目基本错在了较为基础的内容,如赋值语句正确定义,逻辑判断符的优先级,不同类型变量的作用域和生存周期,函数的形参与实参等
    2.写出程序运行结果题目主要是对递归的算法不熟悉,误判了输出的次数
    3.程序填空题主要错在对科学计数法没有熟练掌握,及粗心大意
    4.手写程序题真的是不熟练,以前都是在电脑上编程,手写的一下子写不出来
    基础没有掌握得一清二楚,选择题犹豫较长时间,分析程序时花的时间较多,说明在代码量方面还有不足,导致最后的程序题只用了较短的时间就写完,其质量也不好。总之,基础不牢固,时间没安排好。

    3.2 罗列错题。

    选择题:
    忽略B选项后面还有||,当&&前面0时以为整个式子就是0,其实还要与后面的式子比较,因为||后面是1,所以整个式子还是1
    填空题:

    第7空只填了ch,还要加=getchar,当时对字符输入还不熟悉所以填的太快就错了
    改错题:
    做的时候只找到了4个错误,怕被扣分,不敢乱改,term=-termxx/(n+1)(n+2);//改为term=-termxx/((n+1)(n+2));未找出
    编程题:

    做完前面的题,这题没剩多少时间,所以按照以前写过的和这题相似的题的代码写了一遍
    答案:

    #ifndefFUNC
    #defineFUNC
    #include<stdio.h>
    #include<math.h>
    doubleFactorial(intnum);
    doubleCnr(intn,intr);
    #endif
    doubleFactorial(intnum)
    {
    inti;
    doublefac=1;
    for(i=1;i<=num;i++)
    fac*=i;
    returnfac;
    }
    doubleCnr(intn,intr)
    {
    doublek;
    k=Factorial(n)/Factorial(r)/Factorial(n-r);
    returnk;
    }
    intmain(){
    intn,r;
    intx=15,y=0;
    doublek;
    printf("输入:");
    scanf("%d%d",&n,&r);
    while(n!=0||r!=0){
    }
    printf("输入:");
    scanf("%d%d",&n,&r);
    }
    printf("程序结束");
    return0;
    }
    

    3.3 下半学期要怎么调整C的学习?

    熟读书本重要知识内容,多看看别人好的代码,提高自己写代码和读代码的速度。

  • 相关阅读:
    January 25th, 2018 Week 04th Thursday
    January 24th, 2018 Week 04th Wednesday
    January 23rd, 2018 Week 04th Tuesday
    January 22nd, 2018 Week 04th Monday
    January 21st, 2018 Week 3rd Sunday
    January 20th, 2018 Week 3rd Saturday
    January 19th, 2018 Week 3rd Friday
    January 18th, 2018 Week 03rd Thursday
    January 17th, 2018 Week 03rd Wednesday
    January 16th, 2018 Week 03rd Tuesday
  • 原文地址:https://www.cnblogs.com/doimpossible/p/7944987.html
Copyright © 2011-2022 走看看