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

    一、PTA实验作业

    题目1.简化的插入排序

    1. 本题PTA提交列表

    2. 设计思路

    定义数组a[10],x为插入的整数,n存放n个整数,i为循环变量,temp为中间值;
    输入数据n
    for(i=0;i<n;i++)
        将输入的数据赋值给数组元素
    输入要插入的数x
    for(i=0;i<n;i++){
    	如果x<a[i],
    	    temp=a[i];
              a[i]=x;
    	    x=temp;
    }
    循环结束后将最后一个值赋给a[i] 
    for(i=0;i<n+1;i++)
    	输出数组元素  
    

    3.代码截图

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

    ①初步代码,3插入序列中,但最后一个7输出错误。

    ②初步改正,循环结束后将x赋给最后一个数组元素,题目中一组数据验证正确。

    ③贴到pta中,提示错误,将0和8代入验证发现错误。

    ④最后一个数组元素赋值错误,应该将x赋值给它,而不是temp。


    ⑤修改后验证正确。

    题目2.出生年

    1. 本题PTA提交列表

    2. 设计思路

    定义数组a[4],循环变量i,j,year1,year2备份年份,old为岁数,year为年份,n为规定不同数字个数,count存放实际不同数字个数;
    赋值count=4; 
    输入年份year,不同数字个数n;
    备份year,year2=year;
    while(year2>0){
    	备份year2,year1=year2;
    	for(i=0;i<4;i++)
    	    将年份的各位数赋给数组元素;
    	for(i=0;i<4;i++)
    	    for(j=i+1;j<4;j++)
    	        算出不同数字的个数:
    			如果a[i]==a[j],count--;跳出循环;
    	如果count==n
    	    年龄old=year2-year;
    	    输出年龄和年份;
    		跳出循环;
    	否则
    	      年份year2递增继续循环 
    		count重新赋值为4进行循环 
    } 
    
    

    3.代码截图

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

    ①初步代码,输出结果错误。

    ②先修改输出格式,上网查询了如何在输出结果前加上0并初步修改代码。

    ③初步修改后输出格式正确,但答案错误,通过调试发现数组元素为0时反复比较,使count重复递减。

    ④应该在比较a[i]等于a[j],count减一后跳出循环进行下一组数据的比较,同一个a[i]与几个a[j]比较会使count递减重复进行。

    题目3.加法口诀表

    1. 本题PTA提交列表

    2. 设计思路

    定义数组a[11][11],i,j,k为循环变量,n为整数个数,repeat为循环次数;
    输入repeat;
    for(k=1;k<=repeat;k++){
    	输入n表示整数个数
    	for(i=0;i<=n;i++){
    		for(j=0;j<=n;j++){
    			如果i==j==0,输出加号;跳过后面的语句继续循环
    			如果是第一行的加数,
    			    a[0][j]=j
    			否则,
    			    如果是第一列的被加数, 
    				    a[i][0]=i
    			    否则 
    				    a[i][j]=i+j
    			如果是下三角的数或第一行的数, 
    			    如果是一行的最后一个数,输出每行最后一个数后面没有空格
    				否则,输出数组元素,占四列
    		}
    		输出换行
    	} 
    } 
    

    3.代码截图

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

    ①初步代码,输出答案错误。

    ②调试后发现在输出加号后程序继续进行并输出,此处错误。

    ③加上break使程序在输出加号后跳出此循环继续下一个循环,发现改完后第一行的加数没有输出。

    ④把break改成continue,仅跳过后面的语句,不跳出循环,改完后输出正常。

    ⑤提交后提示格式错误,于是在每行最后一个数的输出后面加#号输出,发现第一行最后一个数没有考虑到。

    ⑥代码中加上第一行最后一个数后面不加空格的条件。

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

    PTA排名

    PTA提交列表


    三、同学代码结对互评

    互评同学名称:田亚琴
    互评题目:出生年

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

    我的代码

    同学的代码

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

    不同:
    ①将年份的各位数赋给数组元素中。田亚琴同学的是通过一个个算出后赋值;我是通过循环得出后赋值。
    ②找出有几个数字不同中。田亚琴同学另外定义一个数组存放0~9的数,再统计出现不同数字的个数;我是通过双重循环统计相同数字的个数。

    各自优势:
    我目前还比较少碰到需要定义两组数组的题,田亚琴同学的思路值得学习,比如a[num[i]]++的用法。

    四、本周学习总结

    1.你学会了什么?

    1.1 C中如何存储字符串?

    字符串可以存放在一维字符数组中。

    • ①字符串的储存——数组初始化
      例:static char s[6]={'H','a','p','p','y','\0'};static char s[6]={''Happy''};
      static char s[6]=''Happy'';
    • ②字符串的储存——赋值和输入
      例:static char s[80]; s[0]='a'; s[1]='\0'; static char s[80]="a";

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

    • 结束标志:'\0'
    • 字符串没有显式地给出有效字符的个数,只规定在字符串结束符'\0'之前的字符都是字符串的有效字符,一般通过比较数组元素的值是否等于'\0'来决定是否结束循环,即用结束符'\0'来控制循环。

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

    • ch=getchar();
    • scanf("%s",s); //假设s为字符型数组
      注:该函数遇回车或空格输入结束,并自动将输入的数据和字符串结束符'\0'送入数组中。
    • gets(s);
      注:函数gets()输入的字符串允许带空格,遇回车输入结束。

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

    定义字符数组str[10],number为输入的数,i为循环变量;
    赋值i=0;
    while((str[i]=getchar())!='\0')
        i++;
        遍历数组str[i]
    赋值number=0;
    for(i=0;str[i]!='\0';i++)
        如果str[i]>='0'&&str[i]<='9'
            number=number*10+str[i];
    输出number;
    

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

    16进制字符串转10进制

    定义变量number存放十进制数,a [ i ]存放十六进制字符串,i为循环变量;
    number=0;
    for( i=0 ; a[i]!='\0' ; i++);
        如果a[i]为字符0~9:number=number16+a[i]-'0';
        如果a[i]为字符A~Z:number=number16+a[i]-'A'+10;
        如果a[i]为字符a~z:number=number*16+a[i]-'a'+10;
    输出十进制数number;
    

    二进制字符串转10进制

    定义数组str[80]存放2进制数,number存放十进制数,i为循环变量;
    i=0;
    输入字符串 
    while((str[i]=getchar())!='\0')
        i++;
        遍历数组str[i]
    赋值number=0;
    for(i=0;str[i]!='\0';i++)
        number=number*2+pow(i,2)
    输出十进制数number
    

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

    PTA
    图书馆一题,对题意的理解还不太清晰,没想出具体思路,因此还没写。

    课堂派
    预习时对字符串的输入输出方式等一些知识点没有理解透,导致改错题时有的明显错误没改出来。
    比如题目提示有多个单词,单词之间有空格隔开,因此应该用gets(sent)。

    3.期中考试小结

    3.1 你认为为什么没考好?

    • 平时做题过于依赖编译器,自己寻找代码错误点及手写代码的能力不足,在平时课堂互动时手写代码就有困难,但平时做题都用devc可以调试,所以没太注重这个问题,到考试时写编程题就力不从心。
    • 选择题中考到的一些基础知识点不熟悉,比如进制转化、基础概念。导致选择题花的时间多,正确率不高。
    • 平时做课堂派的预习作业时,碰到一些要求填写输出结果的题,遇到不会做的就把代码打到devc中运行出结果,缺乏自身的思考,因此这次期中考分析程序的题目耗时长,得分低。
    • 第一次考试,对如何分配时间没有一个正确的概念,到编程题时没时间写。

    3.2 罗列错题。

    • 选择题
      不熟悉运算符的用法,本题中结合方向应该是从右向左。

    • 分析程序
      ASCII码不熟悉,本题中输出的应该是ASCII码对应的大写字母,而我输出的是ASCII码。

    • 阅读程序填空
      没有认真思考,t为double类型,i为int类型,因此应该是1.0不是1。

    • 改错题
      分析程序时间花太多,本题改错题没用太多时间看,因此有些错误点没找出来。
      正确答案

    • 编程题
      不知道如何做到产生随机数,写代码的时候没有先写伪代码打草稿,写出来的代码拼拼凑凑也没有注释。


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

    • 逐渐锻炼阅读代码的能力,在做课堂派预习作业时,尽量自己阅读代码得出结果,实在不会再用devc运行,得出结果后再此阅读代码验证答案,如果还不懂可以借助调试器观察其变量变化过程。
    • 经常翻看博客园中的知识总结,巩固书中的基础知识、概念。
    • 尝试写代码前先写在纸上,再打到devc中运行,锻炼手写代码的能力。
  • 相关阅读:
    《数据结构》树与二叉树
    C/C++ 一点笔记(1)
    c#中隐藏基类方法的作用
    VS2010 灵活运用快捷操作功能(新手必看)
    C# 之类复制 MemberwiseClone与Clone(深 浅 Clone)
    DLL笔记
    批处理文件
    .NET Remoting(一)
    MSI安装数据库
    关于用户角色权限的一点想法(RBAC)
  • 原文地址:https://www.cnblogs.com/smtwula/p/7966250.html
Copyright © 2011-2022 走看看