zoukankan      html  css  js  c++  java
  • C语言博客作业--函数

    C语言博客作业--函数

    一、PTA实验作业

    题目1:使用函数判断完全平方数

    1. 本题PTA提交列表

    2. 设计思路

    1.读入传入数据n
    2.比较开方后的n,与开方后强制转换成int类型的n,比较是否相等
    3.相等返回1
    4.不相等返回0

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


    devc++上可以过,到pta上就调试错误,提交几次结果一样,检查并未漏掉什么。
    解决方法:强制转换的int要括号起来,可能是pta与devc++编译器不同。

    题目2:使用函数输出指定范围内的Fibonacci数

    1. 本题PTA提交列表

    2. 设计思路

    • fib函数
      1.传入数据n
      2.定义count计算项数,从2开始,定义a和b,a为b的前一项刚开始均为1,最后第count项值为b,t为交换a,b值的暂存变量
      3.当n<=2时,Fibonacci数均为1
      4.当n>2,做以下循环5-8
      5.t=b
      6.b = b+a
      7.a=t
      8.count++
      9.直到count!=n停止循环
      10.返回b的值
    • PrintFN
      1.传入数据m和n
      2.定义循环变量i=1,count=0,计算输出个数
      3.如果m<=fib(i),count++
      4.如果count1,输出fib(i)
      5.如果count!=1,输出空格加fib(i)
      6.i++
      7.当fib(i)<=n,循环3-6
      8.当count
      0,输出"No Fibonacci number"

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

    该题最大的问题就是写出算法来输出任意一项的Fibonacci数。
    解决方法:通过自己动手写规律,想到思路,再设计出算法。
    提交结果有一个部分错误是忘记写输出"No Fibonacci number"的代码,很快就解决了。

    题目3:求组合数

    1. 本题PTA提交列表

    2. 设计思路

    • 主函数
      1.定义m和n,double类型的sum1
      2.输入m和n
      3.sum1=fact(n)/(fact(m)*fact(n-m))
      4.输出sum1
    • fact函数
      1.传入数据n
      2.定义double类型变量sum=1,int类型循环变量i
      3.for i=1 to n,sum=i1.0
      4.返回sum的值

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

    写函数时sum的类型定义成了int类型,提交几次都是部分错误,后来想到课本上用到阶乘要定义成double类型,否则阶乘结果可能超出int能表达的最大范围。
    解决方法:sum的类型改为double类型就通过了。

    二、同学代码结对互评

    1.同学互评照片。

    2.我的代码、互评同学代码截图(此处截图核心代码就好,不一定截图全部代码,图上指明是谁的代码。)


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

    • 总体思路不同
      narcissistic函数
      他是直接用number直接拿出每一位数,不改变number,然后直接写计算式算出n次幂之和,不用循环;
      我是将number又给了其他两个变量num1和num2,使用两个循环,num1用于算出number是几位数,num2用于算每一位做n次幂之和,n就可以用num1算出的位数,结果返回与number比较。

    • 各自优势
      他的思路较为简单,思维量不大,但是代码多。
      我的可能要想多一些,代码量比较少

    • 喜好
      我更喜欢自己的代码

    • 改进
      PrintN函数可以调用narcissistic函数,简化程序,减少代码量。

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

    四、本周学习总结(2分)

    1.你学会了什么?

    1.1 C语言哪些数据类型?

    • 两大类:整型和实型(浮点型)
      整型包括short,int,long,char等
      实型包括float,double等
    • 补充:
      1.char为字符型变量,可以用%c输入输出字符,也可%d作为整数输入输出数字,范围很小。
      2.unsigned为无符号类型,可以加在数据类型前,扩大表示范围,但只有正数部分扩大。

    1.2 字符型数据需要注意地方?

    1. 输入:要注意与数据同时输入时空格问题,一不小心就会传入一个无用的空格,通常采用scanf语句中适当的地方加空格或getchar()吸收。
    2. 要在代码中表示字符要加单引号,如putchar()中或判断字符中

    1.3 自增自减运算符?

    • 前缀与后缀问题:(符号在前为前缀,在后为后缀)
      相同点:原来变量都相应+1或-1
      不同点:前缀表达式值为变化后结果,后缀表达式值为改变前。(前后颠倒)

    1.4 运算符优先级?



    直接找了两张图,自己总结不完整,而且格式不易书写,不直观

    1.5 C语言哪些表达式?课堂派哪里做错,做错的请在这里分析原因?

    设x、y、t均为int型变量,则执行语句:x=y=3; t= ++x || ++y; 后,y的值为__。
    A、不定值
    B、3
    C、4
    D、1
    答案:B,3 我选择C,4
    分析:||运算符判断两边表达式顺序自左向右,表达式++x的值为4!=0,即为对,或运算只要有一边为对即为对,所以||不再判断下去,所以y值没有改变。

    1.6 其他内容?

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

    基本知识点都掌握,但是有时会记不住,要勤加复习记忆。

    3.循环结构考试总结

    1.哪题做错了,怎么改?

    • 7-5 单词长度
    #include<stdio.h>
    int main()
    {
    	int count,flag=0;
    	char ch;
    	scanf("%c",&ch);
    	while(ch!='.'){
    		while(ch==' '){
    			scanf("%c",&ch);
    			if(ch=='.')break;
    		}
    		if(ch=='.')break;
    		count=0;
    		while(ch!=' '&&ch!='.'){
    			count++;
    			scanf("%c",&ch);
    		}
    		if(flag==0){
    			printf("%d",count);
    			flag=1;
    		} 
    		else if(flag==1){
    			printf(" %d",count);
    		}
    	}
    	return 0;
    }
    

    这道题做了很久,尤其是空格问题,想了很久,试了很多方法,但是最后的问题都出在了代码架构上,最后通过查询别人的方法,放弃了原来的代码架构,重新开始写,当然处理一些问题也用到了自己的方法,重新写也是调了一些时间才终于做对。

    2.考试结果满意么,怎么改进?

    不太满意,只能是平时多做题目,孰能生巧,我开始意识到自己思路的局限,有些题目虽然自己能做出来但是不一定是最好,甚至有些题,一直靠自己的思维方式跟本就想不出,感觉有时间还是要多看看其他人的代码,取长补短。

    3.其他总结。

  • 相关阅读:
    git 有用配置汇总
    C语言:不定长结构体的实现方式
    Linux 错误码
    执行insmod提示 invalid module format
    ARM GIC 系列文章学习(转)
    Android:高通平台Camera HFR Usecase分析
    索引图-查表-颜色缩减
    连通域查找【未完】
    epoll
    手动编译安装tmux
  • 原文地址:https://www.cnblogs.com/doimpossible/p/7828483.html
Copyright © 2011-2022 走看看