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.其他总结。

posted on 2017-11-18 12:02  斯慕  阅读(393)  评论(7编辑  收藏  举报