今天学习了C语言的一系列运算符表达式,语句中的顺序结构、选择结构和循环结构
一、运算符
1、基本算术运算符
+ (加)、 - (减) 、 * (乘) 、 / (除) 和 % (求余数)
这五个运算符的优先级为:*、/ 和%同级,但比+和-高。即先乘除后加减。
两个整数相除,结果为一整数;分子小于分母,结果为零。
这五个运算符的结合性为:自左至右。
对于取余运算符%结果的符号与%左边的数一致。
2、赋值运算符
赋值符号:=
将赋值符右边表达式的值赋给赋值符左边的一个变量。
赋值运算符的数据类型若不一致,则要进行类型转换。转换方式为:
将实型数据赋给整型变量时,舍弃实数的小数部分。
将整型数据赋给实型变量时,数值不变。
复合的赋值运算符:(共十个)
+= , -= , *= , /= , %= , <<= , >>= , &= , ^= , |=
3、关系运算符
关系运算符用于两个数值之间的比较运算。C语言提供6种关系运算符:
<、<=、>、>=、 优先级相同
==、!= 优先级相同
关系运算符的结合率为:“自左而右”。
4、条件运算符
条件运算符: ? : 它是一个三目运算符。
条件表达式的一般格式为:
表达式1 ? 表达式2 : 表达式3
运算过程:表达式1的结果为真(非0)时,表达式2的计算结果作为条件表达式的值;否则,取表达式3的计算结果为条件表达式的值。
如: a>b?a:b
5、逗号运算符
逗号运算符: ,
格式: 表达式1, 表达式2, 表达式3, LL, 表达式n
优先级: 最低
从左向右计算每个表达式的值,逗号表达式的值为表达式n的值。
例如:
y=(x=3,5+6,x+5) 逗号表达式的值为8。
6、自增自减运算符
自增、自减运算符:++ , -- (使变量的值增1或减1)
例如: ++i , --i (先自增或自减,在整个表达式运算之前先自增或自减,适用于windows)
i++ , i-- (后自增或自减,在整个表达式运算结束以后再进行自增或自减运算, 适用于windows)
对于sizeof关键字会将表达式改为最终的类型而不是表达式本身,sizeof内赋值操作无效。
main()
{
int x=8,y,z;
y=(++x)+(x++)+(++x);
z=(--x)+(x--)+(++x);
printf(“y=%d,z=%d,x=%d”,y,z,x);
}
在windows系统结果为 y = 30 , z = 33 , x = 10
在Linux系统结果为y = 28 , z = 31 , x = 10
二、语句
1、选择结构
(1)if语句
#if 0
if (表达式)
{
语句1;
}
表达式为真 执行语句1
if (表达式)
{
语句1;
}
else
{
语句2;
}
表达式为真 执行语句1
为假,执行语句2
if (表达式1)
{
语句1;
}
else if(表达式2)
{
语句2;
}
else
{
语句3;
}
表达式1为真 执行语句1
为假,如果表达式2为真执行语句2
否则,执行语句3
#endif
// 输入三个实数a,b,c,按代数值由小到大次序输出这三个数。
int main()
{
float a;
float b;
float c;
scanf ("%f, %f, %f", &a, &b, &c);
float tmp;
if (a > b)
{
tmp = a;
a = b;
b = tmp;
}
if (a > c)
{
tmp = a;
a = c;
c = tmp;
}
if (b > c)
{
tmp = b;
b = c;
c = tmp;
}
printf ("%f, %f, %f\n", a, b, c);
return 0;
}
(2)switch语句
#if 0
switch(表达式)
{
case 表达式1:
语句1;
break;
case 表达式N:
语句2;
break;
default:
语句N;
break;
}
表达式的结果必须要是一个整数
#endif
/*
编写一个能进行两个操作数加减乘除四则运算的计数器模拟程序
输入:两个操作数和运算符
计算:根据运算符确定运算
输出:运算结果
*/
int main()
{
int a,b;
int result;
char ch;
/*
scanf ("%d", &a);
scanf ("%d", &b);
scanf ("%c", &ch);
scanf ("%c", &ch);
*/
scanf ("%d %c %d", &a, &ch, &b);
switch (ch)
{
case '+':
result = a + b;
break;
case '-':
result = a - b;
break;
case '*':
result = a * b;
break;
case '/':
result = a / b;
break;
default:
printf ("非法的操作符\n");
break;
}
printf ("%d\n", result);
return 0;
}
2、循环结构
(1)while语句
// 计算一条语句中的空格、字母、数字的个数。
int main()
{
char ch = 0;
int space_count = 0;
int letter_count = 0;
int num_count = 0;
while(ch != '\n')
{
ch = getchar();
if (ch == ' ')
space_count++;
if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
letter_count++;
if (ch >= '0' && ch <= '9')
num_count++;
}
printf ("space_count : %d\n", space_count);
printf ("letter_count : %d\n", letter_count);
printf ("num_count : %d\n", num_count);
return 0;
}
(2)do while语句
// 1 -- 100
int main()
{
int sum = 0;
int i = 1;
do
{
sum += i;
i++;
}while(i <= 100);
printf ("%d\n", sum);
return 0;
}
(3)for语句
/*
求100到200之间的素数。
输入:无
计算: 求素数
输出: 输出素数 每4个一行 每个数占4位
*/
int main()
{
int i;
int j;
int flag = 0;
int count = 0;
for (i = 100; i <= 200; i++)
{
int k = sqrt(i);
flag = 0;
for (j = 2; j <= k; j++)
{
if (i % j == 0)
{
flag = 1;
break; // 只会跳出一层循环
}
}
if(flag != 1)
{
if (count++ % 4 == 0)
putchar ('\n');
printf ("%4d", i);
}
}
putchar ('\n');
return 0;
}
break语句的功能是:
在switch语句中使流程跳出switch结构。
在循环语句中使流程跳出当前循环。
continue语句的功能是在循环语句中使本次循环结束,即跳过循环体中下面尚未执行的语句,接着进行下次是否执行循环的判断。