-
2019-07-31 12:32:52
题目描述:
求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字(n不超过20)。输入:
n输出:
Sn的值样例输入:
5
样例输出:
153
分析:这道题目思路并不复杂,首先用for循环求出每项的值,同时把各项加起来求出Sn,然后输出Sn。但是要注意 一个问题:基本整型数据的最大范围是-2^16 ~ 2^16,所以在这里要用long long int类型来存数据。
代码:
#include<stdio.h> int main() { int i = 0; int n = 0; long long int a[20] = {0}; long long int Sn = 0; scanf("%d",&n); a[0] = 1; for(i = 1;i <= n;i++) { a[i] = a[i-1] * i; Sn = Sn + a[i]; } printf("%lld\n",Sn); return 0; }
更多相关内容 -
C语言中,要得到的结果是双精度的,为什么用整型格式输出是很大的整数,而不是将原
2021-05-25 07:22:09满意答案如果用%d,得到的数为1546188226 下面我们通过实验来剖析为什么得到的是这个数,而不是8 (1)在加入一行代码并设置断点如下: inta=7.1; doubleb=1.88; doublec=a+b;//加此行代码(注:因int+double自动转...满意答案
如果用%d,得到的数为1546188226
下面我们通过实验来剖析为什么得到的是这个数,而不是8
(1)在加入一行代码并设置断点如下:
int a = 7.1;
double b = 1.88;
double c = a + b;//加此行代码(注:因int+double自动转double,故c用double)
printf("%d",a+b);//在此行按F9设置断点
(2)F5运行程序,将停在printf行,打开watch变量查看窗口(如果你用的是vc6.0,在菜单view(视图)→debug windows(调试窗口)→Watch(查看)打开)。输入c,然后加个取地址符成 &c。这时候可以看到c变量的地址
(3)打开内存查看窗口(VC6.0打开位置同上面的查看窗口,快捷键Alt+6),由于c double型是4个字节长度,所以在内存查看窗口内右键选第三项long Hex Format。然后把(2)中看到的c变量的地址输入到内存查看窗口上,回车,这时可以看到c地址所对应的内存中的数据值为5C28F5C2,这是个十六进制的值,用计算器将其转换为十进制发现,这个值就是之前提到的1546188226
分析总结:这是因为对于编译器来说,它并不知道整形、浮点型的区别,它只认内存中的数据,并根据你的参数要求也可以说是规则(%d还是%f)去处理显示内存中对应地址上的数据。
所以说,1546188226和8.88只不过是5C28F5C2不同的表达方式,就像同一个词在不同的场合有不同的意思一样,需要给它个合适的环境它才能做出正确的表达
00分享举报
-
c语言长整型定义
2021-05-19 18:22:37一、 长整型在C语言中类型关键字为long。 定义时,var_name为变量名。 INIT_VALUE为初始化值,可以没有。 无初始化值的定义形式为: long var_name; 二、单独写long,表示为有符号长整型。C语言长整型常数,什么是...我用long int怎么不行呢
基本定义形式为: long var_name = INIT_VALUE; 一、 长整型在C语言中类型关键字为long。 定义时,var_name为变量名。 INIT_VALUE为初始化值,可以没有。 无初始化值的定义形式为: long var_name; 二、单独写long,表示为有符号长整型。
C语言长整型常数,什么是长整型常数?
长整型数是相对于基本整型数而言的,一般它占用的存储空间是基本整型数的2倍。具体大小随不同的编译器而不同。如果它的存储空间是k个字节,可存储数的范围是-2^(8k-1)~+2^(8k-1)-1。 整型变量可分为以下几类: 1.基本型 类型说明符为int。
请问c语言中长整型整数怎么理解
32位程序 64位程序 在VC编译器下 long 跟int 相同 而 long long 是64位整数 一般来说int类型的长度应该跟CPU位数相同 只是为了系统兼容 现在的int是32位的…… 实际上int的取值范围依赖于计算机系统,在16位机器中,int占16位。
C语言中,合法的长整型数?
C语言里怎样理解长整型 短整型 和无符号型变量和常长整型 短整型 和无符号型跟基本整形 我就知道所占字节不同 但是长整型 变量:是一块内存区域,一块内存包含两个属性,一个是地址,一个是存储的内容,即值。所以在c语言中每个变量都有一个地址,也有自己存储的内容。
C语言中如何输出长整型数值
main() { int a=111,b=111111,sum; sum=a+b; printf("%d",sum); getch()在C/C++中,64为整型一直是一种没有确定规范的数据类型。现今主流的编译器中,对64为整型的支持也是标准不一,形态各异。一般来说,64位整型的定义方式有long long和__int64两种(VC还支持_int64),而输出到标准输出方式有printf(“%lld”,a)。
C语言中定义的长整型以什么格式输出呢?
C语言中定义的长整型以什么格式输出才能保证输出的数和定义的数是一样的?
long a; printf("%ld",a); __int64 b; printf("%I64d",b);
-
C语言中整型的定义
2016-03-21 15:38:57使用C语言时,用sizeof运算int,long int,long long int时,得到的结果不尽相同。那么这些类型长度与什么有关?与机器?与编译器(语言实现)?还是操作系统? 我查阅了一些资料,将之总结下来,希望能有一些参考...使用C语言时,用sizeof运算int,long int,long long int时,得到的结果不尽相同。那么这些类型长度与什么有关?与机器?与编译器(语言实现)?还是操作系统?我查阅了一些资料,将之总结下来,希望能有一些参考价值。也欢迎指正纠错,共同学习!
C语言的实现一般由编译器和标准库开发者提供,而这部分开发者有很多,常见的编译器有微软的vc,GNU的gcc,Borland的TC,Intel也有自己的C编译器。各个提供者都有自己的想法,都可能会往语言特性中加入一些新的扩展实现,比如一些关键字,一些标准没有的标准库函数,或是一些标准库函数的返回值与其他的不一样等等。但他们都会遵循C语言标准,即是我们常听说的C99、C90/C89、C11等等。
一、C标准定义:
int类型是一个类型系列,在C语言中,基本的int 类型包括char,long,int,short,bool(_Bool关键字,C99)。C99标准中说明了,实现必须等于或大于<limits.h>的定义。
以下列出所有C标准中定义的类型(C99):
char: 机器上最小的地址单元。头文件中对应CHAR_BIT,8 bits;signed char:与char长度相同,范围必须能承载至少[-127,+127],即8 bits大小,其中一位用作符号位;
unsigned char:与char长度相同,但无符号位,范围大小为[0, 2^CHAR_BIT - 1],8 bits;
short
short int
signed short
signed short int:以上四种为带符号的short类型,必须能承载至少[-32767, +32768]范围,也即是至少16bits长度。
unsigned short
unsigned short int: 同short, 但无符号,长度至少16bits。
int
signed
signed int:基本的int,必须能至少承载[-32767, +32767]范围,也即是说,至少16bits长度。
unsigned int
unsigned:同int,但无符号,长度至少16bits。
long
long int
signed long
signed long int:long 型的整数,必须能承载至少[-2147483647, +2147483647]范围,也就是至少32bits长度。(注:只有一个long)
unsigned long
unsigned long int:同long,但无符号位。
long long
long long int
signed long long
signed long long int:long long 类型,必须至少能承载[-9223372036854775807, +9223372036854775807],也就是至少64bits长度。
unsigned long long
unsigned long long int:同long long类型,没有符号位。
二、C99的固定宽度int类型定义:
为更好的做到各个平台兼容,也给嵌入式环境更方便,从C99开始规定了<stdint.h>文件,固定各个类型的长度,可以直接include这个头文件使用这些类型
(注:貌似vc没有这个头文件,我一般到网上下,但最好还是看看vc编译器文档,以它为准,自己写一个。):
Type category Signed types Unsigned types Type Minimum value Maximum value Type Minimum value Maximum value Exact width intN_t
INTN_MIN
INTN_MAX
uintN_t
0 UINTN_MAX
Least width int_leastN_t
INT_LEASTN_MIN
INT_LEASTN_MAX
uint_leastN_t
0 UINT_LEASTN_MAX
Fastest int_fastN_t
INT_FASTN_MIN
INT_FASTN_MAX
uint_fastN_t
0 UINT_FASTN_MAX
Pointer intptr_t
INTPTR_MIN
INTPTR_MAX
uintptr_t
0 UINTPTR_MAX
Maximum width intmax_t
INTMAX_MIN
INTMAX_MAX
uintmax_t
0 UINTMAX_MAX
三、GCC编译器int 限制:GCC不支持C99和C11中定义的扩展integer类型。除此之外其他基本类型都支持的很好。
根据C99标准中说明的:
5种标准signed integer type:signed char, short int, int, long int, long long int;
5种标准unsigned integer type:unsigned char, unsigned short int, unsigned int, unsigned long int, unsigned long long int;
四、GCC编译器支持的各种硬件架构:
常见的架构
x86-64,或x64, AMD64(64bits);
IA-64,Intel Itanium 64;
ARM(32-bits,64-bits);
SPARC(64bits);
PowerPC(32bits,64bits);
GCC支持很多架构,而其中也有很多嵌入式系统架构。16bits、32bits或者64bits架构,那么要实现C标准的各种int类型,首先可能需要处理器的支持,假设32bits处理器不支持64bits整形运算(很多指令集都支持),为实现C源码中的运算,可能需要编译器编译成目标代码时完成大于机器字整形数据的运算拼装,若支持,直接编译成相应的指令即可。
五、总结:
根据查到的这些资料,应该这么描述,C语言中的整型与目标机器指令集有关,也与编译器有关。但编译器是比硬件架构更高层的东西,没有这些指令集,也可以用一些实现来完成大于机器字长度的运算,更何况,要是编译器在某个架构上无法实现这些运算,直接在编译器用户手册上说清楚,不支持这个硬件架构即可了。整型的长度,与机器有一定关系,但主要与编译器在当前硬件架构上的实现有关系。
六、代码测试:
#include <stdio.h> #include <unistd.h> # define println(__S) printf ("%s\n", __S) int main (int argc, char* argv []) { printf ( " char size = %d\n" " short size = %d\n" " int size = %d\n" " long int size = %d\n" " long size = %d\n" " long long size = %d\n" " long long int size = %d\n" " float size = %d\n" " double size = %d\n" " long double size = %d\n", sizeof (char), sizeof (short), sizeof (int), sizeof (long int), sizeof (long), sizeof (long long), sizeof (long long int), sizeof (float), sizeof (double), sizeof (long double) ); return 0; }
以下是在两种机器上运行相同C代码的输出:
(1)x86_64(AMD64):
(2)AMD32:
引用出处:
GNU Compiler Collection : https://en.wikipedia.org/wiki/GNU_Compiler_Collection#Architectures
ISO/IEC 9899:1999,C99标准:http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf
GNU GCC 4.9.3 Manual :https://gcc.gnu.org/onlinedocs/gcc-4.9.3/gcc/index.html#toc_G_002b_002b-and-GCC
C标准:
(1) ANSI C standard (X3.159-1989), 发布于 1990,之后成为ISO/IEC 9899:1990标准,C89或C90.
(2) ISO/IEC 9899:1990修正版,于1995年发布,C94或C95
(3) ISO/IEC 9899:1999,一个新版本标准,于1999年发布,C99
(4) ISO/IEC 9899:2011,新版本标准,于2011年发布,C11,目前最新标准。
-
C语言中各种数据类型长度
2021-05-26 01:46:44C语言中各种数据类型长度C语言的基本数据类型有以下几个: int 整型 char 字符型 float 单精度浮点型 double 双精度浮点型另外,在基本数据类型基础上附加一些限定词, 得到扩充的数据类型。short,long可以应用到... -
c语言中整形和实形 c语言的整形和实型是什么意思?
2021-05-21 07:05:14c语言的整形和实型是什么意思?...整型常量即整常数,在C语言中整常数通常可以用以下三种形式表示:十进制整数、十六进制整数、八进制整数。整型变量基本型为int,分为六种:基本整型int、短整型short ... -
C语言入门 — 整型 char,short,int,long
2021-05-20 13:08:181、整型变量位数,以下基于32位的操作系统:(1个字节等于8bits)点击查看二进制长整型(long),短整形(short),整型(int),字符型(char)有符号数:用最高位代表符号位,‘0’代表正数,‘1’代表负数,其余位用作 数字... -
C语言 变量 长度
2021-05-20 10:36:554个字节(16/32位编译器) 8个字节(64位编译器) long long: 8个字节 string: 字符个数+1 转载文章二: C语言的基本数据类型有以下几个: int 整型 char 字符型 float 单精度浮点型 double 双精度浮点型 ... -
关于C语言各个数据类型长度
2021-05-24 10:32:1216 位 = 2 字节整形int = 32 位 = 4 字节长整形long int = 32 位 = 4 字节单精度float = 32 位 = 4 字节双精度double = 64 位 = 8 字节长整形双精度long double = 64 位 = 8 字节字符型char = 8 位 = 1 字节... -
C语言中的32个关键字
2021-05-22 05:56:22C语言中的32个关键字数据类型关键字(12个)(1) char:声明字符型变量或函数(2) double:声明双精度变量或函数(3) enum:声明美剧类型(4) float:声明浮点型变量或函数(5) int:声明整型变量或函数(6) long:声明长... -
C语言中printf区分双精度和单精度吗?为什么用lf输出不了双精度浮点数?
2021-05-21 08:23:56用"lf”输出不了双精度可能是用户定义时定义为单精度,那么可能不能用双精度输出。至于输出答案有时为正零有时为负零,那么可能是用户求出的答案超出精度范围了。扩展资料:1、printf()函数printf()函数是格... -
C语言基础01-----常量,变量,输出,输入
2021-05-20 05:32:12什么是常量(常数,不能改变的量)1)常量程序中最基本的元素2)如同其名称所暗示的,在程序执行期间该值不能改变2常量.属于指令的一部分,编译后不再更改================================常量类型1.整形常量2.实型常量3... -
C语言——整型变量
2019-06-30 12:49:12标题整型变量的分类: (注意:占几个字节跟操作...3)长整型:long int或long,在内存中占4个内存 4)无符号型:为unsigned 在编译器中输出变量类型所占字节数: 说明一下,这个程序我原本以为会运行得很顺利,结... -
C语言 (整型)数据的存储
2022-03-30 19:45:14C语言 整型数据的存储一、数据类型介绍二、类型的基本归类整型家族:浮点数家族:构造类型:指针类型:空类型:三、整型在内存中的存储3.1 原码、反码、补码3.2 对于整型来说,数据在内存中存储的格式是补码。... -
0011在c语言是不是合法的整形常量?
2021-05-20 10:32:342018-07-23正确的C语言...整数常量可以是长整形、短整型、符号整型和无符号整型。 a)八进制数 八进制整数必须以0开头,即以0作为八进制数的前缀。数字取值范围为0—7。八进制数常是无符号数 b)十进制数 十进制数... -
基本整形型变量-在C语言中,整型常量与整型变量的区别是什么?举例
2021-01-15 05:40:07用什么关键字定义基本整型变量int表示整型变量,long表示长整型变量,一般用int就足够了,例如inta;intb=2;整型、短整型、长整型的区别是什么?1、整型变量可以分为4类:(1)短整型,类型关键字为short[int]。(2)... -
C语言整型变量
2020-02-04 11:33:57本篇文章介绍的是整型变量的占位符,字节以及取值范围是怎么来的 字节 储存单元的大小称为一个字节(byte) 字节是计算机储存容量的基本单位 每个字节由8个二进制位(bit)组成 ...在双引号里你用什么把占位符隔... -
C语言将任意类型(整型、长整型、浮点型等)的数字转换为字符串 itoa()
2019-09-09 09:55:061, C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串,下面列举了各函数的方法及其说明。 ● itoa():将整型值转换为字符串。 ● ltoa():将长整型值转换为字符串。 ● ultoa... -
C语言 printf格式化输出,参数详解
2021-05-22 18:14:26对长整型可以用"%lo"格式输出。同样也可以指定字段宽度用“%mo”格式输出。 例: main() { int a = -1; printf("%d, %o", a, a); } 运行结果:-1,177777 程序解析:-1在内存单元中(以补码形式存放)为... -
C语言基本数据类型
2022-02-17 20:23:12文章目录C语言数据类型前言一、整型数据1、int 型2、short int 型3、long int 型二、字符型数据类型1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器... -
C语言共用体内整型与浮点型相互转换
2021-08-27 11:44:55这样,该浮点数的十进制表示 =(-1)^s * (1 + x)* 2个(e - 127) =(-1)^0*(1+0)* 2个(148-127)= 2097152.0 把所需要存取的浮点数和一个数组(byte u8Bit[4])构成一个联合,存取的时候用数组,使用的时候用浮点数,如下: ... -
C语言如何将整型转化为字符串
2018-12-24 17:12:13C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串。以下是用itoa()函数将整数转换为字符串的一个例子: include <stdio. h> include <stdlib. h>... -
C语言基础 整型、字符型和浮点型
2021-05-19 10:04:50整型数据类型表序号类型名称说明字节数取值范围1signed char有符号的单字节整数类型1-128~+1272short int短整型2-32768~+327673int整型4-2147438648~+21474386474long int长整型4-2147438648~+21474386475long long ... -
C语言强制类型转换
2021-05-22 08:28:57C语言中的类型转换C语言中的类型转换有两种,自动与强制。它们都有几种情况,如不同长度的转换;不同类型的转换;还有无符号与有符号数之间的转换。关键是两点,即长度不同时如何转换,在有无符号数参与时如何转换。...