C语言基础

C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

main函数


  通常情况下,函数的命名没有限制,但main是一个特殊的函数名,每个程序都从main函数的起点开始执行,这意味着每个程序都必须在某个位置包含一个main函数。

  main函数通常会调用其它函数来帮助完成某些工作,被调用的函数可以是我们自己编写的,也可以来自于函数库。

  函数中的语句用一对花括号{}括起来。

 
 
  1. #include "stdio.h"
  2. int main()
  3. {
  4. printf("Hello world\n");
  5. return 0;
  6. }

  调用函数时,只需要使用函数名加上用圆括号括起来的参数表即可。上面这条语句将"Hello, world\n"作为参数调用printf函数。printf是一个用于打印输出的库函数,在此处, 它打印双引号中间的字符串。return 0main的返回值。

        用双引号括起来的字符序列称为字符串或字符串常量,如" Hello, world\n"就是一个字符串。目前我们仅使用字符串作为 printf及其它函数的参数。

  在C语言中,字符序列\n表示换行符,在打印中遇到它时,输出打印将换行,从下一行的左端行首开始。

  #include "stdio.h"用于告诉编译器在本程序中包含标准输入/输出库。许多C语言源程序的开始处都包含这一行语句。

  函数之间进行数据交换的一种方法是调用函数向被调用函数提供一个值(称为参数)列表。函数名后面的一对圆括号将参数列表括起来。在上一节例子中,main函数不需要任何参数,因此用空参数表( )表示。

基本数据类型


  所谓数据类型是按被定义变量的性质,表示形式,占据存储空间的多少,构造特点来划分的。在C语言中,数据类型可分为:基本数据类型,构造数据类型,指针类型,空类型四大类。

常量


 
 
  1. #include "stdio.h"
  2. #define PRICE 30
  3. int main()
  4. {
  5. int num,total;
  6. num=10;
  7. total=num* PRICE;
  8. printf("total=%d",total);
  9. return 0;
  10. }

在程序执行过程中,其值不发生改变的量称为常量,其值可变的量称为变量。例如上面所示0、10、30都是常量;其中PRICE是符号常量,它的值为30。

符号常量:用标识符代表一个常量,称之为符号常量。

说明:符号常量在使用之前必须先定义,其一般形式为:#define 标识符 常量

另外还有字符常量如‘a’、‘b’等。

习惯上符号常量的标识符用大写字母,变量标识符用小写字母,以示区别(如上例所示)。

变量


 
 
  1. int a=3;
  2. int b,c=5;
  3. float x=3.2,y=3.0,z=0.75;
  4. char ch1='K',ch2='P';

其值可以改变的量称为变量。

如上例所示其中a、b、c、x、y、z、ch1、ch2都是变量,其中ch1、ch2是字符型变量。

变量定义的一般形式为:

类型说明符 变量名,变量名, ...;

注意,在定义中不允许连续赋值,如a=b=c=5是不合法的。

整型数据


整型数据的表示方法

十进制数其数码为0~9。例:23,-34,56637……

八进制数必须以0开头,即以0作为八进制数的前缀。数码取值为0~7。八进制数通常是无符号数。例:015(十进制为13)、0101(十进制为65)、0177777(十进制为65535)……

十六进制数前缀为0X或0x。其数码取值为0~9,A~F或a~f。例:0X2A(十进制为42)、0XA0 (十进制为160)、0XFFFF (十进制为65535)……

整数的后缀可以用后缀“L”或“l”来表示长整型数。例:158L (十进制为158),012L (十进制为10),0X15L (十进制为21)……

整型数据的一般分类如下:

基本型int,在内存中占2个字节;

短整型short intshort,在内存中占2个字节;

长整型long intlong,在内存中占4个字节;

无符号型unsigned

实数的表示


1) 十进制数形式

  • 由数码0~ 9和小数点组成。 例如:0.0、25.0、5.789、0.13、5.0、300.、-267.8230 等均为合法的实数。
  • 注意,必须有小数点。

2) 指数形式

