C语言的学习笔记

1逗号运算符和逗号表达式

1.1逗号表达式格式:表达式1,表达式2,表达式3,...,表达式n;

该表达式的功能是:先计算表达式1,再计算表达式2,最后计算表达式 n,最后一个表达式的值为此逗号表达式的值。

1.2逗号表达式的优先级:最低。

1.3逗号表达式的值:

例子代码:

 
  1. #include "stdio.h"
  2. main(){
  3. int a,b,c;
  4. a=1,b=2,c=a+b+3;
  5. printf("%d,%d,%d\n",a,b,c);
  6. c=(a++,a+=b,a-b); /*变量c保存逗号表达式的值*/
  7. printf("%d,%d,%d\n",a,b,c); /*逗号表达式的作用为顺序求值*/
  8. }
#include "stdio.h"
main(){
  int a,b,c;
  a=1,b=2,c=a+b+3;
  printf("%d,%d,%d\n",a,b,c);
  c=(a++,a+=b,a-b);                    	/*变量c保存逗号表达式的值*/
  printf("%d,%d,%d\n",a,b,c);        	/*逗号表达式的作用为顺序求值*/
}

输出结果如下:

1,2,6

4,2,2

2关系运算符和关系表达式

2.1C语言中的真值和假值:C语言中没有逻辑型数据,所以C语言规定,用整型常量1来表示真值,所有非0的表达式和常量的逻辑值都为1,用整型常量0表示假值,只有表达式的值为0的常量和表达式的逻辑值为0

关系表达式例子代码:

  1. #include "stdio.h"
  2. main(){
  3. char x='m',y='n';
  4. int n;
  5. n=x<y; /*取关系表达式x<y的值*/
  6. printf("%d\n",n);
  7. n=x==y-1; /*取关系表达式x==y-1的值*/
  8. printf("%d\n",n);
  9. n=('y'!='Y')+(5<3)+(y-x==1); /*取关系表达式x==y-1的值*/
  10. printf("%d\n",n);
  11. }
#include "stdio.h"
main(){
  char x='m',y='n';
  int n;
  n=x<y;                             /*取关系表达式x<y的值*/
  printf("%d\n",n);
  n=x==y-1;                          /*取关系表达式x==y-1的值*/
  printf("%d\n",n);
  n=('y'!='Y')+(5<3)+(y-x==1);       /*取关系表达式x==y-1的值*/
  printf("%d\n",n);
}

程序运行结果:

1

1

2

关系表达式参加算术运算:

 

  1. #include "stdio.h"
  2. main(){
  3. int a,b,c;
  4. a=b=c=10; /*变量a,b,c赋初值*/
  5. a=b==c;
  6. printf("a=%d,b=%d,c=%d\n",a,b,c); /*注意等号与赋值号的区别*/
  7. a=(b+(c++>2));
  8. printf("a=%d,b=%d,c=%d\n",a,b,c);
  9. /*关系表达式的值可以参加运算c++>2成立,值为1和b相加值放到a中存放*/
  10. a=b>c*100;
  11. printf("a=%d,b=%d,c=%d\n",a,b,c);
  12. /*利用关系表达式计算要注意运算的优先级*/
  13. }
#include "stdio.h"
main(){
  int a,b,c;
  a=b=c=10;                             /*变量a,b,c赋初值*/
  a=b==c;
  printf("a=%d,b=%d,c=%d\n",a,b,c);     /*注意等号与赋值号的区别*/
  a=(b+(c++>2));
  printf("a=%d,b=%d,c=%d\n",a,b,c);
  /*关系表达式的值可以参加运算c++>2成立,值为1和b相加值放到a中存放*/
  a=b>c*100;
  printf("a=%d,b=%d,c=%d\n",a,b,c);
  /*利用关系表达式计算要注意运算的优先级*/
}

程序运行结果:

a=1,b=10,c=10

a=11,b=10,c=11

a=0,b=10,c=11

