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 ...
随机推荐
- iOS - CALayer 绘图层
1.CALayer 绘图层 在 iOS 系统中,你能看得见摸得着的东西基本上都是 UIView,比如一个按钮.一个文本标签.一个文本输入框.一个图标等等,这些都是 UIView.其实 UIView 之 ...
- DELL XPS 13 9350 装Win7系统(坑爹)
0.记一次悲惨的装机记录 1.为什么这么难装呢? 因为这个NB本身是为Win10设计的,所以官网没有Win7驱动,系统设置各种不兼容 2.希望你能看到本文最后 因为你看到最后,你就不会给这个逗比装Wi ...
- 谈谈使用Redis缓存时批量删除的几种实现
前言 在使用缓存的时候,我们时不时会遇到这样一个需求,根据缓存键的规则去批量删除这些数据,比较常见的就是按前缀去删除. 举个简单的例子,Redis中现在有几百个商品的数据,这些数据的key值是有一定规 ...
- Fu+ 后台管理 (Thinkphp)
简要:小主从事PHP二年,期间一直做后台;为此向大家分享我制作一个后台(权限),希望能够跟各位PHP大神学习探索,如果有不对或者好的建议告知下:*~*! 1. 介绍 Fu+ 后台管理,是本人基于H+好 ...
- 【BZOJ1095】捉迷藏(动态点分治)
[BZOJ1095]捉迷藏(动态点分治) 题面 BZOJ 题解 动态点分治板子题 假设,不考虑动态点分治 我们来想怎么打暴力: \(O(n)DP\)求树的最长链 一定都会.不想解释了 所以,利用上面的 ...
- POJ 1791 Heavy Transportation(最大生成树)
题面 Background Hugo Heavy is happy. After the breakdown of the Cargolifter project he can now expand ...
- Liunx2:Liunx目录结构
Liunx目录图 进入根目录,使用ll命令看一下Liunx整个根目录图: 这里面所有的目录都是买完服务器之后最初始的目录,没有进过任何加工.Liunx以树的结构组织所有目录,用一张图表示一下Liunx ...
- tp5.带标签的缓存 创建和清除 测试
原文:http://www.upwqy.com/details/24.html 测试设置了标签的缓存的获取方式 和清除标签缓存. 有时候我们可能会对同类型的一些数据做统一缓存.和统一清除更新处理. 那 ...
- SLIC superpixel算法
标题 SLIC superpixel算法 作者 YangZheng 联系方式 263693992 SLIC算法是simple linear iterative cluster的简称,该算法用来生成超像 ...
- C语言的隐式类型转换
看了一篇博文,该文章中有如下描述 #include <stdio.h> int main() { unsigned ; unsigned ; )) //a和b-1的结果-1都被转换为int ...