由十进制数,加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成。其一般形式为: a E n(a为十进制数,n为十进制整数)其值为 a*10n。如:

  • 2.1E5 (等于2.1*105)
  • 3.7E-2 (等于3.7*10-2)
  • 0.5E7 (等于0.5*107)
  • -2.8E-2 (等于-2.8*10-2)

字符型数据是用单引号括起来的一个字符。例如:'a'、'b'、'='、'+'、'?'。

字符数据的特点

字符型数据只能用单引号括起来,不能用双引号或其它括号。

字符型数据只能是单个字符,不能是字符串。

字符可以是字符集中任意字符。但数字被定义为字符型之后就不能参与数值运算。如'5'和5 是不同的。'5'是字符型数据,不能参与运算。

强制转换


强制类型转换是通过类型转换运算来实现的。其一般形式为:(类型说明符)(表达式)

其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。

 
 
  1. (float) a; /* 把a转换为实型 */
  2. (int)(x+y); /* 把x+y的结果转换为整型 */

其中/* */是注释语句。

C语言的运算符分类


运算符说明
算术运算符用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(--)共七种。
关系运算符用于比较运算。包括大于(>)、小于(<)、等于(==)、 大于等于(>=)、小于等于(<=)和不等于(!=)六种。
逻辑运算符用于逻辑运算。包括与(&&)、或(||)、非(!)三种。
位操作运算符参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。
赋值运算符用于赋值运算,分为简单赋值(=)、复合算术赋值(+=, -=, *=, /=, %=)和复合位运算赋值(&=, |=, ^=, >>=, <<=)三类共十一种。
条件运算符这是一个三目运算符,用于条件求值(?:)。
逗号运算符用于把若干表达式组合成一个表达式(,)。
指针运算符用于取内容(*)和取地址(&)二种运算。
求字节数运算符用于计算数据类型所占的字节数(sizeof)。
特殊运算符有括号(),下标[],成员(->,.)等几种。

运算符应用


例如下面的程序应用

 
 
  1. int a,b,c,d,e,f;
  2. a=100%3; /*求100除以3的余数*/
  3. a++; /*a的值进行增1*/
  4. b=(100>10); /*将关系表达式的值赋给b*/
  5. c=c&0 /*c与0与运算*/
  6. a=100>23?0:1; /* 三元运算符的应用*/
  7. a=(100,200>12,30); /*逗号表达式的应用*/
在编辑器中完成以下练习,输出a与b值。
 
 
  1. #include "stdio.h"
  2. void main()
  3. {
  4. int a,b,c,d,e,f;
  5. a=(100,200>12,30);
  6. b=100>23?0:1;
  7. printf("a=%d\n",a);
  8. printf("b=%d\n",b);
  9. }

一维数组


 
 
  1. int a[10]; // 说明整型数组a,有10个元素
  2. float b[10], c[20]; // 说明实型数组b,有10个元素,实型数组c,有20个元素
  3. char ch[20]; // 说明字符数组ch,有20个元素

以上程序内容,都是不同类型的数组的定义方式,而这些数组都是一维数组。

一维数组的定义方式为: 类型说明符 数组名 [常量表达式];

其中,类型说明符是任一种基本数据类型或构造数据类型。数组名是用户定义的数组标识符。方括号中的常量表达式表示数据元素的个数,也称为数组的长度。

一维数组元素的引用

数组元素的一般形式为:数组名[下标]

 
 
  1. a[1]
  2. b[3]
  3. ch[0]

都是合法的数组元素。

一维数组的初始化

初始化赋值的一般形式为:类型说明符 数组名[常量表达式] = { 值, 值……值 };

其中在{ }中的各数据值即为各元素的初值,各值之间用逗号间隔。例如:

 
 
  1. int a[10]={ 0,1,2,3,4,5,6,7,8,9 };

二维数组


 
 
  1. int a[3][4];
  2. float b[3][3];
  3. char ch[5][5];

以上程序内容,都是不同类型的数组的定义方式,而这些数组都是二维数组。

二维数组的定义形式为:类型说明符 数组名[常量表达式1][常量表达式2]

