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("\n");}//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("\n");
                       }
                }
            }
        }
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.考试结果满意么,怎么改进?

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

posted @ 2017-11-18 23:00  Littleweii  阅读(471)  评论(2编辑  收藏  举报