一、PTA实验作业

题目1:使用函数输出水仙花数

1. 本题PTA提交列表



2. 设计思路

(1)首先定义函数narcissistic(number)判断number是否为水仙花数:

(2)narc用于存放各个数的count次方的累加结果,total为各个位上的数的count次方,N为各个位上的数,M保留number的初值,count为number的位数,i,k为循环变量;

(3)把number的值赋给M,赋narc和count的初值为0;

(4)while(number!=0)时 ,执行下一步骤;

(5)number=number/10; count++;

(6)重复执行第四步骤直到number等于0;计算得到的count为number的位数;

(7)number=M,number的初值重新赋回;

(8)i=1;当i小于等于count的时候,执行下一步骤;

(9)N=number%10,totle=1;

(10)利用循环语句计算N的count次方;

(11)number=number/10,narc=narc+totle;

(12)i++,重复执行第八步骤直到i大于count;

(13)如果narc等于M,则输入的数为水仙花数,return 1;

(14)否则return 0;

(15)定义PrintN(m,n)在m到n的范围内找水仙花数 :

(16)利用循环语句和调用narcissistic函数来找范围内的水仙花数;

(17)若是则输出该数并换行。

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

(1)一开始没有直接调用narcissistic函数来找水仙花数,再写了一遍类似于narcissistic函数的内容,导致代码非常长,特别容易出现编辑错误,而且很难找错,两个函数相近又有很多变量名,看起来杂乱无章,可读性很低。
(2)第一次没有审题好,没有考虑number的位数,所有的数都是乘三次方;第二次改成下图,因为不想再定义一个变量,所有直接用N来累乘,没有考虑到两个N都会发生改变,导致答案错误;就重新定义一个变量total为各个位上的数的count次方。

修改后:

题目2:使用函数验证哥德巴赫猜想

1. 本题PTA提交列表





2. 设计思路

(1)定义函数prime(p)判断用户传入参数p是否为素数:

(2)如果p为1,不是素数则返回0;如果p为2,是素数则返回1;

(3)i=2,当i小于P时执行下一步骤;

(4)判断p能否整除i;

(5)如果能整除则不是素数,结束循环;

(6)判断此时的i是否大于p/2,若是则为素数,return 1;

(7)i++,重复执行第三步骤直到i=p位置。

(8)定义 Goldbach(n)函数输出n的素数分解:

(9)输出“n = ”;

(10)number=2;当number小于n时,执行下一步骤;

(11)判断 prime(number)是否等于1且prime(n-number)是否等于1;

(12)同时成立时输出number+n-number,结束判断;

(13)number++,重复执行第十步骤,直到number等于n时为止。

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

(1)一开始只判断了1不是素数,没有判断2时素数,所有当p等2时结果错误;

(2)prime(p)函数中用while语句判断素数时没有考虑好范围,结果没有办法正确判断,通过调试找出死循环,后改成for语句;
(3)Goldbach(n)函数中不知道如何进行素数分解,没有直接调用prime(p)函数时,以为要判断第一个素数后,用n-number输出第二个数就可以了,运行后发现n-number不一定是素数;后面又把n-number写错成number-n,第二个数输出时就变成了负数;直接调用prime(p)函数判断两个数同时是素数,然后输出即可;

(4)在判断number和n-number是否是素数同时成立时,输出一次即可;没有加上break会一直判断,运行时会输出所有结果。

题目3:求组合数

1. 本题PTA提交列表



2. 设计思路

(1)函数声明fact(n)计算n的阶乘;

(2)定义result来存放结果;

(3)输入m和n;

(4)result=fact(n)/(fact(m)fact(n-m)),函数调用求组合数;

(5)输出结果;

(6)定义函数fact(n);

(7)定义product用于存放结果,i为循环变量;

(8)i=1,当i小于等于n时,执行下一步骤;

(9) product=product
i;

(10)i++,重复执行第8步骤直到i大于n为止;

(11)返回product的值

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

(1)函数声明时没有分号,导致编辑错误;因为前面写的都是函数定义,没有注意到这个细节;
(2)变量product没有定义成double的类型,虽然构思的时候有想到,但是写代码的时候又忘记了;

二、同学代码结对互评

1.同学互评照片。

2.我的代码、互评同学代码截图。

我的代码
  1. int narcissistic( int number )
  2. {
  3. int narc,M,N,count,i,totle,k; //narc用于存放各个数的count,次方的累加结果,total为各个位上的数的count次方
  4. M=number; //N为各个位上的数,M保留number的初值,count为number的位数
  5. narc=0;
  6. count=0;
  7. while(number!=0){ //计算count的值
  8. number=number/10;
  9. count++;
  10. }
  11. number=M; //number的初值重新赋回
  12. for(i=1;i<=count;i++){
  13. N=number%10;
  14. totle=1;
  15. for(k=1;k<=count;k++) //计算total;
  16. totle=totle*N;
  17. number=number/10; //number去个位
  18. narc=narc+totle; //计算narc
  19. }
  20. if(narc==M) //比较narc与M的值,若相等则为水仙花数
  21. return 1;
  22. else
  23. return 0;
  24. }
  25. void PrintN( int m, int n )
  26. {
  27. int i;
  28. for(i=m+1;i<=n-1;i++){ //在m到n的范围内找水仙花数
  29. if(narcissistic(i)==1)
  30. printf("%d\n",i);
  31. }
  32. }
