资源描述
C语言程序设计教程
一、 基本知识:
C语言是一种高级语言,适于编写系统程序。它有良好的可移植性,应用于各个领域。
起源于:ALGOL语言。具有良好的可读性和可移植性。
C语言属于过程语言,即按照程序的设计算法逐条输入语句。
二、 基本结构:
C语言的基本结构是指一个C程序的基本组成成分。如下:
#define Pi=3.1415 宏定义
main() 函数名
{ 函数体开始
float r,a,c; r半径a面积c周长
r=2.5; 给定r 的值
a=pi*r*r; 计算面积
c=2*Pi*r; 计算周长
printf(“r=%f,a=%f\n”,r,a); 输出r和a
} 函数体结束
经过计算机的运算得到:r=2.500000 a=19.634956
C语言的基本结构就是函数。一个C程序由若干C函数构成,一个C函数由若干C语言构成,一条C语句由若干基本单词构成。
C函数包括:函数名+形式参数+函数体
函数名:是标识函数的依据,主函数名:main()
形式参数(形参):是函数调用时的数据传递途径。有{}表示,不能省略。
函数体:是程序的主要语句。
C语句:完成某种功能的最小单位,所有语句以“;”号结尾。
分为表达式语句、复合语句、空语句。
表达式语句就是用“;”隔开的语句;复合语句就是用{}括起来的语句,属于一条语句;只有一个“;”的语句就是空语句,作用就是延迟一段时间。
基本单词:C语言有五种基本单词:
关键字、标识符、常数、操作符、分隔符。
关键字:是C语言中有特定意义和用途且不能它用的字符。如:auto break case char 等等。共有32个。*****强调:所有关键字必须小写。
标识符:用来表示变量名、数组、函数、指针、结构名等。
***由字符构成,第一个字符必须是字母或下划线。
***不能和C的关键字相同,且区分大小写。如Ab和AB就是不同的。
常数:包括数值常数、字符常数、字符串常数、符号常数等。
操作符:包括运算符和有特定意义的标点符号。
分隔符:最常见的就是空格。
三、 书写方式:
1) 每个函数在程序中的位置是任意的。主函数不一定在程序开始处,但运行时总从主函数开始。
2) 每个程序行中的语句是任意的,即可一行写多条语句,也可一条语句多行写,但必须是以“;”结尾。
3) 注释位置任意。以/*开始,以*/结束,两者不能有空格。
4) 为增强易读性,每行一条语句,不同结构的语句从不同位置写起,呈阶梯状。
四、 简单的程序设计:
一个程序通常具备三个功能:输入数、数据运算、输出数据。
赋值语句:有计算和存储的功能。如:v=2;
输入/输出函数:scanf()是格式输入函数;printf()是输出函数。如:
scanf(“%f%d”,&a,&b);
用来接收从键盘输入的一个实数和一个十进制的整数,并存放在变量a和b中。
Printf(“%f,%f”,x,y);
用来按实数形式输出变量x 和y的值。
%f:表示输出实数;%d表示输出十进制整数。
Printf()和scanf()是TC编译系统提供的库函数,不是C的组成部分,而是由C提供的功能函数。
当要使用系统提供的库函数时,必须在程序的开始处输入:#include<标题文件>或#include“标题文件”。
例如:printf()和scanf()是在标题stdio.h中定义的,因此写作:#include<stdio.h>
include和define都属于命令行,不属于C语句。
C语言提供的常用标题文件如下:
ALLOC.H动态分配函数
CONIO.H屏幕处理函数
CTYPE.H字符处理函数
GRAPHICS.H图形函数
MATH.H数学函数
STDIO.H输入输出及文件操作函数
STDLIB.H标准实用函数
STRING.H字符串处理函数。
五、 开发过程:
包括编辑、编译、连接、运行四步。
编辑:是C程序的输入和修改。扩展名为.c
编译:是将C程序翻译成二进制的过程。编译时如果有错误,编译系统会自动停止。
连接:是用连接程序将编译过的目标程序和程序中用到的库函数装配在一起,形成可执行的目标文件。扩展名.EXE
运行:
六、 TC2软件的使用:
它是集编辑、编译、连接及运行于一体的集成环境。即可以在DOS下运行,也可以在WIN里运行。
窗口组成:主菜单、编辑窗口、编辑信息窗口、功能提示键。
常用功能键:
F2存储;F3载入;ALT+X退出;CTRL+F9运行;ALT+F5切换结果窗口;EXIT返回编辑窗口;ALT+F+O暂时进入DOS
上机作业:编写一个程序:
一个笼子里有鸡和兔。鸡和兔的头数共30个,脚共100只,算一下笼里有多少鸡和兔?
提示数学模型:
x+y=30
2x+4y=100
程序如下:
#include <stdio.h>
main()
{int x,y,f,t;
scanf(“%d%d”,&t,&f);
x=(4*t-f)/2;
y=(f-2*t)/2
printf(“chickens=%d,rabbits=%d\n”,x,y);
}
其中t头数f脚数x鸡数y兔数。
基本数据类型和数据运算
一、 基本数据类型:
包括:整型、浮点型、双精度型、字符型及无值类型。通常代表单个数据。
整型int:描述整数;
字符型char:描述单个字符;
浮点型(单精度型)float:描述实数。 双精度型double:
无值型void:没有具体值。
基本数据类型的修饰:
signed:符号型,能修饰char和int型数据。 Unsigned:无符号型。
Short:短型,只能修饰int。 long:长型,能修饰int和double型。
二、 常量及类型:
常量:在程序运行过程中,其值不变的量。
分四种:整型、双精度型、字符型、字符串型。
由于C语言对书写形式较为严格,所以分清类型对书写程序非常重要!
1) 整型常量:可为十进制或八进制或十六进制。
十进制:由正负号和0~9组成的字符串。
八进制:以0开头,后跟0~7组成的数字。
十六进制:以0和X打头,后跟0~9和A~F组成。
2) 双精度型常量:就是实数。可以是小数也可以是指数。
小数:由正负号、整数、小数点构成。
指数:在小数基础上加上一个e或E,再跟一个1~3位整数组成。如2.74e3=2.74X103。
3) 字符型常量:指单个的ASCII字符。有两种表示法:
单引号表示法:如’A’、’a’、’5’、’+’等。
转义字符表示法:对不可显示字符(回车、换行符等)只能用转义字符表示。
如常用的有:
\0:NULL表示为空; \a:BELL表示报警铃响; \b:BS表示退格。
\f:FF表示换页符; \n:NL表示换行符; \r:CR表示回车符。
\t:HT表示水平制表符; \v:VT表示垂直制表符; \\:\表示反斜杠。
\’:‘表示单引号; \”:“表示双引号。
***C语言对整型和ASCII不是很严格区分的,因为两者可以转换。如A的ASCII是65,所以A+5即表示65+5。
4) 字符串常量:用“”号括起来的字符序列。如:”I am a student”、”A”等。
与字符常量的区别:
一是引号方式不同,一个单引,一个双引。
二是存储长度不同,字符常量占一个字节;字符串常量占N+1个。
三是字符串常量可存在数组里,而字符常量只能存放在字符型变量中。
四是字符串常量不能参与数值运算,而字符常量可以。
三、 变量及类型:
变量:在程序的运行过程中其值会发生改变的量。
变量在使用前必须先定义后使用。定义格式:[存储类型]数据类型 变量清单;
存储类型有:auto自动、static静态、extern扩展、register寄存器
数据类型有:int、char、float、double
变量清单:可以有一个变量也可有多个变量。
如:char ch1; static int I,j,k; short int si; float f1,f2;
变量类型:根据定义的位置不同分三种:全局变量、局部变量、形参。
全局变量:在函数外部定义的变量。
局部变量:在函数内部定义的变量。
形参:在函数的形式参数表中定义的变量。
如:#include <stdio.h>
int color; color就是全局变量.
Value (int x,float y); x和y就是形参。
{int lower,upper,atep; lower和upper及atep就是局部变量。
作业:输入如下程序,分析查看结果:
int a;
main()
{int b,c;
a=1;b=2;c=3;
a=a+1;b=b+1;c=c+b; 此时a=2,b=3,c=6而不是5
{int c;
c=b*3; 此时c=9
a=a+c; 此时a=11
printf(“first:%d,%d,%d\n”,a,b,c);
}
printf(“second:%d,%d,%d\n”,a,b,c);
}
局部变量的存储类型可以是auto、static或register,若缺省则为auto。
全局变量的存储类型可以是static、extern,若缺省默认为extern。
四、 符号常量:
符号常量:用标识符表示的常量。表面象变量其实是常量,其值不能改变。
符号常量的定义:方法有三种:
宏定义:用指定的标识符来代表一串字符,格式:#define 标识符 字符串
如#define Pi 3.1415926
***注意:宏定义必须以#define开头,行尾不加”;”
每个#define只能定义一个宏,且占用一行。
#define一般出现在函数的外部。
Const定义:格式:const 数据类型 标识符=常量表达式;
如const int max=300;
const float x=max+3.14;
***注意:必须以const开头,以“;”结束。
每个const语句可以定义多个同类型的符号常量,用逗号分隔。
const即可出现在函数外部,也可以出现在函数内部。
作业:输入如下程序,分析查看结果:
#include <stdio.h>
#define Pi 3.1415926
main()
{float c,a,s,v;
const float Radius=2.5;
c=2*Pi*Radius;
a=Pi*Radius*Radius;
s=4*a;
v=4*a*Radius/3;
printf(“circuference=%f”,c);
printf(“area=%f”,a);
printf(surface area=%f”,s);
printf(volume=%f”,v);
}
五、 算术运算:
一) 算术运算符:又分一元运算符(只有一个运算量值的)。如正/负(+/-)
二元运算符:有两个或以上的运算量。如+/-/*/%等。
求余运算:求两个int或char型的余数。如a%b表示a整除b后的余数。
规则:a%b=a-(int)(a/b)*b
加1减1运算:又称自加/自减运算。
++I 表示I=I+1 --I表示I=I-1
自加/自减运算只能对变量施加,不能对常量使用。如++(25)就是错误的。
++和- -写在变量的前后是有区别的:
n++表示先取n值,然后再n=n+1
++n表示先n=n+1,然后再取n值。
作业:输入如下程序,查看结果。
Main()
{int a=100;
printf(“%d\n”,a);
printf(“%d\n”,++a);
printf(“%d\n”,a--);
printf(“%d\n”,a);
}
二) 算术表达式:
用算术运算符连接起来的数值型的式子,用来完成计算功能。
书写规则:
运算符*不能省略;运算符的优先级和结合性决定运算的顺序。
优先级:指当几个不同的运算符同时出现在表达式中时,哪个运算符先执行。
结合性:指同一优先级的运算符同时出现在表达式中时,运行的先后次序。
乘除法的结合性:自左向右
取负和加1运算的结合性:自右向左。
在表达式中可以使用小括号,不能使用方括号和花括号。
C语言中没有乘方,所以需要用连乘表示。如pow(10,n)=10n。
作业:观查下列程序的优先级和结合性:
main()
{int a=3,b=5,c=15,d=2;
printf(“%d\n”,6-a*b/c%d);
printf(“%d\n”,++a-++a);
}
自动类型转换规则:表达式除了要遵循优先级和结合性外,还应遵循类型转换规则:
如果表达式中含有char型,全部转换成int。
如果表达式是含有float型,全部转换成double.
同类型运算结果仍然为同类。如3/2=1,不是1.5
不同类型运算,低精度先转换成高精度型,结果为高精度型。
三) 赋值运算:
赋值表达式的尾部加上分号就是赋值语句。
V=e 左为变量或数组元素。
简单赋值运算符。 如:y=x+2是正确的,而x+2=y
复合赋值运算符。 有10种,有计算和赋值双重功能。
+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=。前五种有算术和赋值的双重功能。
如X+=e等价于x=x+e
赋值运算的优先级仅高于逗号运算符。
当赋值号两边的类型相同时,直接赋值;不同时,先将右侧转换成左侧的类型,再赋值。
++和- -运算也是赋值表达式,但++和- -只能用于变量,不能用在表达式上。
如++I++就不是正确的表达式。
练习:main()
{int a; char b; float c;
c=2.5;
b=c;
a=b;
printf(“%d,%d,%.1f”,a,b,c);
}
逗号运算:
逗号运算符可以连接多个数据项,做为一个整体处理。
逗号表达式:由逗号连接而成的式子。A=3*5,a*4,a+5
**当printf()函数中出现多个表达式输出项时,先按从右向左的顺序计算各表达式的值,然后按从左向右的顺序显示输出的结果。
如:main()
{int c=5;
printf(“%d,%d,%d\n”,c+=c++,c+8,++c);
c=5;
printf(“%d\n”,(c+=c++,c+8,++c);
c=5;
printf(“%d\n”,c+=c++,c+8,++c);
}
四) 关系和逻辑运算
关系运算:用来进行相等或不等的比较。
运算符有:>、<、>=、<=、= =、!=。
优先级和结合性:前四个同级,后两个同级。
结合性:自左向右。
关系表达式:由关系运算符所构成的式子就是关系表达式。结果是“真”与“假”。
注意:当关系表达式中出现两个关系运算符时,不能简单理解为一般数学含义。如:
0<=x<=10。先计算左侧的0<=x,因为是逻辑值,所以结果不是0就是1,再判断0或1是否小于10。
练习:main()
{int x=8,y,z;
y=z=x++;
printf(“%d”,(x>y)= =(z=x-1));
x=y= =z;
printf(“%d”,x);
printf(“%d\n”,x++>=++y-z--);
}
因为是逻辑运算,所以结果是:0 1 1
逻辑运算:可以进行更复杂的比较运算。
如表示数学上的0<=x<=10,则应该写成0<=x&&x<=10
逻辑运算符有三种:!、&&、||分别是逻辑非、逻辑与、逻辑或运算。
逻辑运算的结果也是真与假,即用1和0表示。
优先级和结合性:
优先级:逻辑与仅低于算术运算符及关系运算符,但高于逻辑或;逻辑或又高于赋值运算和逗号运算符。
结合性:非运算的结合性从右向左,与和或是从左向右。
逻辑表达式:用逻辑运算符连接的关系表达式。
一般先算关系表达式的值,再进行逻辑判断。
五) 测试数据长度运算:
C语言有测试数据长度的运算符:sizeof,能测试数据占用的内存字节数。
格式:sizeof(exp)
exp可以是关键字、变量、表达式。
结合性:从右向左。
作业:用sizeof测试TC中各种数据类型的长度。
Main()
{char ch;
int x=5,y=6;
float a=1.28,b=3000.0;
printf(“char:%d\n”,sizeof(char));
printf(“short int:%d int:%d long int:%d\n”,sizeof(short int),sizeof(int),sizeof(long int));
printf(“float:%d\n”,sizeof(a));
printf(“double:%d long double:%d\n”,sizeof(double),sizeof(long double));
printf(“int express:%d\n”,sizeof(x+y));
printf(“float express:%d\n”,sizeof(a+b));
printf(“character express:%d\n”,sizeof(‘a’-‘o’));
}
六、 常用数学函数:
C语言在标题文件math.h中定义了许多数学函数,当调用这些函数时必须加:
#include <math.h>。
如:求cos30度的值。
#include<math.h>
main()
{double x,y;
x=30.0;
y=cos(x/180*3.14159);
printf(“%f\n”,y);
}
结果是:0.866026
作业:求65。2的值和e3。2145689的值。
其中65.。2的值表示为pow(6.0,5.2)
e3。2145689的值表示为exp(3.2145689)
七、 不同类型数据的输入输出:
常用的有:格式输入输出函数、单字符输入输出函数、文件输入输出函数。
一) printf()函数:可以用在所有类型的数据输出上。
格式:printf(“格式控制字符串”,输出项清单);
格式控制字符串:规定了输出项的显示格式。包括三种符号:
格式转换说明符:规定了输出项的显示格式。
%c:输出一个字符。 %d(%I):按实际位数输出十进制整数。
%f:输出浮点数,小数保留6位。 %e:按指数格式输出浮点数。
%g:按最小宽度输出。 %s:按实际位数输出字符串
%u(%o)(%x):按实际位数输出无符号十进制整数。(八进制、十六进制)
%%:输出一个%
转义字符:主要用于控制数据的显示位置。
其他字符:除控制字符和转义字符外的字符,它们与输出的项目无关。
需要说明:调用printf()时,格式转换说明符与输出项必须在顺序和类型上一一对应和匹配; 输出数据的个数取决于格式说明符的个数; 当printf输出项是表达式时,先按从右向左计算,再按从左向右输出;
特殊格式控制:有时为了控制输出的特殊格式,需要使用特殊控制符:
%[-]m .nd:用于整数的输出。
M是输出项的总宽度,n是输出的最小有效位数,-负号代表左对齐数据。
%m .nf:用于实数的小数形式输出,能自动进行四舍五入。
M规定输出项的总宽度,n规定输出的小数位,如果不规定n,则n=6
%m.ne:用于实数形式输出,m总宽度,小数位是n-1。
%m.ns:用于字符串的输出,m总宽度,n只输出字符串的前n个字符。
类型修饰:
在类型转换符d,I,o,u,x之前可加字母l和h,分别表示long 和short。
在类型转换符f,e,g前加字母l,表示输出double或long double型。
二) scanf()函数:
用于所有类型数据的输入。
格式:scanf(“格式控制字符串”,输入项目清单);
%c:读入一个字符。 %d(%I):读入一个十进制整数。 %f(%e):读入一个浮点数
%h:读入一个short int型数。 %s:读入字符串,遇到空格、制表符或换行符结束。
%u:读入一个无符号十进制整数。 %0:读入一个八进制整数。
%x:读入一个十六进制整数。 %D(%I):读入十进制长整型。
%F:读入双精度型数。 %O:读入八进制长整型。 %X:读入十六进制长整数。
需要说明:scanf()里至少有一个输入项,输入项必须用地址表示。
调用scanf() 时,格式转换说明符与输入项必须和数据一一对应。
Scanf()中若有几个输入项,数据之间只能用空格、制表符、回车键分隔。
当用%d控制int时,输入的数据必须是整数;当用%f或%e控制float或double时,可从键盘输入等值的整数、小数或指数形式的实数;当用%c控制char时,输入的字符不必加单引号,如果连续几个char型数据同时输入时,不要用分隔符。
如果在scanf()里出现格式转换符以外的字符,必须按原样输入。
特殊控制:1抑制赋值:在%之后,转换符之前加入一个*,scanf()将正常读入对应数据,但不赋值。如scanf(“%d%*c%d”,&a,&b); 输入10/20,则a=10,b=20
2限制接收的字符个数:在%和控制字符之间插入一个整数,可以规定输入数据的字符个数。如scanf(“%4d%4d”,&h,&k);
三) getchar()和putchar
该函数定义在stdio.h文件中,当需要输入单个字符时,效果比scanf()和printf()好。
格式:putchar(c); 代表字符型常量或变量,也可是一个取值不大于255的整型常量或变量。
练习:用putchar()输出一个字符。
#include <stdio.h>
main()
{int c;
char d;
c=65;d=’A’;
putchar(c );
putchar(d);
putchar(‘A’);
putchar(65);
}
程序中的四个putchar会输出相同的结果:AAAA
putchar()还可以输出不可显示字符或控制字符。如:putchar(‘\07’)表示一声响铃。
Getchar() :是一个不带参数的函数。
练习:#include<stdio.h>
main()
{char c;
c=getchar();
printf(“%c\n”,c);
printf(“%d\n”,c);
}
如果输入a,则屏幕显示三行:两行a,一行97
**使用getchar()时,回车键也是输入字符的一部分,特别是连续调用该函数时要注意 。
四) 单字符输入函数:getche()和getch()
使用getchar()时,输入一个字符后必须回车,而getche()和getch()就不需要。
该函数是定义在conio.h文件中,所以使用时要用#include<conio.h>
练习:#include<conio.h>
main()
{char c;
c=getche();
printf(“%c\n”,c);
}
运行时,只要输入a,则显示aa。第一个a是getche()显示的,第二个a是printf()显示的。
有时不需要显示第一个a,所以可用getch()。这是两者的不同。
作业:编写一程序,输入三角形的三条边a,b,c(假设三条边能构成三角形)。计算并输出该三有形的面积。
提示:三角形的面积公式:p=(a+b+c)/2
area=根号下p(p-a)(p-b)(p-c)。
程序中用到数学函数sqrt(),所以要用math.h文件。
程序中p和area必须定义成float或double型。
程序流程控制
一、 基本概念:
C语言的结构控制基本上包括:顺序结构、选择结构、循环结构三种。
顺序结构:按照程序的输入依次执行程序的过程。
选择结构:根据条件判断来决定执行哪一条程序。
循环结构:根据条件来决定是否重复执行某一过程。
三种基本结构有一个共同点:只有一个程序的入口和一个程序的出口。
二、 选择结构程序设计:
一) 用if ……else构成的二分支选择结构:当条件成立时执行一个分支,否则,执行另一个分支。
练习:比较两个整数x和y的大小,将大的数放在x中,小的放在y中。
Main()
{int x,y,t;
scanf(“%d%d”,&x,&y);
if (x<y)
{t=x;x=y;y=t;}
printf(“%d %d\n”,x,y);
}
格式:if (测试表达式)
语句一;
或 if (测试表达式)
语句1;
else
语句2;
其中测试表达式必须放在括号里。
**在if语句中,测试表达式不限于关系表达式和逻辑表达式,也可以是任何数值表达式; if语句中的分支语句可以是单条语句,也可是多条语句。
If语句可以嵌套,即if 里再套if 语句,但要注意嵌套的先后配对关系。
二) if……else if ……else语句:用来解决多分支选择的语句。
格式:if (测试表达式1)
语句1;
else if (测试表达式2)
语句2;
else if (测试表达式3)
语句3;
…………
三) 用条件表达式实现的选择结构:
是C语言提供供的唯一一个三元运算符,由?和:构成,可连接三个运算量而构成条件表达式。
格式:表达式1?表达式2:表达式3
执行过程:若表达式1的值成立,则执行表达式2,并将表达式2的值作为整个条件表达式值;若表达式1的值不成立,则执行表达式3,并将表达式3的值作为整个条件表达式的值。
如已知:int a=8,b=10;则(a>b)?a:b的值是多少?
先计算a>b,判断不成立,则将表达式3的值作为整个表达式的值,还是10.
优先级:仅高于赋值运算符和逗号运算符。
结合性:自右向左。
条件表达式的数据类型:表达式2和表达式3类型可以不同,但最后都取最高的类型。如表达式2为int,表达式3为float,则表达式最后类型是float。
条件表达式也可以做选择结构。如下题:
从键盘接收一个字符放在变量 c中。要求只把输入的小写字母转换成大写字母,其它字母不变,并显示是输入了小写字母还是其他字符。
#include<stdio.h>
Main()
{char ch,c;
scanf(%c”,&ch);
c=ch>=’a’&&ch<=’z’?ch-32:ch;
printf(ch>=’a’&&ch<=’z’?”lower case chracter”:”other chracter”);
}
其中c=ch>=’a’&&ch<=’z’?ch-32:ch;相当于:
if (ch>=’a’&&ch<=’z’)
c=ch-32;
else
c=ch;
其中printf(ch>=’a’&&ch<=’z’?”lower case chracter”:”other chracter”);相当于:
if (ch>=’a’&&ch<=’z’)
printf(“lower case chracter”);
else
printf(“other chracter”);
四) 用switch做多分支选择:
比if 嵌套和if else方便简单!
格式:switch (表达式e)
{case 常量表达式1:语句1;
case 常量表达式2:语句2;
…………
case 常量表达式n:语句n;
default: 语句n+1;
}
其中e必须是整型表达式,且必须在小括号里;case之间有空格,且以“:”结尾。
执行过程:先计算表达式e 的值,然后将此值依次与各个case中的常量表达式匹配,如果相等就执行case 后的语句。如果没有匹配的,但有default,则执行default后的语句。没有default就什么也不执行。
练习:为小学生随机生成两位的加法和减法练习题各一道,或仅生成一道减法练习题,并根据输入的结果自动判分。
提示:先用random(99)+1产生两个随机数放在变量x和y中,再用一个random产生一个0或1的随机数,若为1则产生一道减法题,若为0则产生一道加法和减法练习题。输入结果后,计算机显示“做对”或“做错”的提示信息。
因为random()是定义在stdlib.h文件中,另外,randomize()可对random()按时间顺序进行初始化,也是定义在上述文件中的。所以程序如下:
#include <stdlib.h>
main()
{int x,y,z;
randomize();
x=random(99+1);
y=random(99+1);
switch((int)random(2))
{case 0:printf(“%d+%d=”,x,y);
scanf(“%d”,&z);
if (z= =x+y)
printf(“it is right!\n”);
else
printf(“it is wrong!\n”);
case 1:printf(“%d-%d=”,x,y);
scanf(“%d”,&z);
if (z= =x-y)
printf(“it is right!\n”);
else
printf(“it is wrong!\n”);
}
}
***注意:switch后面圆括号中的表达式必须是整型的数值表达式,包括算术表达式、赋值表达式、关系表达式、逻辑表达式等。Case 后面的常量表达式也必须是整型的。
各个case中的常量表达式的值应互不相同,否则就有矛盾。
在switch语句中,允许多个case共用一个语句序列。如:
char score;
switch(score)
{case ‘A’:
case ‘B’:
case ‘C’:printf(“pass\n”); 当score 的值是A、B、C时都执行该printf
case ‘D’:printf(“fail\n”);
default:printf(“error\n”);
}
当switch中各个case及default的位置会影响程序运行的结果。
Switch可以嵌套使用,要求内层的switch必须完整的包含在外层某个case中,内外层switch的case 中也可以有相同的常量表达式,不会引起误会。
五) 用switch和break构成多分支选择结构
与switch和case相比,break更能起到分支作用,就算后边还有case,程序流程也不受影响。
练习:用break修改上述为小学生出题的程序,使其每次只产生一种练习题,如加、减、乘、除。按任意键退出。
#include<stdlib.h>
#include<stdio.h>
main()
{int x,y,z,answer;
randomize();
x=random(99)+1;
y=random(99+1);
switch((int)random(4))
{case 0:printf(“%d+%d=”,x, y);
answer=x+y;break;
case 1:printf(%d-%d=”,x, y);
answer=x-y;break;
case 2:printf(“%d*%d=”,x, y);
answer=x*y;break;
case 3:printf(%d/%d=”,x,y);
answer=x/y;break;
}
scanf(“%d”,&z);
if (z= =answer)
printf(“it is right!\n”);
else
printf(“it is wrong!\n”);
getch();
}
三、 循环结构程序设计:
有三种循环方式:for 、while 、do----while。
一) for 循环:
又名步长循环。格式:for (表达式1;表达式2;表达式3) 循环体语句;
表达式1是对循环变量初始化,般为赋值语句。表达式2是条件,一般是关系或逻辑表达式。表达式3是循环的步长,一般也为赋值语句。
练习:编程输入10个数,从中找出最大数。
Main()
{int I,a,max;
scanf(“%d”,&a)
max=a; 将第一个数作最大数
for (I=1;I<10;I++)
{scanf(“%d”,&a);
if (max <a)
max=a;
}
printf(“max=%d\n”,max);
}
注意事项: for 循环为先判断后执行,如果条件不成立可以一次都不执行;循环体语句可以是多条语句,用花括号括起来;循环体可以是空语句,作用是延迟时间;for 中的语句表达式可以是任意的类型,也可全部省略,但分号必须保留。
如果省略了表达式1,则初始值必须放在循环体外。省略表达式2,就必须在循环体内实现循环结束的条件。省略表达式3,就必须在循环体内修改循环变量的值。
练习:编写一个程序,求n的阶乘。
提示:一个边乘的问题。
Main()
{int I,n,p=1;
scanf(“%d”,&n);
for (I=1;I<=n;I++)
p=p*I;
printf(“%d %d\n”,n,p);
}
作业:编写一个程序,求100以内所有奇数的和。
Main()
{ int I,sum=0;
for (I=1;I<100,I+=2)
sum=sum+I;
printf(“%d\n”,sum);
}
二) while循环:
又名“当型”循环。
格式:while (测试表达式) 循环体语句;
其中,测试表达式是任意表达式,用来判断循环是否终止,循环体可是单语句、空语句或复合语句。
执行过程:首先判断测试表达式是否为0,如果不是0就执行循环体,然后再判断测试表达式是否为0,直到表达式为0才结束循环。
注意**while循环的初值不是象for先赋值,而是提前赋值,循环体语句中也必须要有终止的可能性。
同for 相同的是,也是先判断后执行。
如:I=3;
while (I<3)
printf(“I=%d”,I);
三) do----while循环
又名“直到型”循环。
格式:do
{循环体语句;
}while (测试表达式);
因为特别酷似while语句,所以特别要求:书写时,既使循环体只有一条语句,也用花括号括起来,写在do的下一行;while则
展开阅读全文