赞
踩
转义字符
常量分类:
(1)字面常量(直接常量):数值常量(分为整型常量和浮点型常量),字符串常量和字符常量
#include<stdio.h> int main(void){ //1.整型常量 printf("%d\n",234); //2.浮点型常量 printf("%lf,%lf\n",3.24,3e-2); //3e-2 代表3的10的-2次方 //3.字符串常量 printf("%s","%dabc\n"); //字符串使用的是格式说明符为%s,输出:%dabc printf("%%dabc\n"); //在printf格式字符串中输出“百分号”,需要再加一个“百分号”,输出:%dabc //4.字符型变量 字符也是以整型方式存储在内存中的 printf("%c,%d\n",'a','a'); //普通字符常量 输出a,97 //转义字符 printf("%c,%c,%c,%c\n",'\\','\'','\?','\"'); //可显的转义字符 输出:\,',?," printf("\a"); //输出一个声音 其中'\a'会产生声音或视觉信号 printf("1111\babc\n"); //输出:111abc 其中'\b'是退格符 将当前位置后退一个字符 printf("2222\r3333\n"); //输出:3333 其中'\r'是回车符 将当前位置滚回到本行开头 printf("4444\t5555\n"); //输出:4444 5555 其中'\t'是水平制表符(tab)将当前位置移到下一个tab位置上 printf("\101\102\103\n"); //输出:ABC 把8进制的101,102,103转成十进制则为65,66,67 分别对应了'A','B','C' printf("\x41\n"); //输出:A 16进制的x41=4x16^1+1x16^0=65 return 0; } //'\f'换页 //'\v'垂直制表符
(2)符号常量
(3)常变量
#include<stdio.h>
//1.符号常量 只存在于预编译阶段,编译阶段就不存在了,经过预编译后,全部变为字面变量
#define PI 3.14
#define ID 101
#define CH 'A'
#define S "haha"
int main(void){
printf("%lf,%d,%c,%s\n",PI,ID,CH,S); //输出:3.140000,101,A,haha
//2.常变量 C99中新增内容
const int a=45; //常变量必须在定义时初始化,初始化之后其值不可以被修改
//const int b; //error未指定初值
//a=90; //error变量的值不可以被修改
return 0;
}
整型
(一)补码:整型以补码的形式存放
(1)一个正数的补码是此数的二进制形式。
求一个正整数的二进制:除以2,直至商为o,余数倒数排序。
(2)一个负数的补码,先求其绝对值的补码,然后该补码所有位取反,所得之数最后加1。
(3)0的补码,所有位全都是0
注意:在存放整型的存储单元中最左边一位是用来表示符号的。
8位二进制补码所代表的整数:自然数0-127,负数-128-1
n位:-2n——2n-1
(二)整型数据的存储空间及范围
(1)Turbo C中 int 是2个字节。VC ++6.0中 int 是4个字节。C标准没有具体规定各种数据类型所占用储存单元的长度,这是由各编译系统自行决定的。
注意:只有整型〈包括字符型〉数据可以加 signed 或 unsigned 修饰符,实数型不能加;对无符号整型数据用 %u 格式输出。C99新增的整型类型有 long long 和 bool(布尔型)
注意:黑色的格式声明 scanf 可用,黑色和红色的格式声明 printf 可用。
整型常量的类型转换
#include<stdio.h> int main(void){ //1.定义整型变量 ——带符号整型 ——signed + 整型关键字 + int + 变量名(其中 signed 和 int 可省) short a = 1; //与short int a = 1; 和 signed short int a = 1; 和 signed short a = 1;等价 int b = 2; long c = 3; long long d = 4; //long long 是 C99 中新增的内容,有些编译器还未实现此功能,会报错 //2.定义整型变量 ——无符号整型 ——unsigned + 整型关键字 + int + 变量名(其中int可省) unsigned short e = 5; //与unsigned short int e = 5;等价 unsigned int f = 6; unsigned long g = 7; //3.求一个数据类型或者数值所占的字节数 ——使用sizeof运算符,注意他不是个函数,一般我们习惯对它的操作数加个圆括号(sizeof后如果是关键字必须加个圆括号否则报错 printf("%d,%d,%d\n",sizeof(short),sizeof(int),sizeof 5); //输出:2,4,4 //4.整型数据输出10进制数,所使用的格式声明 printf("%hd,%d,%ld\n",a,b,c); //与printf("%hi,%i,%li\n",a,b,c);等价 printf("%hu,%u,%lu\n",e,f,g); //5.整型数据输出8进制或16进制数,所使用的格式声明 printf("%o,%x,%X,%#x,%#X\n",123,123,123,123,123); //输出:173,7b,7B,0x7b,0X7B //6.scanf函数中不可以使用带"#"的格式字符 scanf("%#x",&b); printf("%d\n",b); //随便输入一个16进制数,scanf函数会因为错误而终止。所以并未把任何值赋给b,所以最终输出b的值还是为2 //7.隐式数据类型转换 ——长 赋 短,截断 unsigned short us = -1; //"长的"整型数据赋给"短的"整型数据时,会只将低几位赋给"短的"整型数据 printf("%hu,%hd\n",us,us); //输出65535,-1 //8.隐式数据类型转换 ——"无符短" 赋 "长",先把"短的"全部内容复制到"长的"低几位,"长的"高几位填0 unsigned int ui = us; printf("%u\n",ui); //输出65535 //9.隐式数据类型转换 ——"带符短" 赋 "长",先把"短的"全部内容复制到"长的"低几位,如果"短的"是自然数,"长的"高几位填0,否则 1 short ss = -1; ui = ss; printf("%u\n",ui); //输出4294967295 ss = 1; ui = ss; printf("%u\n",ui); //输出1 //10.隐式数据类型转换 ——等长,则保留原有补码 ui = -1; printf("%u\n",ui); //输出4294967295 //11.整型常量 ——显示数据类型转换 printf("%u,%ld,%lu\n",1U,1L,1UL); //1U ——unsigned int类型,1L ——long类型,1UL ——unsigned long类型 1,1,1 //12.整形数据的强制数据类型转换 ——(数据类型)该处的圆括号为强制数据类型转换符,是一个单目运算符 printf("%hu,%d\n",(unsigned short)-1,(int)ui); //65535,-1 return 0; }
字符型数据
(一)字符是以整数形式(ASCII码)存放在内存单元中。ASCII共128个字符(也就是说最多用7位就可以表示)。
一个小写字母比其大写字母的ASCII码大32。
(二)字符型数据的存储空间和值
注意:
1.C99 把字符型数据作为整型类型的一种。
2.在使用有符号字符型变量时,允许储存的值为负数,但是字符的代码不可能是负值,所以在存储字符时只用到了0 — 127这一部分。
#include<stdio.h> int main(void){ //1.定义字符型变量 signed char sc; unsigned char uc; char ch; //在vc++中,char类型的变量是signed char类型的,在其他的编译器中char类型的变量可能是unsigned char类型的 printf("%d,%d,%d\n",sizeof(sc),sizeof(uc),sizeof(ch)); //1,1,1 //2.分析下段代码的运行结果 uc = -1; ch = -1; printf("%d,%d\n",ch,uc); //-1,255 /* 该句相当于: int w; printf("%d,%d\n",w=ch,w=uc); */ return 0; }
getchar和putchar函数
#include<stdio.h> //该头文件有getchar和putchar函数的函数声明 void f1(void){ //从键盘读入一个字符并输出 char ch = getchar(); //返回类型为int型,返回值为用户输入的ascⅡ码,出错返回-1 putchar(ch); //putchar向屏幕输出一个字符 } void f2(void){ //从键盘读入3个字符并输出 putchar(getchar()); putchar(getchar()); putchar(getchar()); } int main(void){ //f1(); f2(); /* 输入boy按回车,输出boy; 输入b按回车,输出b和换行符,再输入o按回车,输出o */ return 0; }
浮点型数据
包括:单精度浮点型,双精度浮点型,长双精度浮点型,复数浮点型
(一)规范化的指数形式,把小数部分中小数点前的数字为0,小数点后第一位数不为0。如:0.314159e1 就是3.14159 的规范化的指数形式。
(二)实数储存空间及范围(Turbo C 中 long double 占16个字节,yc++6.0中占 8个字节)
注:从数值的左边第一个不为 0 的数字起,一直数到这个数字结束,中间的数字叫这个值的有效数字(如 0.618 的有效数字有三个,分别是 6,1,8)
/* 注: (一)所有常量末尾加的数据类型转换符可以大小写不分 (二)在目前学习过的所有格式声明中只有x、e、g可以不分大小写 */ #include<stdio.h> int main(void){ //1.定义实型变量 ——当把一个"长的"浮点型教据赋给一个较"短的"浮点型变量时,可能造成精度的损失。而且在有的编译器中会出现警告 float a = 1.1F; //1.1F表示1.1是个float型数据 double b = 1.1; //默认情况下,凡是小数都是double型 long double c = 1e-8L; //1e-8L是个long double的数据 printf("%d,%d,%d\n",sizeof(1.1F),sizeof(1.1),sizeof(1e-8L)); //4,8,8 //2.实型数据在格式化输入输出时所使用的格式声明 ——默认情况下使用带F和带e的格式声明只输出小数点后6位(第7位四舍五入) //小数形式 printf("%f,%lf,%Lf\n",a,b,c); //输出1.100000,1.100000,-0.000000 //指数形式 printf("%e,%le,%LE\n",a,b,c); //输出1.100000e+000,1.100000e+000,-1.041128E-097 //小数或者指数形式(哪一种形式简短就用哪一种形式) printf("%g,%lg,%LG\n",a,b,c); //输出1.1,1.1,-1.04113E-097 return 0; }
printf用到的格式附加字符
//格式声明 - % 格式附加字符 格式字符 %lf #include<stdio.h> int main(void){ printf("%5d\n",-12); printf("%5c\n",'a'); printf("%5s\n\n","abcd"); printf("%-5dA\n\n",-12); printf("%7.2lf\n",12.345); printf("%7.lf\n",12.345); //%7.lf和%7.0lf等价 printf("%.5lf\n",12.345); printf("%11lf\n",12.345); printf("%-11lf\n",12.345); return 0; }
scanf函数的注意事项
//scanf函数中不可以使用#,-,m.n的格式附加字符(m, n属于自然数),可以使用域宽的格式附加字符 #include<stdio.h> int main(void){ int a; /* scanf("%5d",&a); printf("%d\n",a); */ /* scanf("%-5d",&a); printf("%d\n",a); */ double b; scanf("%7.2d",&b); printf("%lf\n",b); char ch; while((ch = getchar())!='\n') putchar(ch); putchar('\n'); return 0; }
运算符2
#include<stdio.h>
int main(void){
int i = 1,j = 4; //前自减运算符它表达式的值是该变量减1之后的值,后自减运算符它表达式的值是该变量没有被减1之前的值
printf("%d,%d\n",--i,j--); //0,4
printf("%d,%d\n",i,j); //0,3
//printf("%d\n",--(i+j)); //error 自增自减运算符不能用于一个数值,只能用于一个变量
i = 1;j = 4;
printf("%d\n",i+++j); //vc++中i+++和(i++)+j等价,但在其他的编译器上也可能和i+(++j)等价,对于不可移植的操作我们应该尽量避免使用
int a;
printf("%d\n",sizeof((double) a)); //8 (double) a是把a这个数值表达式转化成double型数据,而不是把a变量转化成double型变量
printf("%d\n",sizeof(a)); //4
return 0;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。