概论:
-
\'/*\'注释内容的开始,\'*/\'注释内容的结束
-
预处理指令
# include "studio.h"
-
“studio.h”文件定义了很多输入输出功能
-
*.h 头文件
-
*.c c源程序文件
-
main 函数
void mian()
void代表函数不需要返回值,不需要将结果递交给上一级程序
-
每个C语言程序中必须只能有一个命名为main的函数,这是唯一的起点,是所有函数的上级函数
-
C语言中规定每条语句都必须以“;”作为结束标志
-
“\n”换行
-
C语言编译过程: 编译预处理,编译,优化,汇编,链接并生成可执行的机器语言程序文件
-
运行和调试:1, 程序文档读入内存,分配内存空间
2,操作系统为此程序创建进程
3,操作系统执行进程
4,完毕,释放内存空间等资源
-
一般错误;
-
语法错误
-
逻辑错误
-
运行错误
数据:
-
基本数据类型:
-
整形
-
有无符号
-
无符号整数(保存形式:二进制原码)
-
有符号整数(保存形似:最高位为符号位,0+,1-, 正数以原码保存,负数以补码保存)
-
范围大小
-
字符型 (1字节 )
-
短整型 (2字节)
-
标准整型
-
长整型 (4字节)
-
浮点型
-
有无符号
-
有符号浮点数
-
无符号浮点数
-
精度
-
单精度浮点型 float
-
双精度浮点型 double
-
高精度浮点型 long double
-
指针型
-
常量
-
字面常量
-
整型常量
-
十进制
-
八进制 (整数开头假0)
-
十六进制 (整数开头加0x或0X)
-
实型常量
-
十进制小数
-
指数形式 0.5e3
-
字符常量(单引号 char型)
-
普通字符常量 ‘a’ \'b\'
-
转义字符常量 ‘\’
-
字符串常量 (双引号) remark: C语言中存储的字符串常量都以\'\0\'作为字符串的结束标志: ‘A’占一个字节“A”占两个字节
-
符号常量 用符号对常量命名:
# define 符号常量名(大写字母) 常量
\n
|
换行
|
\t
|
水平制表,跳到下一个tab
|
\v
|
垂直制表
|
\b
|
退格,当前位置移到前一列
|
\r
|
回车,将当前位置移到本行开头 |
\f
|
换页,将当前位置移到下一页开头
|
\a
|
响铃报警
|
\0
|
空字符,字符串结束符
|
\\
|
代表反斜杠
|
\\'
|
字符\'\'\'
|
\"
|
字符“
|
\ddd
|
1~3位八进制数字
|
\xhh
|
‘hh’1~2位十六进制数字
|
-
变量
-
标志符(字母,数字下划线组成,并且第一个字母不能由数字组成,大小写有别,不建议长度超过8个字符)
-
关键字(if...)
-
预定义标志符:define
-
用户标识符:day..
-
规则:类型名 变量1,变量2;
void main() { int a,b; char ch1,ch2; }
-
变量的初始化
-
int a=12,b-3;
-
char *p=0; 将指针变量初始化为0是一个好习惯?
-
变量的引用
-
& 对应存储单元的地址
-
赋值运算
-
输入输出
-
需要有预编译命令:
#include <stdio.h>
-
基本输出
-
单个字符输出 putchar()
-
格式化输出函数 printf() printf(格式控制,输出表列)
-
c 字符
-
d 整数
-
u 无符号十进制
-
x 无符号十六进制
-
f 小数
-
e 指数
-
s 字符串
-
% %
-
附加修饰符
-
- 左对齐标志,默认为右对齐
-
+ 正数输出带有正号
-
数字 输出宽度
-
.数字 小数位数
-
H 短整数
-
l 或者L 长整数或者浮点数
-
基本输入
-
单个字符输入getchar() getchar();
-
格式化输入scanf();
运算与表达式
-
单双目运算
-
优先级与结合性
-
数据类型转换
-
强制类型转换
-
自增,自减运算: ++a: 变量先自增,然后将值传给表达式
a++:先将值传给表达式,然后进行自增
-
关系运算:
-
优先级较高: >, >=,<=,<
-
优先级较低:==,!=
-
逻辑运算
-
!非
-
&&与
-
|| 或
-
位运算
-
按位逻辑运算
-
移位运算
-
x = x>>2
-
左移一位相当于乘以2,右移一位相当于除以2
-
指针运算
-
取地址计算
-
通过指针变量或地址常量获得地址
-
通过标准函数获得地址值
-
不允许给一个指针变量直接赋给一个整数值 int *p p=2009 (错) int *p p= NULL, p为空指针
-
(NULL是stdio.h头文件中定义的符号常量,值为0)
-
操作指针变量
-
指针变量的使用必须是先赋值后使用
-
“&”和“*”优先级相同,右结合
-
移动指针
-
比较指针
-
其他运算
-
sizeof运算
-
代表长度,右结合,结果是一个无符号的整形
-
指针型占空间为4字节
-
逗号运算
-
左结合,自左向右
-
条件运算
-
三目运算:max=(x>y)?x:y;
-
表达式一?表达式二:表达式三;
-
表达式为非0,则结果为表达式二,如果,表达式一为0,则结果是表达式三
# include <stdio.h> #include <string.h> void main() { int a,b,c,t; printf("please input 3 numbers:"); scanf("%d%d%d",&a,&b,&c); t=(a>b)?a:b; t=(t>c)?t:c; printf("%d",t); }
-
赋值运算
-
= 右侧赋值给左侧
-
复合赋值运算
-
a+=b a=a+b
-
a-=b a=a-b
-
a*=b a=a*b
-
a/=b a=a/b
-
a%=b a=a%b。。。
-
注意,运算时需要将运算符右侧的表达式用括号括起来如x*=y-3 应该等于X=x*(y-3)
程序控制结构
顺序结构、分支结构、循环结构
-
顺序结构(正常结构)
-
选择结构
-
if语句
-
if (a>100) printf("hello");
-
if条件语句后面不跟随;, 在之后的语句后面跟随;
-
if (表达式) 语句一; else 语句二;
# include <stdio.h> #include <string.h> void main() { int a,b,c; printf("please input 3 numbers:"); scanf("%d%d%d",&a,&b,&c); if (a>b) printf("a is begger than b"); else printf("a is small than b"); } switch语句 switch(grade) ( case \'A\': printf("1");break; case \'B\': printf("2");break; default: printf("error");break; )
# include <stdio.h> void main() { float data1,data2,result; char op; scanf("inpurt 2 numbers %f and %f",&data1,&data2); scanf("inpurt operation %c", &op); switch(op) ( case\'+\': result = data1 + data2; break; case\'-\': result = data1 - data2; break; case\'*\': result = data1 * data2; break; case\'/\': result = data1 / data2; break; ) printf("result is %f", result); }
-
循环结构
-
while 循环
-
while 和if 的唯一区别就是if在在执行完语句后直接结束,而while 在执行完后需要再进行一次判定
# include <stdio.h> void main() { int i=1,total=0; while (i<100) { total = total +i; i++; } printf("total is %d",total); }
-
do while 循环, 当进行到哪一步的时候自动退出
do
循环体
while(表达式)
do { fact = fact +i; i++; } while(i<=10); printf("nnn")
-
for循环
-
语法: for(i=1;i<=100;i++)
sum = sum+i
-
for(表达式1;表达式2;表达式3) 计算表达式1,计算表达式二,如果非0,则执行循环语句,然后执行表达式三; 如果表达式二的结果为0,则直接跳出循环
-
其他控制语句
-
break语句
-
break; 只能用于switch和循环语句中,终止循环
-
continue语句
-
一般用于满足特定条件后跳出本次循环。
-
if (1%5!=0) continue; 相当于: if(1%5==0) ...
-
goto语句:结构化程序
-
循环的嵌套
# include <stdio.h> void main() { int i,j,n; printf("pls enter th n value"); scanf("%d", &n); for (i=1;i<=n;i++) { for (j=1;j<=n-i;j++) { printf(" "); } for (j=1;j<=2*i-1;j++) { printf("*"); } printf("\n"); } }
数组
-
一维数组 int a[10];
-
数组里面必须是常量,数组是一个指针型常量
-
一个整形占用四个字节
-
C语言编译器不会检查数组元素下标是否越界
-
下标法引用一维数组
一个数组不能整体引用
-
指针法引用数组元素
-
一维数组的初始化
找出数组里的最大值
# include <stdio.h> # define N 10 void main() { int i,max,a[N]; printf("pls key in 10 numbers"); for(i=0;i<N;i++) scanf("%d",&a[i]); max=0; for(i=1;i<N;i++) if(a[i]>a[max]) max = i; printf("%d",a[max]); }
冒泡排序:
# include <stdio.h> # define N 10 void main() { int i,a[N],j,k,t; printf("pls key in 10 numbers"); for (i=0;i<N;i++) scanf("%d",&a[i]); for (i=0;i<N-1;i++) for (j=0;j<N-i-1;j++) if (a[j]>a[j+1]) { t=a[j]; a[j] =a[j+1]; a[j+1]=t; } for(i=0;i<N;i++) printf("%d ",a[i]); } Z
请发表评论