C基础-输入输出函数-运算符

一、C语言中基本输入输出函数: 

【1】输入函数

&a   取变量的地址

函数原型:
int scanf(const char *format, ...);
scanf("格式符",变量的地址);   ---->有几个格式符就要跟几个变量的地址,scanf()的""内一般不放\n
&a; ----->取变量的地址
scanf输入结束时,直接按回车

scanf是一个严格控制格式的函数:
    双引号内写了什么,用户终端输入就输入什么

scanf获取数据的特点:

scanf在获取多个数据时,以空格、tab键和回车作为数据分隔的标志

回车在每一个格式符都获取到数据后,回车作为scanf结束的标志,如果有格式符没有获取到数据,回车作为数据分隔的标志。

scanf吸收垃圾字符的问题

在使用scanf获取字符类型数据时,存在需要吸收垃圾字符的问题

因为空格、tab键和回车都是一个字符,会被%c获取到

i)使用空格吸收垃圾字符

利用scanf严格控制格式的特点,在双引号内添加空格,来达到吸收垃圾字符的效果。

#include <stdio.h>
int main(int argc, const char *argv[])
{
    char c1,c2,c3,c4;
    //终端获取字符类型数据的值
    scanf(" %c %c %c %c",&c1,&c2,&c3,&c4);
 //每一个格式符前面的空格,都可以吸收空格、tab键和回车,如果没有空格、tab键和回车,就正常按照程序员的输入获取数据
    //输出数据的值
    printf("%c\n",c1);
    printf("%c\n",c2);
    printf("%c\n",c3);
    printf("%c\n",c4);
    return 0;
}

ii)使用抑制字符吸收垃圾字符

抑制字符是%*c

抑制字符必须吸收一个字符无论是否是垃圾字符

iii)使用getchar吸收垃圾字符

getchar()是一个从终端获取字符型数据的函数

函数原型:
    int getchar(void);  --->getchar函数不需要参数,返回值为从终端获取数据的ASCII码
eg:从终端输入char c的值,
c = getchar();

【2】字符类型的输入函数

getchar();
函数原型:
    int getchar(void);  --->getchar函数不需要参数,返回值为从终端获取数据的ASCII码
功能:输入单个字符
eg:从终端输入char c的值,
c = getchar();


#include <stdio.h>
int main(int argc, const char *argv[])
{
    char c1;
 c1 = getchar();
    putchar(c1);  //输出h字符
    putchar(10);  //10是\n的ascii码值,输出换行
    return 0;
}

【3】字符类型的输出函数

putchar(变量名);
函数原型:
int putchar(int c);
功能:输出单个字符
参数:字符的ASCII码值或字符本身
返回值:int类型

#include <stdio.h>
int main(int argc, const char *argv[])
{
    char c1 = 'h';
    putchar(c1);  //输出h字符
    putchar(10);  //10是\n的ascii码值,输出换行
 putchar('\n');  //输出字符'\n',就是换行
    return 0;
}

【4】printf输出函数

可以取man手册查看printf函数的原型

函数原型: int printf(const char *format, ...);

printf("格式符",输出表象); ---->一个格式符对应一个输出表象

"":可以放格式符,转义字符(\n···),字符串(直接输出)

二、运算符

【1】算数运算符

类似于数学运算中的+、-、*、/

%取整

格式注意事项
+-*

a#b (#表示运算符)

和数学中的运算完全一致

/

a/b

如果a和b都是整形,结果为除法取整数部分的结果

只要a和b中有一个是浮点型,结果为带小数的整除结果

