C语言程序设计(2)
程序的三种基本结构:
顺序结构、分支结构、循环结构
C语句(5种):1.表达式语句 2.函数调用语句 3.控制语句 4.复合语句 5.空语句
(一)顺序结构:
1.表达式语句:如x=y+z;赋值语句y+z;自增语句i++;
2.函数调用语句:函数名(实际参数表);
如printf("C
Program");调用库函数,输出字符串。
3.控制语句:控制程序的流程
(1) 条件判断语句 :
if语句,switch语句
(2) 循环执行语句 :do while语句,while语句,for语句
(3)
转向语句:break语句,goto语句,continue语句,return语句
4.复合语句
把多个语句用括号{}括起来组成的一个语句称复合语句。例如{
x=y+z;
a=b+c;
printf(“%d%d”,x,a);
}
复合语句内的各条语句都必须以分号“;”结尾,在括号“}”外不能加分号。
5.空语句:“;”“()”
什么也不执行的语句。如
while(getchar()!='n');
只要从键盘输入的字符不是回车则重新输入。
a。赋值语句
一般形式为:变量=表达式;
注:变量说明中,int a=b=c=5
是错的必须写为 int
a=5,b=5,c=5;而赋值语句允许连续赋值。
三、数据输出语句:
printf函数调用形式:printf(“格式控制字符串(%d/%c等)”,输出表列(a,b))
void
main() {
int a=88,b=89;
printf("%d
%dn",a,b); ---》88 89printf("%d,%dn",a,b); ---》88,89
printf("%c,%cn",a,b); ---》88对应的ASCII码字母,89对应的ASCII码字母
printf("a=%d,b=%d",a,b); ---》a=88,b=89
}
b.格式字符串:
d 以十进制形式输出带符号整数(正数不输出符号)
o 以八进制形式输出无符号整数(不输出前缀O)
x 以十六进制形式输出无符号整数(不输出前缀OX)
u 以十进制形式输出无符号整数
f 以小数形式输出单、双精度实数
e 以指数形式输出单、双精度实数
g 以%f%e中较短的输出宽度输出单、双精度实数
c 输出单个字符
s 输出字符串
c.标志字符:-、+、#、空格四种
- 左对齐,右空格
+ 输出符号(正号或负号)正为空格,负时冠以负号
# 对c,s,d,u类无影响;对o类,在输出时加前
缀o 对x类,在输出时加前缀0x;对e,g,f
类当结果有小数时才给出小数点
d.输出最小宽度:实际位数>定义宽度:按实际位数输出
实际位数
e.精度(*.十进制整数):*输出数字:表示小数位数;*输出字符:表示字符个数;实际位数>定义精度数:截去超过部分。
f.长度(h,l):
h表示按短整型量输出,l表示按长整型量输出。
void main(){
int a=15;
float b=138.3576278;
double c=35648256.3645687;
char d='p';
printf("a=%d,%5d,%o,%xn",a,a,a,a); ---》a=15,15 ,略
printf("b=%f,%lf,%5.4lf,%en",b,b,b,b);
printf("c=%lf,%f,%8.4lfn",c,c,c);
printf("d=%c,%8cn",d,d);
}
int i=8;
printf("%d%d%d%d%d%d",++i,--i,i--,i++,-i--);
运行结果为:78787
注:求值顺序从右到左,输出顺序从左到右
四、数据输入语句:
一、scanf函数一般形式:scanf(“格式控制字符串”,地址表列(&a,&b));
void main(){
int a,b,c;
printf("input
a,b,cn"); ----》input a,b,c
scanf("%d%d%d",&a,&b,&c); ----》键盘输入88 89 90 printf("a=%d,b=%d,c=%d",a,b,c); ----》a=88,b=89,c=90
}
1.格式字符串
格式字符串的一般形式为:
%[*][输入数据宽度][长度]类型
类型:表示输入数据的类型d 输入十进制整数
o 输入八进制整数
x 输入十六进制整数
u 输入无符号十进制整数
f或e 输入实型数(用小数形式或指数形式)
c 输入单个字符
s 输入字符串
2.“*”符:跳过该输入值。 如 scanf("%d %*d
%d",&a,&b);当输入为:1 2 3
时,把1赋予a,2被跳过,3赋予b。
3.宽度
如: scanf("%5d",&a);
若输入12345678 只把12345赋予变量a,其余部分被截去。
又如:
scanf("%4d%4d",&a,&b); 输入12345678
将把1234赋予a,而把5678赋予b。4.长度(l,h)l表示输入长整型数据(如%ld)
和双精度浮点数(如%lf)。h表示输入短整型数据。
使用scanf函数还必须注意以下几点:
a. scanf函数中无精度控制,如: scanf("%5.2f",&a);
是非法的。
b. scanf("%d",a);是非法的,应改为scnaf("%d",&a);才是合法的。
c.
在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔则可用空格,TAB或回车作间隔。(如对“%d”输入“12A”时,A即为非法数据)
d.在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。例如:
scanf("%c%c%c",&a,&b,&c);
输入为:d e f 把'd'->a,
'f'->b,'e'->c。只有当输入为:def时,才能把'd'->a,'e'->b,'f'->c。若加入空格作为间隔,如
scanf ("%c %c
%c",&a,&b,&c);则输入时各数据之间可加空格。void
main(){
char a,b;
printf("input character
a,bn"); ---》 input character a,b
scanf("%c%c",&a,&b); ---》若输入 MN ; 若输入M
N
printf("%c%cn",a,b); ---》则MN ; 则输出M
}void main(){
long a;
printf("input a long integern");scanf("%ld",&a); 输入类型应与输出类型一致printf("%ld",a);
}
运行结果为:
input a long integer
1234567890
1234567890
五、键盘输入输出函数
getchar、putchar函数:
getchar();只能输入一个字符 putchar();只能输出一个字符char
c;
c=getchar();
举例:#include
void main(){
char c;
printf("input a charactern");
c=getchar();
putchar(c);
}
(二)分支结构:
1.关系运算符和表达式:
< 小于
<= 小于或等于
> 大于
>= 大于或等于
== 等于
!= 不等于
优先级:算术运算符>
关系运算符的 > 赋值运算符。
例如:a+b>c-d,x>3/2,'a'+1
是关系表达式
也允许出现嵌套的情况,例如:a>(b>c),a!=(c==d)等。关系表达式的值是“真”和“假”,用“1”和“0”表示。void
main(){
char c='k';
int i=1,j=2,k=3;
float x=3e+5,y=0.85;
printf("%d,%dn",'a'+5=k+1); ----》略
printf("%d,%dn",1
printf("%d,%dn",i+j+k==-2*j,k==j==i+5); ----》0,0
}
2.逻辑运算符和表达式:
&& 与运算 || 或运算 !
非运算 (优先级:非运算! >
与运算&& > 或运算|| )
a>b &&
c>d <===> (a>b) && (c>d)
!b==c||d ((!b)==c)||(d
a+b>c && x+y ((a+b)>c) && ((x+y)
void main(){
char c='k';
int i=1,j=2,k=3;
float x=3e+5,y=0.85;
printf("%d,%dn",!x*!y,!!!x); ----->0,0
printf("%d,%dn",x||i&&j-3,i1,0
printf("%d,%dn",i==5&&c&&(j=8),x+y||i+j+k); ---->0,1
}
4.if语句
(1)若为真,则...
if(条件)
语句1;语句2void main(){
int a,b,max;
printf("n input two numbers: ");
scanf("%d%d",&a,&b);
max=a;
if (max
}
输入两个整数,输出其中的大数。
(2)if-else形式if(表达式)
语句1;
else 语句2;void main(){
int a, b;
printf("input two numbers: ");
scanf("%d%d",&a,&b);if(a>b)
printf("max=%dn",a);
else
printf("max=%dn",b);
}输入两个整数,输出其中的大数。
(3)if-else-if形式(多分支)if(表达式1)
语句1;
else if(表达式2)
语句2;
…
else if(表达式m)
语句m;else
语句n;如果所有的表达式均为假,则执行语句n
。
#include"stdio.h"
void main(){
char c;
printf("input a character: ");
c=getchar();if(c<32)
printf("This is a control charactern");
else if(c>='0'&&c<='9')
printf("This is a digitn");
else if(c>='A'&&c<='Z')
printf("This is a capital lettern");
else if(c>='a'&&c<='z')
printf("This is a small lettern");
else
printf("This is an other charactern");
}
本例要求判别键盘输入字符的类别。
if语句的嵌套
if(表达式)
if语句;
或者为
if(表达式)
if语句;
else
if语句;
else 总是与它前面最近的if配对
举例:比较两个数的大小关系。void main(){
int a,b;
printf("please input A,B: ");
scanf("%d%d",&a,&b);
if(a!=b)
if(a>b) printf("A>Bn");
else printf("A
else printf("A=Bn");
}
5。条件运算符和条件表达式
符号:?*:*,条件表达式的一般形式为:表达式1?
表达式2: 表达式3
例如条件语句:
if(a>b) max=a;
else
max=b; <========> max=(a>b)?a:b;
如a>b为真,则把a赋予max,否则把b
赋予max。
运算优先级:赋值符
< 条件运算符 < 关系运算符 < 算术运算符。
所以max=a>b?a:b <====>
max=(a>b)?a:b
条件表达式结合方向:从右向左
例如:a>b?a:c>d?c:d应理解为a>b?a:(c>d?c:d)
void main(){
int a,b,max;
printf("n input two numbers: ");
scanf("%d%d",&a,&b);
printf("max=%d",a>b?a:b);
}
用条件表达式对上例重新编程,输出两个数中的大数。