目录
1.逻辑操作符
逻辑操作符有哪些:&& 逻辑与 ; || 逻辑或 。
逻辑与和逻辑或只关注真假,不关注二进制位,而按位与和按位或关注二进制位,不关注真假。
注意区分逻辑与和按位与 ,区分逻辑或和按位或。
1&2----->0
1&&2---->1
1|2----->3
1||2---->1
逻辑与&&,像我们生活中的并且,两者同时为真才为真。
逻辑或 | | ,像我们生活中的或且,只要有一个为真则为真,两个同时为假才为假。
写一个判断闰年的函数:
#include<stdio.h>
int is_leap_year(int y)
{
if ((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0))
{
return 1;
}
else
{
return 0;
}
}
int main()
{
int year = 2000;
int ret = is_leap_year(year);
if (ret == 1)
{
printf("%d是闰年\n", year);
}
else
{
printf("%d不是闰年\n", year);
}
return 0;
}
运行结果是:
练习题1:
为什么答案是1,2,3,4?分析:
练习题2:
运行结果是:
练习题3:
运行结果是:
练习题4:
运行结果是:
规律:&&——左边为假,右边就不计算了
| | ——左边为真,右边就不计算了
2.条件操作符(三目操作符()?() :())
表达式1?表达式2:表达式3
说明:表达式1为真,则表达式2的结果为整个表达式的结果;表达式1为假,则表达式3的结果为整个表达式的结果。
练习:
3.逗号表达式
逗号表达式,就是用逗号隔开的多个表达式。
逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。
//代码1
int a = 1;
int b = 2;
int c = (a>b, a=b+10, a, b=a+1);//逗号表达式
c是多少?
答案:c=13
//代码2
if (a =b + 1, c=a / 2, d > 0)
4.下标引用[ ]、函数调用( )和结构成员
1)[ ]——下标引用操作符
2)()—— 函数调用操作符
3) 访问一个结构的成员
所以我们在传参的时候,应该把地址传过去。
#include <stdio.h>
struct Stu
{
char name[20];
int age;
double score;
};
void set_stu(struct Stu* ps)
{
strcpy((*ps).name, "zhangsan");
(*ps).age = 20;
(*ps).score = 100.00;
}
void print_stu(struct Stu ss)
{
printf("%s %d %lf\n", ss.name, ss.age, ss.score);
}
int main()
{
struct Stu s = { 0 };
set_stu(&s);//给s设置值
print_stu(s);//打印s
return 0;
}
#include <stdio.h>
struct Stu
{
char name[20];
int age;
double score;
};
void set_stu(struct Stu* ps)
{
/*strcpy((*ps).name, "zhangsan");
(*ps).age = 20;
(*ps).score = 100.00;*/
//上面的不够简洁
strcpy(ps->name, "zhangsan");
ps->age = 20;
ps->score = 100.00;
}
void print_stu(struct Stu ss)
{
printf("%s %d %lf\n", ss.name, ss.age, ss.score);
}
int main()
{
struct Stu s = { 0 };
set_stu(&s);//给s设置值
print_stu(s);//打印s
return 0;
}
打印结果是: