第三章最简单的C程序设计C语句概述一、C程序结构C程序源程序文件1源程序文件i源程序文件n预编译命令函数1函数n说明语句执行语句C语句概述二、C基本语句(两类)1.说明语句说明语句是用于对程序中所使用的变量及其属性进行定义。例如:inta,b;floatx,y;2.可执行语句(五种)可执行语句是用于完成程序功能的语句。⑴控制语句控制语句主要是对程序走向起控制作用。C语句概述C语言提供了九种控制语句,可分别用在不同要求的编程处理中。⑵函数调用语句在一个函数的后面添加一个分号就构成函数调用语句。例如:printf(“CProgram”);scanf(“%d,%d”,&a,&b);⑶表达式语句在任何一个表达式的后面添加一个分号就构成表达式语句。例如:C语句概述i++;c=a*2+b%a;⑷空语句只有一个分号的语句是空语句。例如:;在程序中空语句经常被用作循环体,起延时作用。⑸复合语句程序中用一对大括号{}括起来的若干语句称为复合语句。例如C语句概述{m=a;a=b;b=m;}复合语句在语法上相当于一个语句,凡是单一语句可以存在的位置都可以使用复合语句。复合语句的主要用途是:当单一语句位置上的功能必须用多个语句才能实现时就需要使用复合语句。程序的三种基本结构结构化程序设计的基本思想是:任何程序都可采用以下三种基本结构来构造,它们是:顺序结构选择结构循环结构这三种基本结构可任意组合和互相嵌套,从而构造出任何复杂的程序。一、顺序结构顺序结构是最基本的程序结构,其程序流程是:按语句出现的先后顺序依次执行。程序的三种基本结构二、选择结构选择结构又称分支结构。选择结构的程序流程是:根据给定的条件进行判断,由判断结果决定在两个或多个程序段中选择一支执行。AB语句的执行顺序是:先执行A,再执行B,两者是顺序执行的关系。条件AB真假语句的执行顺序是:先判断条件是否成立,成立(真)时执行A,否则执行B,两者是选择执行其一的关系程序的三种基本结构C语言提供了两种选择语句(if语句和switch语句),用以实现程序的分支选择。三、循环结构循环结构又称重复结构。循环结构的程序流程是:在给定条件成立的情况下反复执行某个程序段。循环结构的实现可有两种形式:1.当型循环结构语句的执行顺序是:先判断条件是否成立;成立(真)时执行A,然后返回起点再判断;如此反复循环,直到条件不成立(假)时结束循环。程序的三种基本结构2.直到型循环结构语句的执行顺序是:先执行A,然后再判断条件是否成立;不成立(假)时返回起点再执行A;如此反复循环,直到条件成立时退出循环。3.两种循环结构的区别⑴当型循环有可能一次也不执行A,而直到型条件A真假当型循环结构条件A真假直到型循环结构程序的三种基本结构循环至少应执行一次A。⑵当型循环的循环条件为假时退出循环,而直到型循环恰恰相反。C语言提供了三种循环控制语句(while,do~while,for)用以构造程序的循环。3.3赋值语句赋值语句是由赋值表达式加上一个分号构成。例如:z=x+y赋值表达式z=x+y;赋值语句数据输出C程序的输入输出功能是通过调用系统提供的输入输出函数实现的。常用的输入输出函数有:字符输入输出函数getchar(),putchar()和格式输入输出函数scanf(),printf()。一、字符输出函数putchar()putchar()函数的功能是向终端屏幕输出一个字符。该函数的使用形式为:putchar(c);c可以是字符变量、整型变量、字符常量或整型常量。数据输出[例]#include“stdio.h”main(){chara,b,c;a=‘B’;b=‘O’;c=‘Y’;putchar(a);putchar(b);putchar(c);putchar(‘\n’);putchar(‘\101’);}BOYA数据输出二、格式输出函数printf()printf()函数的功能是按给定的输出格式向终端屏幕输出信息。该函数的一般形式为:Printf(“格式控制”,输出表列)格式控制是下列三种形式之一或组合:①格式说明:用来规定相应输出项内容的输出格式;②转义字符:用来输出转义字符所代表的控制代码或特殊字符;③普通字符:要求原样输出的字符。数据输出输出表列是若干个需要输出的数据项,也可以是变量或表达式。例如:printf(“a=%d,b=%d,a+b=%d\n”,a,b,a+b);1.格式说明⑴d格式符:用来输出十进制整数。%d--按整型数据的实际长度输出;%md-按指定宽度输出;%ld-输出长整型数据。例如:a=12345,b=123,c=135790Lprintf(“%4d,%4d,%ld\n”,a,b,c);数据输出⑵o格式符:以8进制数形式输出整数。例如:inta=-1;printf(“%d,%o\n”,a,a);⑶x格式符:以16进制数形式输出整数。例如:intb=-2;printf(“%d,%o,%x\n”,b,b,b);⑷u格式符:用来输出无符号十进制数。例如:intc=-3;printf(“%d,%o,%x,%u\n”,c,c,c,c);数据输出⑸c格式符:用来输出一个字符。例如:charc=‘a’;inti=65;printf(“%c,%c\n”,c,i);⑹s格式符:用来输出一个字符串。%s、%ms、%-ms、%m.ns、%-m.ns例如:printf(“%s,%3s,%-6s,%.4s,%-5.3s\n”,“CHINA”,“CHINA”,“CHINA”,“CHINA”,“CHINA”,)数据输出⑺f格式符:以小数形式输出实数。%f、%m.nf、%-m.nf例如:floatf=123.456;printf(“%f,%10f,%10.2f,%-10.2f\n”,f,f,f,f);数据输出2.转义字符在printf()函数中,转义字符的作用是输出相应的控制代码或特殊字符。3.普通字符格式控制中的普通字符将在相应位置被原样输出。[例]main(){printf(“今天温度是21\370C\n”);}今天温度是21。C数据输入一、字符输入函数getchar()getchar()函数的功能是从键盘读入一个字符。该函数的一般形式为:c=getchar()getchar()函数没有参数,函数值就是从输入设备得到的字符。c可以是字符变量,也可以是整型变量。[例]输入一个字符,输出对应的十进制ASCII码制。数据输入#include“stdio.h”main(){charc;printf(“inputchar:”);c=getchar();printf(“char=%cASCIIValue=%d\n”,c,c);}inputchar:qCRchar=qASCIIValue=113数据输入二、格式输入函数scanf()scanf()函数的功能是按指定的输入格式从键盘接受用户的输入信息。该函数的一般形式:scanf(“格式控制”,地址表列)格式控制与printf()函数中的含义类似,所不同的是对输入格式进行控制.其内容可以是格式说明或普通字符,而转义字符则较少使用。地址表列是由若干个等待输入的内存单元地址组成,该地址可以是变量地址或字符串首地址等。其作用是存放输入的数据。例如:数据输入scanf(“%d%d%d”,&a,&b,&c);345CR输入数据时,在两个数据之间以一个或多个空格间隔,也可以用回车符或跳格键Tab。scanf(“a=%d,b=%c”,&a,&b);a=21,b=ACR[例]计算圆柱体的侧面积:S=2*3.1416*r*h其中r—底半径,h—柱高。数据输入#includestdio.hmain(){floatr,h,S;printf(“inputr,h:”);scanf(“%f,%f”,&r,&h);S=2*3.1416*r*h;printf(“r=%f,h=%f,S=%f\n”,r,h,S);}inputr,h:3,2.5CRr=3.000000,h=2.500000,S=47.124001程序举例[例]数制转换。输入一个十进制数,分别输出该数的八进制数、十进制数和十六进制数。#includestuio.hmain(){inta;printf(“Inputanumber:”);scanf(“%d”,&a);printf(“Number(Oct)=%o\n”,a);printf(“Number(Dec)=%d\n”,a);printf(“Number(Hex)=%x\n”,a);}程序举例Inputanumber:76CRNumber(Oct)=114Number(Dec)=76Number(Hex)=4c程序举例[例]任意从键盘输入一个三位整数,要求正确地分离出它的个位、十位和百位数,并分别在屏幕上输出。程序设计分析:设计一个从三位整数中分离出它的个位、十位和百位数的算法。如:输入456,输出分别是4、5、6程序举例最低位数字----对10求余,如456%10=6,最高位的百位数字---对100整除,如456/100=4,中间位的数字---既可通过将其变换为最高位后再整除的方法,如(456-4*100)/10=5,也可通过将其变换为最低位再求余的方法,如(456/10)%10=5。#includestdio.hvoidmain(){intx,b0,b1,b2;//变量定义printf(pleaseinputanintegerx:);//提示用户输入一个整数scanf(%d,&x);//输入一个整数b2=x/100;//用整除方法计算最高位b1=(x-b2*100)/10;//计算中间位b0=x%10;//用求余数法计算最低位printf(“百位=%d,十位=%d,个位=%d\n,b2,b1,b0);//输出结果}pleaseinputanintegerx:456↙百位=4,十位=5,个位=6运行结果:程序举例[例]小写字母转盘(如图所示)。用户输入一个小写字母,求出该字母的前驱和后继字符,例如,c字符的前驱和后继分别是b和d,a字符的前驱和后继分别是z和b,z字符的前驱和后继分别是y和a。abcdefzyx...程序设计的分析:求一个字母的前驱字母:一般情况:减1,特殊情况:a的前驱是z不能通过减1来实现。可利用取余操作,即任何一个整数除以26(26个字母)的余数只能在0~25之间。我们可以以z为参考点,首先求出输入的字符ch(假设是w)与z之间的字符偏移数n='z'-ch='z'-'w'=3,而(n+1)%26=4则是ch(字母w)的前驱字母相对于z的偏移数,'z'-(n+1)%26=122-4=118(即字母v)就是ch(字母w)的前驱字母。如下图所示求一个字母的后继:一般情况:加1,特殊情况:z的后继是a不能通过加1来实现。此时,可以a为参考点,首先求出输入的字符ch(假设是w)与a之间的字符偏移数n=ch-‘a’=‘w’-‘a’=22,而(n+1)%26=23则是ch(字母w)的后继字母相对于a的偏移数,‘a’+(n+1)%26=97+23=120(即字母x)就是ch(字母w)的后继字母。abcdefghijklmnopqrstuvwxyz后继参考点前驱参考点后继偏移数23前驱偏移数4#includestdio.hvoidmain(){charch,ch1,ch2;//变量定义ch=getchar();//读取一字符putchar('\n');//换行ch1='z'-('z'-ch+1)%26;//求前驱字符ch2='a'+(ch-'a'+1)%26;//求后继字符printf(ch1=%c,ch2=%c\n,ch1,ch2);//显示结果}ch1=v,ch2=x运行结果(假设输入字母为w):【例】数据的格式化输入输入一学生的学号(8位数字)、生日(年-月-日)、性别(M:男,F:女)及三门功课(语文、数学、英语)的成绩,现要求计算该学生的总分和平均分,并将该学生的全部信息输出(包括总分、平均分)。#includestdio.hvoidmain