@[toc]
目录
# 类型转换
自动类型转换(系统自动)
1.赋值类型转换:(1)浮点型赋值给整型,结果将舍弃浮点数小数部分;整数赋给浮点型,数值不会发生变化,结果以浮点数的方式存在。
(2) 字符型赋值给整型,数值不会变化,但以整型存储,内存空间变大;整型赋值给字符型,只把整型的低8位赋值给字符型变量。
(3) 双精度浮点数赋值给单精度浮点数,有效位会减少,丢失的部分四舍五入。
2.运算转换:(1)转化按数据占用字节数增加的方向转换。
(2)浮点数运算都是按照双精度进行的。
#include <stdio.h>
int main()
{
char ch='a';
int i=13; //运行结果120.000000
float x=1.25;
double y=8.00;
printf("%f",i+ch+x*y); //特点:由数值位数存储少的向多的转换
return 0;
}
强制类型转换(程序员通过类型说明符实现的)
(类型说明符)[表达式] |
1.类型说明符和表达式都必须加括号,如果表达式是单个变量则可不加。
2.无论是强制类型转换还是自动类型转换,都不改其原变量的类型。
#include <stdio.h> //运行结果 2
int main() // 2.500000
{ // 2.000000
int a=2,b=5; // 4.400000
float x=4.4;
printf("%d\n",b/a); //两个整数运算,结果只能是整数
printf("%f\n",(float)b/a); //b被强制转换成了float型,为使“/”两边数据类型一致,将a转
printf("%f\n",float(b/a)); // 为float型再运算
printf("%f\n",(int)x%a+x); //第三个printf中,对(b/a)整体结果进行强制类型转换
} //第四个printf中,是将%前的x强制转换成了int型
# 输入,输出
1.输入输出是以计算机主机为主体而言的。输出,从计算机向外输出;输入,从输入设备向计算机输入。
2.输入输出操作是有函数库中的函数来实现的,使用时要在程序文件的开头用预处理指令#include把有关头文件放在本程序中。
格式声明的一般形式,%格式字符。
# 基本的格式字符
下面介绍几种常见的基本的格式字符:
d格式符:以有符号十进制整数输出(入)。
例子:输出时,%5d,表示输出数据占5列,右对齐,不足5列在前面补空格,超过5列按实际位数输出。%ld输出长整型数据。%d,按整形数据的实际长度输出。
格式符 | 含义 |
d | 以十进制整数输出 |
o | 以八进制整型输出 |
x | 以十六进制整数输出 |
u | 用来输出无符号十进制数 |
c | 用来输出一个字符 |
s | 用来输出一个字符串 |
f | 以小数形式输出单双精度数 |
e | 以实数指数形式输出 |
g | 用来输出实数,根据数值大小,自动选择f或e格式,且不输出无意义的零 |
p | 用于变量地址的输出 |
# 输出的附加的格式说明符
l(小写字母) | 长整型整数,可加在格式符d,o,x,u前面 |
m(正整数) | 数据最小宽度 |
n(正整数) | 对实数,表示n位小数;对字符串,表示截取的字符个数 |
- | 输出的数字或字符在域内向左对齐 |
# 输入的附加的格式说明符
l(小写字母) | 输入长整型数据以及double型数据 |
h | 输入短整型数据 |
* | 本输入项再读入后不赋给相应的变量 |
# printf(格式控制,输出列表)
printf("a=%d,b=%c\n",i,c);
1.格式控制:用双引号括起来的一个字符串,称为格式(控制)字符串,包括:
普通字符 :需要在输出时原样输出的字符。
格式声明:将输出的数据转换为指定格式后输出。
2.输出列表:是程序需要输出时的一些数据,可为常量,变量或表达式。
(若格式控制有3个格式声明而输出列表有4个数据,则以格式声明为准,第四个数据无效,不被输出。)
#include <stdio.h>
int main()
{
int y=20;
float x=111111.111;
printf("%7.5s\n","programing"); //一共占7位,截取5位
printf("%f\n",x); //浮点数表示数据有效长度不超过7位,以整数部分为主,超过7位可能会出现误差
printf("%8d,%3.2f\n",y,x);//3:整数部分超3位,按实际输出,不足空出。2:截取2位小数部分
printf("%-8d\n",y,x);//由原来的右对齐变为左对齐;x无效
return 0;
}
运行结果
progr
111111.109375
20,111111.11
20
# scanf (格式控制,地址列表)
scanf("a=%f,b=%f",&a,&b,&c);
1.格式控制含义同printf函数。
2.地址列表:由若干个地址组成的列表,可以是变量的地址,或字符串的地址。
3.scanf函数没有计算功能
(1)输入多个整型数据或实型数据可用空格,回车或制表符做间隔
(2)输入多个字符型数据时,数据间不可使用分隔符
(3)若指定了输入数据的宽度,则系统自动截取所需数据
(4)%后面加*表示跳过相应的数据接收
#include <stdio.h>
int main()
{
long x1;
double dx; //输入了 12345,12345678
printf("请按要求输入两个数据");
scanf("%8ld,%5lf",&x1,&dx); // 运行结果 12345,12345.000000
printf("%ld,%f\n",x1,dx); //对于dx,限定接收5位但给了8位,所以数据失真
return 0; //而内存中为其开辟的空间有8Byte是不变的,所以后面出现
} //了一串零。
# putchar()函数
1.用于将一个字符输出到显示屏上显示。
2.一般调用格式(有参数) putchar(ch); 头文件#include <stdio.h>
#include <stdio.h>
int main(void)
{ //运行结果 BOY
char a,b,c; a
a='B';b='O';c='Y';
putchar(a); //输出变量a空间里存放的字符
putchar(b);
putchar(c);
putchar('\n'); //输出转义字符,换行
putchar('a'); //输出字符常量a
return 0;
}
# getchar()函数
1.从键盘输入一个字符,应用时必须用另一个变量名接收读入的字符。
2.一般调用格式(无参数):ch(变量名)=getchar();(从键盘接收的字符存储在已定义的变量ch中);头文件include <stdio.h>
#include <stdio.h>
int main() //运行:enter a char: a
{ a
char c; //定义字符型变量c
printf("enter a char:");
c=getchar(); //用getchar()函数获取c的值
putchar(c);
putchar('\n');
return 0;
}
我在输入时有一个疑问:为什么从键盘输入的不是'a'? 运行后我发现结果只有 '
解惑:C语言中对字符的的定义:字符指类字符型单位或符号,包括字母,数字,运算符号,标点符号和其它符号,以及一些功能性符号。转义字符\'表示一个单引号字符;可用' '括起来的形式表示一个字符。(是我学艺不精了,前面学习中学到过)。
输'a'相当于输了三个字符,a与'(第二个)被留在输入缓冲区(这里暂时不做阐述了)