C入门2:基本数据类型、运算符和变量

1. 基本数据类型--字符型、整型和浮点型

在Hello World示例使用了字符串,在C语言中还有一类常用的数据类型--数值类型。例如:字符c、整数123和小数3.14
下面是在终端输出整数和小数。

#include <stdio.h>

int main() {
  printf("%c\n",'a');
  printf("%d\n",123);
  printf("%f\n",3.14);
  return 0;
}
  • 说明
    字符型是单个字符,必须使用英文单引号包裹。
    这里使用了输出函数另一种用法:
printf("输出格式",输出项列表);

输出格式:
%c(c是charactor的首字母)表示输出单个字符
%d(d是十进制数decimal的首字母)表示输出整数
%f(d是浮点数float的首字母)表示输出小数
输出项列表:即存放要输出的变量名称。

注意,这里使用printf()时,前面的字符串和后面的数字中间用逗号,隔开。这里的%c%d%f称为占位符,在终端输出时,用后面的的数字替换。注意,不同类型的占位符是有区别的,用错了打印的值也会错误。

我们还可以把上面的两行合成一行。

#include <stdio.h>

int main() {
  printf("%c\n%d\n%f\n",'a',123,3.14);
  return 0;
}

数字可以与字符串一起打印。

#include <stdio.h>

int main() {
  printf("字符:%c\n整数:%d\n小数:%f\n",'a',123,3.14);
  return 0;
}

试一下,用上面的方法打印一下自己的姓名、年龄、身高、体重、体温等数据。

#include <stdio.h>

int main() {
  printf("姓名:张三\n");
  printf("年龄:%d岁\n",25);
  printf("身高:%dcm\n",175);
  printf("体重:%dkg\n",60);
  printf("体温:%f度\n",37.5);
  return 0;
}

这里只是简单介绍了数值类型,后面会有更加详细介绍。

2. 运算符--简单运算法(算术运算符、关系运算符和逻辑运算符)

程序中数字之间是可以像数学中数字一样进行运算的。例如:1+2,2*3等。
试一下

#include <stdio.h>

int main() {
  printf("%d\n",1+2+3);
  return 0;
}

对于数字常用的简单运算有算术运算符、关系运算符和逻辑运算符三类运算符。

2.1 算术运算符

运算符 符号 操作 用例 结果
加法 + 使它两侧的值加到一起 1+2 3
减法 - 从它前面的数减去后面的数 5-3 2
乘法 * 将它前面的数乘以后面的数 2*3 6
除法 / 用它左边的值除以右边的值 8/3 2(整数的除法会丢掉小数部分)
取模/取余 % 求用它左边的值除以右边的数后的余数 5%3 2(%运算符两侧的操作数必须为整数)
  • 算术运算符特点
    • 优先级:* / % > + -
    • 结合律:自左向右
  • 练习
    1. 求半径为3的圆的周长和面积。
    2. 求半径为5的圆的周长和面积。
    3. 1小时40分钟30秒共计多少秒。
    4. 求10000秒是几小时几分钟几秒。
    5. 已知一个两位整数,分别求出个位数与十位数。
    6. 对小数f保留n位小数并且四舍五入。(f*10^n+0.5)/10^n

2.2 关系运算符

数字除了可以计算外,还可以比较大小。

运算符 符号 操作
等于 == 检查两个操作数的值是否相等,如果相等则条件为真。
不等于 != 检查两个操作数的值是否相等,如果不相等则条件为真。
大于 > 检查左操作数的值是否大于右操作数的值,如果是则条件为真。
小于 < 检查左操作数的值是否小于右操作数的值,如果是则条件为真。
大于等于 >= 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。
小于等于 <= 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。

在C语言中0为假,其他为真。
注意:这里除了><与数学表示一样,其他的都与数学表示有区别。

  • 关系运算符特点
    • 优先级:算术运算符 > > >= < <= > == !=
    • 结合律:自左向右
  • 练习
    1. 偶数/奇数判断
    2. 整除判断
    3. 猜测并判断下面程序的结果。
      #include <stdio.h>
      
      int main(){
          printf("1<100<10这个式子结果是:%d\n",1 < 100 < 10);
      }
      

2.3 逻辑运算符

真假也可以运算,被称为逻辑运算。有如下:

运算符 符号 描述
&& 称为逻辑与运算符。如果两个操作数都非零,则条件为真。
|| 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。
! 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。

有点像电路中的并联串联。

  • 逻辑运算符特点:

    • 优先级:! > 算术运算符 > 关系运算符 > && > ||
    • 结合律:&&||自左向右;!自右向左。
  • 练习

    1. 闰年判断

      1582年以来的置闰规则
      1. 普通闰年:公历年份是4的倍数,且不是100的倍数的,为闰年(如2004年、2020年等就是闰年)。
      2. 世纪闰年:公历年份是整百数的,必须是400的倍数才是闰年(如1900年不是闰年,2000年是闰年)。

    2. 三角形构成判断

      三角形三边关系
      任意两边之和大于第三边
      任意两边之差小于第三边
      a+b>c,a>c-b
      b+c>a,b>a-c
      a+c>b,c>b-a

    3. 猜测并判断下面程序的结果。

      #include <stdio.h>
      
      int main () {
         printf("%d\n",!100+10);
         printf("%d\n",!0+10);
         return 0;
      }
      

2.4 优先级和括号

运算符都有优先级,改变优先级使用()

  • 练习
    1. 任意五个数的平均数

3. 变量

