#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
//--------------------------------------------------------------------------------------------8. 逻辑操作符
// && 逻辑与 (全真则真,一假则假)-----生活中的并且
// || 逻辑或 (有真则真)-----生活中的或者
// 与按位与&,按位或 | 区分
// 逻辑与&&或 || 只关注操作数的真假
int main()
{
int a = 3;
int b = 5;
int c = 0;
int d = 0;
int m = a && b;
printf("%d\n", m); //1
int n = a && c;
printf("%d\n", n);// 0
int x = b || c;
printf("%d\n", x);// 1
int y = c || d;
printf("%d\n", y);// 0
return 0;
}
//判断闰年的的规则
// 1.能被4整除,不能被100整除
// 2.能被400整除
int is_leap_year(int x)
{
if ((x % 4 == 0 && x % 100 != 0)|| (x % 400 == 0)) // && ||
return 1;
else
return 0;
}
int main()
{
int year = 0;
while(1)
{
scanf("%d", &year);
int ret = is_leap_year(year);
if (ret == 1)
printf("是闰年\n");
else
printf("不是闰年\n");
}
return 0;
}
// && 逻辑与,左边为假0,右边就不计算了
// || 逻辑或,左边位真1,右边就不计算了
//-----------------------------------------------------------------------练习
int main()
{
//int i = 0, a = 0, b = 2, c = 3, d = 4;
//i = a++ && ++b && d++; // a=0先使用后,0&&任何都为0,所以后边的不算了,不再运行
//printf("a =%d b=%d c=%d d=%d\n", a, b, c, d); // 1 2 3 4
int i = 0, a = 0, b = 2, c = 3, d = 4;
i = a++ || ++b || d++;
printf("a =%d b=%d c=%d d=%d\n", a, b, c, d); // 1 3 3 4
//int j = 0, x = 1, y = 2, z = 3, h = 4;
//j = x++ && ++y && h++;
//printf("x =%d y=%d z=%d h=%d\n", x, y, z, h); // 2 3 3 5
int j = 0, x = 1, y = 2, z = 3, h = 4;
j = x++||++y||h++;
printf("x =%d y=%d z=%d h=%d\n", x, y, z, h); // 2 2 3 4
return 0;
}
//----------------------------------------------------------------------------------9. 条件操作符(三目操作符)
// 表达式1?表达式2:表达式3
// 真 执行 ×
// 假 × 执行
//-----------------------------------------------------------------------练习1
int main()
{
int a = 3;
int b = 0;
//if (a > 5)
// b = 3;
//else
// b = -3;
// 改成三目操作符
(a > 5) ? (b = 3) : (b = -3);
b = (a > 5 ? 3 : -3); //更简洁
return 0;
}
//三目操作符不必过于复杂//-----------------------------------------------------------------------练习2:使用条件表达式找两个数中较大值
//简简单单
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int max = (a - b > 0 ? a : b);
printf("%d\n", max);
return 0;
}
//-------------------------------------------------------------------------------------------------10. 逗号表达式
//表达式1,表达式2,表达式3,...表达式n
//逗号表达式,就是用逗号隔开的多个表达式,
//逗号表达式,从左到右依次执行。整个表达式的结果是最后一个表达式的结果!!!!!
int main()
{
//--------------------------代码1
int a = 1;
int b = 2;
int c = (a > b, a = b + 10, a, b = a + 1);
//c是多少 ?
//-------------------------代码2
if (a = b + 1, c = a / 2, c > 0)
//-------------------------代码3
a = get_val();
count_val(a);
while (a > 0)
{
//业务处理
a = get_val();
count_val();
}
//改用逗号表达式
while (a = get_val(), count_val(a), a > 0)
{
//业务处理
}
return 0;
}
//------------------------------------------------------------------------11. 下标引用,函数调用,结构成员
//----------------------------------11.1 下标引用操作符 []
// 访问数组
int main()
{
int arr[10] = {0};
arr[7] = 8; // []操作符 操作数是 arr 和 7
*(arr + 7);// arr是数组首地址,arr+7就是跳过了7个元素,指向第8个元素,因此 *(arr + 7)也就是 arr[7]
*(7 + arr);//加法交换律
7[arr]; // []操作符 操作数是 7 和 arr
return 0;
}
//----------------------------------函数调用操作符 ()
//函数定义
int Add(int x, int y)
{
}
int main()
{
int a = 10;
int b = 20;
//函数调用
int c = Add(a, b); // ( ) 函数调用操作符 ,操作数是 Add, a, b
// ( ) 函数调用操作符,至少有一个操作符,就是函数名
return 0;
}
//----------------------------------结构成员操作符 -> .
//结构体指针->成员
//结构体对象.成员
struct Stu
{
char name[20];
int age;
double score;
};
void set_stu(struct Stu* ps)
{
//strcpy((*ps).name, "zhangsan"); //头文件 #include <string.h>
//(*ps).age = 20;
//(*ps).score = 100.0;
//--------------------------------------------简化
strcpy(ps->name, "zhangsan");// 操作符 -> 结构体指针->成员
ps->age = 20;
ps->score = 100.0;
// (*ps).age 等价于 ps->age 等价于 ss.age
}
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);
print_stu(s);
return 0;
}