1.本章思考总结

1.1思维导图

1.2本章学习体会及代码量学习体

1.2.1学习体会

这几个星期,我们用了很长一段时间学习了数组,一方面是因为这方面的知识比较多,而且复杂,一维二维字符三个方面的题都很多而且具有一定难度:一维方面要掌握许多排序的方法,二维则与数学方面的矩阵相联系,并且有一系列的与生活实际联系的应用。在我看来,字符则更加复杂一些,在编程方面有了一些新语法,考虑的更全面也更有深度。另一方面则是因为数组是c语言很重要的思想与应用,一个数组可以承载同一类型的许多数,并且与后面学到的指针、结构类型、文件都会联系起来使用。数组的应用是重要而广泛的,同时题也是很难的,学了数组,好几个题集一起来了,还难,编程量还多,恰逢线代期末考试,这段时间过得就很艰难。现在线代考试结束,我也要趁这段时间好好学习一下数组这方面的知识,夯实基础。

1.2.2代码累计

2.PTA总分

2.1得分与排名:



2.2我的总分:182

3.PTA实验作业

3.1PTA题目1

给定两个整型数组,本题要求找出不是两者共有的元素。

3.1.1算法分析

1.int main
   int i;
   int an,bn,cn;
   int a[an];
   int b[bn];
//定义两个数组,一个a,一个b
 然后定义一个函数并调用DiffArray(a,an,b,bn);
2.void DiffArray
   int c[lenc];   //定义一个具有两个数组长度的数组,用来存放a和b 数组的集合
   int  flag[i];//定义flag 数组用来存放相同的数
   用for循环嵌套遍历lenc数组,利用flag找到是否存在相同的数
   for(i=0;i<lenc;i++)
  {
    if(flag[i]) continue;
    for(j=i+1;j<lenc;j++)
    {
      if(c[i]==c[j] && i<an && j>=an)  //same in array a and b
      {
        flag[j]=1;
        flag[i]=1;
      }
      if(c[i]==c[j] && j<an)//same in array a
        flag[j]=1;
      if(c[i]==c[j] && j>=an)//same in array b
        flag[j]=1;
    }
    if(flag[i]==0)
      c[k++]=c[i];
  }                                    //c数组用来存放不同的数,最后printf输出

3.1.2代码截图

3.1.3PTA提交列表及说明

Q1:编译错误?
A1:无法找到思路,并不懂得如何将相同的数存入数组,而且第一开始没有想到用一个数组存放两个数组之后遍历。
Q2:答案错误?
A2:flag数组位置错误

3.2PTA题目2

上三角矩阵指主对角线以下的元素都为0的矩阵;主对角线为从矩阵的左上角至右下角的连线。
本题要求编写程序,判断一个给定的方阵是否上三角矩阵。

3.2.1算法分析

1.定义输入矩阵的个数T,和循环中会用到变量i,j,k
2.for i 到T     //是个大循环,在最外层,用来输出循环的个数
3.在大循环里
	int a[n][n]; 
  		 for(j=0;j<n;j++)
   		{
      		for(k=0;k<n;k++)
      			scanf("%d",&a[j][k]);
  		 }                                                      //输出矩阵
3.for(j=0;j<n;j++)
   		{
   	   		for(k=0;k<n;k++)
   	   		{	
   	      		if(j>k)
					{
						if(a[j][k]!=0)
							flag=0;
					 } 
	    	       }
  		 }                                                                //判断上三角形矩阵

3.2.2代码截图

3.2.3PTA提交列表及说明

Q1:编译错误?
A1:日常粗心问题,中英文标点搞混了。
Q2:答案错误
A2:前几次是flag的位置不对,后来改了很多,发现是条件语句错了,应该有两个if

3.3PTA题目

一个IP地址是用四个字节(每个字节8个位)的二进制码组成。请将32位二进制码表示的IP地址转换为十进制格式表示的IP地址输出。

3.3.1算法分析

1.int main()
   char ch
   ChangeIp   //在主函数中先定义一个字符数组,用于存放二进制数,然后调用IP地址转换的函数
2.在ChangeIp函数中
for(i=0;i<32;i++)
    {
      number=number*2+ch[i]-'0';
      if(i%8==7)
	  {
	  	printf("%d",number);
       	if(i!=31)
	  		printf(".");
      	number=0;                        //循环加判断,实现IP地址的转换

3.3.2代码截图

3.3.3PTA提交列表及说明

Q1:编译错误?
A1:我函数掌握的不是很熟练,在调用数组时,形参实参发生了调用错误。
Q2:答案错误?
A2:if条件不对,怎么都无法得出正确答案,直到我看了 大佬的代码,觉得这个if判断的很机智非常简单。

4代码互评

4.1代码截图

同学代码

我的代码

4.2评论

1.该同学的IP地址转换代码与我的不同,我在其中用了函数,而她是直接在main函数中写的
2.我们的判断条件不同,我是取余8得7,她是i+1取余7得0
3.在“.“的处理上不同,她用了if else判断,而我是直接不等于31