循环介绍
/*shoesl.c -- 循环介绍*/
#include "stdio.h"
#define ADJUST 7.31 //字符常量
int main(void){
const double SCALE = 0.333;//变量,只读
double shoe,foot;
shoe = 9.0;
foot = SCALE * shoe + ADJUST;
printf("shoe:%10.1f;foot:%15.2f\n",shoe,foot); //一共10个字符,10.1占了3位
return 0;
}
基本运算符
赋值运算符: =
几个术语: 数据对象
,左值
,右值
和运算符
int ex;
int why;
int zee;
const int TWO = 2;
why = 42;
zee = why;
ex = two * (why + zee);
这里ex,why和zee都是可修改的左值(或对象定位值)它们可用于赋值运算符的左侧和右侧。TWO是不可修改的左值,它只能位于赋值运算符的右侧(在该例中TWO被初始化为2这里的=运算符是初始化而不是赋值,因此并未违反规则),同时42是右值,该表达式不能表示特定内存位置。另外why和zee是可修改的左值,表达式(why+zee)是右值,该表达式不能表示特定内存位置,而且也不能给它赋值。它只是程序运算的一个零时值,在计算完成后便会被丢弃。
/*golf.c -- C的基本赋值运算符有些与众不同*/
#include "stdio.h"
int main(void){
int jane, tarzan, cheeta;
cheeta = tarzan = jane = 68; // 可以赋值三个值为同一个值
printf("%4d,%8d,%8d",cheeta,tarzan,jane);
return 0;
}
加法运算符: +
printf("%d",4+7);
减法运算符: -
int jian = 17 - 7;
符号运算符: -和+
int fuhao1 = -12;
以这种方式使用的负号被称为一元运算符(unary operator)一员运算符只需要一个一个对象
int fuhao2 = +15;//编译器是不会报错,但是在以前,这样是不允许的。
int i1 = 32-12; //二元, 俩个运算对象
int i2 = -16;//一元,一个运算对象
int i3 = -(12-20); //俩者皆有,值为8;(12-20): 二元; -8:一元
乘法运算符: *
/*squares.c -- 计算1到20的平方*/
#include "stdio.h"
int main(void){
int a = 1;
while(a <= 20){
printf("%4d,%6d",a,a * a);
a++;
}
return 0;
}
指数增长
/*wheat.c -- 指数增长*/
#include "stdio.h"
#define SQUARES 64 //棋盘中的方格数
int main(void){
const double CROP = 2E16; //世界小麦年产谷粒数
double current , total;
int count = 1;
current = 2.0 * current;
total = total + current;/*更新总数*/
printf("count:%d current:%e, total:%e,%12.2e",count , current, total, total /CROP);
}
除法运算符: /
/*divide.c -- 除法运算符*/
#include "stdio.h"
int main(void){
printf("5/4:%d\n",5/4);
printf("6/3:%d\n",6/3);
printf("7/4:%d\n",7/4);
printf("7./4:%1.2f\n",7./4);
return 0;
}
运算符优先级
运算符优先级(从高到低)
运算符 | 结合律 |
---|---|
() | 从左往右 |
+,-(一元) | 从右往左 |
* / | 从左往右 |
+,-(二元) | 从左往右 |
= | 从右往左 |
求模运算符: %
/*min_sec.c -- 求与运算符*/
#include "stdio.h"
int main(void){
printf("%-10d\r\n", 10%5); //0
printf("%-10d\r\n", 10%3); //1
return 0;
}
递增运算符: ++
#include "stdio.h"
int main(void){
int i = 0;
int j = 0;
while(i < 10){
printf("%d,%-5d",i,++j);
i++;
}
return 0;
}
递减运算符: —
与递增运算符
同理。
表达式和语句
表达式
表达式(expression)是由运算符和运算对象组成(运算对象是运算符操作的对象)。
每个表达式都有一个值
一些表达式其值
表达式 | 值 |
---|---|
-4+6 | 2 |
c = 3 + 8 | 11 |
5 > 3 | 1 |
6 + (c = 3 + 8) | 17 |
语句
语句(statement)是C语言的基本构造块。一条语句相当于一条完整的计算机指令。在C语言中所有的语句都是以;
结尾。因此只是一个表达式(它可能是一个较大表达式的一部分),而下面的代码则是一条语句:
legs = 4;
常见语句
/*addemup.c -- 集中常见的语句*/
#include "stdio.h"
int main(void){ /*计算前20个整数的和 ,主函数*/
int count, sum; /*声明 变量*/
count = 0; /*表达式语句*/
sum = 0; /*表达式语句*/
while(count++ < 20) /*迭代语句*/
sum = sum + count;
printf("sum = %d\n",sum); /*表达式语句*/
return 0; /*跳转语句*/
}
复合语句(块)
复合语句(compound statement) 是用花括号括起来的一条或多条语句。复合语句也成为块(block)。
类型转换&强制类型转换
/*convert.c -- 自动类型转换*/
#include "stdio.h"
int main(void){
char ch;
int i;
float f1;
f1 = i = ch = 'C';//自动类型转换: 字符型
printf("ch=%c,i=%d,f1=%2.2f\n",ch,i,f1);
ch = ch + 1;//自动类型转换: 整型
printf("ch=%c\n",ch);//自动类型转换: 字符型
i = f1 + 2*ch;//自动类型转换: 浮点型
printf("i=%d\n",i);//自动类型转换: 整型
/*强制类型转换运算符*/
i = (char)((int)ch + 3);
printf("i=%d,i=%c,d=%d",i,i,sizeof(i));
printf("i的类型:%d",sizeof(i));
return 0;
}
带参数的函数&实参
/* pound.c -- 定义一个带参数的函数 */
#include "stdio.h"
int sum(int a,int b);
int main(void){
printf("%d",sum(2,3));//这里调用sum()函数,里面的2和3是是实参
return 0;
}
int sum(int a,int b){ //这里的a和b是形参
return a + b;
}