数据类型,运算符和表达式(三)+输入输出(Day4)

一、算术运算:
+ 加
-  减
*  乘//区分数学上符号 和 c语言中的符号 
/  除
   注:
     1.除数不能为 0 
     2.两个整型数相除,结果相当于整除 
%  取余 
   注:操作2 不能是 0  //除数不能为 0
     
   eg:
     1.判断奇数 偶数?
      %2 ==> 1 奇数 
            ==> 0 偶数 
     2.%N,其结果 在[0,N-1]区间
     
     3. 求余的符号 
       取决于 左操作数 
       
     
练习:
    随机的抽出10套题 
    0~99 

如果想抽到的是后面50道题

printf("ret = %ld\n",ret%50 + 50);

注:%50---->[0,49]---->+50---->[50,99]    

    

知识点:随机数字 
    
    工具 --- c语言相关 函数库 提供的函数  (function-功能)
    random(); 
    
    long int random(void); //函数原型
    功能: 调用一次,返回一个随机数 
       
    伪 随机数 
       
    void srandom(unsigned int seed);
    功能:给 random 函数提供种子值,random函数会根据种子值的变化产生新的随机数 

    提供要给时间值 
     time_t time(time_t *tloc);
     功能:该函数返回的是一个时间的秒数
    eg:
       time_t t = time(NULL);
       

强制类型转换:可以强制转换某些数据的类型 
     
     (类型)运算数    //将运算数对应的类型 强转 成 括号中的类型 

    注意:强制类型转换,对运算数本身不会产生影响。


eg:
   1.2345;
   1.2343; //1.234 

   思路:
   1.2345    

       
++:  //自增运算 每次加1 
     ++i //先++ ,后用
     i++ //先用,后++ 
  
  //注:
     1. 先加后用,或者是先用后加,这个规则,只有在参与到别的运算中时,发挥作用。
     2. 单独使用时,前置加加 和 后置加加,效果是一样的。
     3. 运算数,必须是个左值 
        (const int a;//这里的a本身是左值,但是不能做++a,a++,原因是const修饰后,a成了只读变量)
  
op.c: In function ‘main’:
op.c:29:2: error: lvalue required as increment operand
  ++10;
  
op.c:30:4: error: lvalue required as increment operand
  10++;

lvalue  //left value  --- 左值 
  
左值:
   int a;
   a = 10;  // 能放在 = 左边的值,叫做左值  --- 变量 
右值:
   只能放在等号右边  --- 常量 
   
   int a;
   a = 10;
   int b;
   b = a;
   
constant //常量 

 const int a; //此时? a 
 
 lvalue (locationable value) //可定位的  ---可以获取到它的地址 
 
 &a //& 表示取地址 ---获取a对应的内存单元的编号(地址)
 
 现在左值 和 右值:
 
 能被定位到的      左值 --- 变量 
 不能被定位到的  右值 --- 常量 及 表达式 
 
 1+2 //匿名变量 (过程量)


eg:
 int i = 1;
  i++-3 
  
  (i++)-3 
   1-3 // = -2


运算符优先级和结合性:
1.优先级 
  一定是先结合的  
  优先级使用,是在不同级别的运算符混合运算时  
  
  i++-3 => (i++)-3
2.结合性 
  同一优先级 
  1+2-3

 -- //自减运算  每次减一 

  
注意:
  printf("%d, %d\n" ,i,i++); //因为 i ++ ,++i 这个 自增改变的时间点,没有明确规定
 总之,不要写出别人看不懂的、也不知道系统会怎样执行的程序。
 
 
i+++++i 

贪心原则:从左到右逐个字符扫描,尽可能多的结合成c的运算符
  i ++ ++ + i
  ((i++)++) + i 
  
  表达式 是一个右值 ?
  ++ 
  i+++i // i++ +i
  



赋值运算符:= 

int a;
a = 10 //赋值运算 

int a = 10; //这个一般不当作赋值运算,只当作是初始化 

int a,b,c;
a=b=c=1 

a=b=(c=1)
c=1 //赋值运算表达式 //结果就是c中获得到的值
    


不同精度类型间的混合赋值

//长类型 <=>短类型 
//整型 
1. 长类型=>短类型  此时 高位截断 
2. 短类型=>长类型  
        有符号 短类型 则 作符号位扩展 
        无符号 短类型 则 高位 补0         
int  a = 0x12345678;
short b = 0x1234;
a=b; 

printf("b = %#x\n",b);

//高精度 和 低精度 
float f = 1.23;
int a = f;

3. 浮点数 给到 整型变量中 ,此时 精度丢失(小数丢失)
int a = 1;
f  = a;


+=  // a += 1 <=> a = a + 1
-= 
*=
/= 
%= 
a+=1  // a = (a + 1) 


逗号运算:

,
连接多个表达式 

表达式1,表达式2, ... ,表达式n 
 
 
运算规则:
顺序求值运算

依次,求解表达式1到n 

逗号表达式的结果是: 最后一个表达式求值的结果 

eg:

int i = 0;
int sum = 0;
for (i = 1,sum = 1;...;...)

二、输入输出

语句
  1.控制语句
  if (a > b)
  {
  }
  else 
  {
  
  }
  
  2.函数调用语句 
    printf()  //函数调用 
    printf(); //函数调用语句 
  
  3.表达式语句 
    a+3 //表达式 
    a+3; //表达式语句 
    
  4.空语句 
   ; 
  5.复合语句 
    {
      z = x + y;
      c = a + b;
    }
    

输入输出

输入设备 --- 运算器 + 控制器 ----输出设备
             存储器 
            
输入 ---->内存---->输出
stdio  //standard input output 

函数:
单个字符 
putchar getchar 
格式化操作函数
prinf scanf

字符串操作 (*) //数组
puts / gets 

单个字符:

putchar() 

 int putchar(int c); //形参 --形式参数 ---本身是一个变量 
 功能:
     输出一个字符 
 参数:
   @c   要输出的 字符的 ascii码值 
 返回值:
   成功 返回输出了的字符的 ASCII的值
   失败 EOF (实际是-1) 
 eg:
  char c = 'a'; 
  putchar(c); //输出c中ascii码值对应的字符 
     
int getchar(void);
  功能:
      从键盘获取一个字符 
  参数:
    void 表示空类型,在函数形参表示不许参数 
  返回值:
    成功 返回读到了的字符的ASCII码值
    失败 -1
eg:
   int ret;
   ret = getchar(); //ret将保存 getchar从键盘获得到的字符的ASCII码值 
   
练习:
   char c1;
   将 hello 转换成大写输出 
   
   从键盘输入 
   
   输出?
   putchar()
   
   
   


格式化操作函数:

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

 int printf(格式控制字符串,输出列表);
 
 printf("a = %d\n",a);
 
 格式控制字符串:
 占位符 //将来要被 后面的参数值 替换掉 --格式转换 
 
 整型类型:
 %d   以有符号十进制格式输出
 %u   以无符号十进制格式输出
 %o   以八进制格式输出
 %x   以十六进制格式输出
      %X 大写 表示 输出的十六禁止中的 字母 大写 
 
 注意:
    1.一个占位符,只能匹配一个参数
    2.占位符匹配,是按顺序一次匹配的。
    
 
 
 普通字符 //原样输出 
 
scanf //格式化输入函数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值