其中常量表达式1表示第一维下标的长度,常量表达式2 表示第二维下标的长度。

如上面程中a[3][4]是一个三行四列的数组,数组名为a,其下标变量的类型为整型。该数组的下标变量共有3×4个,即:

a[0][0], a[0][1], a[0][2], a[0][3]

a[1][0], a[1][1], a[1][2], a[1][3]

a[2][0], a[2][1], a[2][2], a[2][3]

在C语言中,二维数组是按行排列的。即,先存放a[0]行,再存放a[1]行,最后存放a[2]行。

二维数组的元素也称为双下标变量,其表示的形式为:数组名[下标][下标]

二维数组的初始化

二维数组初始化也是在类型说明时给各下标变量赋以初值。二维数组可按行分段赋值,也可按行连续赋值。

例如对数组a[5][3]:

按行分段赋值可写为:

 
 
  1. int a[5][3]={ {80,75,92}, {61,65,71}, {59,63,70}, {85,87,90}, {76,77,85} };

按行连续赋值可写为:

 
 
  1. int a[5][3]={ 80,75,92,61,65,71,59,63,70,85,87,90,76,77,85};

这两种赋初值的结果是完全相同的。

字符数组


字符数组的定义形式与前面介绍的数值数组相同。例如:char c[10];

字符数组也可以是二维或多维数组。例如:char c[5][10];即为二维字符数组。

字符数组的初始化与前面数值数组的初始化相同,这里不再重复。

字符数组的引用普通数组一样,也是通过下标引用。

【例】输出字符数组中的元素。

 
 
  1. #include "stdio.h"
  2. int main(void)
  3. {
  4. int i,j;
  5. char a[][5]={{'B','A','S','I','C',}, {'d','B','A','S','E'}};
  6. for(i=0;i<=1;i++)
  7. {
  8. for(j=0;j<=4;j++)
  9. printf("%c",a[i][j]);
  10. printf("\n");
  11. }
  12. return 0;
  13. }

本例的二维字符数组由于在初始化时全部元素都赋以初值,因此一维下标的长度可以不加以说明。

在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。例如:char c[]="C program";

数组举例


【例】把一个整数按大小顺序插入已排好序的数组中。

  为了把一个数按大小插入已排好序的数组中,应首先确定排序是从大到小还是从小到大进行的。设排序是从大到小进序的,则可把欲插入的数与数组中各数逐个比较,当找到第一个比插入数小的元素i时,该元素之前即为插入位置。然后从数组最后一个元素开始到该元素为止,逐个后移一个单元。最后把插入数赋予元素i即可。如果被插入数比所有的元素值都小则插入最后位置。

 
 
  1. #include "stdio.h"
  2. int main(void)
  3. {
  4. int i,j,p,q,s,n,a[11]={127,3,6,28,54,68,87,105,162,18};
  5. for(i=0;i<10;i++)
  6. {
  7. p=i;q=a[i];
  8. for(j=i+1;j<10;j++)
  9. if(q<a[j]) {p=j;q=a[j];}
  10. if(p!=i)
  11. {
  12. s=a[i];
  13. a[i]=a[p];
  14. a[p]=s;
  15. }
  16. printf("%d ",a[i]);
  17. }
  18. printf("\ninput number:\n");
  19. n=85;
  20. for(i=0;i<10;i++)
  21. if(n>a[i])
  22. {
  23. for(s=9;s>=i;s--) a[s+1]=a[s];
  24. break;
  25. }
  26. a[i]=n;
  27. for(i=0;i<=10;i++)
  28. printf("%d ",a[i]);
  29. printf("\n");
  30. return 0;
  31. }

函数的定义


