c语言中w1,C语言基础-w1_xiao-ChinaUnix博客

命名规则及运算符

C语言源程序由一系列的单语句、复合语句、预处理语句和注释语句组成。复合语句由若干条简单语句组成,并用花括号括起来。每一条简单语句后均由单词及运算符组成,并以“;”结束。

单词是指由字母、数字及下划线组成的字符串,单词必须以字母或者下划线开始。

C语言的运算符具由优先级和结合性。优先级指运算时哪一个运算符会被优先计算。结合性是指对相同优先级的运算符,左边或者右边的子表达式将被优先计算。C语言运算符的优先级与结合性见表3-1所示。

表3-1C语言运算符的优先级与结合性

运算符

结 合 性

()[]->.

从左至右

++--+-!~ (类型)*& sizeof

从右至左

*/%

从左至右

+-

从左至右

<<>>

从左至右

<<=>>=

从左至右

==!=

从左至右

&

从左至右

^

从左至右

|

从左至右

&&

从左至右

||

从左至右

?:

从右至左

=+=-=*=/=%=&=^=!=<<=

>>=

从右至左

,

从左至右

注:运算符从上至下按优先级降序排列

流程控制

3.2.1选择及分支

☆if(condition) { for-true} else {for-false}:如果condition为真(非0),则执行语句for-true,否则执行语句for-false。例如,如果姓名及密码合法,则显示欢迎,否则显示不欢迎:

if ( strcmp (user,“guest”) == 0 && strcmp (password,“guest”) == 0)

{

printf (“hello: %s\n”, user);

}

else

{

printf (“Stop! You are not trusty!\n”);

exit (1);

}

☆switch(expression) {case (value):…break;…}:switch语句提供多重选择,expression为整型变量,value为整型常量(字符型可看作整型)。程序进入到与expression匹配的分支,并运行到整个switch语句的末尾或者第一个break语句处。

3.2.2循环

☆while (condition) { ...}:若condition为真,则执行循环体内的语句,否则结束循环。

☆do {...} while (condition):执行循环体内的语句,并根据condition的真假决定继续循环或者结束循环。

☆for ( init; condition; calculation) {…}:首先执行init表达式,然后判断condition,若其为假,则不结束循环。若condition为真,则执行循环体,然后做计算calculation。计算之后再判断condition的真假,并决定继续循环或者结束循环。

☆continue:结束本次循环,并继续下一次循环。对for循环,将先做计算calculation。

☆break:结束整个循环体。结for循环,将不再计算calculation。

3.2.3跳转

☆goto label:无条件跳转到label指定的标号处。该语句的大量使用将会严重破坏程序的结构,建议尽量少用。

☆return:从函数体返回。

☆exit:退出当前进程。

函数

函数是实现结构化程序设计的有力工具。函数的普遍形式为:

type foo (type arg1, type arg2,…)

其中:type指出函数返回值或者参数的类型

有的系统要求函数使用前必须定义,可以在使用某函数前申明该函数的原型。更普遍的做法是统一将程序中用到的函数原形申明在头文件中,每一个程序均包含该头文件。

C语言的函数参数通常是传值的。如下列函数调用:

void fun(int x, int y)

{

x++, y++;

printf(“IN fun(): x[%d], y[%d]\n”, x, y);

}

void caller()

{

intx = 5, y = 7;

printf(“IN caller(1): x[%d], y[%d]\n”, x, y);

fun(x, y);

printf(“IN caller(2): x[%d], y[%d]\n”, x, y);

}

为了在被调用函数中改变传入参数的值,必须以地址作为参数,例如:

void fun(int *x, int *y)

{

*x++, *y++;

printf(“IN fun(): x[%d], y[%d]\n”, *x, *y);

}

void caller()

{

intx = 5, y = 7;

printf(“IN caller(1): x[%d], y[%d]\n”, x, y);

fun(&x, &y);

printf(“IN caller(2): x[%d], y[%d]\n”, x, y);

}

同样,如果传入的参数本身就是指针型变量,为了改变该指针指向的地址,必须传入二级指针。例如:

void fun(int **x)

{

*x = malloc(sizeof(int));/* allocate memory */

**x = 5;/* set value */

printf(“IN fun(): x[%d]\n”, **x);

}

void caller()

{

int*x = NULL;

fun(&x);

printf(“IN caller(2): x[%d]\n”, *x);

free(x);/* free memory */}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值