云计算百科
云计算领域专业知识百科平台

C语言第3讲

算数操作符  + – * / %

1. 双目操作符的意思

算数操作符  + – * / % 都是双目操作符

int a = 2 + 3

int a = 2( 操作数 1 ) +   3( 操作数 2 )

在使用加号时,需要 被加数加数,所以是双目操作符

可能你会提问 :  + 5  , – 5 这样的例子,这时你就需要细细想想了

+ 5– 5 通常在数学上表示的 ‘ 5 ’ 是正 负的状态,计算机也是一样 

                      *  对应乘号  x

2. / % 的运用

 在小学时我们常常会写一类题目,队伍坐船问题

例:3年级2班,准备出去春游,春游的中有个项目为坐船观景,已知一条船只能坐5个学生,而2班一共有32人,这次春游需要多少条船呢?

在计算中会出现以下的式子

32  ÷  5  =  6 (条)…… 2(人)

式子表示可以坐满 6 条船,剩下 2 人

而计算机中

32  /  5  得到 商 6(条)

32  %  2  得到 余数 2 (人)

过上几年小朋友学会了小数,我们的式子就会改变

如下  32 ÷  5 = 6.4(条)

在计算机中我们如何得到小数的商?

只需要 两个操作数至少一个是浮点数就行

计算机中 1 + 1 / 2 + 1 / 3 + 1 / 4 + 1 / 5 = 多少?

整形和浮点型的强制内型装换

#include <stdio.h>

int main()
{
    int a = 3.5;将浮点型强制存入整形变量中小数会被舍弃
    printf(" %d\\n " ,a );
    return 0;
}

这个操作编译器会报警告

为了不报错就得给它提前 “ 强制类型转换 ”

 int a = 3.5;

int a = (int)3.5  ;

%的两个操作符只能是整数

负数求模(%)

负数求模,结果的正负由第一个操作符的正负数决定

赋值操作符 =

int  a  =  100 ; 这是初始化,不是赋值

当有了 变量 a 后

a  =  200 ; 这才是赋值 

连续赋值

int  a  =  3  ;

int  b  =  5  ;

int  c  =  0  ;

c  =  b  = a  +  3  ; 连续赋值,从右向左依次赋值

翻译

 1. b = a + 3 ;

 2. c = b ;

结果 : b = 6 , c =6 , a = 3

单目操作符  ++  —   +   – 

+  – 表示  正 负 

++  –的意思

a再计算机上如何给变量加上一个常数?

int a = 3 ;

a = a + 2 ;

表示在a就先存入的值的基础人加 3 然后再覆盖在之前的值上

假设:你喜欢在 本子 上记录自己身上的财政情况,现在你现在有3块钱,然后你一天赚了2块,你需要重新记录自己的财政情况 3 + 2 = 5 ,所以你在本子上,用橡皮擦擦除了之前的3重新写了个5(这个操作类似,先算出 a + 2 = 5 ,然后删除了a中存在的3 ,在存上个5)

现在我们可以缩减上面的代码

1. a = a + 2

2. a += 2 

两者表示的意思

(一样在a就先存入的值的基础人加 3 然后再覆盖在之前的值上

其余的算数操作符 (  –  , *  ,  /  ,  %) 加上 = 一样

然后在其中

a + = 1 时再次定义

 a++ 和 ++a  和一致

a – = 1 —>   a– ,–a

++ 和 –分前置后置

前后置的判断

前后置的分辨在于 ++ 和 — 在变量的前后

++ a ; 前置  

a ++ ; 后置

前后置的意思

前置 后置 决定的是 加  减  的先后

例:++a 表示 先加加,后使用

       a++ 表示 后加加,先使用

在代码中的使用

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>

int main()
{
    int a = 0;

    int b = 1;

    printf("b=%d\\n", b = a++);
    printf("a=%d\\n", a);
    return 0;
}

 printf("b=%d\\n", b = a++);

先使用 a 将 a的值存入 b 中 (a=0 ,将 0 存入b 中 后 b=0   ) 

后加加(a加上1)  

–也是一样

++ — 的问题代码

int a = 1 ;

printf("%d"  ,  (a++)+(a++)+(a++)+(a++)  ) ;

这串代码在不同编译器下得到结果会不同

printf 和 scanf 函数

1.printf函数

占位符

第一个字符一定是%

第二个字符表示占位符的类型

例 :%d 表示 int 类型的占位符 (10进制)

%c    字符

%s    字符串

%f     float (默认小数点后6位)

%lf  double

%Lf  long double

%p    指针

%o    int (8进制)

%x    int    (16进制) 

%hd  short int 

%ld    long int

printf () 函数与占位符是 一 一 对应关系,如果有 n 个占位符,printf ()的参数就应该有n+1个,

如果参数少了,printf () 可能会输出内存中的随意值

printf (  "  %d     %d  ",10 ,5 ) 

2个占位符

printf (  "  %d     %d  "105

3个参数

当参数少于 2+1 个参数时

每次值都是随机

占位符输出格式管理
限定宽度

%  (在这个位置加上数字)  d

作用为限定最小宽度,小于这个宽度的用空格补

空格补的方向控制

%  (在数字加 +(一般省略了) – 号)数字  d

+左侧

-右侧

小数位,保留几位小数

%  (小数点 + 数字)   f 

1.会进行四舍五入

2.可以综合使用

限定字符串最大输出长度

%(小数点 + 数字)s

让所有正数值的 + 号显示出来

%+d

格式管理的值,可以通过 * 代替

printf ( "%*.*f\\n" , 6 , 2 , 5.2 );

scanf函数

scanf函数和prinf函数的占位符大致相同

scanf的返回值是一个整数,表示成功读取的变量个数

如果想输入多组数据,并得到对这些数据的判断

例:KiKi想知道从键盘输入的两个数的大小关系,请编程实现

#include <stdio.h>

int main()

 {

   int a = 0;

   int b = 0;

   while(scanf( "%d %d" , &a , &b ) == 2)

   {

    int x = a ;

    int y = b ;

    if(x>y)

        printf("%d>%d\\n", x , y);

    else if (x<y)

        printf("%d<%d\\n", x , y);

    else

        printf("%d=%d\\n", x , y);

   }

   

    return 0;

}

 while(scanf( "%d %d" , &a , &b ) == 2)

(  '=='  判断前后值是否相等)

scanf 的 %c 不会跳过字符前的空白字符

               %s 会自动跳过字符串前的空白字符,读取时,遇到空格自动结束

特殊 数组名就是地址

               %10s   表示最大读取10个字符(%s读取字符串后会主动加个 \\0 )

由于scanf在输入时会固定格式

例:

int a = 0;

int b = 0;

scanf("%d %d", a,b);

在输入时需要是

5 (空格) 6 的格式

不能是

5 , 6 的格式

我们想要任意格式

只需

scanf("%d%*c%d", a,b);

只需加上%*c

表示丢弃中间读到的字符

赞(0)
未经允许不得转载:网硕互联帮助中心 » C语言第3讲
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!