上面的例子中,有些值一直是变化的,而另外一些值是不变,例如,求圆的周长和面积的时候,半径是变的,而圆周率是不变,在数学中我们通常使用变量代替,在程序中也可以定义并使用变量

杯子的作用是盛水,变量的作用是保存数据。

3.1 基本语法

  1. 定义
    定义用来说明变量的名字和类型。
    • 语法
      先指定类型,然后指定变量名。
      类型 变量名;
      
    • 示例
      int a;//  定义整型变量为a;
      float b;// 定义浮点型变量为b;
      
      这里的int表示整型,float表示浮点型。
  2. 赋值
    在变量名后,紧接=,后面再接常量。
    a = 10;
    b  = 1.2;
    
  3. 使用
    使用方式与常量相同。直接使用变量代替常量
    #include <stdio.h>
    
    int main(){
       int a;// 声明整型变量为a;
       float b;// 声明浮点型变量为b;
       a = 10;
       b  = 1.2;
       printf("a=%d\nb=%f\n",a,b);
       printf("%d+%f=%f\n",a,b,a+b);
     }
    
  4. 初始化
    定义和赋值通常可以写在一起。这种定义时赋值的操作被称作初始化。
    int a = 10;
    float b  = 1.2;
    

初始化与赋值的区别


试一试

  1. 使用变量前没有定义或出现什么情况?
  2. 使用变量前没有赋值打印和计算结果是什么?

练习

  1. 华氏温度转摄氏度
    摄氏温标(C)和华氏温标(F)之间的换算关系为:
    F=C×1.8+32 \\ C=(F-32)÷1.8
  2. 长度换算
    1英尺 = 0.3048米
    1英里 = 1609.3米
    1英寸 = 2.54厘米
  3. 交换两个整数的值

编码套路:惯用法

3.2 命名规则

中国姓名中是否可以使用字母和数字?


人的名字不能乱起,变量名字也不能随便起的,需要遵循一定的规制--命名规则。

  1. 变量名是字母、数字和下划线的组合。
  2. 变量名的开头必须是字母或下划线,不能是数字。
    实际编程中最常用的是以字母开头,而以下划线开头的变量名是系统专用的。
  3. 变量名中的字母是区分大小写的。比如aA是不同的变量名,numNum也是不同的变量名。
  4. 变量名绝对不可以是C语言关键字关键词是由C语言规定的具有特定意义的字符串,通常也称为保留字。
    标准C语言有如下关键字:

3.3 重点

  1. 变量使用前必先初始化(定义和赋值)
  2. 变量显性三要素:类型、变量名、值

4. 表达式

变量和常量能够参与计算,这种计算的式子称为表达式,表达式由运算符和操作数组成。
表达式必有计算结果。

5. 输入

如何通过键盘输入数字,并且保存在变量中?

#include <stdio.h>

int main(){
    int n;
    scanf("%d",&n);
    printf("%d\n",n);
    return 0;
}

练习

  1. 计算两个数的和差积商余。
  2. 输入一个年月日组成的数字,按照XXXX年XX月XX日打印出来。例如:输入20190311,打印出2019年3月11日。
  3. 输入一个时分秒组成的数字,按照XX时XX分XX秒打印出来。例如:输入180301,打印出18时3分1秒。

灵活的语法

  1. 多个变量同时定义
    int a,b;
    
    定义的变量类型必须一致。
  2. 多个变量同时赋相同值
    a=b=10;
    
  3. 多个变量同时初始化
    int a=10,b=20;
    
  4. 复合赋值运算符
运算符 描述 实例
+= 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数 C += A 相当于 C = C + A
-= 减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数 C -= A 相当于 C = C - A
*= 乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数 C *= A 相当于 C = C * A
/= 除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数 C /= A 相当于 C = C / A
%= 求模且赋值运算符,求两个操作数的模赋值给左边操作数 C %= A 相当于 C = C % A

说明
复合赋值运算符与赋值运算符的优先级相同。

  1. 自增运算符++与自减运算符--

前缀自增/自减

运算符 描述 实例
++ 自增运算符,整数值增加 1 ++A 相当于 A=A+1
-- 自减运算符,整数值减少 1 --A 将得到 A=A-1

下面三条语句可以看成一样的。

a=a+1;
a+=1;
++a;

自减也是一样的。

a=a-1;
a-=1;
--a;

后缀自增/自减

后缀自增/自减是一种特殊表达式,它的值是变量的原来的值,表达式计算结果后,变量的值自动加1/减1。

自增运算符与自减运算符与其他运算法不同点在于副作用(表达式计算结果之后修改变量的值)。所以,分析时需要分别分析表达式的值和变量的值。

前缀自增(++n) 前缀自减(--n) 后缀自增(n++) 后缀自减(n--)
表达式的值 n+1 n-1 n n
变量的值 n+1 n-1 n+1 n-1

前缀与后缀的不同点在于表达式的值是否加1/减1,相同点在于变量的值都会加1/减1。

  • 说明

    1. 自增运算符++、自减运算符--和复合赋值运算符主要用于简化代码。
    2. 自增运算符与自减运算符优先级高于算术运算符。
  • 试一试

    1. 这两个运算符可以用在常量吗?
    2. 分析下面代码的输出结果。
       int i = 1;
       int j = 2;
       int k = i++ + ++j + i++;
      
  • 练习
    通过键盘输入修改前面做过的练习题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,864评论 6 494
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,175评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,401评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,170评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,276评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,364评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,401评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,179评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,604评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,902评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,070评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,751评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,380评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,077评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,312评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,924评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,957评论 2 351

推荐阅读更多精彩内容