`

练习:数据结构C语言描述(1_19)

 
阅读更多

1.19 试编写算法,计算i! * 2^i(i = 0, 1, ..., n - 1)的值并分别存入数组a[arrsize]的各个分量中。假设计算机中允许的整数最大值为MAXINT,则当n > arrsize或对某个k(0 <= k <= n - 1)使k! * 2^k > MAXINT时,应按出错处理。注意选择你认为较好的出错处理方法。


 

我的代码如下,大家看一下有没有问题:

 

#include <stdio.h> 
#include <stdlib.h> 

typedef unsigned int uint;
#define MAXINT 0xFFFFFFFFU 
#define ARRSIZE 20 

// 求阶乘
// num: 要计算的阶乘数字
// status: 状态-1表示溢出、1表示计算争取
uint jie_chen(uint num, int &status) 
{ 
	uint result = 1; 
	
	if(num < 0) 
	{ 
		exit(1);
	}

	int i = num;
	while(i > 0)
	{
		// 检验是否溢出
		// 如果MAXINT除result小于i,则result * i将会大于MAXINT,将会出现溢出
		if((float)MAXINT / (float)result < i)
		{
			// 出现溢出则返回-1
			status = -1;
			return 0;
		}
		result *= i;	
		--i;
	}

	status = 1;
	return result;
}

// 计算结果
// jiechen:之前计算出来的阶乘
// num: 2的多少次方
// status: 状态-1表示溢出,1表示计算正确
uint zhi_shu(uint jiechen, int num, int &status) {
	uint result = jiechen;
	for(int i = 1; i <= num; ++i)
	{
		// 判断是否溢出
		if((float)MAXINT / (float)result < 2)
		{
			status = -1;
			return 0;	
		}
		result *= 2;		
	}

	status = 1;
	return result;
}

int main(int argc, char* argv[])
{
	uint a_res[ARRSIZE] = {0};	

	int i = 0;
	int status = -1;
	uint zhishu = 0;
	uint jiechen = 0;

	for(; i < ARRSIZE; ++i)
	{
		jiechen = jie_chen(i, status);	
		if(status == 1)
		
			zhishu = zhi_shu(jiechen, i, status);
			if(status == 1)
			{
				a_res[i] = zhishu;	
			}
			else
			{
				break;	
			}	
		}
		else 
		{
			break;	
		}

	}

	for(int j = 0; j < i; j++)
	{
		printf("%2u:%-20u", j, a_res[j]);	
		if((j + 1) % 3 == 0)
		{
			printf("\n");	
		}
	}

	return 0;
}

 

 

输出结果如下:



 这结果对吗?

  • 大小: 56.3 KB
  • 大小: 37.4 KB
分享到:
评论

相关推荐

    C语言入门经典(第4版)--源代码及课后练习答案

    11.1 数据结构:使用struct 403 11.1.1 定义结构类型和结构变量 405 11.1.2 访问结构成员 405 11.1.3 未命名的结构 408 11.1.4 结构数组 408 11.1.5 表达式中的结构 411 11.1.6 结构指针 411 11.1.7 为结构...

    数据结构(C++)有关练习题

    在计算机科学发展过程中,早期数据结构教材大都采用PASCAL语言为描述工具,后来出现了采用C语言为描述工具的教材版本、至今又出现了采用C++语言为描述工具的多种教材版本。本教实验指导书是为已经学习过C++语言的...

    例说51单片机C语言第三版练习程序

    2-2 keil c语言的基本结构 43 2-3 变量、常数与数据类型 47 2-3-1 数据类型 47 2-3-2 变量名称与保留字 49 2-3-3 变量的作用范围 50 2-4 存储器的形式与模式 50 2-4-1 存储器的形式 51 2-4-2 存储器...

    《你必须知道的495个C语言问题》

    《你必须知道的495个C语言问题》结构清晰,讲解透彻,是各高校相关专业C语言课程很好的教学参考书,也是各层次C程序员的优秀实践指南。 -----------------------------------------------------------------------...

    你必须知道的495个C语言问题

    难道在C语言中结构不能包含指向自己的指针吗? 1.15 如何定义一对相互引用的结构? 1.16 Struct{ }x1;和typedefstruct{ }x2;这两个声明有什么区别? 1.17 “typedefint(*funcptr)();”是什么意思? const...

    宋劲彬的嵌入式C语言一站式编程

    1. 数据结构的概念 2. 堆栈 3. 深度优先搜索 4. 队列与广度优先搜索 5. 环形队列 13. 本阶段总结 II. C语言本质 14. 计算机中数的表示 1. 为什么计算机用二进制计数 2. 不同进制之间的换算 3. 整数的加减运算 3.1. ...

    c语言编写单片机技巧

    1. C语言和汇编语言在开发单片机时各有哪些优缺点? 答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言...

    八十多条C语言基础教程

    (19)函数应用实例,作业练习三 (20)指针的定义 (21)函数之间地址值的传递 (22)函数返回地址值 (23)一维数组的定义 (24)一维数组应用实例 (25)一维数组应用实例(2) (26)一维数组应用实例(3) (27)二维数组的定义 (28)...

    C++大学教程,一本适合初学者的入门教材(part1)

    第15章 数据结构 15.1 简介 15.2 自引用类 15.3 动态内存分配 15.4 链表 15.5 堆栈 15.6 队列 15.7 树 小结 术语 自测练习 自测练习答案 练习 特殊小节:建立自己的编译器 第16章 位、字符、字符串和结构 ...

    c语言题库问题和答案.docx

    函数习题:计算公式s=1+1/(1+2)+1/(1+2+3)+…+1/(1+2+…+n)的值 78%(482/616) 23% 2020-4-23 1086 函数习题:用函数实现判断一个整数是否能被n整除 68%(469/690) 34% 2020-4-23 1087 1091 结构体习题:通过学生学号...

    c语言经典案例

    第12章 常用数据结构 269 实例189 比较计数 270 实例190 找出最高分 271 实例191 信息查询 272 实例192 候选人选票程序 274 实例193 计算开机时间 276 实例194 取出整型数据的高字节数据 277 实例195 使用共用体存放...

    C语言程序设计标准教程

    C语言的数据类型  在第一课中,我们已经看到程序中使用的各种变量都应预先加以说明,即先说明,后使用。对变量的说明可以包括三个方面: ?数据类型 ?存储类型 ?作用域  在本课中,我们只介绍数据类型说明。其它...

    C++大学教程,一本适合初学者的入门教材(part2)

    第15章 数据结构 15.1 简介 15.2 自引用类 15.3 动态内存分配 15.4 链表 15.5 堆栈 15.6 队列 15.7 树 小结 术语 自测练习 自测练习答案 练习 特殊小节:建立自己的编译器 第16章 位、字符、字符串和结构 ...

    C++编程思想(中文版) chm

    全书共分十八章,内容涉及对象的演化、数据抽象、隐藏实现、初始化与清除、函数重载与缺省参数、输入输出流介绍、常量、内联函数、命名控制、引用和拷贝构造函数、运算符重载、动态对象创建、继承和组合、多态和虚...

    Visual C++ 2010入门经典(第5版)--源代码及课后练习答案

    第5章 程序结构(1) 209 5.1 理解函数 209 5.1.1 需要函数的原因 210 5.1.2 函数的结构 210 5.1.3 使用函数 213 5.2 给函数传递实参 216 5.2.1 按值传递机制 216 5.2.2 给函数传递指针实参 217 5.2.3 给函数...

    算法导论(part1)

    它深入浅出地介绍了大量的算法及相关的数据结构,以及用于解决一些复杂计算问题的高级策略(如动态规划、贪心算法、平摊分析等),重点在于算法的分析和设计。对于每一个专题,作者都试图提供目前最新的研究成果及样例...

    若干源程序资料12.rar

    2012-06-11 21:09 1,553,768 数据结构算法Visual.C.6.0程序集_源码.rar 2012-06-11 21:42 87,040 时域卷积定理的证明.ppt 2012-06-11 21:10 4,371 更改网关IP.rar 2012-06-11 20:57 1,419 栈的实现.txt 2012-06-11 ...

    c++编程思想及读后感

    第1章 对象的演化 1 1.1 基本概念 1 1.1.1 对象:特性+行为 1 1.1.2 继承:类型关系 1 1.1.3 多态性 2 1.1.4 操作概念:OOP程序像什么 3 1.2 为什么C++会成功 3 1.2.1 较好的C 3 1.2.2 采用渐进的学习方式 4 1.2.3 ...

Global site tag (gtag.js) - Google Analytics