C语言博客作业--数组

一、PTA实验作业

题目1:7-2 求整数序列中出现次数最多的数

1. 本题PTA提交列表

2. 设计思路


	定义number数组存放数字,count数组存放出现次数 
	定义i控制第一层循环,j控制第二层循环,N表示有N个数字,max为比较出现次数时候使用的最大值 
	for i=0 to <1000 {
		清零count[i]=0
	}
	while(输入N){
		for i=0 to <N {//按顺序取数 
		    输入number[i] 
			for j=0 to <N {//和所有数比较
			   如果出现了相同的数则给次数加上一次 
			}
		}
		for i=0 to <N {
			比较出count数组中最大的值 并将其赋值给max 
		} 
	    输出出现次数最多的数和它出现的次数 
	}
	return 0; 

3.代码截图

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

  • 在统计数字出现次数的代码中不知道以什么作为结束的标志 解决办法:上网看了别人的代码,学习了 while(scanf("%d",&N)!=EOF)的写法 在条件中输入值 并且这个程序只执行一次

题目2:7-4 简化的插入排序

1. 本题PTA提交列表

2. 设计思路


	     定义n表示输入的原数组数据个数,x表示要插入的数,i控制循环,count 在输出插入x的数据时起作用 
     定义数组a 
     输入n 
     for i = 0 to  n{
         输入a[i] 
     }
     输入x 

     如果要插入的数大于a[n-1]的话在输出a数组后 输出x 
        

     如果要插入的数小于a[0]的话在输出x后 输出a数组
        

     如果x在比a[0]大比a[n-1]小的情况下 
	      for i = 0 to n
	      {
	         输出插入x前的数字 
	         count递增1,与i同步 但不记录插入x的那一次 
	         
	         当a[i]>x时插入x 
	       }
     
     for i = count to n
        输出插入x后的数字

3.代码截图

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

  • 刚刚开始的时候没有把比第一个小和比最后一个大的情况考虑进去 解决办法:通过添加两个分支判断解决了
  • 在用count计数时,把插入的那一次也记录进去,导致最后输出的数组缺少了比x大的那个数 解决办法:把count++写在if(a[i]<x)里

题目3:7-10 杨辉三角

1. 本题PTA提交列表

2. 设计思路


	 	定义a数组保存要输出的那一组数组,b数组则存上一组数组的数据 完成杨辉三角的计算 
	输入n行 
	a先赋值a[0]=1 b[0]=1;b[1]=1
	for i=1 to n{
	    a[0]后的数组清零 
	}
	for i=2 to n{
	    b[1]后的数组清零 
	}
	for i=0 to n{
		第一行输出一个1 
		第二行输出两个1 
		else {//之后行 
			a[i]=1;//这是第i+1行的第i+1个数字 
		    for int j=1 to i{
		    	实现杨辉三角的本质 第i行第i个数字等于第i-1行的第i-1个数字与第i个数字的和 
			}
			for int j=0 to i {
				把这一行的数字交给b数组,方便下一行的计算 
			}
			for int j=0 to i{
			          输出a数组  
			}

3.代码截图

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

  • 想了很久如何实现杨辉三角的本质 解决办法:在草稿纸上列出一部分杨辉三角,发现它的实质就是第i行第i个数字等于第i-1行的第i-1个数字与第i个数字的和,而要需要两行之间的变换,则需要两个数组
  • 三角成功打印,但是数据不对 解决办法:数据比正确的大得多,而且很怪,最后发现在开始没给两个数组清零,在开头用两个循环实现清零

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

三、同学代码结对互评

1.互评同学名称

梁志湖

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

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

  • 志湖同学运用了一个二维数组,而我运用了两个一维数组
  • 在定义数组方面,我用了两个循环来初始化,志湖同学仅用了一条 int a[10][10]={0},就做到了,比较简洁。
  • 总体上来说此类有规律得表格打印问题,用二维数组来实现会比较直观,所以我认为志湖同学这题得做法比我好,就是如果再加上一些注释就更好了。

四、本周学习总结

1.你学会了什么?

1.1 C中如何存储字符串?

字符串是以ASCII字符NUL结尾的字符序列。ASCII字符NUL表示为\0.字符串通常存储在数组或者从堆上分配的内存中。不过,并非所有的字符数组都是字符串,字符数组可能没有NUL字符。字符数组也用来表示布尔值等小的整数单元,以节省内存空间。

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

'\0' 没有结束标志可能会使字符串发生越界

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

scanf("%s",ch1);

gets(str1);
不同:scanf不能接受空格、制表符Tab、回车等;
而gets能够接受空格、制表符Tab和回车等;
相同:字符串接受结束后自动加'\0'

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

    定义字符型 op
    输入数字字符
    输出("%d",ch-'0');

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


   定义a[];
   输入数据
   定义变量result=0
   定义字符型数据char ch
   当ch=getchar()!=\0时
         result=result*10+ch-'0'
   输出result

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

  • 经常忘记的点,我打上来再复习一遍吧
    a=++n 表示n=n+1 a=n
    a=n++ 表示a=n n=n+1
    a=--n 表示n=n-1 a=n
    a=n-- 表示a=n n=n-1
    单独的n++先表示n后加一 单独的++n先加一后带入运算

  • pta方面,此次数组不会做的题太多了,很多题都不知道如何运用之前学的知识来解决,很多都是在编译器里就输出不对的,更不要说复制到pta上通过测试了,很多编译器上对的,拿到pta也只是部分正确,说明自己考虑问题不全面。

3.期中考试小结

3.1 你认为为什么没考好?

  • 时间分配:都是顺着题目做,导致到编程题时候已经没有时间,有之前编过的题也只能是因为没有时间交了白卷
  • 基础理论:一些导论课的基础,还有一些c的理论基础,都不太清楚,很模糊,比如进制间的转换
  • 熟练程度:熟练度低,导致读题目程序慢,进而做题速度也慢,正确率也低。

3.2 罗列错题。

  • 选择题:5.以下均为合法标识符的是
    A.do xyz _printf B.3aa _tt IF C.void ff s_v D._pi IF big_tree
    错选B 正确D 分析:对基础的知识不了解,标识符不能以数字开头

  • 程序分析输出结果题:大部分是没有分析过程扣分

  • 阅读程序填空:第七空没有掌握正确的字符型数据输入getchar() ==> ch=getchar()

  • 程序设计题:第三题


#include<stdio.h>
double fact( int x);
int main(){
	int result;
	int n,m;
	scanf("%d%d",&m,&n);
	result=fact(n)/(fact(m)*fact(n-m));
	printf("result = %d",result);
}
double fact( int x){
	double number=1;
	int i;
	for(i=1;i<=x;i++){
		number=number*i;
	}
	return number;
}

此次的程序设计由于没有时间几乎白卷,写了的题也思路混乱。

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

  • 扎实基础,能解决一个问题是一个问题,尽量做到把一个方面或一个问题的东西吃透,不然考到明明有印象又做不出来。
  • 和其他学科的时间分配调整好,因为c是比较基础的语言,之后其他语言的学习也都是在c的基础上,所以学好c比较重要,在不影响其他学科的基础上多花时间在c上吧。
  • 多花时间完成预习作业,预习作业比较重要,要是某一个单元的预习作业水了,那么接下来的听课就受影响,这个单元的学习也受比较大的影响。
posted @ 2017-12-03 22:26  Littleweii  阅读(434)  评论(1编辑  收藏  举报