码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-12-03 22:46:30      阅读:339      评论:0      收藏:0      [点我收藏+]

标签:作业   sum   getch   happy   调用   博客   运行   插入   ret   

一、PTA实验作业(4分)

题目1:求整数序列中出现次数最多的数

1. 本题PTA提交列表(要提交列表,不是结果)

技术分享图片

2. 设计思路(用代码表示扣分)

  • 定义number为要输入的数字个数,count[1000]存放重复出现的数字次数,a[1000]存放输入的N个整数,循环变量i,j,n存放数字重复次数最多的次数
  • 输入number
    将count[i]全部赋值为0
    将序列存放到a[i]中for(i=0;i<number;i++){
    scanf("%d",&a[i]);}
    if(a[i]==a[j])
    count[i]=count[i]+1;//出现重复数字count数组将累加1
    for(i=0;i

3.代码截图(注意,截图,截图,截图。不要粘贴博客上。不用用···语法去渲染)

技术分享图片

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

  • 1.一开始当a[i]==a[j]时我直接用n来累加次数,结果每次都出现随机数。
    技术分享图片

  • 解决办法:看到运行结果之后我就知道了问题所在,不只是一个数可以重复出现,可以几个数都有重复出现过而我要把这些数都记下来然后再比较哪个数出现次数最多,可是我的n只能存放一个数,这个时候我有想到用数组来解决,但是我不知道数组要怎么累加,所以就去百度了一下,最后得到了结果count[i]=count[i]+1,这样重复数字出现时就可以累加多组数据。

  • 2.用了数组count来计数后出现次数最多的数字的次数是对了,但是出现次数最多的数字还是没法正确输出,输出的还是一个随机数。
  • 解决办法:后来我仔细回去检查一下代码发现我输出的n和对应的最多数是不对应的,所以后来我就加了一条语句让出现次数最多的数的下标赋给j防止被更改然后输出a[i]就对了。

题目2:简化的插入排序

1. 本题PTA提交列表(要提交列表,不是结果)

技术分享图片

2. 设计思路(用代码表示扣分)

  • 定义变量x为要插入序列的数,N为输入整数个数,i为循环变量,数组a[100]
    输入N,X
    输入数组scanf("%d",&a[i]); if(a[i]>=a[i-1]);}//保证输入的序列是有序的
    a[i]=x;
    for(i=N-1;i>=0;i--){
    if(a[i]>x){//将x插入序列中
    a[i+1]=a[i];
    a[i]=x;}}
    输出a[i];

3.代码截图(注意,截图,截图,截图。不要粘贴博客上。不用用···语法去渲染)