(除数不能为0

%

a%b

a和b必须都是整数(除数不能为0)

【2】自增自减运算符

++i、i++、--i、i--

++ii+1

++i:获取到的是i自增1后的值,i本身发生改变 
i++:获取到的是i自增前的值,i本身也发生了改变
--i:获取到的是i自减1后的值,i本身发生改变
i--:获取到的是i自减前的值,i本身发生改变

如果运算符在前面就获取运算后的结果,如果运算符在后面就获取运算前的结果。

【3】赋值运算符

a=b;   --->将b的值赋值给a
a+=2;  --->a=a+2;
a-=2;  --->a=a-2;
a*=2;  --->a=a*2;
a/=2;  --->a=a/2;
a%=2;  --->a=a%2;
·····

【4】关系运算符

关系运算的结果是一个固定的值,真值/假值,1/0

计算机中非0为真,0为假

0.1(真值)

表达式逻辑
>a>b
<a<b
==a==b判断ab相等,一个=是赋值,==是判断相等
>=a>=b
<=a<=b
!=a!=b判断a和b不相等

【5】条件运算符

是C语言中的唯一一个三目运算符

表达式1?表达式2:表达式3
逻辑:
    如果表达式1成立,执行表达式2,否则执行表达式3
    
#include <stdio.h>
int main(int argc, const char *argv[])
{
    int i=9,j=4;
    printf("%d\n",i<j?i++:++j);  //5  ++j执行
    printf("%d\n",j==i?j++:--i); //8  --i执行
    printf("%d\n",--i?i>j:j);    //1 ,--i是7 真值表达式成立,执行i>j
    printf("i=%d\n",i);  //7
    printf("j=%d\n",j);  //5
    return 0;
}

【6】逻辑运算符

逻辑运算的结果是真值/假值, 1/0

操作逻辑

&&(逻辑与)

表达式1&&表达式2

两个表达式同时为真,结果为真

||(逻辑或)

表达式1||表达式2

只要有一个表达式为真,结果为真

!(逻辑非)

!表达式

非真即假,非假即真

逻辑运算存在逻辑短路现象:

逻辑与运算时,如果运算符左侧的表达式结果为0,右侧的表达式不会执行

逻辑或运算时,如果运算符左侧的表达式结果为1,右侧的表达式不会执行

【7】逗号运算符

格式:
(表达式1,表达式2,表达式3,表达式4,····表达式n)
执行逻辑:
逗号运算符的每一个表达式都会执行,取最右侧表达式的结果

【8】sizeof()运算符

sizeof是C中的一个关键字也可以,sizeof的使用类似于函数调用的格式

格式:
sizeof(数据);  --->数据可以是数据类型也可以是变量名也可以是常量
功能:
求()内内容所占的内存大小,以字节为单位

【9】位运算符

对二进制位进行运算,bit位如果没有特殊说明,默认从最右侧一位开始是第0位

右移n位,表示除2^n

左移n位,表示乘2^n

操作逻辑

>>(右移运算符)

a>>b

a向右移动n个bit位,高位补符号位

<<(左移运算符)a<<b

a向左移动n个bit位,低位补符号位

^(异或)

a^b

a和b按位异或

同0异1

~(取反)

~a

每一个bit位按位取反

&(按位与)

a&b

两个bit位有一个0结果为0

两个都为1结果为1

(按位或)

a|b

两个bit位只要有一个为1结果为1

两个都是0结果为0

位运算进场用来执行对某一位置0和置1的操作

eg:已知一个数a,想要给a的第13个bit置0,给a的第5个bit置1,要求操作不能修改其他bit位的值

a&=~(0x1<<13)

a|=(0x1<<5)

按位与运算可以实现对bit位置0的操作

按位或运算可以实现对bit位置1的操作

0001 0110
给第4个bit位置0 ---> 0000 0110
//0001 0110 & 1110 1111
//1110 1111 ==>~(0001 0000) ==>~(0x1<<4)
给第3个bit位置1 ---> 0001 1110
//0001 0110 | 0000 1000
//0000 1000 ==>0x1<<3

练习:

1.已知变量a,给a的第6个bit位置0,给a的第4个bit位置1,给a的第5个bit位取反(异或)。

a&~(0x1<<6)

a|(0x1<<4)

a^(0x1<<5)

2.输入学生成绩,若成绩在【90,100】为A,成绩在【80,90】为B,成绩在【70,80】为C。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值