3逻辑运算符和逻辑表达式

3.1基本逻辑运算符包括:单目运算符!,双目运算符&&、||。

逻辑与运算符例子代码:

 
  1. #include "stdio.h"
  2. #define PI 3.1415926
  3. main(){
  4. int m,n;
  5. int k;
  6. k=(m=0)&&(m=1);
  7. printf ("%d,%d\n",m,k);
  8. k=(m=1)&&(m=0);
  9. printf ("%d,%d\n",m,k);
  10. k=(m=2)&&(m=1)&&(m=0); /*多层逻辑与运算的规则测试*/
  11. printf ("%d,%d\n",m,k);
  12. m=0,k=0;
  13. n=k++&&m++;
  14. printf ("%d,%d,%d\n",k,m,n);
  15. m=0,k=0;
  16. n=m++&&k++; /*测试表达式k++&&m++与m++&&k++*/
  17. printf ("%d,%d,%d\n",k,m,n);
  18. }
#include "stdio.h"
#define PI 3.1415926
main(){
   int  m,n;
   int k;
   k=(m=0)&&(m=1);
   printf ("%d,%d\n",m,k);
   k=(m=1)&&(m=0);
   printf ("%d,%d\n",m,k);
   k=(m=2)&&(m=1)&&(m=0);                   /*多层逻辑与运算的规则测试*/
   printf ("%d,%d\n",m,k);
   m=0,k=0;
   n=k++&&m++;
   printf ("%d,%d,%d\n",k,m,n);
   m=0,k=0;
   n=m++&&k++;                             /*测试表达式k++&&m++与m++&&k++*/
   printf ("%d,%d,%d\n",k,m,n);
}

程序运行结果:

0,0

0,0

0,0

1,0,0

0,1,0

逻辑或运算符例子代码:

  1. #include "stdio.h"
  2. main(){
  3. int m,n;
  4. int k;
  5. k=(m=0)||(m=1); /*逻辑或运算的计算规则*/
  6. printf ("%d,%d\n",m,k);
  7. k=(m=1)||(m=0);
  8. printf ("%d,%d\n",m,k);
  9. k=(m=2)||(m=1)||(m=0); /*多层逻辑或运算的规则测试*/
  10. printf ("%d,%d\n",m,k);
  11. m=0,k=0;
  12. n=++m||++k;
  13. printf ("%d,%d,%d\n",k,m,n);
  14. m=0,k=0;
  15. n=++k||++m;
  16. printf ("%d,%d,%d\n",k,m,n); /*测试表达式++k||++m与++m||++k+*/
  17. }
#include "stdio.h"
main(){
  int  m,n;
  int k;
  k=(m=0)||(m=1);                        /*逻辑或运算的计算规则*/
  printf ("%d,%d\n",m,k);
  k=(m=1)||(m=0);
  printf ("%d,%d\n",m,k);
  k=(m=2)||(m=1)||(m=0);                 /*多层逻辑或运算的规则测试*/
  printf ("%d,%d\n",m,k);
  m=0,k=0;
  n=++m||++k;
  printf ("%d,%d,%d\n",k,m,n);
  m=0,k=0;
  n=++k||++m;
  printf ("%d,%d,%d\n",k,m,n);          /*测试表达式++k||++m与++m||++k+*/
}

程序运行结果:

1,1

1,1

2,1

0,1,1

1,0,1

逻辑与和逻辑或混合运算例子代码:

 

  1. #include "stdio.h"
  2. main(){
  3. int m,k;
  4. k=(m=0)||(m=1)&&(m=2); /*表达式理解为(m=0)||((m=1 )&&(m=2))*/
  5. printf ("%d,%d\n",m,k);
  6. k=(m=2)||(m=1)&&(m=0); /*表达式理解为(m=2)||((m=1)&&(m=0))*/
  7. printf ("%d,%d\n",m,k);
  8. k=(m=2)&&(m=1)||(m=0); /*表达式理解为((m=2)&&(m=1))||(m=0)*/
  9. printf ("%d,%d\n",m,k);
  10. k=(m=0)&&(m=1)||(m=2); /*表达式理解为((m=0)&&(m=1))||(m=2)*/
  11. printf ("%d,%d\n",m,k);
  12. }
