python编写自定义函数判断n1-n2范围内的素数_C语言博客作业--函数

一、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。

void PrintN( int m, int n )函数

1.定义整型变量M

2.利用for循环递增(M=m+1;M

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

问题:忽略了另一个函数的要求是“按从小到大的顺序打印出给定区间(m,n)内所有的水仙花数”,对n多进行了一次判断。

解决方法:将“M<=n”改为“M

题目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时停止;

大部分嵌套循环语句的内循环条件依靠外循环的条件。【然而总是忘记】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值