操作符详解(4)——逻辑,条件,逗号,[ ],()操作符

目录

1.逻辑操作符

规律:&&——左边为假,右边就不计算了

           | |  ——左边为真,右边就不计算了 

 2.条件操作符(三目操作符()?() :())

 3.逗号表达式

 4.下标引用[ ]、函数调用( )和结构成员

1)[ ]——下标引用操作符

 2)()——   函数调用操作符

3) 访问一个结构的成员

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;
}

打印结果是:

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值