1.循环简介
while循环
/*shoes2.c--计算多个不同鞋码的脚长*/
#include<stdio.h>
#define ADJUST 7.31 //字符常量
int main(void)
{
const double SCALE = 0.333;//const变量
double shoe, foot;
printf("shoe size (mwn's) foot length\n");
shoe = 3.0;
while (shoe < 18.5) /*while循环开始*/
{ /*块开始*/
foot = SCALE *shoe + ADJUST;
printf("%10.1f %15.2f inches\n", shoe, foot);
shoe = shoe + 1.0;
} /*块结束 */
printf("if the shoe fits,wear it .\n");
return 0;
}
解释while循环原理
当程序第一次到达while循环时,会检查圆括号中的条件是否为真,表达条件如(shoe<18.5)
2.基本运算符
C用运算符(operator)表示算术运算,基本运算符有:“=,+,-,*和/".C语言中没有指数运算符,不过,C标准数学库提供了一个pow()函数用于指数运算。例如,pow(3.5,2.2)返回3.5的2.2次幂。
2.1 赋值运算符:=
在C语言中,=并不意味着“相等”,而是一个赋值运算符例如:bmw=2002,=左侧是变量名(实际上,赋值运算符左侧必须引用一个存储单位,最简单的方法为使用变量名,后面会学着使用指针),右侧是赋给该变量的值。赋值行为从右往左进行,读作:把2002赋给变量bmw。
数据对象:赋值表达式语句的目的是把值储存到内存位置上。对于储存值的数据存储区域统称为数据对象(date objet)。使用变量名是标识对象的一种方法。除此之外换可以:可以指定数组元素,结构成员,或者使用指针表达式(指针中储存的是他所指向对象的地址)
左值:用于标识特定数据对象名称或表达式。他只的是一个对象,所以引用内存中的地址;他可以赋值在运算符左侧,再后来标准中新增的const限定符创建的变量不可修改。
//golf.c--高尔夫锦标赛记分卡
#include<stdio.h>
int main(void)
{
int jane, tarzan, cheeta;
cheeta=tarzan=jane=68;
printf(" cheeta tarzan jane\n");
printf("first round score %4d %8d %8d\n", cheeta, tarzan, jane);
return 0;
}
许多其他语言都会回避该程序中的三重弄赋值,但是C完全没问题。赋值顺序从优往左看:首先把68赋给jane,然后再付给Tarzan,最后附个cheetah
加法运算符:printf("%d",4+20);打印的是24,并非4+20.
减法运算符:如把200.0赋给takehome;takehome=224.00-24.00
加和减都被称为二元运算符。,既这些对象需要连个运算对象才能完成操作。
减号还可用于表明或改变一个值的代数符号。例如执行smokey的值为12:rocky=-12;smokey=-rocky;以这种方式使用的负号被称为一元运算符,一元运算符只需要一个运算对象
//wheat.c--指数增长
#include<stdio.h>
#define SQUARES 64 //棋盘中的方格数
int main(void)
{
const double CROP = 2E16;//世界小麦年产谷颗粒数
double current,total;
int count = 1;
printf(" square qrains total fraction of\n");
printf(" added qraind world total\n");
total = current = 1.0;
printf ("%4d %13.2e %12.2e %12.2e\n", count, current,
total,total/CROP);
while (count < SQUARES)
{
count = count + 1;
current = 2.0*current;//下一个方格谷粒翻倍
total = total + current;//更新总数
printf("%4d %13.2e %12.2e %12.2e\n", count, current,
total, total / CROP);
}
printf("that's all.\n");
return 0;
}
除法运算符:C使用符号/来 表示除法,/左侧的值是被除数,右侧的值是除数例如;four=12.0/3.0
运算符优先级:以下代码为例
butter=25.0+60.0*n/SCALE
处理原则:先执行乘除,在执行加减,同等级别时按从左到右顺序进行。(等号除外)
运算符优先等级(从高到低)
运算符 | 结合律 |
() | 从左往右 |
+ -(一元) | 从右往左 |
* / | 从左往右 |
+ -(二元) | 从左往右 |
= | 从右往左 |
应注意加号与减号的两种不同用法。例如一元负号应与她右侧的量相结合,在除法中用出号左侧的运算对象除以右侧的运算对象。
其他运算符
- sizeof运算符和size.t类型
- 求模运算符:%
求模运算符运用于整数运算,求模运算符给出其左侧的整数除以右侧整数的余数。例如:13%5(读作:13求模5)得3,求模运算只能运用于整数,不呢被用于浮点数。
- 递增运算符:++
前缀模式:q=2*++a,首先a递增1然后*2,并将结果赋给Q;
缀模式:q=2*a++,首先2*a,并将结果赋予q 然后a递增1。
- 递减运算符:--
- 关系运算符:><
表达式和语句
表达式:表达式是由运算符和运算对象组成。灭个表达式都有一个值。
语句:语句是C程序的基本构建块,一条语句相当于一条完整的计算机指令。
复合语句(块):
复合语句(compound statement)是用花括号括起来的一条或多条语句,复合语句也成为快。
类型转换
强制类型转换运算
强制类型转换运算符将其右侧的值转换成括号中指定的类型,如(float)9把整数9转换成浮点数9.0
带参数的函数
实参:是函数调用提供的值,实参被赋予相应的形参。
形参:是变量
//running.c--Auseful program for runners
#include <stdio.h>
const int S_PER_M = 60; //1分钟的秒数
const int S_PER_H = 3600; //1小时的秒数
const int M_PER_K = 0.61237; //1公里的英里数
int main(void)
{
double distk, distm; //跑过的距离(分别以公里和英里为单位)
double rate; //平均速度(以英里每小时为单位)
int min, sec; //跑步用时(以分钟和秒为单位)
int time; //跑步用时(以秒为单位)
double mtime; //跑1英里需要的时间,以秒为单位
int mmin, msec; //跑1英里所需要的时间,以分钟和秒为单位
printf("this program converts your time for a metric race\n");
printf("to a time for running a mile and to your average \n");
printf("speed in miles per hour.\n");
printf("please enter ,in kilometers,the distance run.\n");
scanf("%1f", &distk); // %f读取一个double类型的值
printf("next enter the time in minutes and seconds .\n");
printf("begin by entering the minutes .\n");
scanf("%d", &min);
printf("now enter the second .\n");
scanf("%d", &sec);
time = S_PER_M*min + sec; //把时间转换成秒
distm = M_PER_K*distk; //把公里转换成英里
rate = distm / time*S_PER_H;
mtime = (double)time / distm;
mmin = (int)mtime / S_PER_M; //求出分钟数
msec = (int)mtime % S_PER_M;//求出剩余的秒数
printf("you ran %1.2f km (1.2f miles) in %d min ,%d sec.\n",
distk, distm, min, sec);
printf("that pace corresponds to running a mile in %d min,",
mmin);
printf("%d sec.\nyour average speed was %1.2f mph.\n",
msec, rate);
return 0;