C补习------>第三天,运算符、输入输出函数、控制语句

1,运算符
2,输入输出函数
3,控制语句

-----------------------------------------------------------------------------


1,运算符: 

包括:算术运算符,逻辑运算符,关系运算符,sizeof运算符,三目运算符,逗号运算符,位运算符,赋值运算符

(1)算术运算符:+ - * / % ++ --
%:运算对象必须为整形
++:
规则:++在前,先自加(给旧值自加),再赋值(将自加之后的新值赋值给表达式)
           ++在后,先赋值(将旧值赋值给表达式),再自加(给旧值自加)

--:
规则:--在前,先自减(给旧值自减),再赋值(将自减之后的新值赋值给表达式)
           --在后,先赋值(将旧值赋值给表达式),再自减(给旧值自减)
      
注意:
    什么时候需要关心++或者--在前还是在后?
    ----》看表达式到底有没有被作为值来使用。

      
(2)逻辑运算符 :&& || !
截断法则:
假设以 (表达式1 &&/|| 表达式2)
         &&:当表达式1为假时,表达式2不会被执行
         ||:当表达式1为真时,表达式2不会被执行
         
         
(3)关系运算符: > < >= <=  == !=

注意:书写等号的时候,建议将常量写在等号的左边,变量写在等号的右边(可以逻辑错误的产生)。


(4)sizeof运算符: 用来计算测试对象所占字节大小的一个运算符
格式:
    sizeof(数据类型)
    sizeof(变量名)
    
    注意: 当sizeof的测试对象为数据类型时,括号不可以省略。
                当sizeof的测试对象为变量名时,括号可以省略。
           
(5)三目运算符 
格式: 
     表达式1 ? 表达式2 : 表达式3
     
执行规则:
         先执行表达式1,判断表达式1的结果是否为真,当表达式1的结果为真时,则执行表达式2,并将表达式2的结果作为整个三目运算符的结果
         反之,则执行表达式3,并将表达式3的结果作为整个三目运算符的结果

练习:
1,使用宏,结合 三目运算符实现求两个数字中最小数

  1 #include<stdio.h>
  2 //使用宏定义和三目运算符比较两个数字中的最小数
  3 #define compare(min) (a<b?a:b)
  4 
  5 int main(int argc, const char *argv[])
  6 {
  7     float a,b;
  8     printf("请输入两个数字:");
  9     scanf("%f%f",&a,&b);
 10     printf("min:%f\n",compare(min));
 11     return 0;
 12 }         

2,使用宏,结合三目运算符的嵌套实现:输入一个成绩,当大于等于90分,输出S,处于60-89之间输出A,60分以下输出D。

  1 #include<stdio.h>
  2 //使用宏定义和三目运算符比较分数
  3 #define ad1(score) ((score >= 90)?'S':((score < 90 && score <= 60)?'A':'D'))
  4 
  5 int main(int argc, const char *argv[])
  6 {
  7     float score;
  8     printf("请输入一个分数: ");
  9     scanf("%f",&score);
 10     printf("class:%c\n",ad1(score));
 11     return 0;
 12 }       

(6)逗号运算符 :
格式: 
    表达式1,表达式2,表达式3.。。。表达式N;
执行规则: 从左向右依次执行,并将表达式N的结果作为整个逗号运算符的结果进行输出

(7)位运算符: &  | ~  ^  << >>
按位与 : &
eg: 
   1011 0101
  &0101 1011
  --------------
   0001 0001
   
   1011 0101
  &0000 0000
  ------------
   0000 0000
  
   1011 0101
  &1111 1111
  -----------
   1011 0101
   
作用:
(1)将一串指令中的某一位置零
(2)将一串指令中的某几位置零


eg: 
   1011 1101
  将该指令中的第三位指令
   1011 1101
  &1111 0111
  ---------------
   1011 0101
   
   
按位或:|
eg: 
    0101 1011
|   0000 0000 
---------------
    0101 1011
    
    0101 1011
|   1111 1111
----------------
    1111 1111
    
作用:可以将一串指令中的某一位或者某几位置1

eg: 
   0101 0010
   将该串指令中的第3~5位置1
   
   0101 0010
 | 0011 1000
 -------------
   0111 1010
   
 
按位取反: ~
 eg: 
    1011 1010
~   0100 0101


异或:^
    规则:不同为1,相同为0
    
eg: 
   1011 0101
 ^ 0010 1101
 --------------
   1001 1000
   
  1011 0101
 ^0000 0000
 ------------
  1011 0101
  
  1011 0101
 ^1111 1111
 ------------
  0100 1010
  
 作用:可以将一串指令中的某几位进行取反
   
左移:<<
总结:
     不管是unsigned还是signed,都是高位丢弃,低位补0
右移:>>
总结:
     对于unsigned:低位丢弃,高位补0
     对于signed:
                正数:低位丢弃,高位补0
                负数:低位丢弃,高位补1                
     
综上:
    左移一位相当于乘以2(两位就乘以4),右移一位相当于除以2
    
   


2,输入输出函数
分类:
标准输入输出函数:scanf,printf(对于数据类型没有任何限制)
字符输入输出函数:getchar,putchar(针对于字符)

