C语⾔基础常⽤命令,运算符,控制符0.语句以分号结尾:
//如:
printf("AAA\n");//调⽤函数以分号结尾
//但:
while(...){
...
}//控制语句控制的块不以分号结尾,但其中的语句以分号结尾
//参见 C语⾔细节.运算符,表达式,语句.5 部分
1.输出
(1)格式化输出:
//注意:
2.param是变量,⽽不是变量的地址(即不是¶m),后者表⽰以指定格式输出变量的"地址"
[<n>=]printf("<content>"[,<param1>...]):进⾏格式化的输出(到屏幕)
//参数说明:
content,param:共同构成要输出的内容
//第1个参数称为"格式字符串",必须为str
//最终输出的内容为<content>,不过其中的输出控制符被相应的<param>替换了
格式:1.为str;如printf("asdf")
//注意:必须为str,不能是char(即必须被" "扩起),否则会被识别为int
//⾮输出控制符会被原样输出
2.为"<o_ctr1>...",<param1>...;如printf("%d+%c",12,"d")
ctr:输出控制符,如%d,%c,%ld
//即在str中嵌有输出控制符,其他不变;如果ctr多于param,靠后的ctr会被⾃动赋1个值(规律)
param:要传递给控制符的参数,如果有多个,彼此之间⽤','隔开
//可以是数据值,也可以是变量;如果param多于ctr,后边的param会被省略
//float类型作为param时会⾃动转换为double
n:返回成功打印的字符的个数;如果有输出错误,返回负值(旧版本在这种情况下不返回值)
//写⼊⽂件时常⽤
//实例:
printf("asasdasdas\n");//结果:asasdasdas//\n为换⾏符
printf("%c",'i');//结果:i
int i=5;
printf("%d",i);//结果:5
printf("%c",i);//结果:,
pritf('%c',i);
//结果:
//[Warning] multi-character character constant [-Wmultichar]
//[Warning] passing argument 1 of 'printf' makes pointer from integer without a cast
//[Note] expected 'const char * __restrict__' but argument is of type 'int'
char j='x';
printf("%c=%d%c",'y',3,j);//结果:y=3x
printf("%c=%d%c","y",3,j);//结果: =3x
printf("%c=%d%c",'y',3,j,4);//结果:y=3x
printf("%c=%d",'y');//结果:y=2048800
printf("%c=%d*%d*%d",'y');//结果:y=148256*5*0
printf("%c=%d*%d*%d",'y',4);//结果:y=4*5*0
printf("%c=%d","ddd",4);//结果: =4
(2)输出字符:
打印字符:putchar(<c>);
//相当于printf("%c",ch);//注意:结尾没有\n
//参数说明:
c:要打印的变量
//实例:
char ch=getchar();//输⼊:s
putchar(ch);//结果:s
2.运算符:
(1)算数运算符
注意:如果进⾏运算的2个数中包括float,则结果为float;如果2个数均为int,则结果也为int
+:做加法/表⽰该值是正值(加法运算符/符号运算符)
//后1种⽤法是C90新增的
-:做减法/表⽰该值是负值(减法运算符/符号运算符)
*:做乘法(乘法运算符)
/:做除法(除法运算符)
//如果进⾏除法运算的2个数都是int,即使⽆法整除,结果也为int,值等于商的整数部分%:做除法并取余(求模运算符)
//余数的符号和被除数相同
//进⾏取余运算的2个数都只能是int
//注意:
1.表⽰加减或符号时,+-分别是⼆元或⼀元运算符
2.C语⾔没有乘⽅运算符
//实例:
printf("%d\n",3+1);//结果:4
printf("%f\n",3+1);//结果:0.000000
printf("%f\n",3.12+2.22);//结果:5.340000
printf("%d\n",11+3.1);//结果:858993459
printf("%f\n",11+3.1);//结果:14.100000
printf("%f\n",3.12-2.22);//结果:0.900000
printf("%f\n",2*3.11);//结果:6.220000
printf("%d\n",1/2);//结果:0
printf("%f\n",11/3);//结果:0.000000
printf("%d\n",11/3);//结果:3
printf("%d\n",9/3);//结果:3
printf("%f\n",11/3.1);//结果:3.548387
printf("%d\n",11%3);//结果:2
printf("%f\n",11%3);//结果:0.000000
printf("%f\n",3.11%2);//结果:[Error] invalid operands to binary % (have 'double' and 'int') printf("%d\n",-7%2);//结果:-1
printf("%f\n",7%-2);//结果:1
printf("%f\n",-7%-2);//结果:-1
(2)关系运算符:
>:⼤于
<:⼩于
==:等于
>=:⼤于等于
<=⼩于等于
!=不等于
(3)赋值运算符:
=:赋值
+=:加后赋值(a+=i相当于a=a+i)
-=:减后赋值(a-=i相当于a=a-i)
*=:乘后赋值(a*=i相当于a=a*i)
/=:除后赋值(a/=i相当于a=a/i)
%=:求模后赋值(a%=i相当于a=a%i)
交换2个变量的值:
int i=2,j=3,a;
a=i,i=j,j=a;
printf("%d,%d\n",i,j);//结果:3,2
//注意:不能通过i,j=j,i交换2个变量的值
int i=2,j=3;
i,j=j,i;//表⽰:不对i进⾏操作,把j的值赋给j,不对i进⾏操作
printf("%d,%d\n",i,j);//结果:2,3
(4)逻辑运算符:
&&:与
||:或
!:⾮
//实例:
printf("%d\n",3&&2);//结果:1
printf("%d\n",3&&0);//结果:0
printf("%d\n",0&&0);//结果:0
printf("%d\n",3||2);//结果:1
printf("%d\n",3||0);//结果:1
printf("%d\n",0||0);//结果:0
printf("%d\n",!3);//结果:0
printf("%s\n",!3);//结果:(null)
printf("%d\n",!0);//结果:1
对[真]和[假]的处理:
在C语⾔中,⽤整数1表⽰逻辑值[真],⽤整数0表⽰逻辑值[假]
但是,在逻辑运算中,任何⾮0值都被视为[真],0被视为[假]
这⾥的⾮0值包括任何不为0的int/float,以及所有char/str
如3,1.1,0.00001,' ','A',"asa",""," ","A"(''不合法)
这⾥的0包括为int/float的0
如0,0.00
(5)sizeof运算符:
返回运算对象占⽤的字节数:size_t sizeof(<obj>)
//关于size_t类型参见 C语⾔细节.字符串与格式化输⼊输出.5 部分
//注意:sizeof是运算符,⽽不是函数
//参数说明:
obj:指定运算对象(可为数据类型关键字/变量/常量)
//当obj为变量/常量,可省略⽤于包裹<obj>的括号
//实例:
#include<stdio.h>
int main(void){
printf("%d,%d,%d,%d\n",sizeof(short),sizeof(int),sizeof(float),sizeof(double));//结果:2,4,4,8 int a=12;
printf("%d\n",sizeof a);//结果:4
printf("%d,%d,%d\n",sizeof(4),sizeof(3.14),sizeof3);//结果:4,8,4
return0;
}
sizeof是编译时的⾏为,运⾏时不会执⾏:
#include<stdio.h>
int main(void){
int x=5;
printf("%d and ",sizeof(++x));
printf("%d",x);
return0;
}
/
/结果:
4 and 5
(6)注意事项:
//运算符的优先级:从⾼到低
1.(...)-->+和-(⼀元)和++和--和sizeof和!和*(⼀元)-->*和/和%(⼆元)--> +和-(⼆元)-->>和<;和<=和>=-->==和!=-->&&>||-->赋值运算符
2.同级之间,从左往右执⾏(除赋值运算符是右边的值赋给左边外)
//&&和||的运算顺序:
&&和||的优先级相同,统⼀从左往右执⾏
如果&&左侧为[假],则不再继续执⾏右侧代码;为[真],继续执⾏
如果||左侧为[假],继续执⾏;为[真],则不再继续执⾏
int i=10,k=20,m;
m=(1>2)&&(k=5);
printf("%d,%d\n",m,k);//结果:0,20
//说明:1>2为[假],故不再执⾏k=5的赋值操作,故k仍为20
int i=10,k=20,m;
m=(i==10)||(k=11);
printf("%d,%d\n",m,k);//结果:1,20
//说明:i==10为[真],故不再执⾏k=11的赋值操作,故k仍为20
//形如x1 < a < x2的表达式不表⽰x ∈ (x1,x2)
x1 < a的结果为0或1,下1步将计算0< x1或1< x2
double alpha=2;
if(3<alpha<10){
printf("⼤于0\n");//结果:⼤于0
}else if(alpha>=0){
printf("⼤于等于0\n");//结果:[未执⾏]
}else{
printf("其他\n");//结果:[未执⾏]
}
//注意:
1.推荐使⽤(...)来确定优先级
2.⾃增/减运算符的优先级参见 C语⾔.细节.3部分
(7)其他运算符:
⾃增运算符:让指定变量的值+1
++<var>:前⾃增,整体表⽰⾃增后的值(见实例)
<var>++:后⾃增,整体表⽰⾃增前的值(见实例)
//实例
int i,j,k,l;
i=j=3;
k=++i;//先⾃增再赋值
l=j++;//先赋值再⾃增
printf("%d,%d\n",k,l);//结果:4,3
printf("%d,%d\n",i,j);//结果:4,4
⾃减运算符:让指定变量的值-1
--<var>:前⾃减,整体表⽰⾃减后的值(见实例)
<var>--:后⾃减,整体表⽰⾃减前的值(见实例)
//实例:
int i,j,k,l;
i=j=3;
k=--i;//先⾃增再赋值
l=j--;//先赋值再⾃增
printf("%d,%d\n",k,l);//结果:2,3
printf("%d,%d\n",i,j);//结果:2,2
//注意:
1/⾃增/减运算符可以使代码更精炼,并且效率⽐i+=1/i-=1更⾼
2.在程序中应尽可能屏蔽前/后⾃增/减的区别(应尽可能使前/后⾃增/减的结果相同)
3.不要将⾃增/减作为某个更⼤的表达式的⼀部分来使⽤,即i++/i--/++i/--i应单独成句
如:int m=i+++++i + i + i++;//这样的代码可读性差且不可移植
//
三⽬运算符:如果A为真,则执⾏B,否则执⾏C
A?B:C
//等价于:
if(A)
B;
else
C;
//实例:
int i;
scanf("%d",&i);//输⼊: ①1  ②0
i?printf("Yes"):printf("No");//结果: ①Yes ②No
//
逗号运算符:从左向右执⾏,var的值是最后1个表达式的值
<var>=(A,B,);
A,B,;//整体也是1个表达式,称为"逗号表达式"
//实例:
基础c语言代码
int i;
i=(printf("%d",33),printf("%c\n",99),3>2);//结果:33c
printf("%d",i);//结果:1
int j,k=2;
j=(k++,++k,k+2,k-3);
printf("%d\n",j);//结果:1
3.要求输⼊
(1)格式化输⼊:
[<n>=]scanf("<format>",&<var>):要求输⼊指定格式的数据,然后存⼊以指定地址为地址的变量中//如果输⼊的内容的格式不合法,var的值仍为原来的值
//参数说明:
format:指定格式;为str(即必须⽤" "扩起)
//⾮输出控制符的位置需要原样输⼊(包括\n等),输出控制符的位置需要输⼊该控制符代表的格式

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。