一、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中运行,锻炼手写代码的能力。
posted on 2017-12-03 22:54  呜啦  阅读(595)  评论(4编辑  收藏  举报