类型转换 >>-<< 关于输入输出的知识

@[toc]

目录

# 类型转换

# 输入,输出

# 基本的格式字符

# 输出的附加的格式说明符

# 输入的附加的格式说明符

# printf(格式控制,输出列表)

# scanf (格式控制,地址列表)

#  putchar()函数

# getchar()函数 

# 类型转换

自动类型转换(系统自动)

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与'(第二个)被留在输入缓冲区(这里暂时不做阐述了)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值