1. 运算优先级:
在C语言表达式中,如果存在多个运算符的时候,就需要考虑运算符的优先级的情况了
第1优先级:各种括号,如()、[]等、成员运算符 . ;
第2优先级:所有单目运算符,如++、–、!、~等;
第3优先级:乘法运算符*、除法运算符/、求余运算符%;
第4优先级:加法运算符+、减法运算符-;
第5优先级:移位运算符<<、>>;
第6优先级:大于运算符>、大于等于运算符>=、小于运算符<、小于等于运算符<=;
第7优先级:等于运算符==、不等于运算符!=;
第8优先级:按位与运算符&;
第9优先级:按位异或运算符^;
第10优先级:按位或运算符|;
第11优先级:逻辑与运算符&&;
第12优先级:逻辑或运算符||;
第13优先级:三目条件运算符 ?: ;
第14优先级:各种赋值运算符,如=、+=、-=、*=、/= 等;
第15优先级:逗号运算, 。
这里会出现一个问题,之前我们判断奇偶性的时候,用过异或运算符^,那么之前碰到判定 a ^ 1 == 0的时候,我们想的是先算a^1,再算 ==0,但是由于这个优先级关系,其实先判定了1==0,再进行a^,会导致出现不可预期的错误,所以对于优先级,一定要熟悉,不能思路都有了,因为优先级的问题,得不到我们想要的结果。
#include<stdio.h>
int main()
{
int a;
printf("请输入一个数:\n");
scanf("%d", &a);
if(a ^ 1 == 0)
{
printf("是偶数");
}
else
{
printf("是奇数");
}
}
当我们给a^1加括号后
不信的可以自己试试
2. if...else嵌套
做了个成绩判断的练习,很简单,当分数>90,优秀,>60及格,<60不及格
#include<stdio.h>
int main()
{
float score;
scanf("%f", &score);
if(score <= 0 || score > 100) // 判断数据的合法性
{
printf("输入的数据不合法");
}
else
{
if(score >= 0 && score <60)
{
printf("不及格");
}
else if(score < 90)
{
printf("良好");
}
else
{
printf("优秀");
}
}
return 0;
}
3. switch
做了一个输入数字输出星期几的练习
#include<stdio.h>
int main()
{
int day;
printf("请输入一个数(1-7):\n");
scanf("%d", &day);
switch(day)
{
case 1:
printf("星期一");
break;
case 2:
printf("星期二");
break;
case 3:
printf("星期三");
break;
case 4:
printf("星期四");
break;
case 5:
printf("星期五");
break;
case 6:
printf("星期六");
break;
case 7:
printf("星期天");
break;
default:
printf("您输入的数据不正确");
break;
}
return 0;
}
其中case后面不能重复,break跳出循环,default可以写在任意的位置
4. do...while
先执行一次循环体,再进行判断
那我们就可以求一个100以内的数字之和
#include<stdio.h>
//do...while循环
int main()
{
int num = 0;
int sum = 0;
do{
sum += num;
num++;
}while(num <= 100);
printf("num = %d, sum = %d", num, sum);
return 0;
}
5. while循环
while和do...while很像,只不过是先判断再做循环
再做一次100以内数字之和
#include<stdio.h>
int main()
{
int num = 0;
int sum = 0;
while(num <= 100)
{
sum += num;
num++;
}
printf("sum = %d, num = %d", sum, num);
return 0;
}
执行结果和上方一样
6. for循环
先进行条件判断,条件真执行循环体,条件假跳出循环
for(;;)将循环写死
现在就可以用for循环写一个9 * 9的乘法表了
#include<stdio.h>
int main()
{
int i, j;
for(i = 1; i <= 9; i++)
{
for(j = 1; j <= i; j++)
{
printf("%d*%d=%d\t",j, i, i*j);
if(j == i)
{
printf("\n");
}
}
}
return 0;
}
两个for循环嵌套 第一个for循环控制行,第二个for循环控制一行输出几个,配合输出乘法表
总结:
今天的学习还是有些困难的,主要要思考的比较多,特别是for循环嵌套,输出想要的图形,可费了些功夫,多练习记住解题思路,化繁为简,慢慢提升。