输入正整数n,计算n的阶乘c++实验报告
- 格式:doc
- 大小:555.00 KB
- 文档页数:8
c语言实验报告册C语言实验报告册。
实验一,C语言基本程序设计。
1. 实验目的。
通过本实验,掌握C语言的基本程序设计方法,包括变量的定义和使用、表达式的计算、控制结构的使用等。
2. 实验内容。
(1)编写一个C程序,实现输入两个整数,然后输出它们的和、差、积和商。
(2)编写一个C程序,实现输入一个实数,计算并输出它的绝对值。
3. 实验步骤。
(1)定义两个整型变量a和b,用来存储输入的整数。
(2)使用printf函数提示用户输入两个整数,并使用scanf函数将用户输入的值分别赋给变量a和b。
(3)定义四个整型变量sum、diff、product和quotient,分别用来存储a和b的和、差、积和商。
(4)分别计算a和b的和、差、积和商,并将结果分别赋给sum、diff、product和quotient。
(5)使用printf函数输出sum、diff、product和quotient的值。
4. 实验结果。
输入:a = 5。
b = 3。
输出:sum = 8。
diff = 2。
product = 15。
quotient = 1。
5. 实验结论。
通过本实验,我掌握了C语言的基本程序设计方法,包括变量的定义和使用、表达式的计算、控制结构的使用等。
在实际编程中,我需要注意变量的类型和范围,以避免数据溢出和精度丢失的问题。
实验二,C语言函数的使用。
1. 实验目的。
通过本实验,学习C语言函数的定义和调用,掌握函数参数的传递和返回值的使用。
2. 实验内容。
(1)编写一个C程序,实现输入两个整数,计算它们的最大公约数和最小公倍数。
(2)编写一个C程序,实现输入一个整数n,计算并输出1到n的阶乘之和。
3. 实验步骤。
(1)定义一个函数gcd,用来计算两个整数的最大公约数。
(2)定义一个函数lcm,用来计算两个整数的最小公倍数。
(3)定义一个函数factorial,用来计算一个整数的阶乘。
(4)在主函数中,调用gcd和lcm函数计算最大公约数和最小公倍数;调用factorial函数计算阶乘之和。
n的阶乘c语言程序递归递归是一种在函数中调用自身的方式,可以用来解决一些需要重复求解的问题。
阶乘是一个典型的递归问题,可以用递归方式来求解。
阶乘的定义是:n的阶乘(记作n!)是从1乘到n的连续自然数相乘的积。
例如,5的阶乘为5! = 5 × 4 × 3 × 2 × 1 = 120。
下面我们来编写一个能够计算n的阶乘的递归函数。
```c#include <stdio.h>//递归函数,计算n的阶乘int factorial(int n) {//基线条件,当n为1时,直接返回1if (n == 1) {return 1;}//递归调用,将问题规模减小,继续求解return n * factorial(n - 1);}//主函数int main() {int n;printf("请输入一个整数n:");scanf("%d", &n);if (n < 0) {printf("请输入一个非负整数!\n"); return 0;}int result = factorial(n);printf("%d的阶乘是:%d\n", n, result);return 0;}```在上面的代码中,我们定义了一个名为factorial的递归函数,用来计算n的阶乘。
这个函数的基线条件是当n为1时,直接返回1。
否则,将问题规模减小,并继续递归求解。
递归调用的参数是n-1,这样问题的规模就减小了,直到遇到基线条件终止递归。
在主函数中,我们从用户输入获取一个整数n,然后调用factorial函数求解n的阶乘,并将结果输出。
递归调用过程中,每次调用都会将问题规模减小,直到达到基线条件。
因此,递归函数的效率与问题规模有关。
对于阶乘问题,递归的时间复杂度是O(n)。
需要注意的是,递归过程中可能会出现栈溢出的问题。
科技学院课程设计报告( 2012—2013 年度第一学期)课程:微机原理及应用题目:计算N的阶乘院系:动力工程系班级:学号:学生姓名:指导教师:设计周数:一周成绩:日期:2013年1 月11 日《微机原理及应用》课程设计任务书一、目的与要求1.通过对微机系统分析和具体设计,使学生加深对所学课程的理解。
2.掌握汇编语言程序设计的基本方法和典型接口电路的基本设计方法。
3.培养学生分析问题、解决问题的能力。
4.培养学生对微型计算机应用系统的基本设计能力。
5.提高学生的实践动手能力和创新能力。
二、主要内容设计题目:计算N的阶乘。
数值N由键盘输入,N的范围为0~65535,结果在屏幕上显示。
1.针对所选择的设计题目进行硬件设计,合理选用所需元器件,绘制系统结构框图、硬件接线图,并在实验系统上完成电路的连接和调试。
2.根据所选题目的要求对微机系统进行程序设计,绘制程序总体流程图并编写源程序上机调试。
3.写出课程设计报告,对整个设计过程进行归纳和综合,对设计中所存在的问题和不足进行分析和总结,提出解决的方法、措施、建议和对这次设计实践的认识和收获。
三、进度计划四、设计成果要求1.系统硬件设计合理,软件编程达到设计要求。
2.系统硬件结构图和软件流程图绘制清楚规范。
3.设计报告完整规范。
五、考核方式根据设计任务的完成情况、课程设计报告撰写情况及演示答辩情况采用五级记分制评定成绩。
学生姓名:指导教师:一、课程设计目的与要求1.通过对微机系统分析和具体设计,使学生加深对所学课程的理解。
2.掌握汇编语言程序设计的基本方法和典型接口电路的基本设计方法。
3.培养学生分析问题、解决问题的能力。
4.培养学生对微型计算机应用系统的基本设计能力。
5.提高学生的实践动手能力和创新能力二、课程设计正文1.程序正文CRLF MACROMOV AH,02HMOV DL,0DHINT 21HMOV AH,02HMOV DL,0AHINT 21HENDM ;回车换行DATA SEGMENTMESS1 DB ‘INPUT THE NUMBER ACCORDING TO HEXNUM!’,0DH,0AH, ‘$’ MESS2 DB ‘THE RESULT IS:’,0DH,0AH, ‘$’ERROR DB ‘INPUT ERROR!’,0DH,0AH, ‘$’LEN DW 1CYY DW ?BUF DW 256 DUP (0)DATA ENDSSTACK SEGMENTSTA DW 32 DUP (?)TOP DW ?STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV ES,AXMOV SP,TOPMOV AH,09HMOV DX,OFFSET MESS1INT 21H ;显示输入提示信息CALL GETNUM ;读取键入的N值MOV BP,DX ;N值送BPCMP BP,0JZ EEECMP BP,1JZ EEE ;N=0或N=1则转EEEMOV SI,OFFSET BUF ;缓冲区首址MOV [SI],DX ;缓冲区初始化为值NXXX: DEC BP ;N值减1CMP BP,0001HJZ LLL ;若为1则转LLLXOR BX,BX ;偏移指针清0MOV WORD PTR [CYY],0 ;进位单元请0MOV CX,[LEN] ;当前结果长度送CXTTT: MOV AX,[SI+BX]MUL BP ;相乘ADD AX,[CYY] ;加低位进位JNC JJJ ;结果元进位转JJJINC DX ;有进位将高位单元加1JJJ: MOV [SI+BX],AX ;结果送缓冲区中MOV [CYY],DX ;高位送进位单元INC BXINC BX ;1个字长度LOOP TTT ;循环CMP DX,0000HJZ BBB ;最后1次的进位为0则转BBBINC WORD PTR [LEN] ;长度加1MOV [SI+BX],DX ;进位送缓冲区中BBB: JMP XXXEEE: MOV SI,OFFSET BUFMOV WORD PTR [SI],1 ;结果为1LLL: MOV AH,09HMOV DX,OFFSET MESS2INT 21H ;显示表头MOV CX,[LEN]MOV BX,CX ;长度DEC BXSHL BX,1 ;1个字为2个字节CCC: MOV AX,[SI+BX]CALL DISPDEC BXDEC BX ;显示结果LOOP CCCMOV AX,4C00H ;结束INT 21HDISPP PROC NEARMOV BL,ALMOV DL,BLMOV CL,04ROL DL,CLAND DL,0FHCALL DISPLMOV DL,BLAND DL,0FHCALL DISPLRETDISPP ENDPDISPL PROC NEARADD DL,30HCMP DL,3AHJB DDDADD DL,27HDDD: MOV AH,02HINT 21HRETDISPL ENDPDISP PROC NEAR ;显示子程序,按十六进制数方式显示AX中的数PUSH BXPUSH CXPUSH DXPUSH AX ;入栈保存MOV AL,AHCALL DISPP ;显示高字节POP AXCALL DISPP ;显示低字节POP DXPOP CXPOP BXRETDISP ENDPGETNUM PROC NEARPUSH CXXOR DX,DXGGG: MOV AH,01HINT 21H ;读取键入字行的ASCⅡ码送ALCMP AL,0DHJZ PPPCMP AL,20HJZ PPP ;是回车键或空格键则转PPPSUB AL,30HJB KKK ;非字符转KKKCMP AL,0AHJB GETS ;在‘0~9’间转GETSCMP AL,11HJB KKK ;非字符转KKKSUB AL,07HCMP AL,0FHJBE GETS ;在‘A~F’间转GETSCMP AL,2AHJB KKKCMP AL,2FHJA KKK ;不在‘a~f’间转KKKSUB AL,20H ;‘a~f’的ASCⅡ码值→16进制数GETS: MOV CL,04SHL DX,CLXOR AH,AHADD DX,AX ;将本次键入的数字加进DX中JMP GGG ;接受下一个键入的数字KKK: MOV AH,09HMOV DX,OFFSET ERRORINT 21H ;显示输入出错信息PPP: PUSH DXCRLF ;回车换行POP DXPOP CXRETGETNUM ENDPCODE ENDSEND START2.程序框图计算N!的流程三、课程设计总结1、程序运行中的问题及解决方案在进行编程调试运行后,以输入5为例结果为0078H,但是运行DOS中显示的为007800,后面多显示为2个0,错误!返回DOS后,点击窗口——DOS,显示的为正常结果!2、心得体会此次课程设计我们收获颇多。
实验12
实验目的
1、循环结构
实验内容
1、编写程序,计算n的阶乘(n!),其中n的值由用户输入,取值在1-10 之间。
分别使用while和for语句实现,源程序保存名称为“1.c”和“2.c”。
效果如图:
2、分数序列,2/1,3/2,5/3,8/5,13/8,21/13…..求这个数列的前20项的和(提示:每个分子等于前一个数据分子和分母的和,每一个分母等于前一个数据的分子)源程序保存名称为“3.c”。
3、编写程序,输出1-200之间可以被n整除的所有整数,n由用户输入。
要求每一行显示5个数,并且程序最后输出一共有多少个整数能被n整除。
源程序保存名称为“4.c”效果图:
4、编写程序,输出以下图案,源程序保存名称为“4.c”。
* 效果图:。
程序编程基础实验报告实验名称:程序编程基础实验实验目的:本实验旨在通过编写程序来加深对程序编程基础知识的理解,包括基本的语法、数据类型、变量、常量、运算符以及条件和循环等。
实验内容:1. 编写一个程序,计算并输出1到100之间所有数的和。
2. 编写一个程序,输入一个整数n,计算并输出1到n之间所有数的乘积。
3. 编写一个程序,输入一个三位数,计算并输出百位、十位和个位上数字的和。
4. 编写一个程序,输入一个年份,判断该年份是否为闰年,并输出结果。
5. 编写一个程序,输入一个整数n,判断该数是否为素数,并输出结果。
6. 编写一个程序,输入一个字符串,判断该字符串是否为回文字符串,并输出结果。
实验步骤和结果:1. 第一个程序的代码如下:sum = 0for i in range(1, 101):sum += iprint(sum)运行结果为5050。
2. 第二个程序的代码如下:n = int(input("请输入一个整数:")) product = 1for i in range(1, n+1):product *= iprint(product)运行结果为输入的整数n的阶乘。
3. 第三个程序的代码如下:num = int(input("请输入一个三位数:")) digit1 = num 100digit2 = (num 10) % 10digit3 = num % 10sum = digit1 + digit2 + digit3print(sum)运行结果为输入的三位数的百位、十位和个位上数字的和。
4. 第四个程序的代码如下:year = int(input("请输入一个年份:"))if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0: print("是闰年")else:print("不是闰年")运行结果为判断输入的年份是否为闰年的结果。
c语言上机实验报告《C语言上机实验报告》在计算机科学领域,C语言是一种非常重要的编程语言,它被广泛应用于系统软件开发、嵌入式系统设计以及高性能计算等领域。
为了更好地掌握C语言的基本语法和编程技巧,我们进行了一次C语言上机实验,以下是实验报告。
实验目的:1. 熟悉C语言的基本语法和数据类型;2. 掌握C语言的控制结构,如条件语句和循环语句;3. 学习C语言的函数定义和调用;4. 掌握C语言的数组和指针的使用。
实验内容:1. 编写一个简单的C程序,实现从键盘输入两个整数,然后输出它们的和、差、积和商;2. 编写一个C程序,实现计算n的阶乘;3. 编写一个C程序,实现对一个整型数组进行排序;4. 编写一个C程序,实现对一个字符串数组进行排序。
实验步骤:1. 首先,我们编写了一个简单的C程序,使用了scanf函数从键盘输入两个整数,然后使用printf函数输出它们的和、差、积和商。
通过这个实验,我们熟悉了C语言的输入输出函数的使用。
2. 接着,我们编写了一个C程序,实现了计算n的阶乘的功能。
在这个实验中,我们学会了如何定义和调用函数,以及如何使用循环语句。
3. 然后,我们编写了一个C程序,实现了对一个整型数组进行排序的功能。
在这个实验中,我们掌握了C语言的数组的使用方法,并且学会了一种简单的排序算法。
4. 最后,我们编写了一个C程序,实现了对一个字符串数组进行排序的功能。
通过这个实验,我们进一步掌握了C语言的数组和指针的使用方法。
实验总结:通过这次C语言上机实验,我们更加熟悉了C语言的基本语法和编程技巧,掌握了C语言的控制结构、函数定义和调用、数组和指针的使用方法。
这些知识和技能对我们今后的学习和工作都将非常有帮助。
希望通过不断的实践和实验,我们能够更加熟练地掌握C语言,为以后的编程工作打下坚实的基础。
一、实验背景阶乘(Factorial)是数学中一个重要的概念,它表示一个正整数n的所有正整数乘积。
用数学符号表示为n!,其中n为正整数。
阶乘在数学、物理、计算机科学等领域都有广泛的应用。
本实验旨在研究阶乘算法,通过编写程序计算给定正整数的阶乘。
二、实验目的1. 了解阶乘的定义和性质;2. 掌握阶乘算法的编写方法;3. 比较不同阶乘算法的效率;4. 分析阶乘算法在实际应用中的优缺点。
三、实验环境1. 操作系统:Windows 102. 编程语言:Python3.83. 开发工具:PyCharm四、实验内容1. 阶乘算法的基本原理阶乘算法的核心思想是递归或循环。
递归方法利用函数自身调用实现阶乘的计算,而循环方法则通过循环结构实现。
2. 阶乘算法的编写(1)递归方法```pythondef factorial_recursive(n):if n == 0:return 1else:return n factorial_recursive(n-1)```(2)循环方法```pythondef factorial_loop(n):result = 1for i in range(1, n+1):result = ireturn result```3. 不同阶乘算法的效率比较为了比较递归方法和循环方法的效率,我们可以通过计算不同输入值下两种方法的执行时间。
```pythonimport timedef test_factorial_method(method, n):start_time = time.time()result = method(n)end_time = time.time()return end_time - start_time# 测试数据n_values = [5, 10, 15, 20, 25, 30, 35, 40, 45, 50]# 比较递归方法和循环方法的效率recursive_time = [test_factorial_method(factorial_recursive, n) for n in n_values]loop_time = [test_factorial_method(factorial_loop, n) for n in n_values]print("递归方法执行时间:")print(recursive_time)print("循环方法执行时间:")print(loop_time)```4. 阶乘算法在实际应用中的优缺点分析阶乘算法在实际应用中具有以下优缺点:优点:(1)易于理解和实现;(2)能够计算较大正整数的阶乘;(3)在数学、物理、计算机科学等领域有广泛的应用。
简单阶乘计算c语言阶乘是数学中的一个重要概念,也是计算机科学中常见的计算题目。
在C语言中,计算阶乘是一项简单的任务。
本文将介绍如何使用C语言计算阶乘,包括输入、循环和输出等基本操作。
首先,我们需要了解阶乘的概念。
阶乘指的是一个自然数 n 的阶乘,表示 n × (n-1) × (n-2) ×…× 2 × 1,通常用符号 n! 表示。
例如,4! = 4 × 3 × 2 × 1 = 24。
接着,我们需要使用C语言的输入函数 scanf() 获取用户输入的数值,并将其存储到一个变量中。
例如,我们可以使用以下代码获取用户输入的数值:int n;printf('请输入一个自然数n:');scanf('%d', &n);其中,%d 表示输入一个整数,&n 表示将输入的值存储到变量 n 中。
接下来,我们使用一个循环来计算 n 的阶乘。
通常,我们使用for 循环来实现阶乘的计算。
例如,以下代码可以计算 n 的阶乘: int i, result = 1;for (i = 1; i <= n; i++) {result *= i;}在上面的代码中,我们定义了一个变量 i 和一个变量 result,变量 i 用于循环计数,变量 result 初始值为 1。
在每次循环中,我们将 result 乘以 i,最终得到 n 的阶乘。
最后,我们使用输出函数 printf() 来显示计算结果。
以下代码可以将计算结果输出到屏幕上:printf('%d的阶乘为%d', n, result);在上面的代码中,%d 表示输出一个整数,表示换行符。
通过这个输出语句,我们可以将计算出来的阶乘结果显示在屏幕上。
综合以上几个步骤,我们可以得到完整的阶乘计算程序:#include <stdio.h>int main() {int n, i, result = 1;printf('请输入一个自然数n:');scanf('%d', &n);for (i = 1; i <= n; i++) {result *= i;}printf('%d的阶乘为%d', n, result);return 0;}以上代码可以读取用户输入的自然数 n,并计算其阶乘,最后将结果输出到屏幕上。
【题目】C语言输入n,求n的阶乘(递归算法)【导言】在编程语言中,阶乘是一个非常基础且常见的数学问题。
在C语言中,可以通过递归算法来解决求n的阶乘的问题。
本文将介绍C语言中如何输入n,然后利用递归算法来求n的阶乘,希望能为大家深入理解递归算法提供一些帮助。
【正文】1. 了解递归算法递归算法是指在函数的定义中使用函数自身的方法。
在进行递归调用时,必须要有出口条件,否则就会陷入无限循环之中。
对于阶乘问题,可以采用递归算法来解决,即n的阶乘等于n乘以n-1的阶乘,而n-1的阶乘又可以继续拆分为(n-1)乘以(n-2)的阶乘,以此类推直到n=1时,其阶乘为1。
这就是递归调用的基本思想。
2. 编写C语言代码下面我们来编写一个C语言的函数,利用递归算法来求输入n的阶乘。
```c#include <stdio.h>int factorial(int n) {if (n == 1) {return 1;} else {return n * factorial(n - 1);}}int main() {int number;printf("请输入一个整数:");scanf("d", number);if (number < 0) {printf("输入的整数必须大于等于0\n");} else {printf("d的阶乘为:d\n", number, factorial(number));}return 0;}```3. 程序分析在上面的代码中,定义了一个名为factorial的函数,用于求n的阶乘。
在main函数中,首先要求用户输入一个整数,然后调用factorial函数来求该整数的阶乘,并在控制台输出结果。
4. 示例运行接下来,我们通过一个示例来演示如何输入n,然后利用递归算法来求n的阶乘。
假设我们要求5的阶乘,输入5后程序将输出5的阶乘结果120。
C上机实验报告实验实验名称:C语言上机实验实验目的:1.熟悉C语言的基本语法和编程方式;2.掌握常见的控制结构和函数的使用方法;3.提高编程能力,培养解决实际问题的能力。
实验内容:1.编写一个程序,实现输入两个整数,然后输出它们的和、差、积;2.编写一个程序,实现输入一个整数n,然后计算并输出1到n之间的所有整数的和;3.编写一个程序,实现输入一个整数n,然后计算并输出1到n之间的所有奇数的和;4.编写一个程序,实现输入一个整数n,然后计算并输出1到n之间的所有偶数的和;5.编写一个程序,实现输入一个整数n,计算并输出n的阶乘;6.编写一个程序,实现输入一个整数n,计算并输出n的平方根;7.编写一个程序,实现输入一个整数n,判断并输出n是否为质数;8.编写一个程序,实现输入一个正整数n,判断并输出n是否为完全数;9.编写一个程序,实现输入一个整数n,计算并输出n的倒数,要求精确到小数点后6位;10.编写一个程序,实现输入一个字符串,然后将其逆序输出。
实验步骤:1.根据实验内容,分别编写10个C语言程序;2.按照实验要求,输入测试数据进行测试;3.运行程序,观察输出结果是否正确;4.如有错误,检查代码并进行修改;5.若一切正确,保存实验报告。
实验结果与分析:1. 输入两个整数为5和6,输出结果为sum=11, difference=-1, product=30;2. 输入整数n为10,输出结果为sum=55;3. 输入整数n为10,输出结果为sum=25;4. 输入整数n为10,输出结果为sum=30;5. 输入整数n为5,输出结果为factorial=120;7. 输入整数n为13,输出结果为13 is a prime number;8. 输入整数n为6,输出结果为6 is a perfect number;10. 输入字符串为"Hello, World!",输出结果为"!dlroW ,olleH"。