1 / 38

第四章 最简单的 C 程序设计 —— 顺序程序设计

第四章 最简单的 C 程序设计 —— 顺序程序设计 . 主要内容:. 4 .1 C 语句概述 4 .2 赋值语句 4 .3 数据输入输出的概念及在 C 语言中的实现 4 .4 字符数据的输入输出 4 .5 格式输入输出 4 .6 顺序结构程序设计举例. 4.1 C 语句概述. 与其它高级语言一样, C语言也是利用函数体中的可执行语句,向计算机系统发出操作命令 。按照语句功能或构成的不同,可将C语言的语句分为五类。 ( 1 )控制语句 控制语句完成一定的控制功能。C语言只有9条控制语句,又可细分为三种: 选择结构控制语句

Download Presentation

第四章 最简单的 C 程序设计 —— 顺序程序设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第四章 最简单的C程序设计——顺序程序设计

  2. 主要内容: 4.1 C语句概述 4.2 赋值语句 4.3 数据输入输出的概念及在C语言中的实现 4.4 字符数据的输入输出 4.5 格式输入输出 4.6 顺序结构程序设计举例

  3. 4.1 C语句概述 与其它高级语言一样,C语言也是利用函数体中的可执行语句,向计算机系统发出操作命令。按照语句功能或构成的不同,可将C语言的语句分为五类。 (1)控制语句 控制语句完成一定的控制功能。C语言只有9条控制语句,又可细分为三种: 选择结构控制语句 if()~else~, switch()~ 循环结构控制语句 do~while(), for()~, while()~, break, continue 其它控制语句 goto, return

  4. (2) 函数调用语句 函数调用语句由一次函数调用加一个分号(语句结束标志)构成。 例如:printf("This is a C Program."); (3) 表达式语句 表达式语句由表达式后加一个分号构成。最典型的表达式语句是,在赋值表达式后加一个分号构成的赋值语句。 例如:“num=5 ”是一个赋值表达式,而“num=5;”却是一个赋值语句。 (4) 空语句 空语句仅由一个分号构成。显然,空语句什么操作也不执行。 例如,下面就是一个空语句: ;

  5. (5) 复合语句 复合语句是由大括号括起来的一组(也可以是1条)语句构成。例如: main() { …… {……} /*复合语句。注意:右括号后不需要分号。*/ …… } 复合语句的性质: (1)在语法上和单一语句相同,即单一语句可以出现的地方,也可以使用复合语句。 (2)复合语句可以嵌套,即复合语句中也可出现复合语句。 (3)复合语句中最后一个语句中最后的分号不能忽略不写,但是右括号后不需要分号。

  6. 4.2 赋值语句 赋值语句由赋值表达式加上一个分号构成。 赋值语句和赋值表达式是不同的概念。赋值表达式可以包括在其他表达式中。 例如:if ((a=b)>0) t=a ; 作用是:先将b的值赋给a,然后判断a是否大于0;若a大于0,则执行语句 “t=a ;”。 if 后的(a=b)不是赋值语句,而是赋值表达式。if 后不能是赋值语句,写成“if ((a=b;)>0) t=a ;”就错了。

  7. 4.3数据输入输出的概念及在C语言中的实现 1. 所谓的输入输出是以计算机主机为主体而言的。从计算机向外部输出设备(如显示器、打印机、磁盘等)输出数据称为“输出”,从输入设备(如键盘、磁盘、光盘、扫描仪等)向计算机输入数据称为“输入”。 2. C语言不提供输入输出语句,输入输出操作由函数来实现。C标准库函数中提供一些输入输出函数,例如:printf和scanf函数。不要误认为它们是c语言提供的“输入输出语句”。c提供的函数以库的形式存放在系统中,它们不是c语言文本中的组成部分。

  8. 3. 使用C库函数时,要用预编译命令“#include”将有关的“头文件”包括到用户源文件中。在调用标准输入输出库函数时,文件开头应有以下预编译命令: # include <stdio.h> 或 # include “stdio.h” 系统允许使用printf和scanf函数时,可不加# include命令。

  9. 4.4 字符数据的输入输出 4.4.1 putchar函数(字符输出函数) putchar函数的作用是向终端输出一个字符。 例putchar(c); 其中c可以是字符型变量或整型变量,也可以是一个字符型常量或 一个转义字符。 使用putchar函数,务必牢记:在程序(或文件)的开头加上编译预处理命令(也称包含命令),即: #include "stdio.h"表示要使用的函数,包含在标准输入输出(stdio)头文件(.h)中。

  10. [例4.1] #include "stdio.h" /*编译预处理命令:文件包含*/ main() {char ch1='N', ch2='E', ch3='W'; int c1=65,c2,c3; c2=c1+1;c3=c2+1; putchar(ch1); putchar(ch2); putchar(ch3); putchar('\n'); /*输出:NEW,并换行*/ putchar(ch1); putchar('E'); putchar(ch3); putchar('\n'); /*输出:NEW,并换行*/ putchar (c1); putchar(c2); putchar(c3); putchar(‘!'); }

  11. 4.4.2 getchar函数(字符输入函数) getchar函数的作用是从终端输入一个字符。 getchar函数没有参数,其形式为:getchar() 程序中要使用getchar函数,必须在程序(或文件)的开头加上编译预处理命令: #include "stdio.h”。 注意:getchar()只能接收一个字符。 getchar函数得到的字符可以赋给一个字符变量或整型变量,也可以不赋给任何变量,而作为表达式的一部分。

  12. [例4.2] #include "stdio.h" /*文件包含*/ main() {char ch;int c; printf("Please input two character: "); ch=getchar(); /*输入1个字符并赋给ch */ putchar(c=getchar() ); /*输入1个字符并赋给c */ putchar('\t'); putchar(ch); putchar('\t'); putchar(c); putchar('\n'); } 程序运行情况如下: Please input two characters: ab↙ b a b

  13. 4.5 格式输入与输出 4.5.1 printf函数(格式输出函数) printf函数的作用:向计算机系统默认的输出设备输出若干个任意类型的数据。 一、printf函数的一般格式为: printf(格式控制 ,输出表列) 例如:printf( “i= %d,c=%c\n ”,i,c) 1.“格式控制”是由双引号括起来的字符串。它包含两种信息: (1)格式说明: 由%和格式字符组成,作用是将输出的数据转换为指定的格式输出。 (2)普通字符:即需要原样输出的字符 。

  14. 2.“输出表列”是需要输出的一些数据,可以是表达式,是可选的。2.“输出表列”是需要输出的一些数据,可以是表达式,是可选的。 如果要输出的数据不止1个,相邻2个之间用逗号分开。下面的printf()函数都是合法的: printf("I am a student.\n"); printf("%d",3+2); printf("a=%f b=%5d\n", a, a+3); 必须强调:“格式控制”中的格式指示符,必须与“输出表列”中输出项的数据类型一致,否则会引起输出错误。 printf函数的一般形式为: printf(参数1,参数2,参数3,……, 参数n) printf函数的功能是将参数2 ~ 参数n按参数1的格式输出。

  15. 二、格式字符 输出不同类型的数据,要使用不同的格式字符。常用的有以下几种: 1.d格式符:用来输出十进制整数。有以下几种用法: ①%d:按整型数据的实际长度输出。 ②%md:m为指定的输出宽度,如%4d,m=4 。如果数据的位数小于m,则左端补空格,否则按数据的实际位数输出。  ③%ld:输出长整型数据。对长整型数据也可以指定宽度。如: printf(“%8ld”,a);

  16. [例4.3] 格式字符d的使用 main() {int n1=123; long n2=123456; printf("n1=%d,n1=%5d,n1=%-5d,n1=%2d\n", n1,n1,n1,n1); /*用不同格式,输出int型数据n1的值*/ printf("n2=%ld,n2=%8ld,n2=%5ld\n", n2,n2,n2); /*用不同格式,输出long型数据n2的值*/ printf("n1=%ld\n",n1); } 程序运行结果如下: n1=123,n1=□□123,n1=123□□,n1=123 n2=123456,n2=□□123456,n2=123456 n1=16908411 最后输出的num1=16908411是错误的,原因是格式不相符。

  17. 2.o格式符:以八进制形式输出整数。 对于整数,可用八进制(%o)输出。由于是将内存单元的各位的值(0或1)按八进制形式输出,因此输出的值不带符号,即将符号位也一起作为八进制数的一部分输出。可以指定宽度,如printf(“%8o”,a)。 对于长整数(long型)可以用%lo形式输出。 3.x格式符:以十六进制形式输出整数。 对于整数,可用十六进制(%x)输出。同样不会出现负的十六进制数。可以指定宽度,如printf(“%8x”,a)。 对于长整数(long型)可以用%lx形式输出。 4.u格式符:以十进制形式输出unsigned型整数。 一个有符号整数也可以用%u格式输出, unsigned型也可以用%d格式输出。按相互赋值的规则(3.9节)处理。 unsigned型也可以用%o或%x格式输出。

  18. 5.c格式符:输出一个字符。 0到255范围内的整数,可用字符形式输出,输出前系统按ASCII码表转换;反之,一个字符数据也可以用整数形式输出。 [例4.4] 字符的输出。 main() {char c='A';int i=65; printf("c=%c,%5c,%d\n",c,c,c); printf("i=%d,%c",i,i); } 程序运行结果如下: c=A,□□□□A,65 i=65,A

  19. 6.S格式符:输出一个字符串。用法有下面几种:6.S格式符:输出一个字符串。用法有下面几种: ①%s:如printf(“%s”, “ CHINA”); 输出:CHINA ②%ms:如%6s,输出的字符串占m列,若字符串本身长度大于m,则将字符串全部输出,若串长度小于m,则左补空格。 ③ %-ms:如%-6s,与②的区别是右补空格。 ④ %m.ns:如%6.4s,输出占m列,但只取字符串左端的n个字符输出。这n个字符位于m列的右侧,左补空格。 ⑤ %-m.ns:如%-6.4s,与④的区别是右补空格。 ④和⑤是用于从一个长字符串中取左端的若干个字符。若n>m,则m自动取n值,以保证n个字符正常输出。

  20. [例4.5] 字符串的输出。 main() {printf("%s,%5s,%-10s,","internet","internet","internet"); printf("%10.5s,\n%-10.5s,%4.5s\n", "internet","internet","internet"); } 程序运行结果如下: internet,internet,internet□□,□□□□□inter, inter□□□□□,inter 注意:系统输出字符和字符串时,不输出单引号和双引号。

  21. 7.f格式符:以小数形式,输出单精度和双精度实数。7.f格式符:以小数形式,输出单精度和双精度实数。 有下面几种用法: ①%f :由系统自动指定输出宽度,整数部分全部如数输出,小数部分输出6位。并非全部数字都是有效数字,单精度实数的有效位数一般是7位。 [例4.6] 输出单精度实数的有效位数。 main( ) {float d1,d2; d1=111111.111; d2=222222.222; printf("%f\n", d1+d2); } 结果为:333333.328125

  22. 双精度实数也可以用%f格式输出,它的有效位数一般是16位,给出6位小数。双精度实数也可以用%f格式输出,它的有效位数一般是16位,给出6位小数。 [例4.7]输出双精度实数的有效位数。 main( ) {double d1,d2; d1=1111111111111.111111111; d2=2222222222222.222222222; printf("d1+d2=%f\n",d1+d2); } 程序运行结果如下: d1+d2=3333333333333.333010

  23. ② %m.nf : 输出的数据共占m列,其中n位小数。若数值长度小于m,则左补空格。 ③ %-m.nf : 与②的区别是输出的数值向左端靠,右端补空格。 [例3.8] 输出实数时指定小数位数。 main() {float f=123.456 ; printf(“%f--%10f --%10.2f --%.2f--%-10.2f\n”,f,f,f,f,f);} 结果如下:(用- 表示空格) 123.456001--123.456001------123.46--123.46--123.46----

  24. 8. e格式符, 以指数形式输出实数。 • 用法有下面几种: • (1) %e:不指定数据所占宽度和小数位数,由系统自动给出,小数部分给出6位,指数部分占5位。数值按规范化指数形式输出(即小数点前必须有而且只有1位非零数字)。 • 例如printf(“%e”,123.456)的输出是: 1.234560e+002 ,占13列。 • (2) %m.ne或%-m.ne :数据占宽度m列,小数占宽度n列, %-m.ne 与%m.ne的区别是数据向左端靠。 • float f =123.456 ; • printf(“%e--%10e--%10.2e--%.2e--%-10.2e”,f,f,f,f,f ); • 输出如下: • 1.234560e+002-- 1.234560e+002---1.23e+002 -- 1.23e+002 --1.23e+002 -

  25. 9. g格式符, 用来输出实数。 根据输出数值的大小,自动选f格式或e格式(选择输出时占宽度较小的一种),且不输出无意义的零。 如:f=123.468; printf(“%f--%e--%g”,f,f,f); 输出为: 123.468000--1.234680e+002--123.468---

  26. Printf函数的使用说明 ①格式字符x、e、g可以用小写字母,也可以用大写字母。除了x、e、g格式字符外,其它格式字符必须用小写字母。 ②可以在printf函数的“格式控制”字符串中包含“转义字符”。如“\n”、 “\t”、 “\377”、 “\b”、 “\x41”等。 printf可以输出常量、变量和表达式的值。但格式控制中的格式说明符,必须按从左到右的顺序,与输出项表中的每个数据一一对应,否则出错。 ③格式字符紧跟在“%”后面就作为格式字符,否则将作为普通字符使用(原样输出)。 例如:“printf (“c=%c,f=%f\n”, c, f);”中的第一个c和f,都是普通字符。 ④如果想输出“%”,则要在“格式控制”字符串中用两个连续的%表示,如:printf(“%f%%”,1.0/3);输出为: 0.333333%

  27. 若a1、a2、a3、a4均为char类型变量,则执行以下程序段后的输出结果为: a1=‘1’;a2=‘2’; a3=‘3’;a4=‘4’; printf(“%1c\n”,a1); printf(“%2c\n”,a2); printf(“%3c\n”,a3); printf(“%4c\n”,a4); (A)1 (B)1 (C)1 (D)输出格式的描述符不正确 2 2 02 3 3 003 4 4 0004

  28. 若x为int类型变量,则执行以下程序段后的输出结果为: x=0xDEF; printf(“%4d\n”,x); printf(“%40\n”,x); printf(“%4x\n”,x); (A)3567 (B)3567 (C)3567 (D)3567 6757 6757 06757 6757 def xdef 0xdef 0def

  29. 4.5.2 scanf函数(格式化输入) scanf函数是用来从输入设备向计算机主机输入数据的。 1.scanf函数的一般形式 scanf(格式控制,地址列表) 格式控制含义同printf函数相同,“地址列表”是由若干个地址组成的表列,可以是变量的地址或字符串的首地址。 [例4.9] main() {int a ,b,c ; scanf(“%d%d%d”, &a , &b , &c) ; printf(“%d , %d , %d \n”,a , b , c); } %d%d%d 表示按十进制整数形式输入数据,两个数据间有一个或多个空格间隔, 也可以用回车键或跳格键间隔。

  30. 2.格式说明 ①对unsigned形变量所需的数据,可以用%u、%d、%o、%x格式输入。 ②可以指定输入数据所占列数,系统自动按列数截取所需数据。如“scanf(“%3d%3d”,&a,&b);”,若输入123456,系统自动将123赋给a,456赋给b。 上面方法也适用于字符,如“scanf(“%3c”,&ch);”,若连续输入3个字符abc,则系统将第一个字符a赋给ch。 ③如果在%后有一个“*”附加说明符,表示跳过它指定的列数。如“scanf(“%2d-%*3d-%2d”,&a, &b);”,若输入12-345-67,则12赋给a,跳过345,67赋给b。(用-表示空格) ④输入数据时不能规定精度。例如“scanf(“%7.2f”,&a);”是错误的。

  31. 3.使用scanf函数时应注意问题 ①在scanf函数中,“格式控制”后面应当是变量地址,而不应是变量名。如果a和b是整型变量,那么scanf(“%d,%d”,a,b)是错的。 a和b前面必须加&。 ②如果在“格式控制”字符串中除格式说明外,还有其它字符,则输入数据时必须对应地输入这些字符。 如“scanf(“%d,%d”,&a,&b);”,应输入“3,4”。 如“scanf(“%d--%d”,&a,&b);”, 输入时应在3和4间有两个以上空格。 如“scanf(“a=%d,b=%d”,&a,&b);”,应输入“a=3,b=4”。 如“scanf(“%d:%d:%c”,&a,&b,&c);”,应输入“3:4:5”。

  32. ③在用%c格式输入字符时,空格字符和“转义字符”都作为有效字符输入。③在用%c格式输入字符时,空格字符和“转义字符”都作为有效字符输入。 如“scanf(“%c%c%c”,&c1,&c2,&c3);”, 若输入“a-b-c”, 字符a赋给c1, -赋给c2,字符b赋给c3。 ④输入数据时,遇到以下情况,系统认为该数据结束: a、遇到空格,或者回车键,或者Tab键。 b、按指定的宽度结束。例如“%3d”,只取3列。 c、遇到非法输入。例如,在输入数值数据时,遇到字母等非数值符号(数值符号仅由数字字符0-9、小数点和正负号构成)。

  33. 提高人机交互性建议:为改善人机交互性,同时简化输入操作,在设计输入操作时,一般先用printf函数输出一个提示信息,再用scanf函数进行数据输入。提高人机交互性建议:为改善人机交互性,同时简化输入操作,在设计输入操作时,一般先用printf函数输出一个提示信息,再用scanf函数进行数据输入。 例如:将 scanf("num1=%d,num2=%d\n",&num1,&num2); 改为: printf("num1="); scanf("%d",&num1); printf("num2="); scanf("%d",&num2);

  34. 设a、b、c、d均是int型的变量,为了使以下的程序段的输出为:1234+123+12+1,正确的输入形式应当是 scanf(“%4d+%3d+%2d+%1d”,&a,&b,&c,&d); printf(“%4d+%3d+%2d+%1d”,a,b,c,d); (A)1234123121 (B)1234123412341234 (C)1234+1234+1234+1234 (D)1234+123+12+1

  35. 4.6 顺序结构程序设计举例 在顺序结构程序中,各语句(或命令)是按照位置的先后次序,顺序执行的,且每个语句都会被执行到。[例4.10] 输入任意三个整数,求它们的和及平均值。main(){int num1, num2 , num3 , sum ; float aver; printf(“Please input three numbers:”); scanf(“%d,%d,%d”,&num1,&num2,&num3); /*输入三个整数*/ sum=num1+num2+num3; /*求累计和*/ aver=sum/3.0; /*求平均值*/ printf("num1=%d,num2=%d,num3=%d\n",num1,num2,num3); printf("sum=%d,aver=%7.2f\n",sum,aver);} 思考题:能否将“aver=sum/3.0;”中“3.0”改为“3”?

  36. [例4.11] 求方程ax2+bx+c=0的实数根。a,b,c由键盘输入,a≠0且b2-4ac>0。 #include “math.h” main() {float a,b,c,disc,x1,x2; printf("Input a, b, c: "); scanf("%f,%f,%f",&a,&b,&c); /*输入方程的三个系数的值*/ disc=b*b-4*a*c; /*求判别式的值赋给disc*/ x1=(-b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a); printf("\nx1=%6.2f\nx2=%6.2f\n",x1,x2); }

  37. [例4.12] 从键盘输入一个小写字母,要求用大小写字母形式输出该字母及对应的ASCII码值。 #include "stdio.h" main() {char c1,c2; printf("Input a lowercase letter: "); c1=getchar(); putchar(c1);printf(",%d\n",c1); c2=c1-32;/*将大写字母c1转换成对应的小写字母c2 */ printf("%c,%d\n",c2,c2); } 程序运行情况如下: Input a lowercase letter: a↙ a,97 A,65

  38. 在顺序结构程序中,一般包括以下几个部分: 1.程序开头的编译预处理命令。 在程序中要使用标准函数(又称库函数),除printf和scanf外,其它的都必须使用编译预处理命令,将相应的头文件包含进来。。 2.顺序结构程序的函数体中,是完成具体功能的各个语句和运算,主要包括: (1)变量类型的说明。 (2)提供数据语句。 (3)运算部分。 (4)输出部分。

More Related