C语言第五次博客作业
一、PTA实验作业
题目1:6-6 使用函数输出水仙花数
1. 本题PTA提交列表
2. 设计思路
- (1) 首先先定义narcissistic函数。
- (2)定义四个整形变量n,a,d,cnt,sum,cnt用来计算有几位数,sum用来存放每个数的cnt次方的和。
- (3)进行一个循环,让n=number(防止后面需要用number时它的值发生变化),循环中n=n/10,直到
n<=0结束循环,其中每次循环cnt值都加一,用来计算number有几位数。 - (4)再进行一个for循环(让a=number;直到a不>0;a/=10)
在循环中d=a%10;sum=sum+pow(d,cnt);这部是让每个位数的cnt次方进行相加。 - (5)这里在进行一个判断,如果nunber=sum则说明这个数是水仙花数,则return 1;
否则就return 0; - (6)再进行void PrintN( int m, int n )函数的定义。
- (7)定义一个变量i 用来进行循环
- (8)for(i=m+1;i<n;i++)做循环让它输出这个范围内的水仙花数。
因为在这个区间里的水仙花数不能取m和n,所以给i定义的初值为m+1,
限定条件为i<n。 - (9)if( narcissistic(i) )调用上一个函数 ,判断i是否为水仙花数
printf("%d",i);printf("\n")如果是输出这个数,并换行。
3.本题调试过程碰到问题及PTA提交列表情况说明
- (1)当时在编译这题时,一开始就打算用cnt 来计算number的值。
可是在做题目时一直根据题目给的值153,就把在第4步时把那个cnt输成了3
结果一直导致部分正确。
其中大于三位数后水仙花数就输不出来
- (2)还有一个问题就是在判断完它是水仙花数后不知道要怎样返回这个值。
后开尝试用了下return 1就可以了,运气有些好。
题目2:6-8 使用函数输出指定范围内的Fibonacci数
1. 本题PTA提交列表
2. 设计思路
- (1)int fib( int n )首先定义fib函数
- (2)int a=1,b=1,i.定义三个整形变量(因为题目所给的内容,a,b的初始值都为1,i是后面用来做循环
- (3) if(n1 || n2)return 1;如果n=1,n=2时Fibonacci数都为1
- (4)for(i=3;i<=n;)再进行一个循环,令i=3直到i>n时结束循环。
- (5) a=a+b;i=i+1;b=b+a;i++;这样就能够让前面两个数的值相加成第三个数。
- (6)如果n为奇数则就return a的值
- (7)为偶数就输出偶数的值
- (8)void PrintFN( int m, int n )再进行void PrintFN函数的定义
- (9)int cnt=0,i,j定义三个整形变量i,j,用来进行循环,cnt 是用来判断这个区间内是否有Fibonacci数
- (10)for(i=1;fib(i)<=n;i++) if(fib(i)>=m) printf("%d",fib(i))让每一个Fibonacci数都与m进行比较
- (11)如果fib(i)>=m,就说明这个Fibonacci数在区间内,则输出fib(i)
- (12)if(fib(i+1)<=n) printf(" ");在区间内最后一个Fibonacci数前输入“——”满足行末没有空格。
并且在这个if语句中让cnt=1 - (13)再循环外进行一个判断语句如果cnt=0则输出No Fibonacci number。
3.本题调试过程碰到问题及PTA提交列表情况说明
对于行末不能保留空格一开始没有注意到,所以只在其为空集时正确了
于是我在输出空格前进行了一次判断,如果fib(i+1)<n则说明这个数是区间内倒数第二个数,那么在下一个数的后面就不要再输出空格。
可是,还有错误就是两端点都是F数,测试超过区间的fib不满足条件
所以我就再看了下题目题目中如果m,n是Fibonacci数那么他也是需要输出的。所以在)if(fib(i+1)<n)中加了一个=。就满足条件。
题目1:6-7 使用函数输出指定范围内的完数
1. 本题PTA提交列表
2. 设计思路
本题要求实现一个计算整数因子和的简单函数
- (1)int factorsum( int number )定义这个函数来判断一个数是否为函数
- (2)int i,sum=0;定义sum用来存放因子相加后的值
- (3)if(number==1) return 1;因为1是一定满足有有点特殊,首先拿出来考虑
- (4) for(i=1;i<number;i++) if(number%i==0) sum=sum+i;进行一个循环在<n的范围内而不能=n,
所以1是有点特殊,后面一个判断语句是将i的因子全部相加。 - (5)if(sum==number)则说明这个数是完数,那么就return sum.否则return 0;
- (6)void PrintPN( int m, int n )在进行这个函数的定义
- (7)int i,j,a=1。i,j是用来进行循环,a是用来判断区间内是否有完数
-(8)for(i=m;i<=n;i++) if(factorsum(i) == i)则说明这个数是完数,则printf("%d = 1",i) 因为任何完数都会等于1+多少。
-(9)for(j=2;j<i;j++)在进行一个循环 if(i%j==0)这个是用来判断i的因子,如果是则printf(" + %d",j) - (10)然后在j循环外printf("\n")换行。并使a=0
- (11)进行一个判断if(a==1)就printf("No perfect number")
3.本题调试过程碰到问题及PTA提交列表情况说明
这道题的难点在于 完数 = 因子1 + 因子2 + ... + 因子k 这个格式的输出怎样才能让它正确输出因子的同时,又正确的输出+与空格。
经过观察每个数必有因子1," + %d",j 在以这样的格式一个个输出,我一开始是在每个数的后面加空格,这样导致行末出现空格,
后来经过一个同学的提点,把空格放在+的前面这样就不会在行末出现空格。
行末出现空格
二、同学代码结对互评
2.我的代码、互评同学代码截图
我的代码!
int fib( int n )
{
int a=1,b=1,i;
if(n==1 || n==2){//如果n=1,2时F数都为1
return 1;
}
for(i=3;i<=n;){
a=a+b;//让前两个数相加得到一个新的数
i=i+1;
b=b+a;
i++;
}
if(n%2==0){//判断奇偶数
return b;
}
else{
return a;
}
}
void PrintFN( int m, int n )
{
int cnt=0,i,j;
for(i=1;fib(i)<=n;i++){
if(fib(i)>=m){
printf("%d",fib(i));
if(fib(i+1)<=n){
printf(" ");
}
cnt=1;
}
}
if(cnt==0){
printf("No Fibonacci number");
}
}
黄炳炜的代码
int fib( int n )
{
int result=0,i,a=1,b=1;
if(n==1)return 1;
for(i=2;i<=n;i++)
{
result=b;
b=b+a;
a=result;
}
return result;
}
void PrintFN( int m, int n )
{
int f,i,flag=0,c=0;//f放完数,i控制循环,利用flag判断是否有完数,c,判断是否为第一个数
for(i=1;i<=100;i++)
{
f=fib(i);
if(f>=m&&f<=n)//完数在所给范围内
{
c++;
flag=1;
if(f==1&&m==1&&i==1)//起始点为1比较特殊,直接输出1
{
printf("1");
continue;
}
if(c==1)//第一个数前面没有空格,所以单独输出
{
printf("%d",f);
continue;
}
printf(" %d",f);
flag=1;
}
}
if(flag==0)//没有完数,则flag还是为0,输出。
printf("No Fibonacci number");
}
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题
不同点:我和炳炜同学在定义fib函数的做法不一样,我是让n从三开始进行循环a=a+b,i++,b=b+a,i++当n为奇数时其F数再a上,
偶数时F数再b上。
而炳炜同学是在定义一个变量来存放fib数,result=b; b=b+a; a=result它的循环是从2开始先让result=b,每次都让b=b+a,又再将a=result
这样同样巧妙的将前两个数的和放到了result上
优势:1:我的代码在一步的循环中就能计算多个F数,剪短了循环的时间,并且我不用多定义一个变量也节省了空间。
而,炳炜同学的代码比较精炼,不需要在后面做判断,直接返回result,而我的有两个出口。
2:在第二个函数上,我觉得我的优势会更大,在第一个循环我结束的条件是fib(i)<=n而炳炜同学i<=100,这样 它循环的次数就会更多,时间更长。
然后为了避免在行末输出空格if(fib(i+1)<=n) printf(" ");我是来找nm 区间内的倒数第二个数,而他是让第一个数单独输出,还要多设计一个数来判断区间内的第一个数
总之,它的代码使用的空间和时间都用的比我多。
所以,我会更喜欢我自己的代码。
三、截图本周题目集的PTA最后排名。
四、本周学习总结
1.你学会了什么?
- (1)short、int、long、char、float、double 这六个关键字代表C 语言里的六种基本数据类型。这周对这些数据类型更深入的进行了学习。
- (2)字符型数据可以与整型通用,例如: 10+'a'+1.5-8765.1234 *'b' 是合法的.
2.本周的内容,你还不会什么?
答:本周还学习了运算符的优先级以及结合性,,还有前缀自增和后缀自增的区别,最重要的是对位运算有了一定的了解,
还有就是学会了怎样将字符的大小写进行替换。
2.本周的内容,你还不会什么?
本周的内容其实我对于,运算符的优先级还是不太清楚,太多了有些混乱,在加上结合性,就更乱了。
还有就是对自增和自减还没有领会。
3.循环结构考试总结
1.哪题做错了,怎么改?
我在二进制的前导的零,这道题目中有一些小错误就是当值为1的时候答案是错的,1情况比较特殊,可以多设计一个判断条件出来
单独分析即可。
然后就是在最后一题的单词长度那题,暂时没有什么思路容我在想想。
2.考试结果满意么,怎么改进?
不满意,一些小细节的地方还是没有注意,效率还是不够高,导致最后一题都没有多少时间去认真思考。
还是需要多加练习,勤能补拙,多与同学老师交流。
C语言第五次博客作业的更多相关文章
- C语言第五次博客作业--函数
一.PTA实验作业 题目1:使用函数判断完全平方数 1. 本题PTA提交列表 2. 设计思路 3.本题调试过程碰到问题及PTA提交列表情况说明. 部分正确 :将else的情况放入for循环内,导致循环 ...
- 第五周博客作业 <西北师范大学| 周安伟>
第五周博客作业 一,助教博客链接https://home.cnblogs.com/u/zaw-315/ 二,本周工作查阅项目汇报,班级微信群.对同学们的中期项目汇报进行查看,解决上周留言问题,对及时出 ...
- 第十五周博客作业 <西北师范大学| 周安伟>
第十五周作业 助教博客链接https://home.cnblogs.com/u/zaw-315/ 作业要求链接https://www.cnblogs.com/nwnu-daizh/p/10946673 ...
- C语言第七次博客作业--一二维数组
一.PTA实验作业 题目1:找鞍点 1. 本题PTA提交列表 2. 设计思路 定义n,i,j,ii,jj,a[7][7],flag,max 输入n for i=0 to i=n for j=0 to ...
- C语言最后一次博客作业
1.当初你是如何做出选择计算机专业的决定的? 一开始选专业的时候,说实话我很纠结也很迷茫,对我来说,中学时代,似乎就只要考好试,做好题就可以了,对于未来想要做啥并没有那么多的规划和想法,偶尔跟基友畅聊 ...
- 第五周博客作业<西北师范大学|李晓婷>
1.助教博客链接:https://home.cnblogs.com/u/lxt-/ 2.作业要求链接:https://www.cnblogs.com/nwnu-daizh/p/10527959.htm ...
- 第五次博客作业——Alpha2项目的测试
格式描述: 这个作业属于哪个课程 <课程的链接> 这个作业要求在哪里 <作业要求的链接> 团队名称 你的代码我的发 这个作业的目标 选取非自己所在团队的3个项目进行测试,并写出 ...
- C语言第四次博客作业--嵌套循环
一.PTA实验作业 题目1:编程打印空心字符菱形 1. 本题PTA提交列表 2. 设计思路(流程图) 3.本题调试过程碰到问题及解决办法 思考过程:将问题拆解为菱形问题和字母变化问题两部分 1> ...
- C语言第三次博客作业---单层循环结构
一.PTA实验作业 题目1 1.实验代码 int N,i; //N为用户数,i记录循环变量 double height; //height放身高 char sex; //sex放性别F为女,M为男 s ...
随机推荐
- Acperience HDU - 5734
Deep neural networks (DNN) have shown significant improvements in several application domains includ ...
- java 值传递和引用传递
public class PassValue { /** * 值传递 基本数据类型参数 * 值传递:方法调用时,实际参数吧他的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参数的值 */ ...
- WKWebView 加载本地HTML显示不出网页问题,这点你注意了吗?-------完美显示
1.首先,WKWebView的引入和创建,我这里就不做阐述,我要说的,就是解决别人不能给您解决的问题 2.WKWebView 加载本地HTML,也就是两三句代码 是吧?作为读者的您肯定也知道,也实现 ...
- MySQL新建用户与授权
一.登录root用户 [root@iZm5e9gg1p5y1co0usac2cZ webapps] # mysql -uroot -p 二.新建用户 mysql> create user '; ...
- Keras官方中文文档:序贯模型
快速开始序贯(Sequential)模型 序贯模型是多个网络层的线性堆叠,也就是"一条路走到黑". 可以通过向Sequential模型传递一个layer的list来构造该模型: f ...
- 1.4 如何在main()方法之前执行输出“hello world”
public class Test{ static{ System.out.println("hello world"); } public static void main(St ...
- 关于在Django中Json无法序列化datetime的解决办法
我们在网页设计时经常会在前端和后台进行交互,前端回传的方法可以时redirect一个地址加上显式的参数,第二个办法就是使用Ajax结构.那么在传到view函数中进行处理后是需要通过Json格式进行返回 ...
- LINUX下解决TIME_WAIT等网络问题
修改配置文件 /etc/sysctl.conf net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle = 1net.ipv4.tcp_fin_timeout ...
- c#多线程同步之Semaphore
一提到Semaphore(信号量)的使用,还挺有意思的,它允许多个线程同时访问多个稀有资源,我立马想到银行的ATM机取钱的场景.看下面的代码: ); public static void StartT ...
- div闪一下就消失
<div id="saveCode" class="center" style="display:none;width:300px;height ...