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查错,实在看不出来再去调试
posted @ 2017-12-03 18:53  嘿嘿渣  阅读(479)  评论(5编辑  收藏  举报