1、输出不同整形数据类型在内存中占用多少字节?
首先明确整形数据有哪些:
(无符号)字符型:(unsigned)char
(无符号)短整型:(unsigned)short
(无符号)整形数据:(unsigned)int
(无符号)长整型数据:(unsigned)long
另:基本数据类型(四种):
整形:int short long
浮点型:float double
字符型:char
布尔型:bool
#include<stdio.h>
int main()
{
printf("sizeof(char)= %ld byte\r\n",sizeof(char));
printf("sizeof(short)= %ld byte\r\n",sizeof(short));
printf("sizeof(int)= %ld byte\r\n",sizeof(int));
printf("sizeof(long)= %ld byte\r\n",sizeof(long));
printf("sizeof(double)= %ld byte\r\n",sizeof(double));
printf("sizeof(float)= %ld byte\r\n",sizeof(float));
printf("sizeof(_Bool)= %ld byte\r\n",sizeof(_Bool));
return 0;
}
运行结果:
-------------------------------------------------------------------------------------------------------------------------------
2、我们处理的整数通常用十进制表示,在计算机内是以二进制补码形式存储,但通常二级制表示的整数比较长,为了便于在程序设计中理解和处理数据,通常采用八进制和十六进制,缩短了二进制补码表示的整数,但保持了二进制数表达的特点。请输出十进制整数“1234”对应的八进制和十六进制。
额外知识:
进制:十进制——逢十进一;八进制——逢八进一;十六进制——逢十六进一;二进制——逢二进一
二进制 源码:用第一位表示符号,其余位表示值
二进制 反码:正数的反码是其本身;负数的反码是符号位不变,其余位取反
二进制 补码:正数的补码是其本身;负数的补码是其反码+1
#include<stdio.h>
int main()
{
int num = 1234;
printf("十进制=%d\r\n",num);
printf("八进制=%o\r\n",num);
printf("十六进制=0x%x\r\n",num);
return 0;
}
运行结果:(没有二进制格式控制符)
-------------------------------------------------------------------------------------------------------------------------------
3、十六进制转十进制:(0xabcdef)
#include<stdio.h>
int main()
{
int num = 0xabcdef;
printf("十进制=%d\r\n",num);
printf("十六进制=0x%x\r\n",num);
return 0;
}
运行结果:
-------------------------------------------------------------------------------------------------------------------------------
4、printf函数是有返回值的,求printf的返回值。
#include<stdio.h>
int main()
{
printf("printf(A\\r\\n)的返回值为:%d\r\n",printf("A\r\n"));
printf("printf(AB\\r\\n)的返回值为:%d\r\n",printf("AB\r\n"));
printf("printf(ABC\\r\\n)的返回值为:%d\r\n",printf("ABC\r\n"));
return 0;
}
运行结果:(printf的返回值是:输出字符的个数)
-------------------------------------------------------------------------------------------------------------------------------
5、输入三科成绩,然后把三科成绩输出(数据范围:0~100)
#include<stdio.h>
int main()
{
unsigned int grade[3]={0};
for(int i=1;i<=3;)
{
printf("\r\n请输入科目%d成绩:",i);
scanf("%u",&grade[i-1]);
if(grade[i-1] < 0 || grade[i-1] > 100)
{
printf("%d输入错误,请重新输入0~100之间的数据\r\n",grade[i-1]);
}
else i++;
}
for(int i=0;i<sizeof(grade)/sizeof(int);)
printf("科目%d成绩为:%d\r\n",++i,grade[i]);
return 0;
}
输出结果:(不能输入字符数据,否则程序异常退出[未想出解决办法];成绩排序,后面学)
-------------------------------------------------------------------------------------------------------------------------------