/42格式字符(type)一鉴表:字符说明d用来输入十进制整数o用来输入八进制整数x(X)用来输入以十六进制整数i 用来输入十、八(0开头)、十六(0x开头)进制整数u(U)用来输入无符号十进制整数c用来输入单个字符 s用来输入字符 串,将字符串送到一个字符数组中f(e)用来输入实娄,用小数形式或指数形式输入g(G)与f作用相同,e、f和g可以互换n 不输入数据,只将该语句已成功读入的字符数(到%n为止)送到对应的地址中% 输入百分号(%)/42附加格式说明符(修饰符 )l修饰符功能hm用于d,o,x前,指定输入为short型整数用于d, o,x前,指定输入为long型整数用于e,f前,指定输入为double型实数指定输入数据宽度,遇空格或不可转换字符则结束抑制 符,指定输入项读入后不赋给变量例scanf(“%4d%2d%2d”,&yy,&mm,&dd);输入1999 1015?则1999?yy,10?mm,15?dd例scanf(“%3d%4d%f”,&k, &f);输入12345678765.43?则123?k,8765.43?f例scanf(“ %2d%3d%2d”,&a,&b);输入1234567?则12?a,67?b例 scanf(“%3c%2c”,&c1,&c2);输入abcde?则‘a’?c1,‘d’ ?c2/42scanf(“i=%d",&i);printf(“i=%d",i);scanf("%d%d%d",& a,&b,&c);i=30↙输入i=30输出&:取地址运算符。表示将所输入后的数据放入对应地址的存储 单元中。i=30↙输入i=30输出123↙或1↙2↙3↙1,2,3↙ 错/42scanf("%d,%d,%d“,&a,&b,&c);1,2,3↙123↙错scanf ("%d,%d,%d“,&a,&b);1,2,3↙123↙错1,2,3↙a=1b= 3/42输入分隔符的指定一般以空格、TAB或回车键作为分隔符其它字符做分隔符:格式串中两个格式符间字符例scan f(“%d%o%x”,&a,&b,&c);printf(“a=%d,b=%d,c=%d\n”,a,b,c); 输入123123123?输出a=123,b=83,c=291例scanf(“%d:%d :%d”,&h,&m,&s);输入12:30:45?则12?h,30?m,45?s例 scanf(“%d,%d”,&a,&b)输入3,4?则3?a,4?b例sca nf(“a=%d,b=%d,c=%d”,&a,&b,&c);输入a=12,b=24,c=36?/42说明: 用“%c”格式符时,空格和转义字符作为有效字符输入如scanf(“%c%c%c”,&c1,&c2,&c3);若 输入abc?则a?c1,?c2,b?c3aaaaa输入数据时,遇以下情况认为该数据结束:遇 空格、TAB、或回车遇宽度结束遇非法输入如scanf(“%d%c%f”,&a,&b,&c);若输入1234a 123o.26?则1234?a,‘a’?b,123?c输入函数留下的“垃圾”:例intx; charch;scanf(“%d”,&x);ch=getchar();p rintf(“x=%d,ch=%d\n”,x,ch);执行:123?输出:x=123,ch=10例intx; charch;scanf(“%d”,&x);scanf(“%c”,&ch);pri ntf(“x=%d,ch=%d\n”,x,ch);执行:123?输出:x=123,ch=10解决方法:(1)用getcha r()清除(2)用函数fflush(stdin)清除全部剩余内容(3)用格式串中空格或“%c”来“吃掉”例in tx;charch;scanf(“%d”,&x);scanf(“%c”,&ch) ;或scanf(“%c%c”,&ch);/42例3-7:#include"stdio.h"v oidmain(){inta,b;printf("inputa,b:");scanf("%d%d",&a ,&b);printf("a=%d,b=%d",a,b);}inputa,b:7?8↙a=7,b=8 /42(4)注意事项:scanf()的格式控制字符串中没有转义字符。如scanf(“%d\n”,&a);是错误的。sc anf()的格式控制字符串中的普通字符不是用来显示的,而是输入时要求照普通字符输入的。scanf()中参数的第二部分一定是地址 列表,不能是表达式。/423.3顺序程序设计举例例3.1输入圆的半径,输出圆的周长和面积。分析:(1)定义实型变 量r,l,s用于存放半径、周长、面积;(2)调用输入函数,输入r;(3)分别利用周长公式和面积公式求出l,s; (4)调用输出函数输出l,s。程序:#include〈stdio.h〉voidmain(){floatr,l ,s;scanf(″%f″,&r);l=23.14159r;s=3.14159 rr;printf(″\nl=%8.4f″,l);printf(″\n s=%8.4f″,s);}#include〈stdio.h〉voidmain(){floatr;scanf(″ %f″,&r);printf(″\\nl=%8.4f″,23.14159r);printf(″\\n s=%8.4f″,3.14159rr);}例3.2输入三个字符,将它们反向输出。分析:(1)定义 三个字符变量ch1,ch2,ch3;(2)调用字符输入函数,输入三个字符依次存于ch1,ch2,ch3;(3)按 ch3,ch2,ch1顺序输出三个字符。程序:#include〈stdio.h〉voidmain(){char ch1,ch2,ch3;ch1=getchar();ch2=getchar();ch3=ge tchar();putchar(ch3);putchar(ch2);putchar(ch1) ;}例3.3用格式输入函数输入三个字符,并用输出函数反向输出三个字符和它们的ASCII码。程序:#include〈 stdio.h〉voidmain(){charch1,ch2,ch3;scanf(″%c%c%c″,&ch1, &ch2,&ch3);pirntf(″%c,%d\\n″,ch3,ch3);pirntf(″% c,%d\\n″,ch2,ch2);pirntf(″%c,%d\\n″,ch1,ch1);}例3.4输入任意三个整数, 求它们的平均值。程序:voidmain(){intnum1,num2,num3;floataverage ;printf(″Pleaseinputthreenumbers:″);scanf(″%d,%d,%d ″,&num1,&num2,&num3);average=(num1+num2+num3)/3.0;pri ntf(″average=%7.2f\\n″,average);}思考:能否将average=(num1 +num2+num3)/3.0改为average=(num1+num2+num3)/3? 注意数学表达式到C语言表达式的转换/42例3-5:输入两个整数a、b,将它们交换,例如a为3,b为5,交换后a为5,b为3 。#include"stdio.h"voidmain(){inta,b,t;/t就相当于空杯子 /scanf("%d,%d",&a,&b);printf("a=%d,b=%d\n",a,b); /观察原来的值/t=a;a=b;b=t;printf("a=%d,b=%d\n ",a,b);/观察交换后的值/}用于交换变量a、b的方法通常称 为两两交换法。/42例3.6求方程ax2+bx+c=0的实数根。程序:#include″math.h″void main(){floata,b,c,disc,x1,x2;printf(″inputa,b,c:″);s canf(″%f,%f,%f″,&a,&b,&c);disc=bb-4ac;x1=(-b+sqrt(disc)) /(2a);x2=(-b-sqrt(disc))/(2a);printf(″\nx1=%6.2f\nx2=%6.2 f\n″,x1,x2);}思考:对于实际问题中,bb-4ac<0情况,怎么办?例3.7从键盘输入一个小写字母,用 大写形式输出该字母。程序:#include″stdio.h″voidmain(){chara;printf( ″inputalowercaseletter:″);a=getchar();a=a-32; printf(″%c\n″,a);}思考:如何使程序可以处理输入的任何字符?即判断输入的是小写 字母,才转换成大写;如果输入的是其他字符,则直接输出。/423.1C语言的基本语句3.2数据输入与输出3.3 顺序程序设计举例第3章顺序结构/42C是模块化程序设计语言C程序结构3.1C语言的基本语句源程序文件1预编译命 令说明部分执行部分函数1函数n源程序文件i源程序文件nC程序…/42顺序结构即按照语句书写顺序执行的程序结构 。AB顺序结构顺序结构顺序结构是程序设计语言最基本的结构,其包含的语句是按照书写的顺序执行的,且每条语句都将被执行。 C语言程序的三种基本结构C语言提供三种结构化语句来控制程序的执行流程:/42选择结构选择结构又称为分支结构,是指有条件地 选择要执行的程序段。选择结构示意图…k=k2k≠k1…kkk=kkk=k1kA1A2BAk图3-4 多分支选择结构真(非0)假(0)AB条件图3-3双分支选择结构/42循环结构当条件成立(为“真”或非0 )时,反复执行程序段A,否则不执行程序段A。1.当型循环结构假(0)真(非0)A条件/42先执行程序段A,再判断 条件是否为“真”(非0);若为“假”(0)再执行A,如此反复,直到条件为“真”(非0),为止。2.直到型循环结构假(0)真 (1)A条件/42C语言的语句概述:C程序对数据的处理是通过“语句”的执行来实现的。一条语句完成一项操作(或功能)。 一个为实现特定目的的程序应包含若干条语句。/42C语句:以“;”作分隔符,编译后产生机器指令.C语句分类:4、空语句: ;执行该语句不做任何操作1、程序控制语句(9种):if()~else~switchfor()~whil e()~do~while()continuebreakgotoreturn分支循环辅助控制如tota l=total+limit;a=3;func();printf(“H ello,world!\n”);3、表达式语句:表达式加分号构成。2、函数调用语句:由一次函数调用加一个分号构成5、复合语句 :用{…}括起来的一组语句一般形式:{[数据说明部分;]执行语句部分; }说明:“}”后不加分号语法上和单一语句相同复合语句可嵌套9种控制语句:if()~el se~for()~while()~do~while()continuebreakswitchgotoretu rn功能:计算表达式的值或改变变量的值。分类:运算符表达式语句赋值语句例:5;i++;语句的功能是,变量i的值增 1。a=3,b=a+2,c=a+1;/由三个赋值语句组成的逗号表达式语句。/a+b; /算术表达式语句,计算a与 b之和。/赋值语句由赋值表达式加上一个分号构成如:a=15;b=a+5;c=d=e=a;说明: 赋值号左面必须为变量 赋值号右面可以是任何合法的表达式赋值号=为运算符注意:不加分号为赋值表达式Y=sin( 1.12);Y1=sin(x);Y2=3sin(x+1.12)+sqr(x);Y3=sin( sqrt(x+1.12));#include#includemain(){int a=2,b=4;floatx,y;x=a/2+sqrt(b); /x=3.0/a++;/a=3/ y=xa;/y=9.0/printf(“x=%6.2f, y=%6.2f”,x,y);}注意表达式类型转换注意赋值类型输出结果:x=3.00,y=9.00格式 :函数名(参数列表);分类:标准库函数用户定义函数标准库函数调用原则:(1)要在程序中包含相应的头文件(2)调 用的一般形式:函数名(参数列表);/42例3-1:#include〈stdio.h〉main(){intx=1 ,y=2;{intx=2;{intx=3;printf(″x=%d,y=%d\n″,x, y);}printf(″x=%d,y=%d\n″,x,y);}printf(″x=%d,y= %d\n″,x,y);}程序运行结果为:x=3,y=2x=2,y=2x=1,y=2/423.2数据的输入 与输出C语言本身不提供输入/输出语句。C语言的输入/输出功能由C语言的标准I/O库函数提供。#includeh>C语言的输入/输出库函数名称不是保留字(或称关键字)。如printf,scanf。/42#includeo.h>main(){intc;chara;c=65;a=''B'';putchar( c);putchar(''\n'');putchar(a);}运行结果:AB例3 .2.1字符的输入与输出字符输出函数格式:putchar(c)参数:c为字符常量、变量或表达式功能:把字符c输出 到显示器上返值:正常,为显示的代码值;出错,为EOF(-1)/42例3-2:#include 程序运行结果为:ABBCmain(){inta=65;charb=''B'';putchar(a);p utchar(65+1);putchar(b);putchar(''B''+1);}包含函数putchar的头 文件/42格式:getchar()功能:从键盘读一字符返值:正常,返回读取的代码值;出错,返回EOF(-1)字符输入 函数例#includemain(){intc;printf("Enterach aracter:");c=getchar();printf("%c--->hex%x\n",c,c);}运行结 果:Enteracharacter:A?A--->hex41/42例3-3:#include /说明函数getchar的原型包含在哪个文件中/voidmain(){inta;charb;a=getch ar();b=getchar();printf("a=%c\ta=%d\tb=%c\tb=%d\n",a,a,b,b) ;}从键盘输入字符,该字符的ASCII编码值赋给a程序运行情况如下:13↙a=1 a=49 b=3 b=51 /42注意:调用函数getchar时,程序执行被中断,等待用户从键盘输入数据。当用户键入字符并敲回车键以后,程序继续运行 。若用户输入字符后未按回车键,则键入的内容一直保留在键盘缓冲区中,只有用户键入回车键后,字符输入函数getchar才进行处理。 函数getchar将回车键作为一个字符读入。如果程序中有两个以上函数getchar时,应该一次性输入所需字符,最后再按回车键,如上 例所示。无论输入的是英文字母或标点符号还是数字,都是作为字符输入。/423.2.2格式输出函数格式:printf(“ 格式控制串”,输出表)功能:按指定格式向显示器输出数据返值:正常,返回输出字节数;出错,返回EOF(-1)输出表:要输出的数 据(可以没有,多个时以“,”分隔)格式控制串:包含两种信息格式说明:%[修饰符]格式字符,用于指定输出格式普通字符或转义序列 :原样输出/42例3-4#include"stdio.h"voidmain(){inta=97,b=98; printf("1:%d%d\n",a,b);/普通字符,原样输出/printf("2:%d,%d\n", a,b);/a,b以十进制整数形式输出/printf("3:%c,%c\n",a,b);/a,b以字 符形式输出/printf("4:a=%d,b=%d",a,b);}程序运行结果为:1:97982:97,983: a,b4:a=97,b=98inti=97;charch=’a’;printf(“i=%d,%c\n”, i,i);两个输出项都是变量i,但以不同的格式输出,一个是输出的整型数,一个输出的是字符a.其格式是由,%d 与%c控制的.i=97,a输出结果/42格式说明的形式:%[+/-][m][.n][|h|L][type] .n对实数,指定小数点后位数(四舍五入)对字符串,指定实际输出位数修饰符功能 m输出数据域宽,数据长度+)+输出数值时指定左面不使用的空位置自动填00在八进制和十六进制数前显示前导0,0x#在d,o,x,u前,指定输出精 度为long型在e,f,g前,指定输出精度为double型l/42d,ix,Xoucse,Efg%% 格式字符:十六进制无符号整数不带符号十进制整数十进制整数指数形式浮点小数单一字符字符串八进制无符号整数小数形式浮点 小数e和f中较短一种百分号本身inta=567;printf(“%d”,a);inta=255;printf(“% x”,a);inta=65;printf(“%o”,a);inta=567;printf(“%u”,a);chara= 65;printf(“%c”,a);printf(“%s”,“ABC”);floata=567.789;printf(“%e ”,a);floata=567.789;printf(“%f”,a);floata=567.789;printf(“%g” ,a);printf(“%%”);567ff101567AABC5.677890e+02567.7890005 67.789%说明 格式字符要用小写格式字符与输出项个数应相同,按先后顺序一一对应输出转换:格式字符与输出项类型不一致, 自动按指定格式输出例main(){unsignedintu=6 5535;printf(”u=%d\n",u); }输出结果:u=-1例inta=3,b=4;p rintf(“%d%d\n”,a,b);printf(“a=%d,b=%d\n”,a,b );例inta=3,b=4;printf(“%d%d\n”,a,b);pr intf(“a=%d,b=%d\n”,a,b);输出结果:34a=3,b =4111111111111111165535/42例如:printf( "%d\n",100);100printf("%5d\n",100);100100printf("%8d\n %8d″,100,100100);10010010010000100100100 10000/42例如:printf("%o\n",-1);177777printf("%x,%X \n",-1);177777ffff,FFFFprintf("%u,%d",-1);177 777ffff,FFFF65535,-1/42printf("%4c,%c\n", ''A'',''A'');printf("%-8s,%8.2s","Name","Name");A,A 例如:A,AName----,------Na/42printf(" %f\n%10.3f\n",100.7654321,100.7654321);printf("%e\n%10.9e",10 0.7654321,100.7654321);例如:100.765432100.7651 00.765432100.7651.00765e+21.0076 5432e+2/42例inta=1234;floatf=123.456;ch arch=‘a’;printf(“%8d,%2d\n”,a,a);printf(“%f,%8f,%8 .1f,%.2f,%.2e\n”,f,f,f,f,f);printf(“%3c\n”,ch);运行 1234,1234结果:123.456000,123.456000,123.5,123.46,1.23e+02 a例staticchara[]=“Hello,world!”printf(“% s\n%15s\n%10.5s\n%2.5s\n%.3s\n”,a,a,a,a,a);运行结果:Hello,world! Hello,world!Hello HelloHel例m.n/42例i nta=1234;floatf=123.456;staticcharc[]=“Hello,wo rld!”;printf(“%8d,%-8d\n”,a,a);printf(“%10.2f,%-10. 1f\n”,f,f);printf(“%10.5s,%-10.3s\n”,c,c);运行结果:1234,1 234123.46,123.5 Hello,Hel例/42例inta=1234;floatf= 123.456;printf(“%08d\n”,a);printf(“%010.2f\n ”,f);printf(“%0+8d\n”,a);printf(“0+10.2f\n”,f );例0、+例inta=123;printf(“%o,%#o,%X,%#X\n”,a,a,a, a);例#例longa=65536;printf(“%d,%8ld\ n”,a,a);例l00000000000000010000000000000000//00001234//0000123.46//000+1234//000+123.56//173,0173,7B,0X7B//0,65536/42#include"stdio.h"voidmain(){inti=8;printf("%d\t%d\t%d\n",++i,--i,i--);}例3-5:计算方向输出结果为:768/42#include"stdio.h"voidmain(){inta=3,b=4;printf("%d\n",(a=b,b,a+3));/输出序列是一个逗号表达式/printf("%d\n",a=b,b,a+3);/输出第一个参数变量a的值/}例3-6:输出结果为:74/423.2.3格式输入函数格式:scanf(“格式控制串”,地址表)功能:按指定格式从键盘读入数据,存入地址表指定的存储单元中,并按回车键结束返值:正常,返回输入数据个数地址表:变量的地址,常用取地址运算符&格式字符:d,i,o,x,u,c,s,f,e例scanf(“%d”,&a);输入:10?则a=10例scanf(“%x”,&a);输入:11?则a=17/42格式控制字符:(1)组成:普通字符、格式说明。普通字符:格式说明:键盘输入时,要按原样输入,一般起分隔或提示作用。但分隔或提示作用若由用户输入,就失去了本来的意义,一般采用printf来实现。%[][m][h|l]type |
|