用于求两个数中的大数,可写为:

 
 
  1. int max(int a, int b)
  2. {
  3. if (a>b) return a;
  4. else return b;
  5. }

  以上程序中:int 表示类型标识符;max 表示函数名称;括号内的 int aint b 表示函数的参数;而大括号中间的部分表示函数的语句体。

  其中类型标识符和函数名称为函数头;类型标识符指明了本函数的类型,函数的类型实际上是函数返回值的类型;函数名是由用户定义的标识符,函数名后有一个空括号,如果无参数,但括号不可少;{}中的内容称为函数体。在函数体中声明部分,是对函数体内部所用到的变量的类型说明。

  在很多情况下都不要求无参函数有返回值,此时函数类型符可以写为void。

  在max函数体中的return语句是把a(或b)的值作为函数的值返回给主调函数。有返回值函数中至少应有一个return语句。

  在C程序中,一个函数的定义可以放在任意位置,既可放在主函数main之前,也可放在main之后。例如:可把max 函数置在main之后,也可以把它放在main之前。修改后的程序如下所示。

【例】函数定义示例

 
 
  1. #include "stdio.h"
  2. int max(int a,int b)
  3. {
  4. if(a>b)return a;
  5. else return b;
  6. }
  7. int main()
  8. {
  9. int max(int a,int b);
  10. int x=3,y=5,z=0;
  11. printf("input two numbers:\n");
  12. z=max(x,y);
  13. printf("maxnum=%d",z);
  14. return 0;
  15. }

现在我们可以从函数定义、函数说明及函数调用的角度来分析整个程序,从中进一步了解函数的各种特点。

函数调用的方式


在C语言中,可以用以下几种方式调用函数。

1) 函数表达式 例如:

 
 
  1. z=max(x,y);

2) 函数语句 例如:

 
 
  1. printf ("%d",a);
  2. scanf ("%d",&b);

3) 函数实参

函数作为另一个函数调用的实际参数出现。这种情况是把该函数的返回值作为实参进行传送,因此要求该函数必须是有返回值的。例如:

 
 
  1. printf("%d",max(x,y));

语句简述


C程序的结构:

C程序的执行部分是由语句组成的。程序的功能也是由执行语句实现的。

C语句可分为以下五类:

1.表达式语句 例如,

 
 
  1. x=y+z; // 赋值语句
  2. y+z; // 加法运算语句,但计算结果不能保留,无实际意义
  3. i++; // 自增1语句,i值增1

2.函数调用语句 例如,

 
 
  1. printf("C Program"); // 调用库函数,输出字符串

3.控制语句

  1. 条件判断语句:if语句、switch语句;

  2. 循环执行语句:do while语句、while语句、for语句;

  3. 转向语句:break语句、goto语句、continue语句、return语句。

4.复合语句,以{}的形式出现。 例如,

 
 
  1. {
  2. x=y+z;
  3. a=b+c;
  4. printf("%d%d", x, a);
  5. }

5.空语句 以“;”为结尾,中间没有任何语句。例如,

 
 
  1. while(getchar()!='\n');

赋值语句


赋值语句是由赋值表达式再加上分号构成的表达式语句。其一般形式为: 变量=表达式;

在赋值语句的使用中需要注意以下几点。

1) 由于在赋值符“=”右边的表达式也可以又是一个赋值表达式。

例如:

 
 
  1. a=b=c=d=e=5;

2) 注意在变量说明中给变量赋初值和赋值语句的区别。给变量赋初值是变量说明的一部分,赋初值后的变量与其后的其它同类变量之间仍必须用逗号间隔,而赋值语句则必须用分号结尾。例如:

 
 
  1. int a=5,b,c;

3) 在变量说明中,不允许连续给多个变量赋初值。如下述说明是错误的:

 
 
  1. int a=b=c=5;
必须写为
 
 
  1. int a=5,b=5,c=5;

4) 注意赋值表达式和赋值语句的区别。

 
 
  1. if((x=y+5)>0) z=x; // 合法语句
  2. if((x=y+5;)>0) z=x; // 非法语句

格式函数


在C语言中,输出字符使用 putchar() 函数,输入字符使用 getchar() 函数。

putchar函数(字符输出函数)

putchar 函数是字符输出函数,其功能是在显示器上输出单个字符。其一般形式为: putchar(字符变量);

