输入n及n个任意的数,并将n个数按照从大到小的顺序排列(C语言)?

用C语言描述下列算法,并给出算法的时间复杂度.
(1)求一个n阶方阵的所有元素之和.
(2)对于输入的任意三个整数,将它们按从小到大的顺序输出.(3)对于输入的任意n个整数,输出其中的最大元素和最小元素.

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

1.本题PTA提交列表


  • 1.定义整数型变量a.i分别来存放number分离的出来的数和进行digit次幂运算的循环次数
  • 5.利用for循环,把分离出来的数a进行digit次幂运算后存放在b
  • 8.b=1 清空b的值继续进入下一次循环求a的digit次幂运算结果
  • 9.重复步骤4,直到c=0
  • 10.判断sum与number的关系:相等返回1,不相等返回0
  • 1.定义整数型变量i来存放循环次数

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

  • 于是利用for循环进行重复累积,并且提出疑问:是否可以 在函数定义中再调用#include''math.h'' 答案是:不可以

  • 2.进行调试后发现没有进入循环,后监视变量发现忘记给c赋初值了....(可怕的老毛病)

  • 3.为了提高运行效率而有意减少未知数的定义导致number的值被改变而影响后续的比较

  • 解决方法:定义一个数c附上number的值然后对c进行分离而不去改变number的值,避免对后续工作造成影响

  • 4.发现多输出一个本身的数

  • 解决方法:回过头来审题发现是 开区间 于是

  • 5.终于运行出与样例一样的答案,但是....果然pta不是吃素的...

  • 解决方法:根据pta的提示

  • 即: 在不返回的函数里不可以return 任何东西

  • (2)最大区间答案错误:在输入较大数后发现只输出3位数字的数字,但是误以为四位数并没有水仙花数,一筹莫展之下去询问了同学后发现
    自己审题上的错误,并不是所有数都是各个位数的三次方而是 digit次幂之和

  • 6.遇到下面这句陌生的话不要着急,解决的方法非常简单:关闭黑框框即可

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

1.本题PTA提交列表


  • 1.定义整数型变量i和sum分别来存放循环次数和所有因子和
  • 1.定义整数型变量i,j分别来存放循环次数和所有可能的因子,定义flag=0存放没有完数的情况,flag=1存放有完数的情况,并给flag赋初值=0
  • 6.完成一个完数的表达式后换行

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

题目3:7-1 求组合数

1.本题PTA提交列表


  • 2.定义两个整数型变量m,n 定义浮点型变量result来存放结果
  • 3.输入两个整数m,n
  • 1.定义整数型变量i,浮点型变量result

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

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

int i=1,x,sum=0; //定义整数型变量i,x,sum分别存放符号,分离出来的数字,逆序后的数 sum = sum * 10 +x; //把上一次分离出来的数*10然后在加上新分离出来的数组成新数

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

  • 不同点:设计思路不同:我——利用取余的方式把number从后面一个个取出数字后再依次10, 先分离出来的数10的次数便多,也就是位于新数的前面实现了逆序
    林晓露同学——利用一个数的每个数字在正序和逆序中10的总和不变来实现逆序,eg(512中5在正序中10两次,而后在逆序中10零次,2在正序中10零次而后两次)
  • 在这一题上,我更喜欢我的代码风格,因为我的代码的运行效率相对会高一些而且整洁一些,但是晓露同学的代码设计思路更容易让人理解而且更有数学思想
    虽然我一开始的想法也是偏向晓露同学的设计思路,但是题目所给的主函数并没有为我们提供#include<math.h> ,于是我放弃利用这种设计思路......这也是我觉得pta很神奇的地方

1.1 C语言哪些数据类型?

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

  • 1.字符常量:用单引号扩起来的一个字符,eg 'A'
    转义字符:特殊的字符常量,都是以 ‘ \ ’开头 (代表一个字符)
    注意:所有字符都可以用转义字符表示
  • 2.字符变量:用来存放字符,且只能存放一个字符
    输入输出的方式是 %c
    但是字符型数据和整数型数据可以相互赋值,即字符型数据可以以字符形式输出,也可以以整数形式输出

1.3 自增自减运算符?

  • ++是自增运算符,是单目运算符,其作用是使单个变量的值增1。它有两种使用情况:

  • 1)前置:++i,先执行i=i+1,再使用i值;

  • --是自减运算符,是单目运算符,其作用是使单个变量的值减1。它有两种使用情况:

  • 1)前置:--i,先执行i=i-1,再使用i值;

  • 1)自增和自减运算符,只能用于变量,不能用于常量和表达式。例如5++,--(a+b)等都是非法的。
    2)自增、自减运算符及负号运算符的结合方向是从右向左。

1.4 运算符优先级?

1.5 C语言哪些表达式?

    双目:+,-,*,/,%。
  • 表达式1,表达式2,表达式3........表达式N
    先计算表达式1,然后计算表达式2.。。。。并将表达式n的值作为逗号表达式的值。
    逗号运算符的优先权最低,左结合

  • 注意:(1)可以看到一个表达式也可以没有操作符,例如“4”这种形式就是最简单的表达式形式,即最简单的表达式只有一个常量或一个变量名称而没有操作符。
    (2)函数调用也是表达式

  • 由y=012可知y是个八进制,换成十进制=10
    由后置先使用x值可知,表达式就等于10

    非赋值运算:水平方向,垂直方向,类型小的转类型大的
    赋值运算:变量= 表达式
    将赋值运算符右侧表达式的类型,自动转换成赋值号左侧变量的类型
  • 注意:逻辑运算符注意P138
    在逻辑表达式的求解中,并不是所有的逻辑运算符都执行,只有在必须执行下个逻辑运算符才能求出表达式的值时,才执行下一个运算符则执行语句:

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

  • 1.对位运算还很不熟悉,如位逻辑运算,移位运算,复合位赋值运算都还不太熟悉,也不会它具体的灵活运用,除了了解到老师上课举例的找2的整数次方的数
  • 2.对异或还有二进制,八进制,十六进制的转换的都不熟练
  • 3.对自动类型转换也不熟悉

我要回帖

更多关于 输入n求n的阶乘的编程 的文章

 

随机推荐