输入输出(二)+流程控制(Day5)

一、输入输出

格式化操作函数:

1.****printf //格式化输出函数
 int printf(const char *format, ...); //... 表示可变参数 --参数的数量可以变 

 int printf(格式控制字符串,输出列表);
 
 printf("a = %d\n",a);
 
 格式控制字符串:
 占位符 //将来要被 后面的参数值 替换掉 --格式转换 
 
 整型类型:
 %d   以有符号十进制格式输出
 %u   以无符号十进制格式输出
 %o   以八进制格式输出
 %x   以十六进制格式输出
      %X 大写 表示 输出的十六禁止中的 字母 大写 
      
 浮点类型:
 %f   以十进制形式的小数输出,默认保留6位小数 
 %e   以科学计数法的形式输出 
 %g   以%f 和 %e 更简洁的方式输出 ,输出结果中不会保留没有意义0
 
 字符型:
 %c   以字符形式输出 
 %s   以字符串形式输出 
 
 
 辅助控制符
 #   %#o   //以八进制格式输出,前面带一个0
     %#x   //以十六进制格式输出,前面带上0x 


eg: m.n

(1) m 表示输出的宽度 //列数 
      如果数据本身宽度 < m   //输出结果默认右对齐,前面默认补空格,前面空出来的还可以补0
     %5d //默认前面补空格 
     %05d //前面空出来的补0 
     
     %-5d //  - 号 表示左对齐  
     
      如果数据本身宽度 >= m  //此时 以数据实际宽度输出 
 (2).n   
     浮点数 保留n位小数  
         %.2f //表示保留两位小数 
     字符串      
        保留 前n个字符

 l   // %ld -- long 
     // %lld -- long long 
     // %Lf // 表述输出 long double 注意 L 要大写      
     
 
 注意:
    1.一个占位符,只能匹配一个参数
    2.占位符匹配,是按顺序一次匹配的。

2.****scanf //格式化输入函数

int scanf(const char *format, ...);

scanf格式:
scanf("格式控制字符串",地址列表);
功能:
    将键盘获得到的数据,转换成指定的格式,给到地址对应的空间 
int a;
scanf("%d" ,&a);

参数:
(1).格式控制字符串 
   普通字符
    scanf("a=%d",&a); //要求,原样输入   
   占位符
     整型 
     %d  --- 将输入的数据 转换为 十进制格式  
     %x  --- 将输入的数据 转换为 十六进制格式
     %o  --- 将输入的数据 转换为 八进制格式
     浮点型 
     %f  --- 将输入的数据 转换为 小数格式    
             可以识别,十进制形式的小数,科学计数法形式的数据
     %lf --- 表示将输入的 浮点形式的数据,转换为double类型             
     
     %e 
     %g   //都能转换 浮点行书的数据 
          //默认可以转换 为 float类型 
     %le  //可以转换double
     %lg  //可以转换double 
        
     字符型
     %c  --- 将输入的数据,转换为 字符数据 
     %s  --- 将输入的数据,转换为 字符串数据 

辅助控制符:
  (1) m //宽度  -- 在输入时,表示指定了输入数据的宽度 
     //一旦达到宽度时,表示,此次输入结束 
     eg:
     scanf("%3x",&a); //如果输入的数据,已经匹配了3个字符宽度,则表示scanf结束 
     
    123456 //m相当于限定了输入数据的长度 
    
    12\n     //12读走了 
   
  //.n //输入时,不能指定所谓 精度 
  
  (2)
  l 
  ll 
     %f 
     %lf   //表示给double 输入数据  
     %Lf   //表示给long double 输入数据 
     %ld   //表示给long类型输入数据 
     %lld  //表述给long long类型输入数据 
     

  
注意:
     1.scanf使用时,格式控制字符串中,尽量不出现“普通字符”,主要写 占位符 
     2.输入多个数据时,数据间,可以使用"空白符"分割
       空白符 -- (回车,空格,tab键)
     3.scanf注意Segmentation(分段) fault (core dumped)  //段错误       
       错误的原因:代码试图访问不能访问的内存空间。
     4.一般使用 
       scanf中 占位符 与 地址列表中的个数 要匹配 
       scanf中 地址列表中注意一定得是有效地址 
       eg:
            int a = 10;
            scanf("%d",a); //此时a被当做地址用了,这不是一个有效的地址---访问到了 不能访问的空间(非法内存)

练习: 
   2.编写程序从终端输入数据给到变量,
  并打印变量的值
   a = 3 b = 5 x = 8.5 
   y = 71.82 c1= 'A' c2 = 'a'

   
输入缓冲区://缓冲区其实是一块内存
 [3 5 8.5 71.82 A B\n] //缓冲区
 [ B\n] //缓冲区
 
 scanf("%d%d%f%f%c%c",&a,&b,&x,&y,&c1,&c2);
  
问题:
    1. %c --- 识别字符 ---只要是字符都能被识别 
      空白符 (回车,空格,tab)
    2. 输入的数据,都是先到了输入缓冲区的,scanf去其中进行数据匹配 
      //缓冲区中有上一次输入残留下的空白符
   
注:
   %*c // 可以 匹配一个 数据项 ,匹配走之后,并不给到任何变量中
   scanf("%d "); 
   scanf("%d\n"); 如果出现空白符,表示 从输入中匹配任意多个空白符 
   scanf匹配结束的情况:
   1.遇到空白符 (回车,空格,tab) 
    scanf("%d%d",&a,&b);
    123 456 //
   2.到达指定的宽度 
    scanf("%3d",&a); //12345  --- 最终a只能读到123 
   3.遇到非法字符
    scanf("%d%d",&a,&b); // 123a456
    123 -- a对于%d来说就是非法字符 
   4.scanf返回值表示,成功匹配到的数据的个数 
   
   [a 1 2\n]
   %d%d%d
    
练习:
   三角形三边,求三角形面积 
   
   sqrt(数据);

二、流程控制

选择 (分支控制)
循环 

//1.准备数据 
//2.处理数据 
//3.输出结果 

//顺序结构 
//分支结构 
//循环结构 

任何一个程序,都可以是这三种结构的组合。


选择(分支):
从众多情况中,选择一种 

C语言中实现选择:
1.if语句 //if-else语句 
2.switch语句 
C语言中实现选择,需要构造选择的条件?
选择的条件的构造:
关系运算:  //大小关系 
运算符:
>
>=
<
<= 
== 
!= 

运算:
int a = 1;
int b = 2;

a > b    

关系运算的结果 --反映关系成立与否?    
        //布尔类型 
        true 
        false 
       c语言中,用int型 来记录 关系运算的结果 
       关系成立    真 结果 1 
       关系不成立  假 结果 0     //逻辑值    


逻辑运算
与 &&
   运算规则:
   一假则假 
   
   运算特性: 截断特性(短路特性)
   运算的顺序,始终先算 左边的第一个表达式 
   
或 ||
    运算规则:
   一真则真 
   
   也有短路特性 
   
非 !
    运算规则:
   真假相对 
逻辑运算 
表示 多个表达式之间的关系 

表示:
 b比a大并且比c小 
 
 a< b && b< c   // 对应数学上的 a<b<c 


 
C语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”?

c语言中用 0 表示 假 
          1 表示 真 
          
c语言规定,
如果一个量对应的数值 是 0 则为假 
如果非0,则为 真

0 --- 假 
'a' --- 真 
-1  --- 真 
1.23 --- 真 

三、练习

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值