参考C Primer Plus进行C语言学习
文章目录
- 基本运算符
- 除法运算符:/
- 其他运算
1、除法运算符
在C语言中,整数除法结果的小数部分被丢弃,这一过程被称为截断。
2.其他运算符
(1)sizeof运算符和size_t类型
回顾一下,sizeof运算符以字节为单位返回运算对象的大小。如果运算对象是类型(如:float),则必须用圆括号将其括起来。
#include<stdio.h>
int main()
{
int n=0;
size_t intsize;
intsize=sizeof(int);
printf("n=%d,n has %zd bytes;all ints have %zd bytes.\n",n,sizeof n,intsize);
return 0;
}
C语言规定,sizeof返回size_t类型的值。这是一个无符号整数类型,但它不是新类型。前面介绍过,,size_t是语言定义的标准类型。C有一个typedef机制,允许程序员为先有类型创建别名。
typedef double real;
这样,real就是double的别名。现在,可以声明一个real类型的变量:
real deal; //使用typedef
类似的,C头文件系统可以使用typedef把size_t作为unsigned int或 unsigned long的别名。这样,在使用size_t类型时,编译器会根据不同的系统替换标准类型。
(2)求模运算符:%
用于整数运算,求模运算符给出其左侧整数除以右侧整数的余数。
#include<stdio.h>
#define SEC_PER_MIN 60
int main(void)
{
int sec,min,left;
printf("Convert secnd to minutes and seconds!\n");
printf("Enter the number of seconds\n");
scanf("%d",&sec); //读取秒数
while(sec>0)
{
min=sec/SEC_PER_MIN; //截断分钟数
left=sec%SEC_PER_MIN; //剩下的秒数
printf("%d second is %d minutes,%d second.\n",sec,min,left);
printf("Enter next value:\n");
scanf("%d",&sec);
}
printf("Done!\n");
(3)递增运算符:++
#include<stdio.h>
int main()
{
int ultra=0,super=0;
while(super<5)
{
super++;
++ultra;
printf("super=%d,ultra=%d\n",super,ultra);
}
return 0;
}
程序中两条递增语句创建两个缩写的原因之一是,紧凑结构的代码让程序更为简洁,可读性更高。
最后,递增运算符还有一个在某些场合特别有用的特性。
#include<stdio.h>
int main()
{
int a=1,b=1;
int a_post,pre_b;
a_post=a++;
pre_b=++b;
printf("a a_post b pre_b\n");
printf("%1d %5d %5d %5d\n",a,a_post,b,pre_b);
return 0;
}
结果的差异,这就是++的前缀形式和后缀形式的差异。
a_post=a++; //后缀:使用a的值之后,递增a
b_pre=++b; //前缀:使用a的值之前,递增b
(4)递减运算符:--
#include<stdio.h>
#define MAX 100
int main()
{
int count=MAX+1;
while(--count>0)
{
printf("%d bottles of spring water on the wall,"
"%d bottles of spring water!\n",count,count);
printf("Take one down and pass it around,\n");
printf("%d bottles of spring water!\n\n",count-1);
}
return 0;
}
总结
今天就先学这么些,明天学习表达式和语句。加油!