1 / 55

C 语言程序设计

C 语言程序设计. 视频课程. 讲师:成少雷. 目录. 一 、预备知识 —— 进制转换. 三 、数据的输入输出. 二 、 数据在内存中的表示. 四 、实例讲解. 进制的转换. 二进制: 0 1 八进制: 0 1 2 3 4 5 6 7 十进制: 0 1 2 3 4 5 6 7 8 9 十六进制: 0 1 2 3 4 5 6 7 8 9 A B C D E F

indiya
Download Presentation

C 语言程序设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C语言程序设计 视频课程 讲师:成少雷

  2. 目录 一、预备知识——进制转换 三、数据的输入输出 二、数据在内存中的表示 四、实例讲解

  3. 进制的转换 二进制: 0 1 八进制: 0 1 2 3 4 5 6 7 十进制: 0 1 2 3 4 5 6 7 8 9 十六进制:0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 2 3 4 5 6 7 8 9 a b c d e f

  4. 进制的转换 • 二进制、八进制和十六进制如何转换成十进制? • 101(B) = 122+021+120=5 • 101(O) = 182+081+180=65 • 101A(H) = 1163+0162+1161+10160=4106 • 十进制、八进制和十六进制如何转换成二进制? • 108(D)=1101100(B) • 721(O)=111010001(B) • F1(H)=11110001(B)

  5. 进制的转换

  6. 进制的转换 • 二进制  八进制 100110101  ? • 八进制  二进制 725  ? 100,110,101  4 6 5 7 2 5  111 010 101

  7. 进制的转换

  8. 准备知识--进制的转换 • 二进制  十六进制 100110101  ? • 十六进制  二进制 7AE  ? 1, 0011, 0101  1 3 5 7 A E  0111 1010 1110

  9. 进制的转换 1010 1100 0101 ? 5305 AC5

  10. 课堂练习 • 二进制  八进制、十进制、十六进制 1001011 • 十六进制  二进制、八进制、十进制 AC8 • 十进制  二进制、八进制、十六进制 168 113(O) 75(D) 4B(H) 101011001000(B) 5310(O) 2760(D) 10101000(B) 250(O) A8(H)

  11. 目录 一、预备知识——进制转换 三、数据的输入输出 二、数据在内存中的表示 四、实例讲解

  12. 内存结构 • 常用的表示存储空间大小单位: • 一个位有多大? • 只能是“0”或者“1”,这叫二进制 • 一个字节有多大? • 8位二进制数 • 保存一个字符(英文字母、数字、符号) • 可以表示0~255之间的整数 • 内存以字节编址 b, B, KB, MB, GB, TB 0012FF78 0012FF79 0012FF7A 0012FF7B 0012FF7C 0012FF7D 0012FF7E 0012FF7F 0012FF80 0012FF81 ….

  13. 内存结构 Data byte(字节) bit(位) bit bit bit bit bit bit bit 76543210

  14. 数据在内存中表示形式

  15. 无符号整数在内存中的表示 • 无符号整数的表示unsigned short a=100; • 无符号整数的表示unsigned int a=100; 15 … … … … … … 7 6 5 4 3 2 1 0 31 … … … … … … 7 6 5 4 3 2 1 0

  16. 有符号整数在内存中的表示 • 短整型(signed short) • 整型、长整型(signed int、 signed long) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 31 … … … … … ... … 7 6 5 4 3 2 1 0

  17. 整数在内存中的表示 • 在内存中数值是以补码的形式存储的 • 有符号整数在内存中的存储 • 正数: • 原码、补码和反码相同 • 负数: • 原码:数值的二进制表示 • 反码:符号位不变,数值的二进制按位取反 • 补码:数值的反码加1 正数 负数

  18. 数据在内存中的表示 • 课堂练习: • 写出25的原码,反码和补码 • 写出-21的原码,反码和补码

  19. 数据在内存中的表示 • 要求 计算1和-1的和 • 目的 • 揭示正数和负数的内存表示

  20. 分析 1的原码 -1的原码 -1反码 -1补码 1的补码 -1的补码 result 1

  21. 数据在内存中的表示 #include <stdio.h> intmain(void) { short num1 = 1; short num2 = -1; short result = 0; result = num1 + num2; printf(“%d\n”,result); return 0; }

  22. 整型溢出 #include <stdio.h> #include <stdlib.h> int main(void) { short y = 0xffff; unsigned short x = 65535; y = y - 1; printf("%d\n\n",y); x = x + 1; printf("%u\n",x); system("pause"); return 0; }

  23. 字符型在内存中的表示 • char型的数据在内存中保存的是字母的ASCII码,占一个字节 • 补充:ASCII表(美国信息交换标准代码)American Standard Code for Information Interchange 76543210

  24. 字符型在内存中的表示 char a1 = ‘A’;  char a1 = 65; printf(“ a1 = %c ” , a1); printf(“ a1 = %d ” , a1); 注:有些以“\”开头的特殊字符称为转义字符 ‘\n’ 换行 ‘\t’ 横向跳格 ‘\r’ 回车 ‘\\’ 反斜杠

  25. 实型内存占位 • 实型 22.625 = (10110.101)b = (1.0110101)b ×24 N=S ×r j 符号 阶码j 尾数S 有效位数 取值范围 0 10000011 0110101000000000000000 22.625

  26. 目录 一、预备知识——进制转换 三、数据的输入输出 二、数据在内存中的表示 四、实例讲解

  27. 数据的输出与输入 • 所谓输入输出是相对于计算机主机而言的 • 输出:从计算机向外部输出设备(显示器,打印机)输出数据。 • 输入:从输入设备(键盘,鼠标,扫描仪)向计算机输入数据。 Hello world!

  28. C语言的输出与输入 • C语言本身不提供输入输出语句,输入和输出操作是由C函数库中的函数来实现的 • 例如: • 格式输入函数:scanf 格式输出函数:printf • 字符输入函数:getchar 字符输出函数:putchar • 字符串输入函数:gets 字数串输出函数:puts • 使用这些函数需要包含“stdio.h”头文件 • printf  scanf • putchar  getchar • puts  gets

  29. scanf格式输入 控制字符串 • 一般格式: • scanf(字符串字面值, 参数1, 参数2, ….,参数n); • 允许出现在控制字符串中的内容包括: • 以%开始的转换说明、转义字符、其他字符。 • 转换说明一般形式 • 参数1、参数2、…..参数n,必须是变量的地址 • 格式字符串中的普通字符须按相应位置输入 • 转换操作符和变量地址一一对应 • 返回值,返回成功输入的项数 • %[*][最大宽度说明][长度修正说明符]<转换说明符> inta,b; scanf("%d,%d",&a,&b);

  30. scanf格式输入 • 除字符型(%c)外,输入项之间用一个或多个空白字符分隔,包括空格、回车、制表符 • 用scanf输入数据时,遇到空白字符(字符类型除外)、到达指定宽度、非法输入,认为该数据数据结束

  31. 输入输出原理

  32. scanf格式输入 • 例:从键盘上接收两个整数、一个浮点数,分别存于x、y和z中。 #include <stdio.h> #include <stdlib.h> int main(void) { int x, y; float z; printf("请输入x,y,z的值(以逗号隔开):"); scanf("%d,%d,%f", &x, &y, &z); printf("你输入的数是:x=%d,y=%d,z=%f\n", x, y, z); system("PAUSE"); return 0; }

  33. scanf格式输入 scanf(“%d,%d,%f”, &x, &y, &z); 输入流

  34. printf格式输出 • 格式输出函数 • 函数作用:将结果按要求输出到标准设备上(通常是屏幕)。 • 一般形式: • printf(字符串字面值, 参数1, 参数2, ….,参数n); • 参数可能为变量、常量、字面值 • 字符串字面值里的非转义字符和非转换说明符原样输出 • 返回值 大于0表示输出的字符个数,小于0表示输出错误。 • printf函数支持0到n个参数的输出: • printf(“hello”); //0个参数 • printf(“%d”, x); //1个变量 • printf(“%d”, 8); //1个字面值 • printf(“x=%d,y=%f”, x, y); //2个参数

  35. printf格式输出 • 对printf而言,格式控制串的一般形式: • %[标志字符][最小宽度说明][精度说明][长度修正说明符]<转换说明符> • 转换说明以%开始,依次出现下列元素: • 0个或多个标志字符(可选)。包括:-、+、0、#或空格。 • 最小宽度说明(可选)。用十进制整型字面值或星号表示。 • 精度说明(可选)。小数点后加一个十进制整型字面值表示。 • 长度修正说明符(可选)。包括:ll、l、L、h、hh、j、x、t。 • 转换说明符(必选)。包括:a、A、c、d、e、E、f、g、G、i、n、o、p、s、u、x、X、%。

  36. 常用的转换操作符 format.c

  37. 输入输出原理

  38. 关于转换操作符的使用 • 不匹配的转换操作符,后果不可预料 #include <stdio.h> #include <stdlib.h> int main(void) { float n1 = 3.0; double n2 = 3.0; long n3 = 20000000, n4 = 1234567; printf("%.1e %.1e %.1e %.1e\n", n1, n2, n3, n4); printf("%ld %ld\n", n3, n4); printf("%ld %ld %ld %ld\n\n", n1, n2, n3, n4); system("pause"); return 0; }

  39. printf函数的工作过程 printf("%ld %ld %ld %ld\n\n", n1, n2, n3, n4); n1, n2, n3, n4 n1 0 由printf函数根据转换操作符从输出流中提取相应的数据显示到屏幕 输出流 3.0 n2 1074266112 3.0 20000000 n3 0 1234567 n4 1074266112

  40. 字符数据的输入输出 • 字符输出函数 • 一般形式:putchar(c) • 函数作用:向终端输出一个字符 • 字符输入函数 • 一般形式:getchar() • 函数作用:从终端(或系统隐含指定的输入设备)输入一个字符。 • 函数值:从输入设备得到的字符。 • 其他字符输入函数 getch、getche • 需要头文件conio.h • 不经过缓冲区 字符型变量或整型变量

  41. 目的和要求 要求 输入三个字母,然后输出这三个字母 目的 学习getchar函数和putchar函数的使用方法

  42. 程序阅读 • 问题 • 1.当要求程序输出结果为a = 12, b = 34时,用户应该如何输入数据? • 2.当限定用户输入数据以逗号为分隔符,即输入数据格式为: 12,34↙ 时,应修改程序中的哪条语句?怎样修改? • 3.语句scanf("%d %d", &a, &b);修改为scanf("a = %d, b = %d", &a, &b);时,用户应该如何输入数据? #include <stdio.h> int main(void) { int a, b; scanf("%d %d", &a, &b); printf("a = %d, b = %d\n", a, b); return 0; }

  43. 程序阅读 • 4. 限定用户输入数据为以下格式为 1234↙同时要求程序输出结果为a = 12, b = 34 程序应该如何修改? • 5.限定用户输入数据为以下格式为 12↙ 34↙ 同时要求程序输出结果为a = "12", b = "34" 程序如何修改? • 6.设计程序使得用户可以以任意字符(回车、空格、制表符、逗号、其它)作为分隔符进行数据的输入

  44. 注意事项 • 在scanf函数里,丢掉变量前面的&符号 • 在scanf函数里,转换操作符和变量地址没有一一对应 • 在scanf函数里,转换操作符和变量类型不一致 • 在scanf函数里,%c会接收任何字符(包括回车) • 在printf函数里,转换操作符和变量类型不一致或个数不一致

  45. 目录 一、预备知识——进制转换 三、数据的输入输出 二、数据在内存中的表示 四、实例讲解

  46. 选择题 • 设short a = 32767;,a加1的结果是( ) • A. 0 B. 32768 • C. -1 D. -32768 • 设unsigned short x = 65535;,则x加1的结果是() • A. -65536 B. 65536 • C. 0 D. -1 • C 语言中的标识符只能由字母,数字和下划线三种字符组成,且第一个字符()。 • a. 必须为下划线 b. 必须为字母或下划线 • c. 可以使字母,数字和下划线任一种字符 d. 必须为字母

  47. 选择题 • 以下不正确的C语言标识符是____。 • A) int B) a_1_2 C) ab1exe D) _x • 以下是正确的C语言标识符是____。 • A) #define B) _123 C) %d D) \n • 浮点型数据在内存中的存储分为三部分( ) • A.符号 B.指数部分 C.尾数部分 D.精度 • 浮点数的精度、数据范围等信息在()有详细的说明。 • A. limits.h B. math.h • C. float.h D. stdlib.h

  48. 程序改错 #include <stdio.h> #include <stdlib.h> int main(void) { short s1=39000,s2=0; int num1,num2,num3;num4=10L; int sum = 0; unsigned long long star = 100000u1l; char ch1 = "A"; char ch2 = '09'; float 1ess = 2.0F; double money = 3e2.0; s2 = s1+100; sum = num1 + num2 + num3 + num4; ch2 = ch1+ch2; money = less * 100; return 0; }

  49. 学生信息 • 编写一个程序,输入某个学生的班级号、姓名、年龄、身高、体重,然后输出。运行效果如下图: 请输入学生的信息(班级号、姓名、年龄、身高(厘米)、体重(公斤)): 小明 19 175 65 你输入的是: 103 小明 19 175 60

  50. 程序菜单 • 编写一程序,打印一个四则运算的菜单,用户选择其中一种运算,接着提示用户输入两个整数,并在控制台窗口打印运算结果。运行效果如下图: [1] Add[2] Subtract[3] Multiply[4] DivideEnter your choice: 2your choice is [2]

More Related