转义字符
\' - ' \" - " \? - ? \\ - \ \a - 警告 \b - 退格 \f - 换页 \n - 换行
\r - 回车 \t - 水平制表符 \v - 垂直制表符
\o,\oo或\ooo - 与该八进制码对应的ASCII字符
\xh - 与该十六进制码对应的ASCII字符
符号常量,用#define指令,指定用一个符号名称代表一个常量。
#define PI 3.1415 //注意行末没有分号
将所有的PI置换为3.1415 - 不占内存,只是一个临时符号代表一个值,在预编译后这个符号就不存在了,故不能对符号常量赋新值。
常变量:在定义变量时,前面加一个关键字const - 具有变量的基本属性:有类型,占存储单元,只是不允许改变其值。
在存储单元中的存储方式:用整数的补码形式存放。
一个正数的补码是此数的二进制形式
负数的补码:先将此数的绝对值写成二进制形式,然后对其所有二进制位按位求反,再加1.
int - 默认:有符号类型 unsigned int - 无符号类型
只有整型(包括字符型)数据可以加signed或unsigned修饰符,实型数据不能加。
%d格式输出十进制整数;%u格式输出无符号十进制数;%c格式输出字符
字符型数据(字符对应的ASCII码值)
'A'~65;'a'~97;'1'~49;' '~32;'%'~37;'\n'~10;'\0'~0;'0'~48
整数运算符1+1等于整数2,而字符‘1’+‘1’并不等于整数2或字符2。(字符的‘1’,类似指代数字1样式的图,而非指数字1)
浮点型
float型数据能得到6位有效数字 - 范围:-3.4*10^-38~3.4*10^38 - 最小正数:1.2*10^-38
double型数据能得到15位有效数据
可以在常量的末尾加专用字符,强制指定常量的类型,如加F或f,表float;加L或l,表long double
两个实数相除的结果是双精度实数;
两个整数相除的结果是整数 - 若其中一个是负数,还是整数,但是结果不确定,视编译器而定
除%以外的运算符的操作数都可以是任意算术类型。
+ - * /运算的两个数字中有一个数为float或double型,结果是double型;int与float或double型数据运算,结果是double型。
字符(char)型数据与整型数据进行运算,就是把字符的ASCII代码与整型数据进行运算。
//给定一个大写字母,用小写字母输出
char c1,c2;
c1 = 'A';
c2 = c1 + 32;
printf("%c\n",c2);
printf("%d\n",c2);
一个函数包含声明部分和执行部分
C语言语句分为5类,
第一类:控制语句 共9种
if( )…else… - 条件语句
for( ; ; )… - 循环语句
while( ) … - 循环
do…while( )… - 循环
continue - 结束本次循环
break - 中止执行switch或循环语句
switch - 多分支选择语句
return - 从函数返回
go to - 转向,现在基本不用。
第二类:函数调用语句 三类:表达式语句 四类:空语句(只有一个分号) 五类:复合语句
赋值过程中的类型转换
1、将浮点型数据(包括单、双精度)赋值给整型变量先对浮点数取整,即舍弃小数部分,然后赋予整型变量。
2、将整型数据赋值给单、双精度变量时,数值不变,但以浮点数形式存储到变量
3、double型赋给float型,先将双精度数转为单精度,即只取6~7位有效数字,存储到float型变量的4个字节中。注意双精度数的大小范围
4、字符型数据赋给整形数据,将字符的ASCII代码赋给整型变量
5、将一个占字节多的整型数据赋给一个占字节少的整型变量或字符变量时,只将其低字节原封不动地送到被赋值的变量。
赋值表达式和赋值语句:赋值表达式可出现在其他表达式中
scanf printf 分别是输入输出函数,还有其他的输入输出函数
getchar(输入字符) putchar(输出字符) puts(输出字符串) gets(输入字符串)
scanf:在输入数据时,应在对应的位置上输入同样的字符 - 在“%c”格式声明输入字符时,空格字符和转义字符中的字符都作为有效字符输入。
格式字符
d - 有符号的十进制整数 u - 无符号十进制整数 c - 字符 s - 字符串
f - 输出实数(包括单、双精度,长双精度)以小数形式输出 e/E - 以指数形式输出
o - 八进制形式 x - 十六进制形式
格式附加字符
%ld:长整型整数 %m.nf:指定数据宽度和小数位数 %-m.nf:输出的数据向左对齐
读取一行字符 - 结束的标识'\n'
数据都隐含右对齐,如果想左对齐,可以在格式控制中的“%”和宽度之间加一个“-”号来实现;在printf和scanf函数都可以指定数据的宽度;复合语句可以由任意多条语句构成,也可以一条没有
printf("x=%0.5\n",x); - 保留小数位数为5
"%8.6f"代表总共8位宽度,包括小数点,小数点后有6位小数。
%在C语言中有两个作用:一是用作取余数运算符,另一个用作转义符。
scanf("%d%d%d",&a,&b); 程序从键盘正确地读入前两个数据并且保存在指定的地址,读入第三个数据后,将其放入缓冲区然后寻找应该存放的地址,因为没有找到,程序会发生错误而中断
在输入多个字符串时,系统会把空格字符作输入的字符串之间的分隔符。
输入55666 777123在scanf("%2d%f%s",&j,&k,name); j的值为55,y的值为666
isalpha(kk)是判断kk是否是字母的函数
位运算的对象只能是整型或字符型数据,不能是其他类型的数据
右移运算时,对于无符号整数和正整数,高位补0;对于负整数,高位补1.
位运算符:~ - 按位求反 << - 左移 >> - 右移 & - 按位与 | - 按位或
^ - 按位异或(两个操作数相同得0,不同得1) |优先级高于&
//把形参a所指数组中的偶数按原顺序依次存放到a[0],a[1]……中,把奇数从数组中删除,偶数个数返回
int fun (int a[],int n)
{
int i,j;
j = 0;
for (i=0;i<n;i++)
{
if(a[i]%2==0)
{
a[j]=a[i];
j++;
}
return j;
}
//将s所指字符串中除了下标为奇数,同时ASCII值也为奇数的字符之外,其余的所有字符都删除
void fun( char *s,chat t[])
{
int i,j=0,n;
n = strlen(s); //字符串长度
for ( i = 0 ; i < n ; i++)
{
if ( i%2!=0 && s[i]%2!=0 )
{
t[j] = s[i];
j++;
}
}
t[j] = '\0';
}