1、第三章 最简单的C程序设计顺序程序设计3.1 C语句概述C语句:以“;”作分隔符,用来完成一定操作任务.C语句分类v函数调用语句:v程序控制语句(9种):if()else switchfor()while()dowhile()continuebreakgotoreturn分支循环辅助控制如 printf(“Hello,world!n”);v复合语句:用 括起来的一组语句l z=x+y;t=z/100;printf(“%f”,t);l说明:u复合语句中最后一个语句后的分号不能忽略u复合语句可嵌套v表达式语句:由一个表达式构成一个语句 如由赋值表达式构成赋值语句 a=3;任何表达式都可加上分号成为
2、表达式语句 x+y;它是合法的,但没有意义v空语句:;3.2 程序的三种基本结构结构化程序设计v基本思想:任何程序都可以用三种基本结构表示,限制使用无条件转移语句(goto)v结构化程序:由三种基本结构反复嵌套构成的程序 v优点:结构清晰,易读,提高程序设计质量和效率三种基本结构v顺序结构ABAB流程图N-S图PAB真假PBA真假v选择结构kA1A2AiAnk=k2k=k1k=knk=ki.l二分支选择结构l多分支选择结构v循环结构l当型循环结构l直到型循环结构PA假真当P为真AAP真假A直到P为真注:A,B,A1.An可以是一个简单语句,也可以是一个基本结构3.3 赋值语句“=“是一个运算符
3、注意赋值表达式与赋值语句的区别3.4 输入输出在c中的实现输入输出是以计算机主机为主体而言输入输出是由函数来实现的 库函数:由厂商预先编写好,并编译成目标文件使用库函数时,用预编译命令“#include”将有关的“头文件”包含到用户源文件中。#include printf,scanf可不加#include命令格式:putchar(c)功能:向终端输出一个字符注意:c可以是字符型变量或整型变量3.5 字符数据的输入输出字符输出函数#include main()char a,b,c;a=B;b=O;c=Y;putchar(a);putchar(b);putchar(c);运行结果:BOY例3.1
4、注:也可以输出控制字符 如:putchar(n);也可以输出其他转义字符 如:putchar(101);putchar(x41);也可以输出普通字符 如:putchar(a);也可以是数字 如:putchar(97);格式:getchar()功能:从终端输入一个字符注意:()中没有参数字符输入函数#include main()char c;c=getchar();putchar(c);运行结果:a(输入a后回车)a (显示结果)例3.2 注:getchar()只能接收一个字符 若输入ab,会出现什么结果?getchar()作为表达式的一部分 如:putchar(getchar());使用get
5、char和 putchar函数不要忘了加上包含命令#include stdio.h格式:printf(格式控制,输出表列)功能:向终端输出若干个任意类型的数据注意:与putchar函数的区别 putchar只能输出一个字符 printf可以输出多个任意类型的数据 v格式控制:包含两种信息l格式说明:%格式字符 ,用于指定输出格式l普通字符或转义序列:原样输出v输出表列:要输出的数据(可以没有,也可以是表达 式,多个时以“,”分隔 printf(参数1,参数2,参数3参数n)3.6格式输入与输出格式输出函数格式字符vd格式符:输出十进制整数l%d ,按整型数据的实际长度输出l%md,m为指定的输
6、出字段的宽度。如果数据的位数小于m,则左端补空格,否则按实际位数输出例:printf(“%4d,%4d”,a,b);若a=123,b=12345,则输出结果为123,12345l%ld,输出长整型数据例:long a=135790;printf(“%ld”,a);也可以指定字段宽度,如%8ldvo格式符:输出八进制整数 将内存单元中的值按八进制输出,不带符号。int a=-1;printf(“%d,%o”,a,a);输出结果为:-1,177777vx格式符:输出十六进制整数 将内存单元中的值按十六进制输出,不带符号。int a=-1;printf(“%x,%o,%d”,a,a,a);输出结果为
7、:ffff,177777,-1vu格式符:输出无符号十进制整数 一个有符号的整数(int型)可用%u格式输出 一个unsigned型数据也可用%d,%o,%x格式输出 例3.3:无符号数据的输出main()unsigned int a=65535;int b=-2;printf(“a=%d,%o,%x,%u”,a,a,a,a);printf(“b=%d,%o,%x,%u”,b,b,b,b);运行结果:a=-1,177777,ffff,65535b=-2,177776,fffe,65534vc格式符:输出一个字符 char c=a;printf(“%c”,c);输出结果为:a 一个整数,值在02
8、55范围内,可用字符形式输出 一个字符数据也可以用整数形式输出 例3.4 字符数据的输出main()char c=a;int i=97;printf(“%c,%dn”,c,c);printf(“%c,%dn”,i,i);运行结果:a,97a,97也可以指定输出字符的宽度,如printf(“%3c”,c);vs格式符:输出一个字符串l%s ,按实际长度输出 printf(“%s”,“china”);l%ms,m为指定的输出宽度。如果串长小于m,则左端补空格,否则按实际长度输出l%-ms,如果串长小于m,则右端补空格l%m.ns,输出占m列,但只取串中左端n个字符。输出在m列的右侧,左补空格。l%
9、-m.ns,输出占m列,但只取串中左端n个字符。输出在m列的左侧,右补空格。例3.5 字符串的输出main()printf(“%3s,%7.2s,%.4s,%-5.3sn”,”china”,”china”,”china”,”china”);运行结果:china,_ch,chin,chi_vf格式符:以小数形式输出一个实数l%f ,整数部分全部输出,并输出6位小数 注意:不是所有的数字都是有效数字 例3.6 实数的输出main()float x,y;x=111111.111;y=222222.222;printf(“%fn”,x+y);运行结果:333333.328125双精度数也可以用%f输出
10、,有效位数为16位例3.7 双精度实数的输出main()double x,y;x=1111111111111.111111111;y=2222222222222.222222222;printf(“%fn”,x+y);运行结果:3333333333333.333010l%m.nf ,指定输出的数据共占m列,其中n位小数。如果数值 长度小于m,则左端补空格。l%-m.nf,指定输出的数据共占m列,其中n位小数。如果数值 长度小于m,则右端补空格。例3.8 输出实数时指定小数位数main()float f=123.456;printf(“%f%10f%10.2f%.2f%-10.2f n”,f,f
11、,f,f,f);运行结果:123.456001 123.456001 123.46 123.46 123.46ve格式符:以指数形式输出实数l%e ,不指定输出数据所占宽度和数字部分的小数位数。数值按规范化指数形式输出。如:printf(“%e”,123.456);输出结果为1.23456e+02l%m.ne和%-m.ne ,n指小数部分的小数位数 printf(“%e%10e%10.2e%.2e%-10.2e”,f,f,f,f,f);设f=123.456,输出结果为 1.23456e+02 1.23456e+02 1.2e+02 1.2e+02 1.2e+02vg格式符,用来输出实数,根据数
12、值的大小,自动选 f或e格式(选择输出宽度小的一种)printf(“%f%e%g”,f,f,f);设f=123.468;输出结果:123.468002 1.23468e+02 123.468 注:g格式不输出无意义的0格式字符说 明d,i以带符号的十进制形式输出整数o以八进制无符号形式输出整数x,X以十六进制无符号形式输出整数u以无符号十进制形式输出整数c以字符形式输出,只输出一个字符s输出字符串f以小数形式输出实数E,e以指数形式输出实数G,g选用%f或%e中宽度较短的一种格式字符说 明字母l 用于长整型数据,可加在d、o、u、x前m 数据最小宽度n 对实数,表示n位小数,字符串,表示字符个
13、数-输出的数据在域内向左靠说明:l除X,E,G外,其他格式符必须用小写。l格式控制字符串中可包含转义字符。l格式说明必须以%开头。l可以用连续两个%来输出%如:printf(“%f%”,1.0/3);输出0.333333%格式:scanf(格式控制,地址表列)注意:地址表列可以使变量的地址,或字符串的首地址Scanf函数(格式输入函数)例3.9 用scanf函数输入数据main()int a,b,c;scanf(“%d%d%d”,&a,&b,&c);printf(“%d,%d,%dn”,a,b,c);运行结果:3_4_5(输入)3,4,5(输出)%d%d%d表示按十进制整数形式输入数据输入数据
14、时,在两个数据之间可以用空格、回车、tab键间隔格式字符说 明d,i用来输入十进制整数o用来输入无符号八进制整数x,X用来输入无符号十六进制整数u用来输入无符号十进制整数c用来输入一个字符s用来输入字符串,送到字符数组中,以非空白字符开始,以第一个空白字符结束f用来输入实数,小数、指数都可E,e,G,g 与f作用相同,可互换字符说 明l 用于输入长整型数据以及double型数据h 用于输入短整型数据域宽 指定输入数据所占宽度,域宽为正整数*表示本输入项在读入后不赋给相应的变量说明:l对于unsigned型变量所需的数据,可用%u,%d,%o,%x输入l可以指定输入数据所占列数,系统自动截取所需
15、数据 scanf(“%3d%3d”,&a,&b);输入:123456 结果:a=123,b=456l也可用于字符型 scanf(“%3c”,&ch);输入abc;结果:ch=al如果%后有一个*附加说明符,表示跳过指定的列数 scanf(“%2d%*3d%2d”,&a,&b);输入:12 345 67 结果:a=12,b=67l输入数据时,不能规定精度 scanf(“%7.2f”,&a);输入1234567 不能通过这样的表示企图使a的值为12345.67v使用scanf函数时应注意的问题l格式控制后面应是变量地址,而不应是变量名 scanf(“%d,%d”,a,b);l如果在格式控制字符串中
16、除了格式说明以外,还有其他的字 符,则在输入数据时,应输入与这些字符相同的字符。scanf(“%d,%d”,&a,&b);输入时应用如下形式:3,5 不能用空格或其他字符 scanf(“%d_ _%d”,&a,&b);scanf(“%d:%d”,&a,&b);scanf(“a=%d,b=%d”,&a,&b);l在用%c格式输入字符时,空格字符和“转义字符”都作为有效 字符输入 scanf(“%c%c%c”,&c1,&c2,&c3);输入a_b_c会有什么结果?scanf(“%d%c%c”,&c1,&c2,&c3);输入123_b_c会有什么结果?scanf(“%d_%d”,&a,&b);sca
17、nf(“%c%c”,&c,&d);输入123_456 ab会有什么结果?scanf(“%2d_%3d”,&a,&b);scanf(“%c%c”,&c,&d);l在输入数据时,与以下情况时该数据认为结束。u遇空格、回车、Tab键时u指定的宽度结束时u遇非法输入Scanf(“%d%c%f”,&a,&b,&c);输入:1234a123o.26a=1234,b=a,c=123例3.11 从键盘输入一个大写字母,改用小写字母输出#includestdio.hmain()char c1,c2;c1=getchar();printf(“%c,%dn”,c1,c1);c2=c1+32;printf(“%c,%dn”,c2,c2);运行结果:A(输入)A,65a,97(输出)