C语言程序设计-不带参数的主函数、赋值运算符、数据类型

目录

1.6 提高部分

1.6.1不带参数的主函数

1.6.2 赋值运算符的进一步讨论

1.6.3 数据类型的进一步讨论

传送门上一节:C语言程序设计-算数运算符、赋值运算符、逗号运算符及表达式

传送门第一章习题:C语言-基础知识练习习题1

传送门下一节:C语言程序设计-顺序结构、分支语句、循环结构、赋值语句、格式输入输出函数(scanf、printf)、字符输入输出函数(getchar、putchar)


1.6 提高部分

1.6.1不带参数的主函数

        主函数是被操作系统调用的。C99标准提供两种主函数形式:一种是不带参数的主函数,另一种是带参数的主函数。带参数的主函数将在7.7.2节介绍。不带参数的主函数框架是:

int main(void)
{
    ...
    return 0;
}

        其中,int表示返回给调用主函数的操作系统的函数值类型是整型,void表示主函数不带参数。“return 0;” 的作用是:当主函数的执行正常结束时,将整数0作为函数值,返回给调用主函数的操作系统;当主函数的执行出现异常或错误时,将非0的整数作为函数值,返回给调用主函数的操作系统。程序员可通过这一返回值判断主函数的执行是否正常结束,以此决定后续的操作。

1.6.2 赋值运算符的进一步讨论

        在1.5.2节中已介绍了简单的赋值运算符“=”,C语言中还提供复合赋值运算符+=、-=、*=、%=、>>=、<<=、&=、^=、|=,其中由前5种赋值运算符组成的赋值表达式的一般形式与含义如表1.4所示,而后5种运算符将在第10章介绍。

表1.4 赋值表达式的一般形式

说明:

(1)表中第一个赋值表达式的处理过程是,先计算赋值运算符右边表达式的值,然后把其结果值赋给左边的变量。后面5个赋值表达式可用其等价形式代替。

(2)运算符*=和+的优先级数值分别为14和4,因此赋值表达式j*=1+3等价于j*=(1+3),也等价于j=j*(1+3),另外赋值运算符的结合方向是自右至左,所以x=y=5等价于x=(y=5)。

(3)在合法的赋值表达式中,如果赋值运算符的两边数据类型不一致,则系统先将赋值运算符右边表达式值的类型自动转换成左边变量的类型,然后再进行赋值,赋值时的转换规则如表1.5所示(假设赋值表达式为“a=表达式”)。

表1.5 转换规则

        在不同数据类型之间进行赋值处理时,容易产生意想不到的错误,因此尽量避免使用这种赋值形式。

【例1.16】写出下面程序的执行结果。

#include<stdio.h>
int main(void)
{
    int a=1,b=0,c=0;
    a+=a*=a+(b=2);
    printf("a=%d,b=%d,c=%d\n",a,b,c=a);
    return 0;
}

运行结果:

a=6,b=2,c=6

 程序说明:

(1)根据运算符的优先级和结合性,程序中语句a+=a*=a+(b=2)的处理过程是:先计算圆括号中表达式b=2的值,此表达式的值是b的值2;接着进行a+2的运算,其结果是3;表达式变为a+=a*=3,由于赋值运算符的结合性是从右至左,接着进行的是a=a*3运算(a=1*3),此时表达式又变为a=a+3,全过程处理完毕,a的值变为6。注意,在整个处理过程中a多次被赋值,但最终的值是最后一次被赋的值。

(2)printf函数中的最后一个输出项表是赋值表达式,该表达式的值为变量c得到的值6。

1.6.3 数据类型的进一步讨论

1.整型数据类型的进一步讨论

        在C语言中整型常量有3种表示形式,即十进制形式、八进制形式、十六进制形式。整型常量不带小数点。

【例1.17】编写程序,用十进制、八进制、十六进制表示的一个整型常量按不同形式输出。

#include<stdio.h>
int main(void)
{
    printf("%d--%o--%x\n",21,21,21);
    printf("%d--%o--%x\n",035,035,035); //035是八进制整型常量
    printf("%d--%o--%x\n",0x1a,0x1a,0x1a);  //0x1a是十六进制整型常量
    return 0;
}

运行结果:

21--25--15
29--35--1d
26--32--1a

程序说明:

(1)程序中12、035、0x1a都是整型常量,其中21是十进制整型常量;035是八进制整型常量(相当于十进制的29),八进制整型常量以数字0开头;0x1a(或0x1A)是十六进制整型常量(相当于十进制的26),十六进制整型常量以数字0和小写字母x开头

(2)%d、%o、%x是输出格式说明,分别用于输出十进制、八进制、十六进制整型常量。当按八进制和十六进制形式输出时,不输出前导的0和0x。

(3)一种形式的整型常量可以按其他形式输出,例如十进制整型常量除了可以按十进制形式输出外,还可以按八进制、十六进制形式输出。

2.字符型数据类型的进一步讨论

        字符常量有两种形式:一是常规字符(用单引号括起来的单个字符),二是转义字符(用“\”开头的字符序列)。

【例1.18】编写程序,在屏幕上显示特殊字符。

#include<stdio.h>
int main(void)
{
    char c1='\0',c2='\0';   //定义2个字符型变量
    c1='\1';    //用八进制表示的字符赋给c1
    c2='\x1';   //用十六进制表示的转义字符赋给c2
    printf("%c---%c\n",c1,c2);
    printf("%c---%c\n",'\25','\x15');
    printf("I am \"OK\"\n");
    return 0;
}

运行结果:

╔---╔
---
I am "OK"

程序说明:

(1)用“\”开头的字符序列称为转义字符,表1.6列出了常用转义字符。

表1.6 常用转义字符

        在键盘上找不到的一些字符可以使用转义字符的形式处理,如在“\”后加该字符的八进制ASCII码值(最多3位)或在“\x”后加该字符的十六进制ASCII码值(最多两位)。如果需要输出双引号“ " ”,也要使用转义字符的形式,如“ \" ”。若将程序中最后一条输出语句写成“printf("I am "OK"\n");”则是错误的。

(2)将常规字符或转义字符赋给字符变量时,都需要在其两侧加单引号。

(3)转义字符“\0”的ASCII码值为0。


传送门来喽🚪~

传送门上一节:C语言程序设计-算数运算符、赋值运算符、逗号运算符及表达式

传送门第一章习题:C语言-基础知识练习习题1

传送门下一节:C语言程序设计-顺序结构、分支语句、循环结构、赋值语句、格式输入输出函数(scanf、printf)、字符输入输出函数(getchar、putchar)


Give people fish and you feed them for a day. Teach them how to fish and you feed them for a lifetime.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值