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

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

时间:2017-12-04 00:06:51      阅读:264      评论:0      收藏:0      [点我收藏+]

标签:temp   表情   3.2   amp   tps   bre   [1]   计数   while   

7-3 出生年:

1. 本题PTA提交列表:

技术分享图片

2. 设计思路:

定义控制变量i,j,k,年份year,不同数字个数n,年份取代值digit,统计相同个数变量same;用sum=year+i;累加年份,用digit记录sum的值digit=sum;count=digit%10;a[j]=count;digit=digit/10,存放每个位的数字,对sum重新赋值same=0;将a[i]遍历数组,即嵌套循环for(k=0;k<4;k++)for(j=k+1;j<4;j++)如果(a[k]==a[j])则same++;
如果(same==1&&n==3)break;
如果((same==3||same==2)&&n==2)break;
如果(same==0&&n==4)break;
如果(same==6&&n==0)break;
输出i的值;
用循环for(j=3;j>=0;j--)依次逆序输出年份;

3.代码截图:

技术分享图片

技术分享图片

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

  • 1.一开始没注意到循环条件的自相矛盾,写成for(i=0;i>=0;i++),导致怎么也进不了循环内,后来在同学和老师帮助下改正;
    技术分享图片
    技术分享图片

  • 2.把digit=digit/10写成count=count/10;
    技术分享图片
    技术分享图片

  • 3.后来提交PTA时,发现n=2时错误,自己怎么也弄不懂为什么错,因为答案输出和sample一样,在同学帮助下终于知道了自己少写了一种情况,即same=2时,刚好也有两个不同的情况,而自己只考虑了3个相同时2个不同的情况,这是考虑问题不周全引发的错误;

7-2 求整数序列中出现次数最多的数:

1. 本题PTA提交列表:

技术分享图片

2. 设计思路:

定义控制变量i,j,max存放最大值,,n为输入整数的个数,a[1000]存放整数,count2存放出现次数最多的数,count1统计统计每个整数出现的次数;
输入n,scanf("%d",&n);
循环输入整数存入数组a[1000],for(j=0;j<n;j++)scanf("%d",&a[j]);
令最大值为a[0],max=a[0];
for(i=0;i<n;i++) 令count1=0;
统计出现次数最多的数
for(j=0;j<n;j++)
如果(a[i]==a[j])则count1++;
如果(j==(n-1)&&count1>count2)则 count2=count1;max=a[i];
输出"%d %d",max,count2”;

3.代码截图:

技术分享图片

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

  • 1.一开始把统计次数的循环for(j=0;j<n;j++)写成for(j=i+1;j<n;j++),调试发现这样会使得统计数本身没有统计到,开始时以为干脆把每个数都从头到尾统计一遍就行,现在发现了一种更高效的做法,即写成for(j=i;j<n;j++),这样的话虽然不是每个数都会被完整统计一遍出现次数,只有那个数在出现第一次时才会完整统计个数,但依然可以得出出现次数最多的数
    技术分享图片
    技术分享图片

  • 2.如果条件满足(j==(n-1)&&count1>count2),则 max=a[i];而不是max=a[j];a[i]才是拿来比较的那个数,a[j]是用来将数组遍历一遍的数;
    技术分享图片

7-6 阅览室:

1. 本题PTA提交列表:

技术分享图片

2. 设计思路:

定义time1[1001],time2[10]={0},time1存放初借书数间,time2存放不同天数借书的总时间,将time2的元素全归0;
定义count[10]={0},day,i=0,book=1,其中count统计不同天借阅总次数;
定义h和m,记录时间的时和分;定义ch;
输入day;
while(i<day)
输入("%d %c %d:%d",&book,&ch,&h,&m);
如果(ch==‘S‘&&book!=0)则time1[book]=h60+m;这是记录不同书号开始借的时间
如果(ch==‘E‘&&book!=0&&time1[book]!=0)则time2[i]=time2[i]+h
60+m-time1[book]; count[i]++;当天借阅时间总和;
当book!=0时执行以上循环;
i++;
for(i=0;i<day;i++)
如果(count[i]==0)输出"%d %d\n",count[i],0;
否则输出"%d %0.f\n",count[i],time2[i]*1.0/count[i];

3.代码截图:

技术分享图片

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

  • 1.如果要将time1[1001]归0,则需用循环来做,而不是像初始化定义那样令time1[1001]={0};
    技术分享图片
  • 2.scanf("%d%c%d:%d")时%d和%c之间要空格,即scanf("%d %c %d:%d");
    技术分享图片
  • 3.i此时是0,所以while(i<=day)改为while(i<day);
  • 4.time2[i]=h60+m-time1[book]改为time2[i]=time2[i]+h60+m-time1[book],这样才能做到累加;
    技术分享图片

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

    技术分享图片

三、同学代码结对互评

李琴的代码:
技术分享图片
我的代码:
技术分享图片

1.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?

  • 1.这题是7-4 简化的插入排序,我的代码主要是设置了两个数组,用数组a重新排列后给数组b赋值,而李琴的代码主要是插入排序法,我觉得她的代码比较简洁,但是不大容易理解,我的代码相对复杂,但可能更容易理解,但还是比较喜欢简洁的风格;

    四、本周学习总结:

  • 1.1 C中如何存储字符串?
    存储方式和数组差不多,都是一个字符对应一个存储单元,最后一个一定是0;

  • 1.2 字符串的结束标志是什么,为什么要结束标志?
    是‘\0’,因为对字符数组的操作只能针对有效字符和字符串结束符,所以需要通过检测字符串结束符来判断是否结束对字符的操作;
  • 1.3 字符串输入有哪几种方法?
    方法一:char str[80]="HAPPY";
    方法二:s[0]=‘a‘;s[1]=‘\0‘;
    方法三:while((str(i)=getchar())!=‘\n‘)i++;str[i]=‘\0‘;
  • 1.4 数字字符怎么转整数,写个伪代码?
    number=number*16+hexad[i]-‘0‘;
  • 1.5 16进制、二进制字符串如何转10进制?写伪代码?
    if(s[i]>=‘A‘&&s[i]<=‘F‘)
    n=s[i]-‘A‘+10;
    else if(s[i]>=‘a‘&&s[i]<=‘f‘)
    n=s[i]-‘a‘+10;
    else n=s[i]-‘0‘;
    temp=temp*16+n;

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

详细罗列不明白地方,包括课堂派错题、PTA错题。

3.期中考试小结

3.1 你认为为什么没考好?

3.2 罗列错题。

请在选择题、填空题、改错题、编程题分别举一题说明为什么错了,怎么改?
3.3 下半学期要怎么调整C的学习?

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

标签:temp   表情   3.2   amp   tps   bre   [1]   计数   while   

原文地址:http://www.cnblogs.com/guoruiqian/p/7956938.html

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