宏定义,函数,格式化显示两位小数
#include <stdio.h>
#include <stdlib.h>
//宏定义 将PI替换成3.14
//其实enum和define同样不能取地址,也不会产生非必要的内存分配
#define PI 3.14
double circleArea(double radius)
{
return PI * radius * radius;
}
int main()
{
printf("hello world\n");
//值得一说的是,double和float相比无论是精度还是执行效率都要高哦
double radius = 0.0;
double res = 0.0;
//\n \转移符 \n换行符
//linux下换行符为\n,windows下换行符为\r\n,不过实际只需要\n就行,并不要人为考虑
printf("enter radius:\n");
//从键盘输入,lf为double的占位符
//输入时需要知道输入到哪里,输入的是什么,也就需要占位符和地址。
scanf("%lf",&radius);
//函数调用
res = circleArea(radius);
//.2 保留两位小数
printf("circle area: %.2lf\n",res);
return 0;
}
无符号类型
#include <stdio.h>
int main(int argc,char **argv)
{
//输出 1
printf("sizeof(char) = %ld\n",sizeof(char));
// char ch 二进制为 0000 0000
//最高位0表示正数,1表示负数
//取值范围为:1111 1111 —— 0111 1111
return 0;
}
?寄存器变量register,别名typedef,防止优化volatile,进制
#include <stdio.h>
int main(int argc,char** argv)
{
//声明一个寄存器变量,可以增加运行效率
//不能对寄存器变量区地址
//当一个变量频繁使用时IDE会自动优化为register
register int num = 10;
//%p 地址的占位符
//printf("&num = %p\n",&num);
//定义别名
//便于代码的移植
typedef char* STRING;
STRING str = "xiaoming";
//%s 字符串的占位符
printf("%s\n",str);
//声明一个防止IDE优化的变量
volatile int num2 = 10;
//对于IDE优化到寄存器的变量,可以强制取其地址
printf("%d\n",num2);
//变量实际上其实就是内容
int num3 = 10;
printf("对于整形变量num3,内容就是数字:%d\n",num3);
int* p = &num3;
printf("对于指针变量p,内容就是地址:%p\n",p);
int num4 = 10;
printf("十进制输出num4:%d\n",num4);
printf("八进制输出num4:%o\n",num4);
printf("十六进制输出num4:%x\n",num4);
//%#加禁止占位符号可以使进制带前缀输出
printf("十进制输出num4:%d\n",num4);
printf("八进制输出num4:%#o\n",num4);
printf("十六进制输出num4:%#x\n",num4);
//十进制10
int num5 = 10;
//八进制10
int num6 = 012;
//十六进制10
int num7 = 0xa;
printf("num5 = %d,num6 = %d,num7 = %d\n",num5,num6,num7);
return 0;
}
内置类型输出
#include <stdio.h>
int main()
{
//整型输出
short s = 1;
unsigned short us = 1;
printf("短整型s:%hd\n", s);
printf("无符号短整型us:%hu\n", us);
int i = 2;
unsigned int ui = 2;
printf("整型i:%d\n", i);
printf("无符号整型ui:%u\n", ui);
long l = 3;
unsigned ul = 3;
printf("长整型l:%ld\n", l);
printf("无符号长整型ul:%lu\n", ul);
//实型(浮点型)输出
//浮点型存储方式和整型不同(一部分存储整型,一部分存储浮点型)没有无符号,编译不通过
/*unsigned float f = 11.11f;
unsigned double d = 11.11;*/
//float f = 11.11; 实际上这样写是向下类型转换可能会造成数据截断
float f = 11.11f;
printf("单精度浮点数f:%f\n", f);
//其实除空间外,double无论执行效率还是精度都高于float
double d = 22.22;
printf("双精度浮点数d:%lf\n", d);
//字符型
char c = 'a';
unsigned char uc = 'a';
unsigned char uc2 = 128;
unsigned char uc3 = 97;
printf("字符型c:%c\n", c);
printf("无符号字符型uc:%c\n", uc);
//ascii码上只有0-127,超出范围没有对应,输出乱码
printf("无符号字符型uc2:%c\n", uc2);
//可以用u来占位
printf("无符号字符型uc2:%u\n", uc2);
//a的ASCII码对应97 A对应65
printf("无符号字符型uc3:%c\n", uc3);
return 0;
}
|