1、C语句概述,C+程序的编写和实现,源程序 (文本文件) *.C,目标文件 (二进制文件) *.OBJ,可执行文件 (二进制文件) *.EXE,库文件 (各种函数),有些编辑系统,可直接从源程序编译连接至可执行程序,,F7,compile,link,C语言的基本元素,一、符号集(字符集) C语言使用的基本符号共有如下五种:(1)大写字母:A-Z (3)阿拉伯数字0-9 (2)小写字母a-z (4)下划线: (5)标点符号和运算符,C语言的基本元素,二、标识符用来标记常量、变量、函数及文件名字的字符序列标识符的构成规则: 以字母(大小写都可以)或下划线开头 随后可跟若干个(包括0个)字母、数字、下
2、划线 标识符的长度各个系统不同,最好不要超过8个字符 注意:区分大小写,如:sum,SUM是两个不同的标识符,C语言的基本元素,三、关键字(p375)也称“保留字” 它是c语言中具有特定含义、专门用作语言特定成分的一类标识符 ANSI推荐的C语言的关键字是32个(Turbo c另扩展了11个)如:main、int、char、float、define等 注意: 所有的关键字都有特定的含义不能用作它用 所有的关键字都必须小写 如: else 和ELSE 有不同含义 else是关键字,ELSE可是用户定义的标识符,C的数据类型,数据是操作的对象,数据类型是指数据的内在表现形式(代码、存储、运算) C
3、语言提供了以下一些数据类型:,数据类型,构造类型,指针类型,空类型(无值类型) void,4.1 C语句概述,语句: 用来对数据进行加工(完成操作任务),是构成程序的基本单位 通常一个c程序由若干函数(系统,用户)组成 每个函数由若干条语句组成,每条语句总是以“;”结束。 C语句的分类:简单语句 分三大类 复合语句空语句,表达式语句函数调用语句结构控制语句,结构控制语句,构成循环的语句: while语句实现循环 do-while语句实现循环 for 语句实现循环 break语句continue和语句 条件判定 语句: if语句 switch语句,学过的输入输出函数 getchar() scan
4、f() putchar(c) printf() Scanf()函数%c格式存在的问题及解决办法,常用 格式输入与输出,(一)格式输出函数 作用:向显示器(或系统隐含指定的输出设备)输出若干个任意类型的数据。 一般格式:printf(格式控制符,输出项列表),双引号括起来的字符串,要输出的内容(常量、变量、表达式等),#include void main() int i=5; float f=32.345; printf(“i=%3df=%5.1fn”,i,f); printf(“End.n”); ,格式控制字符串: i=%3d f=%5.1f,引导符,宽度,小数位 数精度,类型符,结果:i=
5、5 f= 32.3End.,4.5 格式输入与输出,格式控制符完整格式: % 0 m.n l/h 格式字符,4.5 格式输入与输出,%u:以无符号十进制形式输出整数 %c:以字符形式输出,输出一个字符 %s:输出一字符串 %f:以小数形式输出实数,隐含输出六位小数 %e:以指数形式输出实数 %g:自动选用%f或%e格式中输出宽度较短的一种格式,不输出无意义的0 %:输出%,格式字符:指定输出项的数据类型和输出的格式 %d:以带符号的十进制形式输出整数 %o:以八进制无符号形式输出整数 %x:以十六进制无符号形式输出整数,格式输入与输出,格式输入函数 作用:按照格式控制符的要求将数据从终端传送到
6、变量地址所指的内存空间。 一般格式:scanf(格式控制,变量地址表列)1.变量地址 变量的地址通过对变量名“求地址”运算得到 形式:&变量名,同printf函数,是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址,4.5 格式输入与输出,2.格式控制符: % * m l/h 格式字符,输入的数据类型和格式,长度修正说明符(了解,不要求),域宽说明符(了解,不要求),附加说明符(了解,不要求),格式说明的起始符号,格式输入与输出,例: #include int main() int a;float b,c;printf(”input a,b,c:”);scanf(“%d%f%f”,
7、,结果:input a,b,c:12 3 4 a=12,b=3.000000,c=4.000000,输入数据分隔符: 采用隐含的分隔符:空格、回车键、Tab键 根据格式中指定的域宽分隔数据项(不提倡)如“”,只取列;采用用户指定的分隔符(不提倡),如逗号,scanf(“%3d%2f%2f”,scanf(“%d,%f,%f”, 输入:12,3,4,数组 函数 指针 排序算法,指针,应用题,例6.10 译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。思路:可以按以下规律将电文变成密码:将字母A变成字母E,a变成e,即变成其后的第4个字母,W变成A,X变成B,Y
8、变成C,Z变成D。,例6.10输入一行字符,要求输出其相应的密码 include void main() char c; while(c=getchar()!=n) if(c=a ,运行结果: China! Glmre!,/编写计算器程序, /主要练习多条件分支语句if.else /和switch(又称开关语句) #include #include main() int data1,data2,i; char op,op1=Y; for(i=1;i3;i+) printf(“ 请输入;“); scanf(“%d%c%d“, ,方法二,/编写计算器程序, /主要练习多条件分支语句if.else
9、/和switch(又称开关语句) #include #include main() int data1,data2; char op,op1=y; do printf(“ 请输入;“); scanf(“%d%c%d“, ,1.结构体的应用题有一个结构体变量stu,内含学生学号、姓名和3门课程的成绩。要求在main函数中赋予值,在另一函数print中将它们输出。今用结构体变量作函数参数。,#include #include define FORMAT “%dn%sn%fn%fn%fn” struct student int num; char name20; float score3; ; vo
10、id main() void print(struct student); struct student stu; /*声明结构体变量*/ stu.num=12345; strcpy(stu.name,LiLin);stu.score0=67.5;stu.score1=89;stu.score2=78.6; print(stu); void print(struct student stu) printf(FORMAT,stu.num,stu.name, stu.score0, stu.score1,stu.score2); printf(n);,运行结果: 67.500000 89.0000
11、00 78.599998,方法一:用结构体变量作参数,方法2 将上题改用指向结构体变量的指针作实参。 #include define FORMAT “%dn%sn%fn%fn%fn”; struct student int num; char name20; float score3; stu=12345, LiLi,67.5,89,78.6; void main() void print(struct student *); print( /*实参改为stu的起始地址*/ void print(struct student *p) /*形参类型修改成指向结构体的指针变量*/ printf(F
12、ORMAT,p-num,p-name, p-score0,p-score1,p-score2); /*用指针变量调用各成员的值*/ printf(”n”);,指针数组应用题: 将若干字符串按字母顺序(由小到大)输出。,#include #include void main() void sort(char *name,int n);void printf(char *name,int n);char *name=“Follow me“,“BASIC“,“Great Wall,“FORTRAN“,“Computer design“;int ;sort(name,);print(name,); ,
13、void sort (char *name , int n) char *;int ,;for (;-;);for(;)if(strcmp(name,name) 0)=;if (!)temp=namei; namei=namek;namek=temp; void print(char *name ,int ) ;(;)printf(,);,运行结果为: Computer design FORTRAN Follow me Great Wall,指针函数应用题 有若干个学生的成绩(每个学生有门课程),要求在用户输入学生序号以后,能输出该学生的全部成绩。用指针函数来实现。,#include void
14、 main()float score 4=60,70,80,90,56,89,67,88,34,78,90,66;float *search(float (*pointer)4,int n); /*定义指针函数*/ float *p;int i,m;printf(“enter the number of student:“);scanf(“%d“, ,运行情况如下: enter the number of student: The scores of No. are: 56.00 89.00 67.00 88.00,30,数组的应用,:输入10个学生的成绩,求平均成绩,并将低于平均成绩的分数打
15、印出来。 #include #include void readdata(float score10) /输入10个学生的成绩cout“Please input 10 students score:“endl;for(int i=0;i10;i+)sacnf(“%f”,31,float aver(float score10) /求平均成绩float sum=0; int i;for(i=0;i10;i+)sum+=scorei;return(sum/10); void print(float score10,float ave) /打印低于平均成绩的分数。 int i;cout“the sco
16、res which are below the average:“;for(i=0;i10;i+)if(scoreiave)printf(“%f”,scorei); return; ,32,void main()void readdata ( float score10); /声明输入10个学生的成绩float aver(float score10); /声明求平均成绩void print(float score10,float ave); /声明打印float ave,score10;readdata(score);ave=aver(score); /返回值给ave /平均值cout“ave
17、rage=“aveendl;print(score,ave);,2.枚举类型的应用题 #include enum cityShanghai,Beijing,Nanjing,Tianjin=5,Guangzhou; void ff(enum city x) switch(x) case 0: printf(“Shanghain“); break;case 1: printf(“Beijingn“); break;case 2: printf(“Nanjingn“); break;case 5: printf(“Tianjinn“); break;case 6: printf(“Guangzhou
18、n“); break;default: printf(“非法城市 !n“); ,int main() enum city c1,c2,c3,c4;int i=7;c1=(enum city)i; /不能:c1=i;c2=Nanjing;c3=(enum city)5;c4=Shanghai; /枚举变量的赋值:只能为列举元素之一 ff(c1); ff(c2); ff(c3); ff(c4);printf(“%d %d %d %d “,c1,c2,c3,c4);i=Shanghai; printf(“%d“,i); system(“pause“); /* 执行结果:非法城市 !NanjingTi
19、anjingShanghai 7 2 5 0 */,投骰子游戏,#include #include /投骰子、计算和数、输出和数 int rollDice() int die1 = 1 + rand() % 6;int die2 = 1 + rand() % 6;int sum = die1 + die2;printf(“player rolled %d+%d=%dn“ ,die1,die2,sum);return sum; enum GameStatus WIN, LOSE, PLAYING ;,int main() int sum, myPoint;enum GameStatus stat
20、us;unsigned seed; printf(“Please enter an unsigned integer: “);scanf(“%u“, /第一轮投骰子、计算和数,switch (sum) case 7: /如果和数为7或11则为胜,状态为WINcase 11:status = WIN; break;case 2: /和数为2、3或12则为负,状态为LOSEcase 3: case 12:status = LOSE; break;default: /其它情况,游戏尚无结果,状态为PLAYING,记下点数,为下一轮做准备status = PLAYING;myPoint = sum;p
21、rintf(“point is%dn“,myPoint); break; while (status = PLAYING) /只要状态仍为PLAYING,就继续进行下一轮sum = rollDice();if (sum = myPoint) /某轮的和数等于点数则取胜status = WIN;else if (sum = 7) /出现和数为7则为负status = LOSE;/当状态不为PLAYING时上面的循环结束,以下程序段输出游戏结果if (status = WIN)printf(“player winsn“);elseprintf(“player losesn“);system(“pause“);return 0; ,