练习 2-1 编写一个程序以确定分别由signed及unsigned限定的char、short、int与long类型变量的取值范围。
2023-09-14 09:06:57 时间
C语言程序设计(第二版) 练习2-1 个人设计
练习 2-1 编写一个程序以确定分别由signed及unsigned限定的char、short、int与long类型变量的取值范围。采用打印标准头文件中的相应值以及直接计算两种方式实现。
代码块:
- 采用标准头文件
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int main()
{
printf("signed char min=%d, signed char max=%d\n", SCHAR_MIN, SCHAR_MAX);
printf("unsigned char max=%d\n", UCHAR_MAX);
printf("signed short min=%d, signed short max=%d\n", SHRT_MIN, SHRT_MAX);
printf("unsigned short max=%d\n", USHRT_MAX);
printf("signed int min=%d, signed int max=%d\n", INT_MIN, INT_MAX);
printf("unsigned int max=%d\n", UINT_MAX);
printf("signed long min=%d, signed long max=%d\n", LONG_MIN, LONG_MAX);
printf("unsigned long max=%d\n", ULONG_MAX);
system("pause");
return 0;
}
- 采用直接计算方法(特别注意:在int和long的情况下,由于数值较大,根据电脑cpu的不同,运行计算结果不会瞬间出现,总共会需要不到1分钟的时间。)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int j; //定义一个对比变量
signed char sc_i;
for (sc_i=1, j=0; sc_i==j+1; sc_i++, j++);
printf("signed char max=%d, ", j);
for (sc_i=-1, j=0; sc_i==j-1; sc_i--, j--);
printf("signed char min=%d\n", j);
unsigned char uc_i;
for (uc_i=1, j=0; uc_i==j+1; uc_i++, j++);
printf("unsigned char max=%u\n", j); //需要注意无符号输出的格式为%u
signed short ss_i;
for (ss_i=1, j=0; ss_i==j+1; ss_i++, j++);
printf("signed short max=%d, ", j);
for (ss_i=-1, j=0; ss_i==j-1; ss_i--, j--);
printf("signed short min=%d\n", j);
unsigned short us_i;
for (us_i=1, j=0; us_i==j+1; us_i++, j++);
printf("unsigned short max=%u\n", j); //需要注意无符号输出的格式为%u
/*需要注意int和long的情况下,无符号的正数值范围要超过有符号的,所以,在定义无符号的变量时,
要重新定义一个无符号对比变量*/
signed int si_i;
for (si_i=1, j=0; si_i>j; si_i++, j++);
printf("signed int max=%d, ", j);
for (si_i=-1, j=0; si_i<j; si_i--, j--);
printf("signed int min=%d\n", j);
unsigned int ui_i, k;
for (ui_i=1, k=0; ui_i>k; ui_i++, k++);
printf("unsigned int max=%u\n", k); //需要注意无符号输出的格式为%u
signed long sl_i;
for (sl_i=1, j=0; sl_i>j; sl_i++, j++);
printf("signed long max=%d, ", j);
for (sl_i=-1, j=0; sl_i<j; sl_i--, j--);
printf("signed long min=%d\n", j);
unsigned long ul_i, m;
for (ul_i=1, m=0; ul_i>m; ul_i++, m++);
printf("unsigned long max=%u\n", m); //需要注意无符号输出的格式为%u
system("pause");
return 0;
}