例如:

 
 
  1. putchar('A'); // 输出大写字母A
  2. putchar(x); // 输出字符变量x的值
  3. putchar('\101'); // 也是输出字符A
  4. putchar('\n'); // 换行

对控制字符则执行控制功能,不在屏幕上显示。

getchar函数(键盘输入函数)

getchar函数的功能是从键盘上输入一个字符。其一般形式为: getchar();

通常把输入的字符赋予一个字符变量,构成赋值语句,如:

 
 
  1. char c;
  2. c=getchar();
printf函数

printf函数称为格式输出函数,printf函数调用的一般形式为:printf(“格式控制字符串”, 输出表列)

其中格式控制字符串用于指定输出格式。格式控制串可由格式字符串和非格式字符串两种组成。格式字符串是以%开头的字符串,在%后面跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数等。如:

  • “%d”表示按十进制整型输出;
  • “%ld”表示按十进制长整型输出;
  • “%c”表示按字符型输出等。

非格式字符串原样输出,在显示中起提示作用。输出表列中给出了各个输出项,要求格式字符串和各输出项在数量和类型上应该一一对应。

例如:

 
 
  1. #include "stdio.h"
  2. int main()
  3. {
  4. int a=88,b=89;
  5. printf("%d %d\n",a,b);
  6. printf("%d,%d\n",a,b);
  7. printf("%c,%c\n",a,b);
  8. printf("a=%d,b=%d",a,b);
  9. return 0;
  10. }
scanf函数

scanf函数称为格式输入函数,scanf函数的一般形式为:scanf(“格式控制字符串”, 地址表列);

 
 
  1. #include "stdio.h"
  2. int main(void)
  3. {
  4. int a,b,c;
  5. printf("input a,b,c\n");
  6. scanf("%d%d%d",&a,&b,&c);
  7. printf("a=%d,b=%d,c=%d",a,b,c);
  8. return 0;
  9. }

在本例中,由于scanf函数本身不能显示提示串,故先用printf语句在屏幕上输出提示,请用户输入a、b、c的值。执行scanf语句,等待用户输入。在scanf语句的格式串中由于没有非格式字符在“%d%d%d”之间作输入时的间隔,因此在输入时要用一个以上的空格或回车键作为每两个输入数之间的间隔。如:7 8 9或

7

8

9

程序举例


例:已知矩形的边长,求矩形面积。已知矩形的边长a、b,则矩形的面积公式为:area=a*b。源程序如下:
  
  
  1. #include "stdio.h"
  2. int main()
  3. {
  4. float a=3.0,b=4.0,area;
  5. area=a*b;
  6. printf("a=%7.2f,b=%7.2f\n",a,b);
  7. printf("area=%7.2f\n",area);
  8. return 0;
  9. }

if语句


用if语句可以构成分支结构。它根据给定的条件进行判断,以决定执行某个分支程序段。C语言的if语句有三种基本形式。

第一种形式为基本形式:if(表达式)语句

 
 
  1. #include "stdio.h"
  2. int main()
  3. {
  4. int a=5,b=10,max;
  5. printf("\n input two numbers: a=%d b=%d",a,b);
  6. max=a;
  7. if (max<b) max=b;
  8. printf("max=%d",max);
  9. return 0;
  10. }

本例程序中,输入两个数a、b。把a先赋予变量max,再用if语句判别max和b的大小,如max小于b,则把b赋予max。因此max中总是大数,最后输出max的值。

第二种形式为: if(表达式)语句1;else 语句2;

例如:输入两个整数,输出其中的大数。

 
 
  1. #include "stdio.h"
  2. int main()
  3. {
  4. int a, b;
  5. a=5;b=10;
  6. printf("\n input two numbers: a=%d b=%d",a,b);
  7. if(a>b)
  8. printf("max=%d\n",a);
  9. else
  10. printf("max=%d\n",b);
  11. return 0;
  12. }

