C语言博客作业--一二维数组
一、PTA实验作业
题目1:7-7 找鞍点
1. 本题PTA提交列表
2. 设计思路
{
定义变量n,j,i,flag1,flag2
输入阶数n
定义n阶二维数组a[n][n]
for i=0 ;i<n ; i++{
for j=0 ;j< n; j++
输入数据a[i][j];
}
for i=0 ;i<n ; i++{
for j=0 ;j< n; j++
初始化判断flag1=0;flag2=0;
for k=0 ;k<n ;k++{
if 该行中有比a[i][j]更大的数据
flag1=1;
if 该列中有比a[i][j]更小的数据
flag2=1;
}
if flag1=flag2=0 {
输出鞍点位置 i ,j
结束程序
}
}
if flag1,flag2不全为0{
输出 NONE
结束程序
}
}
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
碰到的问题:最开始值顾着找鞍点,忘了考虑鞍点不存在的情况,没有用flag判断,引用flag判断后找到鞍点后没有结束程序导致又输出了NONE
解决办法:在输出鞍点所在位置后直接结束程序
题目2:7-8 加法口诀表
1. 本题PTA提交列表
2. 设计思路
{
定义变量repeat,number,n,i,j,flag
定义二维数组a[10][10]
输入总次数repeat
for ;repeat>0 ;repeat-- {
输入最大加数n;
初始化数据number=1
输出加号'+';
for i=1 ;i<n ;i++{
赋值让第一行第一列都为 1 2 3 ... n
}
for i=1 ;i<n;i++ {
for j=1;j<=i;j++
计算下上角的数值,等于该元素所在行的第一个数加所在列的第一个数
}
for i=0,j=1;i<n;i++
输出第一行除加号外身剩下的数据,最后一个输出后换行
for i=1; i<n;i++{
for j=0; j<i;j++
输出下三角的数据,在输出对角线数据时换行
}
}
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
碰到的问题:每次循环开始时没有初始化number的值,导致下一轮循环时出现错误
解决办法:每次循环开始时令number=1
题目3:7-10 杨辉三角
1. 本题PTA提交列表
2. 设计思路
{
定义数组n[100][100]
定义变量n ,i,j
输入n
for i=0 ;i<n ;i++{
for j=0 ;j<n ;j++
初始化数据n[i][j]=0
}
for i=0 ;i<n ;i++
赋值第一列全为1 n[0][i]=1
if n>0&&n<10{
for i=1;i<n;i++{
for j=1;j<n;j++
/*每个数据等于该数据上一行数据加上左上方的数据 */
a[i][j]=a[i-1][j]+a[i-1][j-1];
}
for i=0;i<n;i++{
for j=0;j<=i;j++
输出数据n[i][j]
换行 putchar('\n');
}
}
return 0;
}
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
碰到问题:只令a[0][0]=1;循环中从j=0开始,虽然输出没有问题,但是循环过程中有a[i][j-1]导致数组越界
解决办法:让第一列都为1,这样就能从j=1开始计算而不会导致数组越界
二、截图本周题目集的PTA最后排名
三、同学代码结对互评(1分)
1.互评同学名称
朱杰伟
2.我的代码、互评同学代码截图(此处截图核心代码就好,不一定截图全部代码,图上指明是谁的代码。)
我的代码截图:
同学代码截图:
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。
不同:我的代码用了一个二维数组,而朱同学用了两个以为数组;我在计算下三角的数值时,直接用了a[i][j]=a[i-1][j]+a[i-1][j-1],而朱同学通过对j,i的判断得出相应的数值
各自的优势:我的代码更简洁,直接计算除第一列外的每一个数组,朱同学的代码用了分支判断对每种情况进行计算
更喜欢哪种代码风格:更喜欢我的代码风格,我的代码较为简单,判断和计算过程也较少
四、本周学习总结(3分)
1.你学会了什么?
1.1 C中如何存储字符串?
定义字符型数组存放
1.2 字符串的结束标志是什么,为什么要结束标志?
结束的标志位 '\0';当不知道输入的字符串的长度是可用'\0'判断字符串是否结束
1.3 字符串输入有哪几种方法?
三种。
- scanf("%s",a),输入以空格结束的字符串
- scanf("%c",&a[i])/(a[i]=getchar()),利用循环输入每一个字符
- gets(a),输入以回车结束的字符串
1.4 数字字符怎么转整数,写个伪代码?
{
...
初始化sum=0;
for i=0 ;a[i];i++{
if a[i]为数字字符
sum=sum*10+(a[i]-'0');
}
输出printf("%d",sum);
}
1.5 16进制、二进制字符串如何转10进制?写伪代码?
16进制转10进制:
{
...
初始化sum=0;
for i=0 ;a[i];i++{
if a[i]为0到9
sum=sum*16+(a[i]-'0');
if a[i]为a到f
sum=sum*16+(a[i]-'a'+10);
if a[i]为A到F
sum=sum*16+(a[i]-'A'+10);
}
输出printf("%d",sum);
}
二进制转十进制:
{
...
初始化sum=0;
for i=0 ;a[i];i++{
if a[i]为'0'或'1'
sum=sum*2+(a[i]-'0');
}
输出printf("%d",sum);
}
2.本周的内容,你还不会什么?
课堂派错题:
本题对题目的意思没有理解清楚,以为判断的是子串与母串相同字母的个数,当str2[k]!=0的时候,count++
3.期中考试小结
3.1 你认为为什么没考好?
这次考试没考好,不是因为题有多难,而是因为自身的一些原因:
- 对这次考试不够重视,认为会做PTA就能考好这种想法数错误的
- 基础知识不够扎实 ,选择题丢分太多,对选项的分析不够到位
- 平时代码有问题太依赖调试工具,一看答案不对就开始调试,不能通过阅读代码找到错误
- 在考试前没有深入复习,只是简单的做了一下去年的卷子,简单的翻了一遍书,对于很多重点没有复习到,也有一些知识点没有弄清,例如位运算。
- 对题目的阅读不够仔细,有些题目本来能拿到分数,但因为读题不够仔细,导致做错
- 做题的时候有点急躁,特别是编程题,一看到题目就开始直接写,应该先打一个简单的草稿,把框架写好
3.2 罗列错题
选择题:
16.以下for循环的执行次数是多少? for(x=0,y=0l(y=3)&&(x<=4);x++,y++)
这题正确答案是5次。因为我没注意到y=3中只有一个'=',这是一个赋值语句是恒真的,就想多了,去考虑循环的内容,选了不确定多少次。
填空题:
9.正确答案:1.0/(i*i),我写错了变量,写成1.0/pow(t,2)
改错题:
x=MaxcommonFactor(int a,int b);改为 x=MaxcommonFactor(a,b);
对于函数的传参不够熟悉,这个错没有改出来
编程题:
猜数游戏:
本题错误点:对于随机数的生成不会写;题目要求的“直到操作者想停止时才结束”没有写到。
加入产生随机数的语句 :srand(time9NULL));rand()%100+1;
应用do-while 循环,当输入0时结束。
3.3 下半学期要怎么调整C的学习?
- 首先我要改掉考试不细心读题目的坏习惯。有时候我往往看着题目前面就顺手把后面的问题写上了,但是却错了很多。这也许也和答题技巧有关系。以后无论是在课堂派还是PTA又或者考试中都要认真审题,自习读题,把题目看准、看好。时间允许的时候要多检查几遍,绝对不允许自己再犯类似于这样的无谓的错误
- 预习时对于书本的内容一定要认真的阅读,对一些重点的东西要标出,对于不明白的例题可以自己去敲一遍,调试查看运行过程
- 复习很重要。不过不必天天复习,毕竟我们也没有那么多的时间,但每次课后一定要认真复习。也可以把学的知识积累下来,利用周末的时间复习
- 以后写代码出现错误是尽量先自己找,多用printf查错,实在看不出来再去调试