无符号整型的取值范围是0-65535(2^16-1),有符号整型的取值范围是-32768——+32767(-2^8——2^8-1)
/*
*L&U可以是小写
*/
num=100L //L表示长整型
num=100U //U表示无符号整型
num=0123 //0用来表示八进制,所有数字均需小于8
num=123 //十进制数不需要添加前缀
num=0x123 //0x十六进制,十六进制由0-9、A-F组成
/*数据以二进制的方式存放在计算机中,数值是以补码的形式存储的,
*正数的补码为原码,负数的补码其绝对值为按位取反再加1*/
/*
*有符号数第一为符号位,0为负1为正
*/
num=10e2 //表示10的平方
num=123f //单精度类型
num=123L //长双精度类型 如果不添加默认为双精度类型
char a = 'a'; //字符型常量
存储字符串常量时,系统会为字符串后面自动添加“\0”作为结束符,长度为1
符号常量:程序开头用define定义 格式:#definr num 10
signed int num; //有符号整型
unsigned int num; //无符号整型
long double num; //长双精度变量
char c = 'a'; //字符型变量
变量的存储类型:静态static、寄存器register、外部extern、自动auto。
auto int num = 1; //自动存储类型
static int num = 1; //静态存储类型
register int num = 1; //寄存器变量
extern int num = 1; //外部存储变量
auto关键字用于定义一个局部变量为自动的,每次执行到该变量时,都会产生一个新的变量,并对其重新进行初始化。局部变量的存储方式默认为自动的。
static变量为静态变量,在语句执行期间,static变量始终保持它的值,初始化操作只在第一次执行时起作用,在运行过程中,变量保持语块上一次执行的值。
register变量,将局部变量存储到寄存器中,提高程序运行速度
强制类型转换
float i = 10.1f;
int j = (int)i;
算数运算符:两个单目运算符(正负)+5个双目运算符(加减乘除取余)
两个整数相除结果为整数,如7/4=1,舍去的是小数部分,若其中一个为负数时,采取“向零取整”的方法,7/-4=-1,取整后向零靠拢。
当算数运算符的优先级相同时,采用 自左向右结合的方式进行运算。
赋值运算符:= 等于运算符:==
逻辑运算符!!将变量的数值转化为相应的逻辑真值或假值。
value = 2+5,3+1,5+7; //value=7
value = (2+5,3+1,5+7); //value=12
/*
*()运算的优先级高于,
*/
printf("%d",~-15); //14
printf("%d",~15); //-16
/*
*正数取反添负号加一,负数取反为正减一
*/
字符输入输出函数
putchar(); //字符输出函数,参数可为字符型
getchar(); //字符输入函数,无参
//字符输入输出示例
getchar();
putchar(getchar());
char a = getchar();
putchar(a);
putchar(getchar()); //不会执行,无法输入输出字符
//字符串输入输出示例
int main()
{
char* ch = "I LOVE";
puts(ch);
puts("I \0LOVE");
ch = "I love you \0little baby";
puts(ch);
}
//\0作为结束符
int main()
{
char str[30];
gets(str);
puts(str);
//puts(gets()); //错误语法
}
puts(char *str); //字符串输出函数,参数为指针字符变量,以\0作为结束符,会自动换行
gets(); //字符串输入函数,会自动换行
%a 浮点数、十六进制数字和p-记数法(C99)
%A 浮点数、十六进制数字和p-记法(C99)
%c 一个字符(char)
%C 一个ISO宽字符
%d 有符号十进制整数(int)(%ld、%Ld:长整型数据(long),%hd:输出短整形。)
%e 浮点数、e-记数法
%E 浮点数、E-记数法
%f 单精度浮点数(默认float)、十进制记数法(%.nf 这里n表示精确到小数位后n位.十进制计数)
%g 根据数值不同自动选择%f或%e.
%G 根据数值不同自动选择%f或%e.
%i 有符号十进制数(与%d相同)
%o 无符号八进制整数
%p 指针
%s 对应字符串char*(%s == %hs == %hS 输出 窄字符)
%S 对应宽字符串WCAHR*(%ws == %S 输出宽字符串)
%u 无符号十进制整数(unsigned int)
%x 使用十六进制数字0f的无符号十六进制整数
%X 使用十六进制数字0f的无符号十六进制整数
%% 打印一个百分号
%I64d 用于INT64 或者 long long
%I64u 用于UINT64 或者 unsigned long long
%I64x 用于64位16进制数据
int main()
{
int iInt = 10;
char ch = 'A';
float f = 13.14f;
double d = 12;
printf("this is %d\n",iInt);
printf("this is %c\n",ch);
printf("this is %12f\n",f);
printf("this is %6l\n",d);
printf("this is %s","I love baby");
}
scanf 格式化输出符号详细说明
c |
输出一个字符 |
d 或 i |
输出带符号的十进制整数 |
o |
以八进制无符号形式输出整形数(不带前导 0 ) |
x 或 X |
以十六进制无符号形式输出整型数(不带前导), x 输出小写字母, X 输出大写字母 |
u |
按无符号的十进制形式输出证型数 |
f |
以带小数点的形式输出单精度和双精度数 |
E 或 e |
以 [-]m..dde(E)+_xx 的指数形式输出浮点数。 d 的个数精度指定,精度为 0 时小数部分不输出 |
G 或 g |
由系统决定采用 %f 格式还是采用 %e 格式,以使输出宽度最小 |
s |
输出字符串的字符,直到 目录 PRINTF 格式化输出符号详细说明 遇到“ \0 ”,或者输出由精度指定的字符串数 |
p |
输出变量的内存地址 |
% |
打印一个“ % ” |
|
|
m(m 为一正整数 ) |
规定输出数据的最小宽度为 m 位 |
.n(n 为一正整数 ) |
对实数,表示输出的实数保留 n 位小数,对字符串,表示截取字符串的前 n 个字符 |
一 |
使输出的数据在域内向左对齐,省略“一”时,向右对齐 |
#include
int main()
{
long num1;
short num2;
int num3;
int num4;
char num5;
printf("请输入num1: ");
scanf("%ld",&num1);
printf("请输入num2: ");
scanf("%hd",&num2);
printf("请输入num3*num4: ");
scanf("%d*%d",&num3,&num4);
printf("请输入num5: ");
scanf(" %c",&num5); //如果不加空格的话,在输入num4时按下回车键会被当做num5进行输入,此时就得不到预期结果
printf("请输出num1: %ld\n",num1);
printf("请输出num2: %hd\n",num2);
printf("请输出num3: %d\n",num3);
printf("请输出num4: %d\n",num4);
printf("请输出num5: %c\n",num5);
}
输入输出字符格式以结束标志“\0”作为最后一个字符
printf使用的是变量的标识符,而不是变量的地址。而scanf函数是用的是变量的地址,而不是变量的标识符。
输入输出double类型的数据使用%lf
//大小写转换
#include
int main()
{
char ch1,ch2;
puts("请输入需要转换的字符:");
scanf("%c",&ch1);
ch2=ch1-32;
printf("转换后的字符为:%c,%d\n",ch2,ch2);
}