第三种形式为:if(表达式1)语句1;else if(表达式2)语句2;else if(表达式3)……

 
 
  1. #include "stdio.h"
  2. int main()
  3. {
  4. char c;
  5. printf("input a character: ");
  6. c='B';
  7. if(c<32)
  8. printf("This is a control character\n");
  9. else if(c>='0'&&c<='9')
  10. printf("This is a digit\n");
  11. else if(c>='A'&&c<='Z')
  12. printf("This is a capital letter\n");
  13. else if(c>='a'&&c<='z')
  14. printf("This is a small letter\n");
  15. else
  16. printf("This is an other character\n");
  17. return 0;
  18. }

本例要求判别键盘输入字符的类别。可以根据输入字符的ASCII码来判别类型。由ASCII码表可知ASCII值小于32的为控制字符。在“0”和“9”之间的为数字,在“A”和“Z”之间为大写字母, 在“a”和“z”之间为小写字母,其余则为其它字符。这是一个多分支选择的问题,用if-else-if语句编程,判断输入字符ASCII码所在的范围,分别给出不同的输出。例如输入为“g”,输出显示它为小写字符。

另外,if语句也可以嵌套使用,但是要注意if与else要成对出现。

switch语句


C语言还提供了另一种用于多分支选择的switch语句,其一般形式为:

switch(表达式){ 

    case 常量表达式1:  语句1;

    case 常量表达式2:  语句2;

    … 

    case 常量表达式n:  语句n;

    default:  语句n+1;

}

其语义是:计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。例

 
 
  1. #include "stdio.h"
  2. int main()
  3. {
  4. int a;
  5. printf("input integer number: ");
  6. a=1;
  7. switch (a)
  8. {
  9. case 1:printf("Monday\n"); break;
  10. case 2:printf("Tuesday\n"); break;
  11. case 3:printf("Wednesday\n"); break;
  12. default:printf("error\n");
  13. }
  14. return 0;
  15. }

在使用switch语句时还应注意以下几点:

  1. 在case后的各常量表达式的值不能相同,否则会出现错误。
  2. 在case后,允许有多个语句,可以不用{}括起来。
  3. 各case和default子句的先后顺序可以变动,而不会影响程序执行结果。
  4. default子句可以省略不用。

程序举例


例:计算器程序。用户输入运算数和四则运算符,输出计算结果。

 
 
  1. #include "stdio.h"
  2. int main()
  3. {
  4. float a,b;
  5. char c;
  6. printf("input expression: a+(-,\*,/)b \n");
  7. a=1.0;b=3.0;c='-';
  8. switch(c){
  9. case '+': printf("%f\n",a+b);break;
  10. case '-': printf("%f\n",a-b);break;
  11. case '\*': printf("%f\n",a\*b);break;
  12. case '/': printf("%f\n",a/b);break;
  13. default: printf("input error\n");
  14. }
  15. return 0;
  16. }

本例可用于四则运算求值。switch语句用于判断运算符,然后输出运算值。当输入运算符不是 +、-、*或 / 时给出错误提示。

goto语句


【例】求 1+2+3+......+100的和。

 
 
  1. #include "stdio.h"
  2. int main(void)
  3. {
  4. int i,sum=0;
  5. i=1;
  6. loop: if(i<=100)
  7. {
  8. sum=sum+i;
  9. i++;
  10. goto loop;
  11. }
  12. printf("%d\n",sum);
  13. return 0;
  14. }

以上程序的实现主要是goto语句,goto语句使之成为一个循环。goto语句的使用格式为:

goto 语句标号;

其中标号是一个有效的标识符,这个标识符加上一个“:”一起出现在函数内某处,执行goto语句后,程序将跳转到该标号处并执行其后的语句。

goto语句通常不用,主要因为它将使程序层次不清,且不易读,但在多层嵌套退出时,用goto语句则比较合理。

while语句

【例】计算从1加到100的值。

 
 
  1. #include "stdio.h"
  2. int main()
  3. {
  4. int i,sum=0;
  5. i=1;
  6. while(i<=100){
  7. sum=sum+i;
  8. i++;
  9. }
  10. printf("%d\n",sum);
  11. return 0;
  12. }

以上代码实现了1加到100的值,而主要是通过while语句来实现的。

