第三天————运算符 ,输入输出函数 ,控住语句

1,运算符
2,输入输出函数
3,控住语句


1,运算符
包括:算术运算符,逻辑运算符,关系运算符,sizeof运算符,三目运算符,逗号运算符,位运算符,赋值运算符

(1)算术运算符:+ - * / % ++ - -
%:运算对象必须为整形
++:
规则:++在前,先自加(给旧值自加),再赋值(将自加之后的新值赋值给表达式)
++在后,先赋值(将旧值赋值给表达式),再自加(给旧值自加)

–:
规则:–在前,先自减(给旧值自减),再赋值(将自减之后的新值赋值给表达式)
–在后,先赋值(将旧值赋值给表达式),再自减(给旧值自减)

注意:
什么时候需要关心++或者–在前还是在后?
----》
看表达式到底有没有被作为值来使用。

(2)逻辑运算符 :&& || !
截断法则:
假设以 (表达式1 &&/|| 表达式2)
&&:当表达式1为假时,表达式2不会被执行
||:当表达式1为真时,表达式2不会被执行

(3)关系运算符: > < >= <= == !=

注意:书写等号的时候,建议将常量写在等号的左边,变量写在等号的右边(可以逻辑错误的产生)。

(4)sizeof运算符: 用来计算测试对象所占字节大小的一个运算符
格式:
sizeof(数据类型)
sizeof(变量名)

注意: 当sizeof的测试对象为数据类型时,括号不可以省略。
       当sizeof的测试对象为变量名时,括号可以省略。

(5)三目运算符
格式:
表达式1 ? 表达式2 : 表达式3

执行规则:
先执行表达式1,判断表达式1的结果是否为真,当表达式1的结果为真时,则执行表达式2,并将表达式2的结果作为整个三目运算符的结果
反之,则执行表达式3,并将表达式3的结果作为整个三目运算符的结果

练习:
1,使用宏,结合 三目运算符实现求两个数字中最小数

#include <stdio.h>
#define MIN(x,y) x>y? (x):(y)
int main(int argc, const char *argv[])
{
	int x=0;
	int y=0;
	printf("请输入两个数\n");
	scanf("%d%d",&x,&y);
	printf("最小数 %d\n",MIN(x,y));
	return 0;
}

2,使用宏,结合三目运算符的嵌套实现:输入一个成绩,当大于等于90分,输出S,处于60-89之间输出A,60分以下输出D。

#include <stdio.h>
#define MAX(x) (x >90? 's' : (x>60? 'a' :'d'
int main(int argc, const char *argv[])
{
	int a = 0;
	printf("请输入成绩/n");
	scanf("%d",&a);
	printf("%c\n",MAX(a));
	return 0;
}

(6)逗号运算符 :
格式:
表达式1,表达式2,表达式3.。。。表达式N;
执行规则: 从左向右依次执行,并将表达式N的结果作为整个逗号运算符的结果进行输出

(7)位运算符: & | ~ ^ << >>
按位与 : &
eg:
1011 0101
&0101 1011

0001 0001

1011 0101
&0000 0000

0000 0000

1011 0101
&1111 1111

1011 0101
作用:
(1)将一串指令中的某一位置零
(2)将一串指令中的某几位置零

eg:
1011 1101
将该指令中的第三位指令
1011 1101
&1111 0111

1011 0101

按位或:|
eg:
0101 1011

0000 0000
0101 1011

0101 1011
1111 1111
1111 1111

作用:可以将一串指令中的某一位或者某几位置1

eg:
0101 0010
将该串指令中的第3~5位置1

0101 0010

0011 1000

0111 1010

按位取反: ~
eg:
1011 1010
~ 0100 0101

异或:^
规则:不同为1,相同为0

eg:
1011 0101
^ 0010 1101

1001 1000

1011 0101
^0000 0000

1011 0101

1011 0101
^1111 1111

0100 1010

== 作用==:可以将一串指令中的某几位进行取反

左移:<<
总结:
不管是unsigned还是signed,都是高位丢弃,低位补0
右移:>>
总结:
对于unsigned:低位丢弃,高位补0
对于signed:
正数:低位丢弃,高位补0
负数:低位丢弃,高位补1

综上:
左移一位相当于乘以2(两位就乘以4),右移一位相当于除以2

2,输入输出函数

分类:
标准输入输出函数:scanf,printf(对于数据类型没有任何限制)
字符输入输出函数:getchar,putchar(针对于字符)

