一、PTA实验作业
题目1:使用函数输出水仙花数
1. 本题PTA提交列表
2. 设计思路
- int narcissistic( int number )函数
- 1.定义整型变量int i,j,m;
int n,digit=0,N1,N2;
int num,re_number=0; - 2.让N1,N2赋上number的值 N1=number;N2=number;
- 3.for循环{n=N1%10;
digit++;
N1=N1/10;} 用来统计number的位数 - 4.for循环{num=1;
n=N2%10;
N2=N2/10;
内嵌一层for循环{num=n*num;}
计算每一位数次方的和 re_number=num+re_number;
} - 5.判断重新构成的数re_number与number是否相等,若相等,则返回1,否则返回0。
- 1.定义整型变量int i,j,m;
- void PrintN( int m, int n )函数
- 1.定义整型变量M
- 2.利用for循环递增(M=m+1;M<n;M++),同时引用函数narcissistic( int number )判断M是否为水仙花数,若是,则输出M。
3.本题调试过程碰到问题及PTA提交列表情况说明。
- 问题:忽略了另一个函数的要求是“按从小到大的顺序打印出给定区间(m,n)内所有的水仙花数”,对n多进行了一次判断。
- 解决方法:将“M<=n”改为“M<n”
题目2:使用函数输出指定范围内的Fibonacci数
1. 本题PTA提交列表
2. 设计思路
- int fib( int n )函数
- 1.定义整型变量i,f1=1,f2=1,f3; //i用来控制循环,f1,f2,f3用来计算Fibonacci数
- 2.for循环(i=3;i<=n;i++){f3=f1+f2;
f1=f2;
f2=f3;} - 3.返回f2.
- void PrintFN( int m, int n )函数
- 1.定义整型变量j,i,flag=0,sign=0;
- 2.定义整型变量time=0;//用来计算题目给定范围内Fibonacci数的个数;
- 3.第一重for循环(j=1;fib(j)<=10000;j++) {time ++;}
- 4.第二重for循环(i=1;i<=time;i++){
if(fib(i)>=m&&fib(i)<=n)
{如果sign==1 那么输出空格;
flag=1; 输出fib(i)的值;
sign=1;} - 5.如果flag==0 那么输出"No Fibonacci number"。
3.本题调试过程碰到问题及PTA提交列表情况说明。
- 问题:第二个函数漏考虑了Fibonacci数为1的情况,1也是Fibonacci数,但结果却会输出“No Fibonacci number”。
- 解决方法:将代码重新编写,第二个函数先算出在题目限制范围内Fibonacci数的个数,然后根据Fibonacci数个数利用循环语句找出[m,n]内的所有Fibonacci数。
题目3:求组合数
1. 本题PTA提交列表
2. 设计思路
- 1.定义整型变量m,n;
- 2.输入m,n;
- 3.输出结果("result = %.0lf",引用函数fact(n)/(fact(m)*fact(n-m));
- 4.定义函数double fact(int n)
- 5.定义浮点型变量product,定义整型变量i;
- 6.给product赋初值为1;
- 7.for循环(i=2;i<=n;i++) { product *= i;} //算阶乘
- 8.返回product的值。
3.本题调试过程碰到问题及PTA提交列表情况说明。
本题未遇到困难,定义一个函数计算阶乘,主函数引用三次该函数就可以算出结果。
二、同学代码结对互评
1.同学互评照片
我和李梦冰同学
2.我的代码、互评同学代码截图
李梦冰同学的代码
我的代码
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。
- 我的代码:在最后的输出部分利用goto直接跳出所有循环,虽然方便快捷,但我个人觉得有些投机取巧,goto还是尽量少用。
- 梦冰的代码:梦冰的第一个自定义函数,对素数的判断,其实在p%2==0时就能退出循环,但梦冰的却是一直对p做对i的取余运算;第二个自定义函数的代码比我的简单有效,我用了两个if判断语句和两个for循环语句,使代码显得冗长。
- 综上,我较喜欢梦冰的代码。
三、截图本周题目集的PTA最后排名。
四、本周学习总结
1.你学会了什么?
1.1 C语言哪些数据类型?
- 整型,字符型,实型。
1.2 字符型数据需要注意地方?
- 1)字符型整型变量和字符型变量的定义和值都可以互相交换;
- 2)互换整型变量和字符型变量的定义和值时,整型数据的取值范围是有效的ASCII码;
- 3)英文字母的大小写是不同的字符型常量。
1.3 自增自减运算符?
- 1)设n是一个整型变量并已赋值,则n++和++n都相当于n=n+1,不同的是++n表示的是n加一后的值,而n++仍表示原来n的值,但这时n已经等于“n+1”的值。n--与--n同理。
- 2)自增自减运算符的运算对象只能是变量,不能是变量或表达式。
1.4 运算符优先级?
- 1)如果操作数两侧运算符的优先级相同,则按结合性决定计算顺序;
- 2)可以用圆括号改变运算符的执行次序。
1.5 C语言哪些表达式?课堂派哪里做错,做错的请在这里分析原因?
- 1)算术表达式,赋值表达式,关系表达式,逻辑表达式,条件表达式,逗号表达式。
- 条件表达式的形式: 表达式1?表达式2:表达式3.
- 逗号表达式的一般形式: 表达式1,表达式2,...,表达式n
按照顺序计算每个表达式,最后将表达式n的值作为符号表达式的值,将表达式n的类型作为逗号表达式的类型。
- 2)课堂派第六题,忘记了10和4都是整型常量,尽管x为浮点型,但10/4的结果还是整型,在给x赋值时才变为浮点型。
- 3)课堂派第九题,自增符号在后面的运算与在前面的运算不一样,j++的结果应该仍为3。
1.6 其他内容?
- C语言中整数的八进制、十六进制的表示方式。
- 数据类型的自动转换遵循一定规则,在赋值运算时,赋值号两侧数据的类型最好相同,至少右侧数据的类型比左侧数据的类型级别低,或者右侧数据的值在左侧变量的取值范围内,否则会导致运算精度降低,导致结果错误。
- 数据类型的强制转换,一般形式是(类型名) 表达式,类型转换都只是为了本次运算的需要,对数据类型的临时转换,并没有改变数据的定义。
2.本周的内容,你还不会什么?
- 对位运算还不是很了解;
- 对八进制、十六进制的转换也不太懂。
3.循环结构考试总结
3.1 哪题做错了,怎么改?
- 1.7-3 二进制的前导的零
- 忘记十进制转二进制怎么计算,后来纠结在算出的结果是二进制数的逆序。
- 请教同学,研究后发现就算结果是二进制的逆序数,但位数是相同的而且二进制数除了0,第一位一定是1,那么以此为条件可以算出二进制数的位数,然后与32相减,得出前导的零的个数。
- 2.7-5 单词长度
- 当输入空语句和多个空格时不能正确输出,但目前还未解决。
3.2 考试结果满意么,怎么改进?
不满意,对嵌套循环的是用还是不太熟练,而且这次考试的状态不太好,看到题目时脑子一片空白,注意力不集中,或许是平常做题花的时间太长,以后做题时会更加专注,在读题解题方面也需要加强。
3.3 其他总结。
- 十进制转二进制就是把十进制数不断除二取余直到除以二等于1时停止;
- 大部分嵌套循环语句的内循环条件依靠外循环的条件。【然而总是忘记】