c语言编程概要Word下载.docx
- 文档编号:21635851
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:19
- 大小:56.21KB
c语言编程概要Word下载.docx
《c语言编程概要Word下载.docx》由会员分享,可在线阅读,更多相关《c语言编程概要Word下载.docx(19页珍藏版)》请在冰豆网上搜索。
算术运算符为左结合。
3、关系运算符和关系表达式(参加运算的表达式的从左到右按关系运算符提供的关系进行比较)
c语言提供6种关系运算符:
(1)>
(2)>
=(3)<
(4)<
=(5)==(6)!
=
优先次序:
前四种的优先级别相同,后两种的优先级别相同,前四种高于后两种
优先顺序:
算术运算符》关系运算符》赋值运算符
四、逻辑运算符和逻辑表达式
逻辑运算是判断对象真假的运算。
运算对象非0代表逻辑真,是0代表逻辑假。
也就是说任何类型的量都有逻辑值。
逻辑运算得到整型值。
运算结果为真时,得到整型值1,运算结果为假时,得到整型值0。
用逻辑运算符将关系表达式或逻辑量连接起来的式子就是逻辑表达式
逻辑运算符及其优先次序
(1)&
&
与
(2)||或
(3)!
非
a&
b:
只有a、b均为真,a&
b才为真
a||b:
只要a、b中有一个为真,a||b即为真。
!
a:
若a为真,则!
a为假;
若a为假,则!
a为真。
逻辑运算符的优先次序
1.!
(非)》&
(与)》||(或)!
为三者中最高;
其次是&
,||为最低。
2.逻辑运算中的“&
”“||”低于关系运算符,“!
”高于算术运算符。
3.!
(非)》算术运算符》关系运算符》&
(与)》||(或)》赋值运算符
逻辑表达式的求解中,并不是所有的逻辑运算都被执行,只有在必须执行下一逻辑运算符才能求出表达式的解时,才执行该运算符
(1)a&
b&
c:
只有a的值为真,才判断b的值,只有a和b都为真的情况下才判断c的值.只要a为假,即不必判断b和c的值.如果a为真,b为假,就不必判断c的值.
(2)a||b||c:
只要a为真,就不必判断b和c;
只有a为假,才判断b;
只有a和b均为假才判断c.
v如:
a=1,b=2,c=3,d=4,m=100,n=20
(m=a>
b)&
(n=c>
d)
则运算结果:
整个表达式为0,m=?
n=?
v用逻辑表达式表示一个很复杂的条件,例如:
•判断闰年:
能被4整除,但不能被100整除;
可以被400整除。
可以表示为:
(year%4==0&
year%100!
=0)||year%400==0
非闰年可以表示为:
!
((year%4==0&
=0)||year%400==0)
四、自加自减
++i在使用i之前使i加1
--i;
在使用i之前使i减1
i++;
在使用i之后使i加1
i--;
在使用i之后使i减1*/
v注意:
(1)++和--只能用于变量,不能用于常量和表达式。
例:
(错误例子)
5++;
(常量)
(a+b)++;
(表达式)
(2)++和--的结合方向为“右结合”。
-i++(-i)++错误
负值运算符-和自增运算符优先级相同-(i++)
(3)在不需要任何具体指且仅需要递增变量的情况下,i++与++i是一样的
2、在表达式中使用++或--,容易出错。
inti,j;
i=3;
j=(i++)+(i++)+(i++);
则j=9,i=6
出现多个运算符时,编译器在处理时尽可能多的(从左到右)将若干个字符组合成一个运算符。
例如:
(1)n=5,x=n++(x=5,n=6)x=++n(x=6,n=6)
(2)inta=0;
y=a+++a+++a++;
------>
y=(a++)+(a++)+(a++);
由于++为后置自加运算,先处理表达式,再处理++
所以,y=0+0+0=0,再进行三次++,a的值为3
(3)main()
{intx=0,y=5,z=3;
while(z-->
0&
++x<
5)y=y-1;
printf("
%d,%d,%d\n"
x,y,z);
}循环第1次:
判断条件z-->
0,即先判断3>
0,然后z-1变成2
判断条件++x<
5,即先x+1变成1,然后判断1<
5
条件成立,执行循环体后,x=1,y=4,z=2
循环第2次:
0,即先判断2>
0,然后z-1变成1
5,即先x+1变成2,然后判断2<
条件成立,执行循环体后,x=2,y=3,z=1
循环第3次:
0,即先判断1>
0,然后z-1变成0
5,即先x+1变成3,然后判断3<
条件成立,执行循环体后,x=3,y=2,z=0
循环第4次:
0,即先判断0>
0,然后z-1变成-1
条件不成立,循环结束
此时x=3,y=2,z=-1
(4)main()
{intp[8]={11,12,13,14,15,16,17,18},i=0,j=0;
while(i++<
7)if(p[i]%2)j+=p[i];
%d\n"
j);
}i从0开始,先判断是否<
7,然后i再加1,第1次循环判断的是p[1]是否能整除2,也就是对奇数求和。
循环结束后i=8,j=45
3、注意指针变量的自加自减。
vp++;
p+=1;
v*p++;
v*(p++);
*(++p)
v(*p)++;
*(p--);
*(++p);
①y=*px++相当于y=*px;
px++;
即把px所指向的单元值赋给y,然后让px指向下一个单元
②y=*++py相当于++py;
y=*py;
即先让py指向下一个单元,然后把py指向的单元的值赋给y
③y=(*py)++相当y=*py;
(*py)++;
即将py所指向单元的值赋给y,然后将py所指向单元的值加1
④y=--*px++相当于--(*px);
y=*px;
即将px所指向单元的值减1,然后赋给y,然后px指向下一个单元
五、if语句
1、编写一个程序:
若用户输入的一个整数是3的倍数,则显示“OK!
”.([beg5_1.c])
main(){
inta;
scanf(“%d”,&
a);
if(a%3==0)
printf(“OK!
”);
getch();
}
2、if(表达式)语句1
else语句2
编写一个程序,给出用户输入的两个整数中的较大者.
inta,b;
scanf(“%d,%d”,&
a,&
b);
if(a>
b)
printf(“largeris%d”,a);
else
printf(“largeris%d”,b);
3、if(表达式1)语句1
elseif(表达式2)语句2
elseif(表达式3)语句3
elseif(表达式m)语句m
else语句n
补充3:
编写程序,将用户输入的分数按以下规划转换成相应的等级
分数:
90~100等级:
优
80~89等级:
良
70~79等级:
中
60~69等级:
及格
60分以下等级:
不及格
intd;
printf(“inputthescore:
d);
if(d>
=90)
printf(“excellent”);
elseif(d>
=80)
printf(“good”);
=70)
printf(“secondary”);
=60)
printf(“passing”);
else
printf(“fail”);
在if和else语句后面可以只含一个内嵌的操作语句,也可以有多个语句,此时用花括号“{}”将几个语句括起成为一个复合语句。
例5.1输入两个实数,按代数值由小到大的次序输出这两个数
floata,b,c;
scanf(“%f,%f”,&
if(a>
{c=a;
a=b;
b=c;
}
printf(“%5.2f,%5.2f”,a,b);
例5.2输入3个数a,b,c,要求按由小到大的顺序输出(冒泡)
main()
{
floata,b,c,t;
scanf(“%f,%f,%f”,&
b,&
c);
{t=a;
a=b;
b=t;
c)
a=c;
c=t;
if(b>
{t=b;
b=c;
printf(“%5.2f,%5.2f,%5.2f\n”,a,b,c);
4、if语句的嵌套(else总是与它最近的if配对)
在if语句中又包含一个或多个if语句称为if语句的嵌套。
一般形式:
if()
if()语句1
else语句2
else
if()语句3
else语句4
“(a>
b)?
a:
b”是一个条件表达式,若条件(a>
b)成立,则条件表达式取值a;
否则,取值b。
条件运算符要求有三个操作对象,称为“三目运算符”.条件表达式的一般形式:
表达式1?
表达式2:
表达式3
6.switch语句
switch语句一般形式:
switch(表达式)
{case常量表达式1:
语句1
case常量表达式2:
语句2
……
case常量表达式n:
语句n
default:
语句n+1}
a.当表达式的值与case后面的常量相同时,就执行此case后面的语句。
若无匹配的语句,则执行default后面的语句。
b.执行完一个case后面的语句后,流程控制转移到下一个case继续执行,并不再判断表达式是否匹配。
因此应使用break语句终止switch的执行。
c.多个case可共用一组执行语句.
d.switch语句也可以嵌套
六、循环控制
1、do-while语句
vdo-while语句的特点是先执行循环体,再判断循环条件是否成立,是典型的直到型循环。
v其一般形式为:
•do
•循环体语句
•while(表达式);
v执行过程:
先执行循环体,然后判断表达式,如果表达式非0,返回重新执行循环体语句,如此反复,直到表达式的值等于0。
2、for语句
for(循环变量赋初值;
循环条件;
循环变量增值)语句
for语句的表达式1可以省略,此时应在for语句之前给循环变量赋初值。
注意省略表达式1时,其后的分号不能省略。
如:
i=1;
for(;
i<
=10;
i++);
3、break语句和continue语句
(1)break语句
break语句在switch中使流程跳出switch结构,继续执行switch后面的语句。
在循环中,还可以使用break语句从循环体中跳出循环体外,即提前结束本层循环,继续执行循环后面的语句。
(2)continue语句的作用是结束本层循环,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判断。
continue和break的区别是:
continue只是结束本次循环,而不是终止循环的执行。
而break语句则是结束整个循环过程,不再判断循环条件是否成立。
七、数组、自定义与指针
(一)数组
1、类型说明符数组名[常量表达式];
例如:
inta[10];
2、常量表达式表示元素的个数,即数组长度,数组中的元素下标从0开始,最后一个元素下标是N-1
3、常量表达式中可以使用常量和符号常量,不能包括变量
4、数组的定义与数组的引用不同,在数组定义时方括弧中数值表示数组元素的个数,而在引用时,方括弧中的数值代表元素的位置。
inta[5];
数组的定义,整型数组a有5个数组元素
5、对全部数组元素赋初值时,可以不指定数组长度.inta[]={1,3,4,5,6};
inta[5]={1,3,4,5,6};
但是:
inta[10]={1,3,4,5};
不能写成:
inta[]={1,3,4,5};
用冒泡法对十个数排序
思路:
将相邻两个数比较,将较小的调到前头比较相邻的两个数,如果是逆序,就交换这两个数;
否则不交换。
将得到的较大的数再与下面相邻的数做比较。
这样一轮比较结束后,在最后一个元素中就存放了当前数列中最大的那个数。
然后对数组中除了最后一个元素的其他元素进行下一轮的比较。
inta[11];
inti,j,t;
printf("
input10numbers:
\n"
);
for(i=1;
11;
i++)
scanf("
%d"
&
a[i]);
for(j=1;
j<
=9;
j++)/*第j趟比较*/
=10-j;
i++)
if(a[i]>
a[i+1])
{t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
thesortednumbers:
i++)
a[i]);
(二)字符数组
1、用来存放字符的数组是字符数组.字符数组中的一个元素存放一个字符.
charc[10],ch[5];
intc[10],ch[5];
2、如果花括弧中提供的初值个数大于数组长度,则按语法错误处理,如果初值个数小于数组长度,则将这些字符赋给数组中前面的那些元素,其余元素自动定义为空字符(‘\0’).
charc[10]={‘c’,’’,’p’,’r’,’o’,’g’,’r’,’a’,’m’};
输出一个字符串.
main(){
char(int)c[10]={'
I'
'
'
m'
b'
o'
y'
};
inti;
for(i=0;
10;
%c"
c[i]);
输出结果:
Iamaboy
3,c语言中,将字符串作为字符数组来处理。
字符数组的长度一般大于或等于字符串的长度.但有时人们关心的是字符串的实际长度.于是,c语言规定了一个字符串结束标志,以'
/0'
表示
系统通过检测'
\0'
的位置来判断字符串是否结束,计算字符串的长度
charc[]={"
China"
charc[]={'
C'
h'
i'
n'
charc[5]={"
charc[10]={"
charc[]={'
注意:
用“%s”输出字符串时,printf函数中的输出项是字符数组名,而不是数组元素名.
%s"
c);
c[0]);
(错误)
如果数组长度大于字符串实际长度,也输出到遇'
结束
charc[10]="
如果一个字符数组中包含一个以上的'
则遇第一个'
时结束
charc[10]={'
c'
t'
charstr1[5],str2[5],str3[5];
scanf("
%s%s%s"
str1,str2,str3);
输入数据:
Howareyou?
charstr[13];
str);
输入:
(三)指针
存放“变量地址”的变量就是指针变量,这个变量指向另一个变量。
在程序中,用“*”表示指向。
如:
pointer代表一个指针变量,则*pointer是pointer指向的变量。
若指定pointer指向变量i,可以看出,*pointer代表一个变量。
它和i是同一空间,即表示同一个变量值。
1、定义一个指针变量
inti,j;
int*pointer1,*pointer2;
定义指针变量的基本形式:
基本类型*指针变量名;
float*pointer3;
char*pointer4;
使用取地址操作将指针变量指向一个变量。
pointer1=&
i;
pointer2=&
j;
2、定义指针变量应注意:
(1)指针变量前的*,表示该变量是指针变量,而不是指针变量名的一部分。
(2)在定义指针变量时,必须指定基类型。
3、指向数组的指针变量的定义与指向变量的指针变量的定义相同。
inta[10],*p;
p=&
a[0];
C语言规定,数组名代表数组的首地址。
因此可以这样使用:
p=a;
将数组的首地址赋值给指针变量p。
可以在定义时同时给指针变量赋值。
int*p=&
等效于:
int*p=a;
C语言规定P+1表示指向数组的下一个元素
4、所谓数组的指针即是数组的起始地址,数组元素的指针就是数组元素的地址。
用指针访问各元素。
(常用,效率高)
•main(){
inta[10];
•
int*p,i;
for(i=0;
i++)
&
for(p=a;
p<
(a+10);
p++)/*p++使p指向下一个元素*/
%d"
*p);
举例:
打印数组中的奇数
#include<
stdio.h>
main()
{inti,a[10];
for(i=0;
i<
10;
i++)
scanf(“%d”,&
a[i]);
i++)
if(a[i]%2)printf(“%d”,a[i]);
}
scanf(“%d”,a+i);
if(*a+i%2)printf(“%d”,a[i]);
}数组名法
{inti,*p=a;
scanf(“%d”,p++);
p=a;
if(*(p+i)%2)printf(“%d”,a[i]);
将数组a中n个整数按相反顺序存放
voidinv(int*x,intn){
int*p,t,*i,*j;
intm=(n-1)/2;
i=x;
j=x+n-1;
p=x+m;
for(;
=p;
i++,j--)
{t=*i;
*i=*j;
*j=t;
return;
inti,a[10]={3,7,9,11,0,6,7,5,4,2};
theoriginalarray:
i++)
a[i]);
inv(a,10);
thearrayhansbeeninverted:
5、字符串的指针和指向字符串的指针变量
字符串的表示形式.
C语言中,可以用两种方法访问一个字符串:
字符数组、字符指针。
char*string="
IloveChina!
"
%s\n"
string);
charstring[]="
string是一个指针变量,“IloveChina!
是一个字符串常量。
语句:
char*string="
等价于
char*string;
string="
它把字符串常量的首地址赋给指针string.不能理解为把字符串常量赋值给指针变量。
*string="
string是数组名,代表字符数组的首地址。
数组可以用下标访问,也可以用指针访问。
例、string[4]表示一个元素其值是字符v,也可以用*(string+4)来访问,string+4是指向字符v的指针。
将字
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 编程 概要