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(n==1 || n==2)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最后排名。

时间: 2024-10-07 13:57:37

C语言第五次博客作业的相关文章

C语言第五次博客作业--函数

一.PTA实验作业 题目1:6-2 简单实现x的n次方 1. 本题PTA提交列表 2. 设计思路 (1)定义函数 mypow( double x, int n ) (2)定义整型变量i为循环变量,浮点型变量sum为阶乘的积 (3)for i=1 to n 重复下面步骤 (4)计算sum=sum*x (5)返回sum的值 3.本题调试过程碰到问题及PTA提交列表情况说明 初始代码是这样的:提交错误为段错误 第二天学霸室友告诉说要用for循环和一个求阶乘的变量,然后我就添加了一个for循环,但是并没

第五次博客作业

在学院强烈推荐邹欣<构建之法——现代软件工程>这本书时,一度对软件开发方法极度欠缺了解的我也想一探究竟这本书的奥秘所在,为了能够从中获取对软件整个开发方法及流程有更深入的认识,我仔细阅读本书发现确实与其它软件工程书本来得不一样,至少它比较有趣味性,这也许是不同于其他教科书生板无味的区别吧!以下我就对此书的读后感作下自己的个人心得体会及提出个人的一些疑问. 在前言中强调了面向实战就要“做中学”的方法,确实很适合缺乏实战经验的我们,通过将自己的项目进展实时发布到博客,引来更多人的反馈和评价是我们不

C语言第三次博客作业---单层循环结构

一.PTA实验作业 题目1:最佳情侣身高差 1.实验代码 int N,i; double height; //height表示身高 char sex; //sex表示性别 (height>=1.0&&height<=3.0); (N>0&&N<=10); scanf("%d",&N); for(i=1;i<=N;i++){ scanf("\n%c%lf",&sex,&height)

C语言第六次博客作业--数据类型

一.PTA实验作业 题目1: 7-3 倒顺数字串 1. 本题PTA提交列表 2.设计思路 (1) 定义两个整型变量i,n,n为输出的数. (2)输入n. (3)若n的值不为1, for i=1 to i<=n, 输出i和一个空格, end. for i=n-1 to i>1, 输出i和一个空格, end. 输出1. (4)若n==1,则直接输出1. 3.代码截图 4.本题调试过程碰到问题及PTA提交列表情况说明 (1)没有考虑只输入1的情况. 解决方法:加入if(n==1)的情况. 题目2:7

闽江学院2015-2016学年下学期《软件测试》课程-第五次博客作业

在老师的推荐下我花了两周的时间通读了<构建之法>,读完了这本<构建之法>之后不得不说,这着实令我获益良多. 之前我一直没有认真阅读过这本书,虽然主要原因是因为自己的惰性使然,但是同样不可否认的是,之前看的软件工程的教材大多数都是干巴巴的,看起来实在没有意思,经常看不到多久就看不下去了,可是这本书就不同,它通过几个简单的人物和场景就把一个原本让人感觉索然无味的教材转变成我们的日常生活,原本感觉虚无缥缈的理论,一下子就鲜活的展现在我面前. 通过第一章,我大概了解我将要从这本书中学习什么

第五次博客作业-读《构建之法》心得

读<构建之法>心得 首先,这是一本全景式图书,会让你更了解这个行业,能让毕业生在对行业从陌生到熟悉的过程中,较少地感到惊讶和出乎意料,这是一本与现实接轨的教材. 其次,这是一本最佳实践式的书,涵盖了科学.健康的软件工程开展中的每个方面,介绍了种种方法论,但不是高高在上.纲领性的方法论,而是方法论的最佳实践,确实可用,拿来就用. 第三,这本书让人有情怀,学生对“古老的”瀑布教材或“舶来的”敏捷书籍,难免会缺乏信心:这东西行吗?适用于现代吗?适用于中国吗?而如果到各大论坛.社区.或者询问“过来人”

《软件测试》 第五次博客作业

我们学习了很多的专业课程,像编程语言.算法.数据结构.编译原理.软件工程等.我想大家都会有这样的疑问:我学了这么多的课程有什么用呢?在工作中有多少会真正被应用到呢?也就是说,大家都觉得理论和实践之间有着不可逾越的鸿沟.邹欣老师的<构建之法:现代软件工程>一书很好地,并且巧妙地将理论和实践结合了起来. 通读全书之后,我认为本书有以下特点: 第一,理论与实践并重.本书介绍了软件工程的相关概念,如:软件工程.单元测试.软件开发流程.敏捷开发.软件需求.用户体验.软件测试.质量保障等.在介绍这些基本概

第五次博客作业——读《构建之法》有感

 我是在大三下学期才接触的<构建之法>,与课程软件测试相结合的一本书.当时不理解一个科目怎么会有两本教材.该把重心放在哪本书上呢?在读了<构建之法>后,才体会到它的独特魅力.说它是教材,又与一般的教材不一样,它语言生动活泼,里面还有人物对话,一些真实的软件开发过程的记录,让我有了将它读完的兴趣. 先说明我读的专业吧,我学的是软件工程(金融方向),简单说就是以后搞IT的.读了三年大学学了不少关于软件编程方面的知识,可能是女生天生对这方面没什么天赋,对编程没什么兴趣,代码也敲得少,所以

C语言第六周博客作业--数据类型

一.PTA实验作业 题目1: 7-6 掉入陷阱的数字 1. 本题PTA提交列表 2.设计思路 定义变量N,i,g=1/位数/,a/各位数字相加的和/,b=0,j,N1,c,d/储存N/; do{ for(i=0;i 3.代码截图 4.本题调试过程中碰到的问题以及解决方案 题目2: 7-4 打印菱形图案 1. 本题PTA提交列表 2.设计思路 int n,a,i,l,j,k,g,h,count=0,count1=0; 输入n if((n-1)%2==0)则继续 由规律可以看出, 上半部分(大三角型