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,使用宏,结合 三目运算符实现求两个数字中最小数
1 #include<stdio.h>
2 //使用宏定义和三目运算符比较两个数字中的最小数
3 #define compare(min) (a<b?a:b)
4
5 int main(int argc, const char *argv[])
6 {
7 float a,b;
8 printf("请输入两个数字:");
9 scanf("%f%f",&a,&b);
10 printf("min:%f\n",compare(min));
11 return 0;
12 }
2,使用宏,结合三目运算符的嵌套实现:输入一个成绩,当大于等于90分,输出S,处于60-89之间输出A,60分以下输出D。
1 #include<stdio.h>
2 //使用宏定义和三目运算符比较分数
3 #define ad1(score) ((score >= 90)?'S':((score < 90 && score <= 60)?'A':'D'))
4
5 int main(int argc, const char *argv[])
6 {
7 float score;
8 printf("请输入一个分数: ");
9 scanf("%f",&score);
10 printf("class:%c\n",ad1(score));
11 return 0;
12 }
(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,字符常量,字符变量
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[])
{
int a,b,c,d,e;
int num;
printf("请输入一个数\n");
scanf("%d",&num);
a = num/10000;
b = (num%10000)/1000;
c = ((num%10000)%1000)/100;
d = (((num%10000)%1000)%100)/10;
e = (((num%10000)%1000)%100)%10;
if(a == e)
{
if(b == d)
{
printf("这个是回文数\n");
}
else
{
printf("这个不是回文数\n");
}
}
else
{
printf("这个不是回文数\n");
}
return 0;
}
2,手动实现简易计算器的功能:加 减 乘 除 取余 ----》(switch——case)
#include <stdio.h>
int main(int argc, const char *argv[])
{
//完成简易计算器的功能
float num1,num2;
char op;
//菜单函数
printf("*****************\n");
printf("+ ---------加法!\n");
printf("- ---------减法!\n");
printf("* ---------乘法!\n");
printf("/ ---------除法!\n");
printf("---------取余!\n");
printf("*****************\n");
printf("请输入需要计算的两个数字:\n");
scanf("%f%f",&num1,&num2);
printf("请输入需要进行的操作:\n");
scanf("%*c%c",&op);
switch(op)
{
case '+':
printf("%.1f + %.1f = %.1f\n",num1,num2,num1+num2);
break;
case '-':
printf("%.1f - %.1f = %.1f\n",num1,num2,num1-num2);
break;
case '*':
printf("%.1f * %.1f = %.1f\n",num1,num2,num1*num2);
break;
case '/':
printf("%.1f / %.1f = %.1f\n",num1,num2,num1/num2);
break;
case '%':
printf("%.1f %% %.1f = %d\n",num1,num2,((int)num1)%((int)num2));
break;
default:
printf("输入的操作数有误,请重新输入!\n");
}
return 0;
}
————————————————
版权声明:本文为CSDN博主「旅人520」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_59476403/article/details/118069183