C语言速成手册(二):布尔值、条件判断、循环

来源:互联网 发布:销售数据分析报告范文 编辑:程序博客网 时间:2024/05/16 16:57

逻辑运算符
    作用   |  C  | Pascal
  ---------+-----+-----------
    等于   | ==  |  =
   不等于  | !=  |  <>
    小于   | <   |  <
    大于   | >   |  >
  小于等于 | <=  |  <=
  大于等于 | >=  |  >=
     且    | &&  |  and
     或    | ||  |  or
     非    |  !  |  not



C语言的if语句
    C语言中if语句的写法如下:
if (表达式)
{
    表达式为真时执行的内容
}

    之前说过,如果执行的内容只有一句话,花括号可以省略。

    下面的语句将返回整数a的绝对值:
if ( a<0 )
   a= -a;


    下面的语句用于实现排序网络中的比较算子:
if ( a>b )
{
   int c=a;
   a=b;
   b=c;
}


     C语言中也有else if和else的用法,但和Pascal不同的是else的前一条语句末要保留分号。下面的语句用于判断三边长分别为a, b, c的三角形是什么三角形:
if ( a+b>c && b+c>a && a+c>b )
{
  if ( a==b && b==c )
    printf("Regular Triangle");
  else if ( a==b || b==c || a==c )
    printf("Isosceles Triangle");
  else
    printf("Scalene Triangle");
}
else
  printf("Triangle Doesn't Exist.");



C语言的bool类型
    C语言中没有布尔类型。任何一个整型的变量都可以充当布尔变量,用0表示False,其它数(默认为1)表示True。
    观察下列代码片断。
printf("%d /n", 3+5 == 8);

int a;
a = 3+5==9;
printf("%d /n" , a);
a = 100 <= 100;
printf("%d /n" , a);

a = 1;
if(a) printf("a is 1/n");
a = 2;
if(a) printf("a is 2/n");
a = -1;
if(a) printf("a is -1/n");
a = 0;
if(a) printf("a is 0/n");
if(!a) printf("a is not 0/n");

    这段程序的输出为:
1
0
1
a is 1
a is 2
a is -1
a is not 0

    如果觉得别扭,你可以使用_Bool类型。你可以把_Bool看作整型,但它只能储存0和1两个值。
    下面三句话将输出数字1,这是因为_Bool类型把所有非0数都当做是1。
_Bool a;
a = 100;
printf("%d", a);

    如果你想像Pascal一样使用true和false,那么你可以包含头文件stdbool.h。这样你可以定义变量为bool类型并赋值为true或false。例如:
bool a = true;
if (a) printf("a is true");

    下面是两个完整的程序。第一个程序中_Bool可以替换成int。三种写法都正确,你可以选择一种自己喜欢的写法。
#include <stdio.h>
_Bool isNegative ( int a )
{
   if (a<0) return 1;
   else return 0;
}
int main()
{
   if ( isNegative(-100) )
     printf("-100 is Negative");
   return 0;
}

#include <stdio.h>
#include <stdbool.h>
bool isNegative ( int a )
{
   if (a<0) return true;
   else return false;
}
int main()
{
   if ( isNegative(-100) )
     printf("-100 is Negative");
   return 0;
}



C语言的for循环
    for循环使用下面的语句:
for ( 语句1; 语句2; 语句3 )
{
    循环内容
}

    其中语句1用于初始化,若语句2为真(非0)则进入循环;每次循环后将执行语句3,此时若仍然满足语句2则继续循环,否则退出。语句123中,某一种语句可能为空,也可能由多条语句组成(多条语句用逗号隔开)。
    下面的语句打印1到10这10个数。以下所有写法都是正确的。通常用第一种写法。
int i;
for (i=1; i<=10; i=i+1)
   printf("%d/n", i );

int i=1;
for ( ; i<=10; i=i+1)
   printf("%d/n", i );

int i;
for (i=1; i<=10; )
{
   printf("%d/n", i );
   i=i+1;
}

int i;
for (i=1; i<=10; printf("%d/n", i ), i=i+1 );

    巧妙地应用for循环可以使某些操作非常简单。下面的函数可以计算n的质因子个数:
long countPrimeFactor( long n )
{
  long d, count;
  for (d=2, count=0; n>1; d=d+1 )
     for ( ; n%d==0; count=count+1, n=n/d );
  return count;
}

    下面的语句将产生死循环:
for ( ; ; ) ;


C语言的while循环
    while循环格式如下:
while ( 循环条件 )
{
   循环内容
}

    下面的代码计算1394和6150的最大公约数:
int a=1394, b=6150;
while ( b )
{
   int tmp = a % b;
   a = b;
   b = tmp;
}
printf("The gcd is %d", a);


do..while循环
    do..while循环的格式如下:
do
{
    循环内容
}
while ( 循环条件 );

    将条件放在循环内容的后面,使程序至少执行循环内容一次。

循环控制
    C语言中使用break语句和continue语句来控制循环,其使用方法与Pascal完全一样。


switch语句
    switch语句相当于Pascal中的case语句。
    下面代码的输出为2 3 default done! , 因为switch语句只负责把程序运行的位置跳转到相应的地方。
int n=2;
switch (n)
{
    case 1: printf("1 ");
    case 2: printf("2 ");
    case 3: printf("3 ");
    default: printf("default ");
}
printf("done!");

    你可以用break语句实现Pascal的case,例如下面的写法就可以让程序输出2 done! :
int n=2;
switch (n)
{
    case 1:
       printf("1 ");
       break;
    case 2:
       printf("2 ");
       break;
    case 3:
       printf("3 ");
       break;
    default: printf("default ");
}
printf("done!");


goto语句
    你可以在程序的任何位置插入一个标签:
标签名:
    并在同一函数里使用下面的语句实现无条件跳转:
goto 标签名;
    例如,下面的代码将产生死循环,并输出满屏幕的求爱信息。
a: printf(" I Love You !!!!!!! ");
goto a;


Matrix67原创
转贴请注明出处

原创粉丝点击