while语句的一般形式为: while(表达式) 语句

其中表达式是循环条件,语句为循环体。

while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。

do-while语句

【例】计算从1加到100的值

 
 
  1. #include "stdio.h"
  2. int main(void)
  3. {
  4. int i,sum=0;
  5. i=1;
  6. do
  7. {
  8. sum=sum+i;
  9. i++;
  10. }
  11. while(i<=100);
  12. printf("%d\n",sum);
  13. return 0;
  14. }

以上代码实现了1加到100的值,主要是通过do-while语句来实现的。

do-while语句的一般形式为:

 
 
  1. do
  2. 语句
  3. while(表达式);

这个循环与while循环的不同在于:它先执行循环中的语句,然后再判断表达式是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while循环至少要执行一次循环语句。

同样当有许多语句参加循环时, 要用"{"和"}"把它们括起来。

for语句

【例】计算1加到100的值。

 
 
  1. for( i=1; i<=100; i++ ) sum=sum+i;

以上代码实现了1加到100的值,主要是通过for语句来完成。

在C语言中,for语句使用最为灵活,它的一般形式为:

for(表达式1; 表达式2; 表达式3) 语句

它的执行过程如下:

  1. 先求解表达式1。
  2. 求解表达式2,若其值为真(非0),则执行for语句中指定的内嵌语句,然后执行下面第3)步;若其值为假(0),则结束循环,转到第5)步。
  3. 求解表达式3。
  4. 转回上面第2)步继续执行。
  5. 循环结束,执行for语句下面的一个语句。

break语句


break语句通常用在循环语句和开关语句中。当break用于开关语句switch中时,可使程序跳出switch而执行switch以后的语句;如果没有break语句,则将成为一个死循环而无法退出。

break语句用于循环语句中时,可使程序终止循环而执行循环后面的语句,通常break语句总是与if语句联在一起,即满足条件时便跳出循环。

【例】

 
 
  1. #include "stdio.h"
  2. int main()
  3. {
  4. int i=0;
  5. char c;
  6. while(1)
  7. { //设置循环
  8. c='\0'; //变量赋初值
  9. while(c!=13&&c!=27)
  10. { //键盘接收字符直到按回车或Esc键
  11. c=27;
  12. printf("%c\n", c);
  13. }
  14. if(c==27)
  15. break; //判断若按Esc键则退出循环
  16. i++;
  17. printf("The No. is %d\n", i);
  18. }
  19. printf("The end");
  20. return 0;
  21. }

continue 语句


continue语句的作用是跳过循环体中剩余的语句而强行执行下一次循环。

 
 
  1. #include "stdio.h"
  2. int main()
  3. {
  4. int i=1;
  5. for(i=1;i<10;i++)
  6. {
  7. if(i%2==0) continue;
  8. printf("%d",i);
  9. }
  10. }

对比一下breakcontinue

while的用法:

while(表达式1){

    ……

    if(表达式2)  break;

    ……

}

continue的用法:

while(表达式1){

    ……

    if(表达式2)  continue;

    ……

}

程序举例


【例】判断m是否素数。

 
 
  1. #include "stdio.h"
  2. #include "math.h"
  3. int main()
  4. {
  5. int m,i,k;
  6. printf("Input your number: ");
  7. m=97;
  8. k=m-1;
  9. for(i=2;i<=k;i++)
  10. if(m%i==0) break;
  11. if(i>=k+1)
  12. printf("%d is a prime number\n",m);
  13. else
  14. printf("%d is not a prime number\n",m);
  15. return 0;
  16. }

【例】求100至200间的全部素数。

 
 
  1. #include "stdio.h"
  2. #include "math.h"
  3. int main()
  4. {
  5. int m,i,k,n=0;
  6. for(m=101;m<=200;m=m+2){
  7. k=m-1;
  8. for(i=2;i<=k;i++)
  9. if(m%i==0) break;
  10. if(i>=k+1){
  11. printf("%d\n",m);
  12. n=n+1;
  13. }
  14. }
  15. printf("\n");
  16. return 0;
  17. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值