林岑的代码
  1. int narcissistic( int number )
  2. {
  3. int i,j,k,sum,l,n;
  4. k=number;i=0;l=number;n=number;
  5. while(k!=0){
  6. k=k/10;
  7. i++;
  8. }
  9. while(l!=0){
  10. l=n%10;
  11. sum=1;
  12. for(j=1;j<=i;j++){
  13. sum=sum*l;
  14. }
  15. k=k+sum;
  16. l=(n-l) /10;
  17. n=n/10;
  18. }
  19. if(k==number)
  20. return 1;
  21. else
  22. return 0;
  23. }
  24. void PrintN( int m, int n )
  25. {
  26. int i,j,k,sum,a,l,h;
  27. for(a=m+1;a<n;a++){
  28. k=a;i=0;l=a;h=a;
  29. while(k!=0){
  30. k=k/10;
  31. i++;
  32. }
  33. while(l!=0){
  34. l=h%10;
  35. sum=1;
  36. for(j=1;j<=i;j++){
  37. sum=sum*l;
  38. }
  39. k=k+sum;
  40. l=(h-l) /10;
  41. h=h/10;
  42. }
  43. if(k==a)
  44. printf("%d\n",a);
  45. }
  46. }

3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。

  • 不同:(1)我的代码在第二次函数中直接调用了第一个函数,少了重新判断的内容,所以代码会比较短一些;

    同学的代码中是重新判断了水仙花数,不过她的两个函数中变量名一样,比较整洁;我第一次没有直接调用第一个函数时,第二个函数的变量名又设的不一样,很容易眼花缭乱。

    (2)同学判断水仙花数的条件和我不一样,她是以个位数为判断条件,这样的话如果数的中间有0的话就没办法继续判断,所以还要多加一条语句来改正;如果用number的话,直接取个位再去个位就不用考虑中间夹0的情况了。
  • 我会更喜欢自己代码些,可能比较适应自己思考方式吧,觉得比较容易接受。

三、截图本周题目集的PTA最后排名。(2分)

PTA排名

四、本周学习总结(2分)

1.你学会了什么?

  • C语言哪些数据类型?

    (1)整型:整型,短整型,长整型,无符号整型,无符号短整型,无符号长整型;

    (2)字符型:字符型;

    (3)浮点型:单精度浮点型,双精度浮点型;
  • 字符型数据需要注意地方?

    (1)可以用整数来表示字符;

    (2)互换整型变量和字符型变量的定义和值时,整型数据的取值范围是有效的ASCII码;

    (3)转义字符是由反斜杠加上一个字符或数字组成,形式上由多个字符组成,实际上只代表一个字符。
  • 自增自减运算符?

    (1)++n=n+1,n++=n;

    (2)自增运算符和自减运算符的运算对象只能是变量;

    (3)结合方向:右结合(从右向左)。
  • 运算符优先级?

    (1)单目运算优于双目运算;

    (2)先乘除,后加减;

    (3)先算术运算,后移位运算,最后位运算;

    (4)逻辑运算最后计算。
  • C语言哪些表达式?课堂派哪里做错,做错的请在这里分析原因?

    (1)算数表达式,赋值表达式,关系表达式,逻辑表达式,条件表达式和逗号表达式;

    (2)######课堂派



    x本身为浮点型,所以经过整除运算后得到的2要变成浮点型;



    逻辑或语句只要有一个值为真就会结束不再继续执行,所以这道题执行完++x后就结束了,没有执行y++,所以y的值没有改变。

2.本周的内容,你还不会什么?

  • 运算符优先级并不是很明确,容易混淆;
  • 一下子学了好多表达式和运算符,还不是很能接受;
  • 函数的PTA完成的不太好,调试了很久才找出错误,如果是考试的话根本来不及。

3.循环结构考试总结(全部同学都要写)

(1)哪题做错了,怎么改?

  • 第二题:字符问题,一直掌握不好,老师之前详细的讲解过空心菱形的题目,把那道题再看看研究好字符的应用;
  • 第四题:题目要求在一行中按递减顺序输出10个满足条件的素数,利用count来控制输出个数,但是没用实现;
  • 第五题:还没有写出正确答案。

(2)考试结果满意么,怎么改进?

  • 很差,考试的时候都没什么好点的思路,写的代码又很乱,太紧张了犯了些小错误,花了很多时间去修改;
  • 本次考试的题目有些是老师讲过或者做过的,没有很大难度,但是自己却做不好,平时做过的题目还是没有下功夫研究和总结;
  • 看了一些同学的代码,明显解题思路要好很多,不仅清晰而且简单,希望通过看看别人写的代码能够提高这方面的能力;然后平时做过的作业要经常看看,注意错误点。