#include "stdio.h"
main(){
  int m,k;
  k=(m=0)||(m=1)&&(m=2);    /*表达式理解为(m=0)||((m=1 )&&(m=2))*/
  printf ("%d,%d\n",m,k);
  k=(m=2)||(m=1)&&(m=0);     /*表达式理解为(m=2)||((m=1)&&(m=0))*/
  printf ("%d,%d\n",m,k);
  k=(m=2)&&(m=1)||(m=0);     /*表达式理解为((m=2)&&(m=1))||(m=0)*/
  printf ("%d,%d\n",m,k);
  k=(m=0)&&(m=1)||(m=2);     /*表达式理解为((m=0)&&(m=1))||(m=2)*/
  printf ("%d,%d\n",m,k);
}

程序运行结果:

2,1

2,1

1,1

2,1

4条件运算符和条件表达式

4.1条件运算符"?:"C语言中唯一的的三目运算符,优先级高于赋值运算

表达式语法: 表达式1?表达式2:表达式3

其执行顺序是:先求解表达式1,若为0则执行表达式2,否则执行表达式3

例子代码:

 

  1. #include "stdio.h"
  2. main(){
  3. char ch;
  4. scanf("%c" , &ch); /* 输入一个字符,赋给变量ch */
  5. ch=(ch>='A'&&ch<='Z')?(ch+'a'-'A'):ch; /* 当字符为大写字母时,将其变为小写字母 */
  6. printf("\n%c",ch);
  7. }
#include "stdio.h"
main(){
  char  ch;
  scanf("%c" , &ch);	 /*  输入一个字符,赋给变量ch  */
  ch=(ch>='A'&&ch<='Z')?(ch+'a'-'A'):ch;        /*  当字符为大写字母时,将其变为小写字母 */
  printf("\n%c",ch);
}

5sizeof运算符

5.1sizeofC语言的一种单目运算符,运算对象是变量名、表达式或数据类型标示符。功能是以字节形式给出操作数的存储大小。

5.2语法格式:sizeof(表达式) sizeof 表达式 或sizeof(数据类型)

6取地址运算符

6.1取地址运算符的运算对象只能是变量,运算结果为变量的存储地址。

7几种运算混合运用

例子代码:

  1. #include "stdio.h"
  2. main(){
  3. int x,y=1,z;
  4. x=((9+6)%5>=9%5+6%5)?1:0; /*((9+6)%5>=9%5+6%5)等价于(((9+6)%5)>=(9%5+6%5))其值为0*/
  5. printf(" x=%d\n",x);
  6. y+=z=x+3; /* y+=z=x+3等价z=x+3,y=y+z*/
  7. printf(" y=%d\t z=%d\n",y,z);
  8. x=y=z=1;
  9. --x&&++y||z++; /*混合的逻辑与和逻辑或运算*/
  10. printf(" x=%d\t y=%d\t z=%d\n",x,y,z);
  11. }
#include "stdio.h"
main(){
  int x,y=1,z;
  x=((9+6)%5>=9%5+6%5)?1:0;  /*((9+6)%5>=9%5+6%5)等价于(((9+6)%5)>=(9%5+6%5))其值为0*/
  printf(" x=%d\n",x);
  y+=z=x+3;                    /* y+=z=x+3等价z=x+3,y=y+z*/
  printf(" y=%d\t z=%d\n",y,z);
  x=y=z=1;
  --x&&++y||z++;               /*混合的逻辑与和逻辑或运算*/
  printf(" x=%d\t y=%d\t z=%d\n",x,y,z);
}

程序运行结果:

x=0

y=4 z=3

x=0 y=1 z=2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值