循环介绍

  1. /*shoesl.c -- 循环介绍*/
  2. #include "stdio.h"
  3. #define ADJUST 7.31 //字符常量
  4. int main(void){
  5. const double SCALE = 0.333;//变量,只读
  6. double shoe,foot;
  7. shoe = 9.0;
  8. foot = SCALE * shoe + ADJUST;
  9. printf("shoe:%10.1f;foot:%15.2f\n",shoe,foot); //一共10个字符,10.1占了3位
  10. return 0;
  11. }

基本运算符

赋值运算符: =

几个术语: 数据对象,左值,右值运算符

  1. int ex;
  2. int why;
  3. int zee;
  4. const int TWO = 2;
  5. why = 42;
  6. zee = why;
  7. ex = two * (why + zee);

这里ex,why和zee都是可修改的左值(或对象定位值)它们可用于赋值运算符的左侧和右侧。TWO是不可修改的左值,它只能位于赋值运算符的右侧(在该例中TWO被初始化为2这里的=运算符是初始化而不是赋值,因此并未违反规则),同时42是右值,该表达式不能表示特定内存位置。另外why和zee是可修改的左值,表达式(why+zee)是右值,该表达式不能表示特定内存位置,而且也不能给它赋值。它只是程序运算的一个零时值,在计算完成后便会被丢弃。

  1. /*golf.c -- C的基本赋值运算符有些与众不同*/
  2. #include "stdio.h"
  3. int main(void){
  4. int jane, tarzan, cheeta;
  5. cheeta = tarzan = jane = 68; // 可以赋值三个值为同一个值
  6. printf("%4d,%8d,%8d",cheeta,tarzan,jane);
  7. return 0;
  8. }

加法运算符: +

  1. printf("%d",4+7);

减法运算符: -

  1. int jian = 17 - 7;

符号运算符: -和+

  1. int fuhao1 = -12;

以这种方式使用的负号被称为一元运算符(unary operator)一员运算符只需要一个一个对象

  1. int fuhao2 = +15;//编译器是不会报错,但是在以前,这样是不允许的。
  1. int i1 = 32-12; //二元, 俩个运算对象
  2. int i2 = -16;//一元,一个运算对象
  3. int i3 = -(12-20); //俩者皆有,值为8;(12-20): 二元; -8:一元

乘法运算符: *

  1. /*squares.c -- 计算1到20的平方*/
  2. #include "stdio.h"
  3. int main(void){
  4. int a = 1;
  5. while(a <= 20){
  6. printf("%4d,%6d",a,a * a);
  7. a++;
  8. }
  9. return 0;
  10. }

指数增长

  1. /*wheat.c -- 指数增长*/
  2. #include "stdio.h"
  3. #define SQUARES 64 //棋盘中的方格数
  4. int main(void){
  5. const double CROP = 2E16; //世界小麦年产谷粒数
  6. double current , total;
  7. int count = 1;
  8. current = 2.0 * current;
  9. total = total + current;/*更新总数*/
  10. printf("count:%d current:%e, total:%e,%12.2e",count , current, total, total /CROP);
  11. }

除法运算符: /

  1. /*divide.c -- 除法运算符*/
  2. #include "stdio.h"
  3. int main(void){
  4. printf("5/4:%d\n",5/4);
  5. printf("6/3:%d\n",6/3);
  6. printf("7/4:%d\n",7/4);
  7. printf("7./4:%1.2f\n",7./4);
  8. return 0;
  9. }

运算符优先级

运算符优先级(从高到低)

运算符 结合律
() 从左往右
+,-(一元) 从右往左
* / 从左往右
+,-(二元) 从左往右
= 从右往左

求模运算符: %

  1. /*min_sec.c -- 求与运算符*/
  2. #include "stdio.h"
  3. int main(void){
  4. printf("%-10d\r\n", 10%5); //0
  5. printf("%-10d\r\n", 10%3); //1
  6. return 0;
  7. }

递增运算符: ++

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

递减运算符: —

递增运算符同理。

表达式和语句

表达式

表达式(expression)是由运算符和运算对象组成(运算对象是运算符操作的对象)。

每个表达式都有一个值

一些表达式其值

表达式
-4+6 2
c = 3 + 8 11
5 > 3 1
6 + (c = 3 + 8) 17

语句

语句(statement)是C语言的基本构造块。一条语句相当于一条完整的计算机指令。在C语言中所有的语句都是以;结尾。因此只是一个表达式(它可能是一个较大表达式的一部分),而下面的代码则是一条语句:

  1. legs = 4;

常见语句

  1. /*addemup.c -- 集中常见的语句*/
  2. #include "stdio.h"
  3. int main(void){ /*计算前20个整数的和 ,主函数*/
  4. int count, sum; /*声明 变量*/
  5. count = 0; /*表达式语句*/
  6. sum = 0; /*表达式语句*/
  7. while(count++ < 20) /*迭代语句*/
  8. sum = sum + count;
  9. printf("sum = %d\n",sum); /*表达式语句*/
  10. return 0; /*跳转语句*/
  11. }

复合语句(块)

复合语句(compound statement) 是用花括号括起来的一条或多条语句。复合语句也成为块(block)。

类型转换&强制类型转换

  1. /*convert.c -- 自动类型转换*/
  2. #include "stdio.h"
  3. int main(void){
  4. char ch;
  5. int i;
  6. float f1;
  7. f1 = i = ch = 'C';//自动类型转换: 字符型
  8. printf("ch=%c,i=%d,f1=%2.2f\n",ch,i,f1);
  9. ch = ch + 1;//自动类型转换: 整型
  10. printf("ch=%c\n",ch);//自动类型转换: 字符型
  11. i = f1 + 2*ch;//自动类型转换: 浮点型
  12. printf("i=%d\n",i);//自动类型转换: 整型
  13. /*强制类型转换运算符*/
  14. i = (char)((int)ch + 3);
  15. printf("i=%d,i=%c,d=%d",i,i,sizeof(i));
  16. printf("i的类型:%d",sizeof(i));
  17. return 0;
  18. }

带参数的函数&实参

  1. /* pound.c -- 定义一个带参数的函数 */
  2. #include "stdio.h"
  3. int sum(int a,int b);
  4. int main(void){
  5. printf("%d",sum(2,3));//这里调用sum()函数,里面的2和3是是实参
  6. return 0;
  7. }
  8. int sum(int a,int b){ //这里的a和b是形参
  9. return a + b;
  10. }