技术分享图片

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

  • 1.插入排序时x插入到序列中后,后面的数都被更改了
    技术分享图片

  • 解决办法:当x比a[i]小时插入序列中同时a[i]=a[i+1],a[x]=x这样就不会被更改。
  • 2.序列没有被更改但是输出还是不对
    技术分享图片
  • 解决办法:看来看去没有发现什么问题,用devc调试后发现我的循环条件好像有问题,我之前的循环条件是for(i=0;i

题目3:判断上三角矩阵

1. 本题PTA提交列表(要提交列表,不是结果)

技术分享图片

2. 设计思路(用代码表示扣分)

  • 定义T为待测矩阵的个数,n为矩阵的行数和列数,i,j,k为循环变量,flag用来判断矩阵是否为上三角矩阵,a[i][j]存放矩阵
    输入T
    for(k=1;k<=T;k++){
    输入n和数组a[i][j]
    flag=1;
    for(i=0;i<n;i++)
    for(j=0;j

3.代码截图(注意,截图,截图,截图。不要粘贴博客上。不用用···语法去渲染)

技术分享图片

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

  • 1.一开始没有注意还要输入几个矩阵,当时的程序无法输入多个矩阵进行判断
  • 解决办法:在开头加上条件for(k=1;k<=T;k++)将接下来的程序都放入这个循环中就可以了。
  • 2.第二个出现的问题比较蠢,,,,题目说是上三角矩阵的判断我就直接用i<j了,根本没有在意题目真正想要我们判断的是下三角。。。。。
  • 解决办法:将i
  • 3.不管我输入的矩阵是不是上三角矩阵,程序输出的都是YES
    技术分享图片
  • 解决办法:这个问题我真的找了好久都不知道哪里错了,在调试的过程中无意将flag=1;的条件放在判断下三角矩阵的循环前面然后就可以正常输出了,可是我一直不知道为什么,直到后来经过室友提醒才知道,flag=1放在最前面定义变量的位置时第一次循环是没有问题的,但是输入第二个矩阵时flag的值就没办法变化导致第二个矩阵无法进行正确的判断。

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

三、同学代码结对互评(1分)

1.互评同学名称

2.我的代码、互评同学代码截图(此处截图核心代码就好,不一定截图全部代码,图上指明是谁的代码。)

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

四、本周学习总结(3分)

1.你学会了什么?

1.1 C中如何存储字符串?

  • C将字符串作为一个特殊的一维字符数组来处理存储内容如下:
    技术分享图片

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

  • 结束标志是‘\0’,结束标志用来控制是否结束循环

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

  • 有三种,char a[6]={‘H‘,‘A‘,‘P‘,‘P‘,‘Y‘,‘\0‘},char a[6]={"HAPPY"},char a[6]="HAPPY"

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

  • 定义变量i,字符数组a[10],number为整数数字
    输入字符串
    i=0;
    while((a[i]=getchar()!=‘\n‘)
    i++;a[i]=‘\0‘;
    for(i=0;a[i]!=‘\0‘;i++)
    if(a[i]>=‘0‘&&a[i]<=‘9‘)
    number=number*10+a[i]-‘0‘;
    输出number

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

  • 定义变量i,十进制数number,16进制字符串a[100],
    输入字符串
    i=0;
    while((a[i]=getchar()!=‘\n‘)
    i++;a[i]=‘\0‘;
    number=0;
    for(i=0;a[i]!=‘\0‘;i++)
    if(a[i]>=‘0‘&&a[i]<=‘9‘)
    number=number16+a[i]-‘0‘;如果是转为二进制就改为number=number2+a[i]-‘\0‘
    if(a[i]>=‘A‘&&a[i]<=‘Z‘)
    number=number16+a[i]-‘A‘+10;如果是转为二进制就改为number=number2+a[i]-‘A‘+10
    if(a[i]>=‘a‘&&a[i]<=‘z‘)
    number=number16+a[i]-‘a‘+10;如果是转为二进制就改为number=number2+a[i]-‘a‘+10
    输出十进制数number

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

  • 1.如何灵活的在一个题目中运用一个数组来存放另一个数组里的元素,不是很清楚。就像这次pta中数组循环左移这题,我本来的思路是要左移m位,那就先将m位以后的数输出在将原本在m以前的数放在后面输出,这个时候就想到了用另一个数组先存放a[i]中的元素,因为前面输出m以后的数后a[i]已经被改变了,我的确可以做到将a[i]的值给另一个数组,但是当要输出另一个数组中的前m位时就怎么也不对,最后不得不放弃这个思路。
  • 2.输出这样形状的数,还是有些不会
    技术分享图片
  • 之前不用数组时好像懂得了一点门道,可是要用数组输出就不会了

3.期中考试小结

3.1 你认为为什么没考好?

  • 我这次主要是选择题失分特别严重,虽然其他题也没得多少分,,,,但是选择题这次得分就得了几分,才对了三分之一。明显的可以看出基础非常薄弱,也因为不是对这些知识点很熟练,在选择题上就花了太多时间,导致后面两题编程题都没有时间写,而第一题编程题也是虽然做过却还是不能全对。还有一点就是阅读代码的能力太弱了,就像分析程序的第一题,都没有看出来它是要多次输出sum的,这几个方面的缺陷都很明显,也很严重。

3.2 罗列错题。

  • 选择题
    将十六进制数(1EB)转化成十进制数,那个时候对十六进制的数一点也不熟
    解法应该是: E=16进制中的14,B=16进制中的11,所以十进制数位11616+14*16+11=491
  • 填空题
    阅读程序的第四题,当时看的太急了,没有看到题目调用了两次函数,而且我现在也不知道当时明明没有看到有两个函数调用,我为什么还会输出两个数,,,,,
    题目:
    #include

  • 改错题
    这次改错题没有错那么多,就是第三个程序,第七空那里那个空是这样的while( !=‘\n‘),我当时直接就把ch填进去了,根本没有想到ch是无法输入的,应该填的是ch=getchar()
  • 编程题
    第一个编程题猜数字
    这是我考试时写的代码,确实可以正常执行,也可以猜数,但是不能多次猜,猜了一次就退出循环了,而且不可以产生随机数,要猜的数是自己输入的。

    #include<stdio.h>
    int main(void)
    {
    int yournumber,mynumber,i,count=0;
    for(i=1;i<=10;i++){
        scanf("%d",&mynumber);
        scanf("%d",&yournumber);    
        count++;
        printf("your guess is %d",yournumber);
        if(yournumber==mynumber)
        printf("You are right"); break;
        if(yournumber!=mynumber){
            if(yournumber>mynumber)
            printf("your guess is lager than num,try again: ");
            count++;
            if(yournumber<mynumber)
            printf("your guess is smaller than num,try again: ");
            count++;
        }
    }printf("guess %d times",count);
    return 0;
     } 

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

标签:作业   sum   getch   happy   调用   博客   运行   插入   ret   

原文地址:http://www.cnblogs.com/1795759388-/p/7966748.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!