zoukankan      html  css  js  c++  java
  • C语言博客作业--函数

    一、PTA实验作业

    题目1:使用函数输出一个整数的逆序数

    1. 本题PTA提交列表

    2. 设计思路

    
    reverse函数(int number):
    1.int n,i,number1,number2=0//n控制第一个循环,i控制第二个循环,number1存放number数据来,number2来存放逆序数
    2.number1 = number//把数字赋值给number1求number的位数,避免改变number的值 
    3.for n=1 to number1!=0 执行4.
    4.n++;number1=number1/10;
    5.while number%10=0时执行6.7.
    6.if number==0 break;//考虑输入0时进入死循环
    7.number=number/10;n--;//若个位为零先丢掉个位
    8.for i=1 to i<=n执行9.10.11
    9.int unit;
    10.unit=number/pow(10,(i-1))//逐步丢掉个位 
    11.number2=unit%10*pow(10,n-i-1) +number2;//累加算出逆序数 
    12.return number2;
    
    

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

    • 在提交前有遇到计算数字位数不正确的问题 解决办法:在算位数的循环里输出了n的值用于找错,最后发现是结束条件应该为number1!=0;
    • 提交后未满分提示输入0时错误 解决办法:在丢个位的步骤七循环中写一个条件判断number==0时break跳出该语句。

    题目2:使用函数输出指定范围内的完数

    1. 本题PTA提交列表

    2. 设计思路

    
    factorsum函数(int number):
    1.int i,sum=0;//i控制循环 sum来把每个因子累加 
    2.if (number==1) return 1//先把特殊情况1列出去
    3.else 执行4.5.
    4for i=1 to i<=(number/2) i++//逐个求number因子 
    5. if ((number/i)==(double)number/i) sum=sum+i;
    6.return sum;
    
    PrintPN函数(int m;int n):
    1.int i,k,y=0;//i控制第一层循环(找到区间内的完数),k控制第二层循环  y=0来标记是否有完数产生 
    2.for i=m to i<=n i++{
           3. if (factorsum(i)==i){
               4.y=1;//有完数产生就改变y的值 
               5.printf("%d =",i);
               6.if (i==1) {printf(" %d",i);printf("
    ");}//1时的特殊情况 
               7.else{
                       8.for k=1 to k<(i/2) k++){//将该完数分解
                             9.if (k==1) printf(" %d ",k);
                           10.else if (i/k==(double)i/k) printf("+ %d ",k);}
                       11.printf("+ %d",i/2);
                       12.printf("
    ");
                           }
                    }
                }
            }
    3.if (y==0) printf("No perfect number") ;
    
    

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

    • 多种错误中首先是没考虑无完数的情况 解决办法:用开头定义一个y=0;中间如果产生一个完数就赋值y=1来实现。

    题目3:求组合数

    1. 本题PTA提交列表

    2. 设计思路

    • 定义整型变量n,m(n<=n)
    • 输入n,m
    • 输出 result的值,result=fact(m)/(fact(n)*fact(m-n))
    • 定义浮点型函数fact(double n)
    • 定义浮点型变量i,result,i控制变量,result用来存放累乘的值
    • 返回result的值。

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

    • 数据类型不符 解决办法:同学提醒把函数类型改为double

    二、同学代码结对互评

    1.同学互评照片。

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

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

    • 不同:
      刘博涵的函数是直接将m,n带到一个函数中进行组合数的总运算,而我的函数是只进行累乘的运算再在输出里面用公式fact(m)/(fact(n)*fact(m-n)输出结果
    • 优势:
      刘博涵同学代码在输出部分就不需要在进行运算了,而我的还需要进行。
      我的代码比较简洁,函数内进行的运算比较简单
    • 更喜欢自己的代码,因为总体看起来简洁,同时也没有那么多循环,更易懂。

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

    四、本周学习总结

    1.你学会了什么?

    1.1 C语言哪些数据类型?

    整型、字符型、实型

    1.2 字符型数据需要注意地方?

    • 输入输出均不同
    • 要注意在scanf输入的语句中空格的加入可能会被字符型数据拾取
    • 单引号‘’的运用

    1.3 自增自减运算符?

    • a=++n 表示n=n+1 a=n
    • a=n++ 表示a=n n=n+1
    • a=--n 表示n=n-1 a=n
    • a=n-- 表示a=n n=n-1

    1.4 运算符优先级?

    从高到低排列:逻辑运算符、算术运算符、关系运算符、逻辑运算符、条件表达式、赋值运算符、逗号运算符

    1.5 C语言哪些表达式?课堂派哪里做错,做错的请在这里分析原因?

    • 算术表达式、赋值表达式、关系表达式、逻辑表达式、条件表达式
    • 第二题下列程序段输出结果为 __。

    int x=1, y=012;

    printf(“%d”,y*x++);

    错选24 正确10 原因:不知道y=012是八进制的表达 也不知道单独的x++的值

    第四题表达式8>6>3的值是
    错选1 正确0 原因:不知道(8>6)=1 然后(1>3)=o

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

    • 优先级还需要再巩固
    • 进制间的转换需要再学习
    • 位运算符不懂

    3.循环结构考试总结

    1.哪题做错了,怎么改?

    第四题错了 第五题没做。
    负数部分答案错误 应该在之前判断是否为负数,若为负数输出0。

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

    不满意,应该多学习满分同学,提高自己的编程量。此次考试会做的都是一遍就能写出来(前三题),用时也较少,但就是不会做的后两题毫无头绪,导致一直到最后提交时间也没有能做出来,最后一题甚至连思路都没有,还是自己不能完成题目的要求。

  • 相关阅读:
    Asp.Net 之 前台绑定常用总结
    http无状态
    整理Py小demo
    RawURL
    整理的笔记
    单例模式
    DevExpress v18.1新版亮点——Analytics Dashboard篇(一)
    DevExpress v18.1新版亮点——Reporting篇(四)
    MyEclipse教程:使用UML创建模块库——第二部分(一)
    DevExpress v18.1新版亮点——Reporting篇(三)
  • 原文地址:https://www.cnblogs.com/Littleweii/p/7858313.html
Copyright © 2011-2022 走看看