输入:从键盘拷贝数据到内存中去
输出:从内存中拷贝数据到显示屏/终端上去

标准输出:
printf:
格式:  
    int printf("格式控制串",输出表);
    占位符:      
      整形:
             %d  ----->  int 
             %hd  ---->short
             %ld  ----->long
             %lld  ---->long long 
             %o  ---->八进制
             %x  ---->十六进制
             %X  ---->十六进制 
             %u  ----->打印无符号数
             #  ---->可以在八进制和十六进制前面加前导符
        浮点型: 
             %f  ---->float
             %lf ----->dobuble
             %e  ---->指数形式
             %g  ----->比较智能,会选择较短的方式去打印数据

        字符型:
             %c ---->char

        字符串:
             %s  ---->字符串 
        地址:
             %p -----> 地址 
            
        注意: 
             对于打印整形数字的时候,需要控制域宽
             %Md   ----> M为域宽(默认是右对齐)  ---》M为一个常数
             %-Md  ----->M为域宽(左对齐)        ---》M为一个常数
             当M大于有效数字的位数时,以补空格的形式打印输出
             当M小于有效数字的位数时,会原样输出。
             
             对于浮点型的数字打印时,既可以控制域宽,也可以控制精度
             注意:
                   对于scanf而言:只能控制域宽,不能控制精度
                   对于printf而言:域宽和精度均可控制
        
        
scanf: 
int  scanf("格式控制串",地址表);

&  ----》 取址运算符

*  ----》抑制符


字符输入输出函数:
getchar:从键盘获得一个字符
函数原型:
int getchar(void);
参数:无参
返回值:代表所获得的字符的ASCII码值/字符

作用:一般作为吸收垃圾字符


putchar:输出一个字符
函数原型:
 int putchar(int c);
 参数:代表所需输出的字符的ASCII,字符常量,字符变量
 


3,控制语句(三大结构:顺序,选择,循环)
选择语句(分支语句):
单分支:
格式: 
     if(表达式)
     {
        语句块;
     }
     
双分支:
格式: 
     if(表达式)
     {
        语句块1;
     }
     else
     {
        语句块2;
     }
多路分支:
格式: 
     if(表达式1)
     {
        语句块1;
     }
     else if(表达式2)
     {
        语句块2;
     }
     。。。
     else
     {
        语句块N;
     }
     
     
switch_case语句:
格式: 
     switch(整形/常量表达式)
     {
        case 常量1:
             语句块1;
             break;
        case 常量2:
             语句块2;
             break;
        case 常量3:
             语句块3;
             break;
        。。。
        default:
             语句块N;
     }     
     
嵌套分支语句:
格式: 
    if(表达式1)
    {
        if(表达式2)
        {
            语句块1;
        }
        else if(表达式3)
        {
            语句块2;
        }
        else
        {
            语句块3;
        }
    }
    else
    {
        语句块4;
    }

练习: 
1,从键盘获取一个五位数,判断其是否为回文数 eg:12321  (if——else)

#include<stdio.h>
 
int main(int argc, const char *argv[])
{
    int a,b,c,d,e;
    int num;
    printf("请输入一个数\n");
    scanf("%d",&num);
    a = num/10000;
    b = (num%10000)/1000;
    c = ((num%10000)%1000)/100;
    d = (((num%10000)%1000)%100)/10;
    e = (((num%10000)%1000)%100)%10;
    if(a == e)
    {
        if(b == d)
        {
            printf("这个是回文数\n");
        }
        else 
        {
            printf("这个不是回文数\n");
        }
    }
    else
    {
         printf("这个不是回文数\n");    
    }
    return 0;
}
2,手动实现简易计算器的功能:加 减 乘 除 取余 ----》(switch——case)

#include <stdio.h>
 
int main(int argc, const char *argv[])
{
    //完成简易计算器的功能
    float num1,num2;
    char op;
    //菜单函数
    printf("*****************\n");
    printf("+ ---------加法!\n");
    printf("- ---------减法!\n");
    printf("* ---------乘法!\n");
    printf("/ ---------除法!\n");
    printf("---------取余!\n");
    printf("*****************\n");
 
    printf("请输入需要计算的两个数字:\n");
    scanf("%f%f",&num1,&num2);
    printf("请输入需要进行的操作:\n");
    scanf("%*c%c",&op);
 
    switch(op)
    {
        case '+':
            printf("%.1f + %.1f = %.1f\n",num1,num2,num1+num2);
            break;
        case '-':
            printf("%.1f - %.1f = %.1f\n",num1,num2,num1-num2);
            break;
        case '*':
            printf("%.1f * %.1f = %.1f\n",num1,num2,num1*num2);
            break;
        case '/':
            printf("%.1f / %.1f = %.1f\n",num1,num2,num1/num2);
            break;
        case '%':
            printf("%.1f %% %.1f = %d\n",num1,num2,((int)num1)%((int)num2));
            break;
        default:
            printf("输入的操作数有误,请重新输入!\n");
    }
 
    return 0;
}
 
————————————————
版权声明:本文为CSDN博主「旅人520」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_59476403/article/details/118069183

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值