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.考试结果满意么,怎么改进?

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

  • 相关阅读:
    POJ 3268 Silver Cow Party (Dijkstra)
    怒学三算法 POJ 2387 Til the Cows Come Home (Bellman_Ford || Dijkstra || SPFA)
    CF Amr and Music (贪心)
    CF Amr and Pins (数学)
    POJ 3253 Fence Repair (贪心)
    POJ 3069 Saruman's Army(贪心)
    POJ 3617 Best Cow Line (贪心)
    CF Anya and Ghosts (贪心)
    CF Fox And Names (拓扑排序)
    mysql8.0的新特性
  • 原文地址:https://www.cnblogs.com/Littleweii/p/7858313.html
Copyright © 2011-2022 走看看