C的输入输出:
首加#include,无I/O语句,I/O操作由函数实现
printf和scanf函数
printf函数
(1)printf函数的一般格式为:
printf(格式控制字符串,输出项1,输出项2,…)
括号中的格式控制字符串和输出项都是函数参数。
printf()函数的功能是将后面的参数按给定的格式输出。
(2).格式控制字符串中有格式说明,也有普通字符。
格式说明由”%”和格式字符组成,如%d,%f等。
它的作用是将输出的数据转换成指定的格式输出。
普通字符按原样输出,如:
#include"stdio.h"
voidmain()
{
inta=10,b=20;
printf("%d,%d",a,b);
}
格式符
(1)%d格式符
用来输出10进制整数,可以有长度修饰。
如:
#include"stdio.h"
voidmain()
{
inta=28,b=38;
longc=123456;
printf("%5d,%5d\n%ld\n",a,b,c);
printf("%3ld\n%7ld\n%d\n",c,c,c);
}
输出结果为:
28,38
123456
123456/n表示换行
123456%5d表示输出宽度为5,%ld表示输出为长整型
123456如果整数的位数多于指定宽度,则按实际位数输出
(2)%o和%x格式符
用来输出8进制、16进制整数。
8进制和16进制都是无符号整数,输出时不带符号。
如:
#include"stdio.h"
voidmain()
{
inta=1200;
printf("%d,%o,%x,%X,%6x\n",a,a,a,a,a);
}
输出结果为:
1200,2260,4b0,4B0,4b0
(3)%u格式符:
用来输出无符号10进制整数。
(4)%c格式符
用来输出一个字符。
如果一个整数,其值在0~255之间,也可以字符方式输出。
它们都可以指定格式宽度。
例如:
charch='a';
inta=65;
printf("%c,%d,%3c\n",ch,ch,ch);
printf("%c,%d,%3d\n",a,a,a);
输出结果为:
a,97,a
A,65,65
(5)%s格式符
用来输出字符串。
可以指定格式宽度,如果字符串长小于指定的宽度时,可以选择左对齐或右对齐。
另外,还可以选择输出字符中的前n个字符。
例如:
printf("%s","Hello\n");
printf("Hello\n");
printf("%3s,%-5.3s,%5.2s\n","Hello","Hello","Hello");
输出结果为:
Hello
Hello
Hello,Hel,He
注:
(1).如果输出的只有一个字符串,可以省略格式参数,因为格式参数本身可以是原样输出的普通字符串。
(2).“%-5.3s”中的负号表示左对齐,如果没有负号,则默认为右对齐。
5表示格式宽度,3表示截取字符串中3个字符。
(6)%f格式符
用来以小数方式输出。
可指定格式宽度,也可以指定小数位数,还可以规定左对齐或右对齐。
如:
floatx=123.456;
doubley=321.654321;
printf("%f,%-7.2f,%10.4f\n",x,x,x);
printf("%lf,%-7.2lf,%10.4lf\n",y,y,y);
输出结果为:
123.456001,123.46,123.4560
321.654321,321.65,321.6543
注:
以%f格式输出时,默认的小数位数是6位。
%-7.2f表示左对齐,总长度为7位,小数位数为2位。
注意:
1.除X格式外,其他格式必须用小写字母,例如%d不能写成%D
2.可以在printf函数中的“格式控制”字符串内使用“转义字符”,如/n。
3.如果想输出字符%,则应该在“格式控制”字符串中连续用两个%表示,如:
printf(“%f%%”,1.0/3);
scanf函数
1.scanf的一般形式为:
scanf(格式控制字符串,地址1,地址2,…)
2.格式控制字符串:
含义同printf函数,地址n是变量的地址。
%d用以输入整数,可以指定数据所占列数
%c用以输入字符,可以指定数据所占列数
%o,%x用以输入8进制和16进制整数
%f用以输入浮点数,不能规定精度
%s用以输入字符串,以非空字符开始,以空字符或回车结束。
注:
1.如果在%后有一个*号,表示从此跳过指定的列数。
例:
inti,j;
scanf(“%3d%3d”,&i,&j);//输入123456
scanf(“%2d_%*3d_%2d”,&i,&j);//输入12_345_67
scanf(“%d,%d”,&i,&j);//输入3,4
2.scanf函数中的“格式控制”后面应当是变量地址,而不是变量名。
3.如果在“格式控制”字符串中除了格式说明以外还有其他字符,则在输入数据时在对应位置应输入与这些字符相同的字符。
4.在使用%c格式输入字符时,空格字符和“转义字符”都作为有效字符输入
5.在输入数据时,遇以下情况时该数据认为结束
(1).遇空格,或按“回车”,或”Tab”键
(2).按指定的宽度结束,如%3d,只取3列
(3).遇非法输入。
字符输入与输出
字符输出函数putchar
格式:
putchar(c)
参数:
c为字符常量、变量或表达式
功能:
把字符c输出到显示器上
返值:
正常,为显示的代码值;出错,为EOF(-1)
字符输入函数getchar
格式:
getchar()
功能:
从键盘读一字符
返值:
正常,返回读取的代码值;出错,返回EOF(-1)
例:
从键盘输入大写字母,用小写字母输出
#include
usingnamespacestd;
intmain()
{charc1,c2;
inta1,a2;
c1=getchar();
c2=c1+32;
putchar(c1);putchar(c2);putchar('\n');
a1=c1;a2=c2;
cout<return0;
}关系运算和逻辑运算
关系运算符:
<<=>>=;==!
=
优先级相同(高)优先级相同(低)
1.优先级:
算术运算符>关系运算符>赋值运算符。
2.结合性:
从左到右。
关系表达式:
1.定义:
关系表达式是一种最简单的逻辑表达式,其结果类型为bool,值只能为“1”(true)或“0”(false)。
例如:
已设定a=3,b=2,c=1
d=a>b,则d=1;f=a>b>c,则f=0;
2.格式:
表达式关系运算符表达式
例如:
a>b,c<=a+b,x+y==3
逻辑运算符:
!
(非),&&(与),||(或)优先次序:
(从高到低)
1.优先级:
!
(非)>算术运算符>关系运算符>&&(与),||(或)>赋值运算符。
2.结合性:
从左到右。
逻辑表达式
1.格式:
表达式逻辑运算符表达式。
例如:
(a>b)&&(x>y)
2.结果类型:
bool,值只能为“1”(true)或“0”(false)。
如:
a=4则!
a=0;
a=4,b=5,则a&&b=1;(非0为真)
注:
(1).比较运算符
== 与 =
if(x==9)
cout<<“x is not o\n”;
if (x=9)
cout<<“x is noto\n”;
(2).不等于运算符
if(x!
=9)与if(x=!
9)
(3).逻辑非
例.若cx=15,ax=5
!
cx>ax-6
(!
cx)>(ax-6)
!
(cx>ax-6)
(4).10>=X>=5
若写成 5<=X<=10 从左到右(衡为1)
应写成X>=5&&X<=10
(5).逻辑运算符两侧的表达式不到可以是关系表达式或整数,也可以是任何数值类型的数据。
如’c’&&’d’
例题:
若x,y,z的初值均为1,则执行表达式w=++x||++y&&++z
后,x,y,z的值分别为________。
A)x=1,y=1,z=2B)x=2,y=2,z=2
C)x=2,y=1,z=2D)x=2,y=1,z=1(D)
解:
++x后x=2为真,“||”后面的部分不需要执行
选择程序设计
条件运算符与条件表达式
一般形式:
表达式1?
表达式2:
表达式3(表达式1必须是bool类型)
例:
x=a
a:
b
执行顺序:
1.先求解表达式1;
2.若表达式1的值为true,则求解表达式2,表达式2的值为最终结果
3.若表达式1的值为false,则求解表达式3,表达式3的值为最终结果
优先性:
算术运算符>关系运算符>条件运算符>赋值运算符
例max=(a>b)?
a:
b+1
结合性:
“自右向左”例a>b?
a:
c>d?
c:
d即a>b?
a:
(c>d?
c:
d)
注:
1.条件表达式与一般if的语句可以相互替换
2.表达式2、3的类型不同,条件表达式的最终类型为2和3中较高的类型。
if语句
1.形式:
1.if(表达式)语句;。
例:
if(x>y)cout<2.if(表达式)语句1;else语句2;
例:
if(x>y)cout<elsecout<3.多分支if语句:
if(表达式1)语句1;
elseif(表达式2)语句2;
elseif(表达式3)语句3;
…
else语句n;
2.if(条件表达式)语句;
或if(条件表达式)
{语句;}
3.if...else 语句
if(条件表达式) 语句1;
else 语句2;
例:
判断年份是否为闰年
#include
usingnamespacestd;
intmain()
{intyear;
cout<<"pleaseentertheyear"<<'\n';
cin>>year;
if(year%400==0)
cout<elseif(year%4==0&&year%100!
=0)
cout<elsecout<return0;
}
4.嵌套if语句
一般形式:
if()
if()语句1
else语句2
else
if()语句3
else语句4
注:
1.语句1-4能是复合语句,每层的if与else配对,或用{}来确定层次。
、
2.If语句的嵌套二义性:
因为if可以嵌套,所有在嵌套时有时会出歧义,例如上例中,else是与第一个if配对。
例:
(1)if(I%3==0)
if(I%7==0)
cout<<I< elsecout<<I<(2)if(I%3==0)
{ if(I%7==0)
cout<<I< }
elsecout<<I<3.if与else的配对关系:
else总是与他上面最近的、且为配对的if配对。
5.多分支if语句:
一般形式:
if(表达式1)语句1;
elseif(表达式2)语句2;
elseif(表达式3)语句3;
…
else语句n;
switch语句
一般形式:
switch(表达式)
{case常量表达式1:
语句1
case常量表达式2:
语句2
┆
case常量表达式n:
语句n
default:
语句n+1
}
注:
1.switch后表达式可以是整型、字符型、枚举型;
2.每个常量表达式的值不能相同,次序不影响执行结果。
3.在执行switch语句时,根据switch表达式的值找到与之匹配的case子句,并从此自居开始执行下去不再进行判断,因此,每个case分支最后应该加break语句,注,最后一个default语句可省略break语句。
如:
switch(表达式)
{
case常量表达式1:
语句组1;break;
case常量表达式2:
语句组2;break;
…
case常量表达式N:
语句组N;break;
default:
:
语句组N+1;(break;)k可省略
}
4.case语句起标号作用:
(1)标号不能重名
case‘A’:
cout<<…..;
case65:
cout<<…..;
(2)多个case可以共用一组执行语句
case‘A’:
case‘B’:
case‘C’:
cout<<“60up\n”;break;
但:
case‘A’,‘B’,‘C’:
cout<<“60up\n”;break;(错)
5.switch语句可以嵌套,可以与多分支if语句互换。
循环结构设计
循环控制与循环语句
While语句
1.形式:
while(表达式)语句
2.执行顺序:
先判断表达式的值,
为true时,再执行语句。
注:
循环体如果包含一个以上的语句需用花括号括起来,表示复合语句
do-while语句
1.一般形式:
do语句
While(表达式)
2.执行顺序:
先执行循环体语句,后判断条件。
表达式为true时,继续执行循环体
3.与while语句的比较:
While语句执行顺序
先判断表达式的值,为true时,再执行语句
4.while语句与do-while语句对比:
0
for语句
非0
1.一般形式:
for(表达式1;表达式2;表达式3)语句
for(循环变量赋初值;循环条件;循环变量增值)语句
2.执行过程:
(1).先求解表达式1;
(2).求解表达式2,如其值为1,则执行for内嵌语句,
然后执行第三步,如其值为0,则结束循环,执行
第(5)步;
(3).求解表达式3;
(4).转回第
(2)步骤继续执行;
(5).循环结束,执行for语句的下一个语句。
例:
输入一个整数,求出它的所有因子。
#include
usingnamespacestd;
voidmain()
{intn,i;
cout<<"Enterthenumber:
";
cin>>n;
cout<<"Number="<for(i=1;i<=n;i++)
{if(n%i==0)
cout<
}
}
3.灵活性
(1).表达式1可省
i=1;
for(;i<=100,i++)
{sum+=i;}
(2).表达式2可省
for(i=i;;i++)
{sum+=i;
if(i>100)break;
}
(3).表达式3可省
for(i=1;i<=10;)
{sum+=i++;}
(4).表达式1与表达式3可同时省
for(;i<=10;)
{sum+=i++;}
(5).三个表达式都省for(;;)
{sum+=i++;
if(i>100)break;}
(6).三个表达式可为任何表达式,表达式1和表达式3也可以是逗号表达式,既包含一个以上的简单表达式。
A.for(sum=0;i<=10;i++)
sum+=i;
B.for(sum=0,i=1;i<=10;i++)
sum+=i;
C.for(i=0,j=100,k=0;i<=j;i++,j--)
k+=i*j;
D.for(i=1;i<=10;sum+=i++);
E.for(i=1;sum+=i++,i<=100;);
注:
在逗号表达式内按自左至右的顺序求解,整个逗号表达式得知为其中最右边的表达式的值。
如:
for(i=1;i<=100;i++,i++)sum=sum+i;
相当于
for(i=1;i<=100;i=i+2)sum=sum+i;
三种循环的比较
循环控制变量的初值
While语句和do-while语句中一般在进入循环前赋值for语句一般由语句本身的表达式1赋值
循环控制变量的变化
While语句和do-while语句中在循环体中变化for语句在本身表达式3中变化
循环控制条件的检测
While语句和for语句,是在循环体前检测所以可能循环体一次都不会执行do-while语句是在循环体后检测所以循环体至少执行一次
1、可相互替代:
while<-->dowhile<-->for
2、简洁性和功能:
for最简洁、功能最强
3、循环的控制:
break、continue
break和continue语句
break语句—中断语句
1.功能:
使程序从循环体和switch语句内跳出,继续执行逻辑上的下一条语句。
不宜用在别处。
2.应用:
while,do-while,for语句(从最近的循环体内跳出)
switch语句(用于跳出switch语句,继续执行switch后的语句)
3.举例:
for(intcont,intt=0;t<100;t++)
{cont=1;
for(;;}
{cont<count++;
if(count==10)break;
}
}
4.实质:
符合条件直接结束整个循环
continue语句—继续语句
1.功能:
结束本次循环,接着判断是否执行下一次循环。
例:
for(intn=100;n<=200;n++)
{if(n%3==0)
contiue;
cout<}
2.实质:
符合条件结束本次循环,进行下一次循环。
3.break语句与continue语句的比较:
求100~200间不能被3整除的数
(正确)main()
{intn;
for(n=100;n<=200;n++)
{if(n%3==0)continue;
printf(“%d”,n);}
}
运行结果: