C语言讲解思路资料.docx
- 文档编号:7153365
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:13
- 大小:20.86KB
C语言讲解思路资料.docx
《C语言讲解思路资料.docx》由会员分享,可在线阅读,更多相关《C语言讲解思路资料.docx(13页珍藏版)》请在冰豆网上搜索。
C语言讲解思路资料
C语言讲解思路
1,认识C语言的组成:
#include
main()
{
printf("Hello,world\n");
}
构成:
包含预定义文件、函数体、主函数
一个C程序有且只有一个main函数
2,printf函数
printf("Hello,world\n");
printf(“%d,%d”,a,b)
3,scanf函数
scanf(“%d,%d”,&a,&d);
scanf(“%d%d”,&a,&d);
定义的格式即为输入的格式
&符号必需,取地址。
格式字符
意义
d
以十进制形式输出
o
以8进制形式输出
x,X
以16进制形式输出
u
以16进制形式输出
f
以小数形式输出
e,E
以指数形式输出
c
输出单个字符
s
输出字符串
4,变量定义与赋值
inta;
inta,b,c;
inta=0;
inta=0,b=0;
数据类型
类型说明符
字节
数值范围
字符型
char
1
整形
int
2
-32768---32767
短整形
shortint
2
-32768---32767
长整形
longint
4
-214783648----214783647
单精度实型
float
4
3/4E-38-----3/4E+38
双精度实型
double
8
1/7E-308-----1/7E+308
5,常量
常量:
在程序执行中其值不改变就叫常量
变量:
在程序执行过程中值会发生变化
在C语言中常量可直接拿来使用,如x=y*10;10就是常量
字符常量是用单引号括起来的一个字符。
例如'a','b','=','+','?
'都是合法字符常量。
字符串常量用双引号括起来的一个字符串,如“abcdef”。
但“a”占2个字节,‘a’占一个字节
数字常量直接写就可以,‘5’和5是不同的,5可参加运算,‘5’不可
常量也可用来定义(荐)
#definePI3.14159
voidmain()
{
floats,r;
r=5;
s=PI*r*r;
printf("s=%f\n",s);
}
6,转义字符
转义字符是一种特殊的字符常量。
转义字符以反斜线"\"开头,后跟一个或几个字符。
转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。
例如,在前面各例题printf函数的格式串中用到的“\n”就是一个转义字符,其意义是“回车换行”。
转义字符主要用来表示那些用一般字符不便于表示的控制代码。
常用的转义字符及其含义
转义字符 转义字符的意义
\n 回车换行
\t 横向跳到下一制表位置
\v 竖向跳格
\b 退格
\r 回车
\f 走纸换页
\\ 反斜线符"\"
\' 单引号符
\a 鸣铃
\ddd 1~3位八进制数所代表的字符
\xhh 1~2位十六进制数所代表的字符
7,强制类型转换
其一般形式为:
(类型说明符)(表达式)
1.类型说明符和表达式都必须加括号(单个变量可以不加括号),如把(int)(x+y)写成(int)x+y则成了把x转换成int型之后再与y相加了。
2.无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型。
main()
{
floatf=5.75;
printf("(int)f=%d,f=%f\n",(int)f,f);
}
f<--5.75
将floatf强制转换成intffloatf=5.75;printf("(int)f=%d,f=%f\n",(int)f,f);本例表明,f虽强制转为int型,但只在运算中起作用,是临时的,而f本身的类型并不改变。
因此,(int)f的值为5(删去了小数)而f的值仍为5.75。
8,运算符和表达式
算术运算符:
+、-、×、/、%、++、——
关系运算符:
>、=、<、==、>=、<=、!
=
逻辑运算符:
&&、||、!
、~
位操作符:
&(位与)、|(位或)、~(位非)、^(位异或)、<<(左移)、>>(右移)
赋值运算符:
=、+=、-=、*=、/=、%=&=|=^=>>=<<=
条件运算符:
?
:
(三目运算符)
逗号运算符:
用于把若干表达式组合成一个表达式(,)
指针运算符:
用于取内容(*)和取地址(&)
求字节数运算符:
sizeof
特殊运算符:
()、[]、->
LPCSTR(Pointertoaconstantnull-terminatedstringof8-bitWindows(ANSI)Characters.)
指向以null结尾的常量字符串的指针
自增自减:
++i/--i:
i自增(减)1后参与其他运算
i++/i--:
i参与运算后在增加或减1
x=++I(I=I+1;x=i)
x=i++(x=I,I=i+1)
例子:
赋值表达式
+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=
X-=10X=x-10
逗号表达式
逗号表达是的求解过程是先求解表达式1,再求解表达式2,一直到最后,最终的表达式结果是最后一个表达式的值。
X=(1+2,3+5)结果x=7
X=(y=3,4*5)结果y=3,x=20
优先级及结合性
优先级
运算符类型
运算符
结合性
1
基本运算符
()[]->
自左至右
2
单目运算符
!
~++---(负数)*(指针)&(取址)sizeof
自右至左
3
算术运算符
*/%
自左至右
4
算术运算符
+-
自左至右
5
移位运算符
<<>>
自左至右
6
关系运算符
>>=<<=
自左至右
7
关系运算符
==!
=
自左至右
8
按位与运算符
&
自左至右
9
按位异或运算符
^
自左至右
10
按位或运算符
|
自左至右
11
逻辑与运算符
&&
自左至右
12
逻辑或运算符
||
自左至右
13
条件运算符
?
:
自右至左
14
赋值运算符
=+=-=*=/=%=>>=<<=&=^=|=
自右至左
15
逗号运算符
自左至右
练习1
9,控制语句
if(表达式)语句;
voidmain(){
inta,b,max;
printf("\ninputtwonumbers:
");
scanf("%d%d",&a,&b);
max=a;
if(max
printf("max=%d",max);
}
if(表达式)
语句1;
else
语句2;
voidmain(){
inta,b;
printf("inputtwonumbers:
");
scanf("%d%d",&a,&b);
if(a>b)
printf("max=%d\n",a);
else
printf("max=%d\n",b);
}
if(表达式1)
语句1;
elseif(表达式2)
语句2;
elseif(表达式3)
语句3;
…
elseif(表达式m)
语句m;
else
语句n;
#include"stdio.h"
voidmain(){
charc;
printf("inputacharacter:
");
c=getchar();
if(c<32)
printf("Thisisacontrolcharacter\n");
elseif(c>='0'&&c<='9')
printf("Thisisadigit\n");
elseif(c>='A'&&c<='Z')
printf("Thisisacapitalletter\n");
elseif(c>='a'&&c<='z')
printf("Thisisasmallletter\n");
else
printf("Thisisanothercharacter\n");
}
switch(表达式){
case常量表达式1:
语句1;
case常量表达式2:
语句2;
…
case常量表达式n:
语句n;
default:
语句n+1;
}
voidmain(){
inta;
printf("inputintegernumber:
");
scanf("%d",&a);
switch(a){
case1:
printf("Monday\n");
case2:
printf("Tuesday\n");
case3:
printf("Wednesday\n");
case4:
printf("Thursday\n");
case5:
printf("Friday\n");
case6:
printf("Saturday\n");
case7:
printf("Sunday\n");
default:
printf("error\n");
}
}
voidmain(){
inta;
printf("inputintegernumber:
");
scanf("%d",&a);
switch(a){
case1:
printf("Monday\n");break;
case2:
printf("Tuesday\n");break;
case3:
printf("Wednesday\n");break;
case4:
printf("Thursday\n");break;
case5:
printf("Friday\n");break;
case6:
printf("Saturday\n");break;
case7:
printf("Sunday\n");break;
default:
printf("error\n");
}
while(表达式)
#include
voidmain(){
intn=0;
printf("inputastring:
\n");
while(getchar()!
='\n')n++;
printf("%d",n);
}
do
语句;
while(表达式);
for(表达式1;表达式2;表达3)
表达式1 通常用来给循环变量赋初值,一般是赋值表达式。
也允许在for语句外给循环变量赋初值,此时可以省略该表达式。
表达式2 通常是循环条件,一般为关系表达式或逻辑表达式。
表达式3 通常可用来修改循环变量的值,一般是赋值语句。
这三个表达式都可以是逗号表达式,即每个表达式都可由多个表达式组成。
三个表达式都是任选项,都可以省略。
voidmain(){
intn,s=0;
for(n=1;n<=100;n++)
s=s+n;
printf("s=%d\n",s);
}
各语句间可以相互嵌套。
10,转移语句
Goto
Continue;
Break
Return
练习2
11,数组
一维数组a[20](a[0]~a[19])(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9)
二维数组a[10][10](a[0][0]~a[9][9])
A00,a01,a02……a09
A10,a11,a12……a19,
……
A90,a91,a92……a99
定义:
一维:
inta[10];charbc[9];
二维:
inta[10][10];floatbf[2][3]
赋值:
一维:
a[10]={1,2,3,4,5,6,7,8,9,10}
二维:
a[2][3]={1,2,3,4,5,6}
a[2][3]={{1,2},{3,4},{5,6}}
b[10]={‘I’,‘’,’a’,’m’,’’,’a’,‘’,‘b’,‘o’,‘y’}
b[10]={“Iamaboy”}
没有赋值的会自动赋值为0.,或为空,NULL。
字符性如果长度和定义相同,赋值时可省略长度。
操作:
Scanf(“%s”,a);//输入遇空格、Tab、Enter标志结束
Scanf(“%c”,&a[3])
Printf(“%d”,a[5]);
Printf(“%s”,a)
main()
{
inta[2][3]={{1,3,5},{2,4,6}};
intb[3][2],i,j;
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
b[j][i]=a[i][j];
}
}
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
{
Printf(“%d”,b[i][j]);
}
Printf(“\n”);
}
getch();
}
字符串的函数:
puts(字符串数组)将字符串输出到终端
gets(字符串数组)从终端得到字符串
strcat(字符串数组1,字符串数组2)连接两个字符串
strcpy(字符串数组1,字符串数组2)将字符串2拷贝到字符串1
strcmp(字符串数组1,字符串数组2)比较字符串1和字符串2,相等为0,字符串1大为1,小为-1
strlen(字符串数组)测试字符串的长度
strlwr(字符串)将大写字母换成小写字母
strupr(字符串)将小写字母换成大写字母
12,指针
运算符:
*&
定义:
int*p;char*p;float*p;inta;
含义:
*p:
实际的变量,等同于a(变量),a[0](一维),a[0][0](二维)
P:
等同于&a(变量),a(一维),a[0](二维)
&p:
等同于&(&a)(变量),&a(一维),a(二维)
赋值:
*p=5;
P=&a;*p=a
P=a;Xp=5;X
操作:
*p+1a+1(变量)a[10]+1(一维)
p+1&a+1(变量)a+1=&a[1](一维)
*(p+1)a[1]
13,文件
定义:
FILE*fp;
函数:
打开:
fopen(文件名,模式)
例:
fopen(“d:
\\file\\file1.txt”,”r”);
文件的使用方式
文件的使用方式
含义
备注
“r”(只读)
为输入打开一个文本文件
不能打开不存在的文件
“w”(只写)
为输出打开一个文本文件
若原文件不存在,可新建。
若原来的文件存在,则覆盖
“a”(追加)
向文本文件尾增加数据
在原文件末尾添加数据
“rb”(只读)
为输入打开一个二进制文件
“wb”(只写)
为输出打开一个二进制文件
“ab”(追加)
向二进制文件尾增加数据
“r+”(读写)
为读/写打开一个文本文件
“w+”(读写)
为读/写新建一个文本文件
“a+”(读写)
为读/写打开一个文本文件
“rb+”(读写)
为读/写打开一个二进制文件
“wb+”(读写)
为读/写新建一个二进制文件
“ab+”(读写)
为读/写打开一个二进制文件
关闭:
fclose(文件指针)
文件读写:
读写一个字符:
ch=fgetc(fp)fputc(ch,fp)
读写字符串:
fgets(str,n,fp)fputs(str,fp);
读写一个整数:
i=getw(fp)putw(10,fp)
读写数据块:
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
读写任意类型的若干数据:
fprintf(fp,”%d%f”,I,t);//写
fscanf(fp,”%d”,&i)//读取
文件状态:
feof(fp)//测试文件指针是否指向文件末尾,是返回1,否返回0
ferror(fp)//文件读写未出错返回0,出错返回非0
clearerr(fp)//使ferror(fp)的值为0
文件定位:
rewind(fp)//定位到文件头
fseek(fp,100L,0)//将文件指针移动到100行
I=ftell(fp)//得到当前指针所在的位置
14,函数嵌套
#defineswap(a,b)a=a+b;b=a-b;a=a-b;
voidmain()
{
intx=5,y=10;
swap(x,y);
printf(“%d%d\n”,x,y);
swap2(x,y);
}
intswap2(inta,intb)
{
inttemp;
temp=b;
b=a;
a=temp;
printf(“%d%d\n”,a,b);
return0;
}
Swap函数用宏定义的方式,只是简单的代替。
参数是直接代替。
Swep2用函数调用,参数传递是数值拷贝。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 讲解 思路 资料