输入:从键盘拷贝数据到内存中去
输出:从内存中拷贝数据到显示屏/终端上去

标准输出:
printf:
格式:
int printf(“格式控制串”,输出表);
占位符:
整形:
%d -----> int
%hd ---->short
%ld ----->long
%lld ---->long long
%o ---->八进制
%x ---->十六进制
%X ---->十六进制
%u ----->打印无符号数
# ---->可以在八进制和十六进制前面加前导符
浮点型:
%f ---->float
%lf ----->dobuble
%e ---->指数形式
%g ----->比较智能,会选择较短的方式去打印数据

    字符型:
         %c ---->char

    字符串:
         %s  ---->字符串 
    地址:
         %p -----> 地址 
		
	注意: 
	     对于打印整形数字的时候,需要控制域宽
		 %Md   ----> M为域宽(默认是右对齐)  ---》M为一个常数
		 %-Md  ----->M为域宽(左对齐)        ---》M为一个常数
		 当M大于有效数字的位数时,以补空格的形式打印输出
		 当M小于有效数字的位数时,会原样输出。
		 
		 对于浮点型的数字打印时,既可以控制域宽,也可以控制精度
		 注意:
		       对于scanf而言:只能控制域宽,不能控制精度
		       对于printf而言:域宽和精度均可控制

scanf:
int scanf(“格式控制串”,地址表);

& ----》 取址运算符

*----》抑制符

字符输入输出函数:
getchar:从键盘获得一个字符
函数原型:
int getchar(void);
参数:无参
返回值:代表所获得的字符的ASCII码值/字符

作用:一般作为吸收垃圾字符

putchar:输出一个字符
函数原型:
int putchar(int c);
参数:代表所需输出的字符的ASCII,字符常量,字符变量

练习:
顺序结构PPT中的题目。

3,控制语句(三大结构:顺序,选择,循环)

选择语句(分支语句):
单分支:
格式:
if(表达式)
{
语句块;
}

双分支:
格式:
if(表达式)
{
语句块1;
}
else
{
语句块2;
}
多路分支:
格式:
if(表达式1)
{
语句块1;
}
else if(表达式2)
{
语句块2;
}
。。。
else
{
语句块N;
}

switch_case语句:
格式:
switch(整形/常量表达式)
{
case 常量1:
语句块1;
break;
case 常量2:
语句块2;
break;
case 常量3:
语句块3;
break;
。。。
default:
语句块N;
}

嵌套分支语句:
格式:
if(表达式1)
{
if(表达式2)
{
语句块1;
}
else if(表达式3)
{
语句块2;
}
else
{
语句块3;
}
}
else
{
语句块4;
}

练习:
1,从键盘获取一个五位数,判断其是否为回文数 eg:12321 (if——else)

#include <stdio.h>
int main(int argc, const char *argv[])
{
	while(1)
	{
		int a = 0;
		printf("请输入一个五位数");
		scanf("%d",&a);
		int g,s,q,w;
		w=a/10000;
		q=a%10000/1000;
		s=a%100/10;
		g=a%10;
		if(w==g&&q==s)
			printf("这是一个回文数\n");
		else
			printf("这不是一个回文数\n");
			
	
	}
	return 0;
}

2,手动实现简易计算器的功能:加 减 乘 除 取余 ----》(switch——case)

#include <stdio.h>
int main(int argc, const char *argv[])
{
	int a=0;
	while(1){
	printf("请选择要进行的进行的计算\n加法1\n减法2\n乘法3\n除法4\n取余\n");
	scanf("%d",&a);
	switch(a)
	{
		int x,y;
	case 1:
		printf("请输入两个加数x,y\n");
		scanf("%d%d",&x,&y);
		printf("x+y=%d\n",x+y);
	break;
	case 2:
		printf("请输入两个减数x,y\n");
		scanf("%d%d",&x,&y);
		printf("x-y=%d\n",x-y);
	break;
	case 3:
		printf("请输入两个乘数x,y\n");
		scanf("%d%d",&x,&y);
		printf("x*y=%d\n",x*y);
		break;
	case 4:
		printf("请输入两个除数x,y\n");
		scanf("%d%d",&x,&y);
		printf("x/y=%d\n",x/y);
	break;
	case 5:
		printf("请输入两个余数x,y\n");
		scanf("%d%d",&x,&y);
		printf("x/y余%d\n",x%y);
	break;
	}
	}
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值