C语言博客作业—函数的更多相关文章

  1. C语言博客作业——函数

    一.PTA实验作业 题目1:6-6 使用函数输出水仙花数 1.本题PTA提交列表 2. 设计思路 int narcissistic( int number ) //函数定义 1.定义整数型变量a.i分 ...

  2. C语言博客作业--函数嵌套调用

    一.实验作业(6分) 本周作业要求: 选一题PTA题目介绍. 学习工程文件应用,设计实现学生成绩管理系统. 学生成绩管理系统要求 设计一个菜单驱动的学生成绩管理程序,管理n个学生m门考试科目成绩,实现 ...

  3. C语言博客作业--函数 陈张鑫

    一.PTA实验作业 题目1:6-3 使用函数判断完全平方数 1. 本题PTA提交列表 2. 设计思路 1.定义int IsSquare( int n )函数 2.判断(sqrt(n)是否为整数 3., ...

  4. C语言博客作业—函数嵌套调用

    一.实验作业 1.1 PTA题目:递归法对任意10个数据按降序排序 1.1.1设计思路 void sort(int a[],int n) { 定义整型循环变量i,中间变量temp,最小值min: 令m ...

  5. C语言博客作业--函数

    一.PTA实验作业 题目1 (6-7) (1).本题PTA提交列表 (2)设计思路 设计第一个函数判断是否完数int factorsum( int number ) 定义sum.i:sum初始化归0, ...

  6. C语言博客作业06——结构体&文件

    C语言博客作业06--结构体&文件 1.本章学习总结 1.1思维导图 1.2.本章学习体会 在本周的学习中,我们学习了关于结构体和文件的内容.结构体的本身并不难,但以结构体为基础的链表还是让我 ...

  7. C语言博客作业6---结构体&文件

    C语言博客作业6---结构体&文件 1.本章学习总结(2分) 1.1思维导图 请以思维导图总结本周的学习内容.如下图所示: 1.2.学习体会 描述本周学习感受,也可以在这里提出你不理解地方.对 ...

  8. C语言博客作业5--指针

    C语言博客作业5--指针 1.本章学习总结(2分) 1.1思维导图 请以思维导图总结本周的学习内容,如下图所示: 1.2本章学习体会及代码量学习体会 1.2.1学习体会 描述本周学习感受,也可以在这里 ...

  9. C语言博客作业3--函数

    C语言博客作业3--函数 1.本章学习总结 1.1思维导图 请以思维导图总结本周的学习内容,如下图所示: 1.2本章学习体会及代码量学习体会 1.2.1学习体会 描述本周学习感受,也可以在这里提出你不 ...

随机推荐

  1. [BZOJ4372]烁烁的游戏

    题面戳我 题意: 给一颗n个节点的树,边权均为1,初始点权均为0,m次操作: Q x:询问x的点权. M x d w:将树上与节点x距离不超过d的节点的点权均加上w. \(1≤n≤10^5\) sol ...

  2. java 提取目录下所有子目录的文件到指定位置

    package folder; import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundExcept ...

  3. checkBox半选中状态

    checkbox 可以半选中,这个特性,很多浏览器都支持 // 用 input.indeterminate 这个属性来获取或者设置半选中状态,必须要用 js 添加属性,才有效果. input.inde ...

  4. lambda表达式Expression<Func<Person, bool>> 、Func<Person, bool>区别

    前言: 自己通过lambda表达式的封装,将对应的表达式转成字符串的过程中,对lambda表达式有了新的认识 原因: 很多开发者对lambda表达式Expression<Func<Pers ...

  5. PAT乙级-1063. 计算谱半径(20)

    在数学中,矩阵的"谱半径"是指其特征值的模集合的上确界.换言之,对于给定的n个复数空间的特征值{a1+b1i, ..., an+bni},它们的模为实部与虚部的平方和的开方,而&q ...

  6. 13.C++-静态成员变量、静态成员函数

    首先回顾下成员变量 能通过对象名能够访问public成员变量 每个对象的成员变量都是专属的 成员变量不能在对象之间共享 再来讲讲类的静态成员变量 介绍 静态成员变量属于整个类所有 静态成员变量的生命期 ...

  7. 基于synchronized实现的阻塞队列

    package com.lilei.pack09; import java.util.concurrent.ExecutorService; import java.util.concurrent.E ...

  8. Android 零散知识点整理

    Android 零散知识点整理 为什么Android的更新试图操作必须在主线程中进行? 这是因为Android系统中的视图组件并不是线程安全的.通常应该让主线程负责创建.显示和更新UI,启动子线程,停 ...

  9. Maven-06: 插件的内置绑定

    Maven的生命周期与插件相互绑定,用以完成实际的构建任务.具体而言,是生命周期的阶段与插件的目标相互绑定,以完成某个具体的构建任务.例如项目编译这一任务,它对应default生命周期的compile ...

  10. 自动修改博客CSS样式用的代码

    <script type="text/javascript" src="https://code.jquery.com/jquery-3.1.1.min.js&qu ...