一、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中有一个是浮点型,结果为带小数的整除结果 (除数不能为0 | ||
| % |
|
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 |
只要有一个表达式为真,结果为真 | ||
|
!(逻辑非) |
|
非真即假,非假即真 |
逻辑运算存在逻辑短路现象:
逻辑与运算时,如果运算符左侧的表达式结果为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。











319

被折叠的 条评论
为什么被折叠?



