zoukankan      html  css  js  c++  java
  • 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表示为.字符串通常存储在数组或者从堆上分配的内存中。不过,并非所有的字符数组都是字符串,字符数组可能没有NUL字符。字符数组也用来表示布尔值等小的整数单元,以节省内存空间。

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

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

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

    scanf("%s",ch1);

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

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

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

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

    
       定义a[];
       输入数据
       定义变量result=0
       定义字符型数据char ch
       当ch=getchar()!=时
             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上吧。
    • 多花时间完成预习作业,预习作业比较重要,要是某一个单元的预习作业水了,那么接下来的听课就受影响,这个单元的学习也受比较大的影响。
  • 相关阅读:
    关于机器学习
    高级管理者和普通管理者区别
    一个kafka异常
    怎么读技术书
    Windows下查看什么进程占用文件
    关于Apache Phoenix和Cloudera结合
    bootstrap基础学习十一篇
    bootstrap基础学习十篇
    bootstrap基础学习九篇
    bootstrap基础学习八篇
  • 原文地址:https://www.cnblogs.com/Littleweii/p/7967677.html
Copyright © 2011-2022 走看看