目录
1、输出格式化
printf:将数据(字符串)输出(打印)到终端
用法:
#include <stdio.h>
printf("字符串");//字符串多个字符的序列,printf就会输出 字符串
由于使用printf可能会输出各种数据的值,而直接写入printf的输出 "字符串" 就会当作字符 原样输出,
所以在printf的 "字符串" 中 可以包含一种叫做格式化字符,表示其中要输出的类型值,之后再添加具体的值
格式化字符:
%d: int类型
%hd:short类型
%ld:long类型
%u:unsigned int类型
%hu:unsigned short类型
%lu:unsigned long类型
%nd:n代表宽度。以n的宽度输出。不足补空格,大于n按实际长度输出。且右对齐
%3d 以宽度为3的十进制格式输出,如果数据长度<3,在左边补空格,否则按实际长度输出。
%c:char类型
%f:float类型
%lf:double类型
%.mf 保留m位小数,遵循四舍五入
%n.mf 数据宽度为n,右对齐,且保留m位小数,遵循四舍五入
%o:以八进制格式
%x:以十六进行格式
%s:字符串格式
%e:浮点数的指数表示
printf("字符串+格式化字符",格式化字符的值1,格式化字符的值2,格式化字符的值3,格式化字符的值4,.....)
注意:格式化字符和值要对应起来
2、输入格式化
scanf:从终端由用户输入数据(从终端获取数据)
格式:
#include <stdio.h>
scanf("字符串+格式化字符",&变量1,&变量2,&变量3,....)
终端输入时,必须按照scanf "字符串"格式进行输入,通过格式化字符来确定输入的数据类型
注意:格式化字符与变量类型匹配
注意:
1、scanf中,%d、%f、%s 在输入时是不会获取'\n'、'\t'、空格
2、scanf中的%c 会获取'\n'、'\t'、空格
3、常用转义字符
\n 换行,使光标跳转到当前行的下一行的开头,
\r 回车,使光标跳转到当前行的开头位置;
\b 回退,使光标回退一格;
\t 水平制表符;
\v 垂直制表符
\\ 打印\;
\" 打印“
%% 打印%
\ddd 三个八进制数 '\72'代表:八进制数072
\xdd 两个16进制数 '\xab'代表: 十六进制0xab
4、练习代码:
//计算90的十六进制,打印结果
#include<stdio.h>
int main(int argc, const char *argv[])
{
int a=90,c,d;
char b;
b=90%16+55;
c=90/16;
//d=c/16;
printf("90=0x%d%c\n",c,b);
printf("\x5A\n");
printf("b=%#x\n",90);//十六进制打印90,添加#打印十六进制的标示符0x
printf("\x35\n");//打印十六进制35的字符
printf("\x41\n");//打印十六进制41的字符
return 0;
}
输出结果:
90=0x5A
Z
b=0x5a
5
A
//计算c=0xc0,打印十进制整数
#include<stdio.h>
int main(int argc, const char *argv[])
{
char c=0xc0;
int b;
b=16*12;
printf("b=%d\n",b);
printf("%d\n",c);
//无符号字符型取值范围-128-127,
//192超过取值范围,应该转换为二进制补码取反+1得到-64
return 0;
}
输出
b=192
-64
//实现两个数的交换
#include<stdio.h>
int main(int argc, const char *argv[])
{
int a,b,c;
printf("请输入两个数:");
scanf("%d %d",&a,&b);
c=a;
a=b;
b=c;
printf("a=%d,b=%d\n",a,b);
return 0;
}
输出
请输入两个数:34 45
a=45,b=34
//看类型是不是转换为无符号类型
#include<stdio.h>
int main(int argc, const char *argv[])
{
unsigned int a=10;
int b=-100;
printf("%d",a+b);
char c=192;
printf("%d",b+c);//c超过char类型取值范围,值为-64,
return 0;
}
输出
-90 -164
//设置a和b都是double类型的数据,且a=5.5,b=2.5,表达式(int)a+b/b的结果是多少
#include<stdio.h>
int main(int argc, const char *argv[])
{
double a,b;
a=5.5;
b=2.5;
printf("%lf\n",(int)a+b/b);
return 0;
}
输出
6.000000
//终端输入一个整形数据,判断是偶数还是奇数
#include<stdio.h>
int main(int argc, const char *argv[])
{
int a,b;
printf("请输入一个数字:");
scanf("%d",&a);
if (a%2==0 && a!=0)
printf("%d是一个偶数\n",a);
else if(a==0)
printf("%d不是偶数也不是奇数\n",a);
else
printf("%d是奇数\n",a);
return 0;
}
//设x=2.7,a=8,y=4.9,表达式x+a%3*(int)x+(int)(y/5)%3的结果
#include<stdio.h>
int main(int argc, const char *argv[])
{
float x=2.7,y=4.9;
int a=8;
printf("%f",x+a%3*(int)x+(int)(y/5)%3);
return 0;
//a是整型变量,则执行表达式a=25/3%3的值是多少
#include<stdio.h>
int main(int argc, const char *argv[])
{
int a;
a=25/3%3;
printf("%d\n",a);
return 0;
}
//输入一个数,看这个数是不是水仙花数
#include<stdio.h>
int main(int argc, const char *argv[])
{
int a,b,c,d;
printf("请输入三个数:");
scanf("%d%d%d",&a,&b,&c);
if ( a*a*a+b*b*b+c*c*c == a*100+b*10+c)
{
printf("能构成水仙花数\n");
d=a*100+b*10+c;
printf("%d",d);
}
else
printf("不能构成水仙花数\n");
return 0;
}
//赋值运算
#include<stdio.h>
int main(int argc, const char *argv[])
{
int a=12;
a*=2+3/2;
printf("%d\n",a);
return 0;
}