|
引 言
一、教学目的 本讲主要介绍了C语言的特点、基本结构、基本输入输出语句和C程序的编辑、编译、运行方法,要求了解C语言的特点,掌握C程序的基本结构,掌握输入输出函数scanf()和printf()的基本使用方法,熟悉C程序的编辑、编译、调试和运行过程。
二、知识要点 1.C语言的特点 (1)丰富的数据类型 (2)结构化的控制语句 (3)高效率的目标代码 (4)可移植性好 2.C语言的基本结构 (1)由一个主函数main()或一个主函数及其它函数组成 (2)每个函数用{ }括起来 (3)每个语句后加“;” 3.库函数printf()的使用 (1)函数printf()的功能和使用格式 (2)常用转义字符的使用 (3)常用格式符的意义和使用 4.库函数scanf()的使用 (1)函数scanf()的功能和使用格式 (2)格式控制与输入数据格式的关系 (3)地址表列的使用 5.C程序开发过程 (1)编辑、编译、连接和执行 (2)源程序、目标程序、可执行程序
三、边用边学
§1.1 C语言简史
C语言是由D.M.Ritchie于1972年在B语言的基础上设计的,主要用于编写UNIX操作系统的。1977年出现了可移植的C语言编译程序,使得用C语言编写的UNIX系统可以在各种计算机上使用。随着UNIX的广泛应用,C语言得到了普及和推广,并最终独立于UNIX而成为世界上应用最广泛的计算机语言之一。 1983年美国国家标准化协会(ANSI)制订了C语言标准,即ANSI C。目前流行的各种版本的C语言都是以它为基础的,如Turbo C,Microsoft C,Quick C等。
§1.2 C语言的特点
一、丰富的数据类型 C具有整型、浮点型、字符型、数组类型、指针类型、结构体类型、共用体类型等多种数据类型。特别是C的指针类型,功能强大、灵活方便。
二、结构化的控制语句 C语言的控制结构语句符合结构化程序设计要求,并且用函数作为程序模块,使得程序结构清晰、可读性好、易于调试。
三、高效率的目标代码 C语言允许直接访问物理地址、直接对硬件操作,提供对字节、位、内存和寄存器操作,可以调用或嵌入汇编语言代码,并且经过C编译程序生成的目标代码质量高、执行效率高。
四、可移植性好 用C语言写的程序,基本上可以不加修改地用于各种计算机和操作系统上。
§1.3 C程序的基本结构
一、C程序的基本结构讲解 例1 在屏幕上显示:Hello ! #include <stdio.h> main() { printf(“Hello!/n”); } 输出:Hello! 例2 求两数之和 #include <stdio.h> main() { int a,b,sum; a=123; b=456; sum=a+b; printf(“sum is %d/n”,sum); } 输出:sum is 579 例3 输入 a、b两个数,输出其中最大值。 #include <stdio.h> float max(float x,float y) { float z; if (x>y) z=x; else z=y; return z;} main() { float a,b,c; scanf(“%f,%f”,&a,&b); c=max(a,b); printf(“%f,%f,the maxis%f/n”,a,b,c); } 输入:23,56 输出:23.000000,56.000000,maxis56.000000
二、C程序的基本结构 1.由一个主函数main(),或一个主函数及其它函数组成 2.每个函数用{ }括起来 3.每个语句后加;
三、C语言的三类函数及其采用的意义 1.C程序是由一个主函数main()或一个主函数及其它函数组成。 C程序由函数构成,使用函数可以简化了主函数以及实现模块化程序设计。 C语言的函数可以分为三类: 第一类:主函数,名为main()。每个程序中只能有一个、也必须有一个主函数。无论主函数在什么位置,C程序总是从主函数开始执行。 第二类:用户自定义函数,可有可无,数目不限。 第三类:C语言提供的库函数,例如输出函数printf()和输入函数scanf() 2.每个函数的内容用大括号“{ }”括起来。 3.每个语句后加“;”。
§1.4 库函数printf()和scanf()的使用
printf()和scanf()函数是C语言中两个最基本的库函数,存在于Turbo C 所在目录的子目录include中的stdio.h头文件内,使用时应该在源程序中加入#include <stdio.h>(Turbo C 2.0可以缺省)。
一、函数printf( ) 功能:通过标准输出设备(如屏幕)输出一组数据。 格式:printf(格式控制,输出表列) 1.“格式控制”是用双引号括起来的部分,由要输出的文字和数据格式说明组成。 例:printf(“Hello !”); printf(“%f,%f,the max is %f /n”,a,b,c); 要输出的文字除了可以使用字母、数字、空格和一些数学符号以外,还可以使用一些转义字符表示特殊的含义(如“/n”)。转义字符功能见表1-1。 表1.1 常用转义字符
转义字符 | 功 能 | /n | 回车换行符,光标移到下一行行首 | /r | 回车不换行,光标移动到本行行首 | /t | 横向跳格(8位为一格,光标跳到下一格起始位置,如第9或17位等) | /b | 退一格,光标往左移动一格 | /f | 走纸换页 | // | 用于输出反斜杠字符“/” | /' | 用于输出单引号字符“' ” | /” | 用于输出双引号字符“”” | /ddd | 三位八进制数ddd对应的ASCII码字符 | /xhh | 两位十六进制数hh对应的ASCII码字符 | #include <stdio.h> main() { printf(“123456789012345678901234567890/n”); printf(“123/t456/n"); printf(“12345/b123/r9/n”) } 运行结果:123456789012345678901234567890 123 456 9234123 举一反三:写出下列输出结果 printf(“/tfirst/b/b/bsh///r/'No.1/'”); 数据格式说明由“%”开头,形式为 %<数据输出宽度说明><格式符>,数据格式说明用在需要输出变量或运算数值结果的时候,它的个数与输出表列的个数一一对应。 数据宽度说明中如果实际数据小于宽度,则根据宽度是否大于零而左补空格或右补空格。如果实际数据大于宽度,按实际位数输出。如果缺省宽度说明,则按实际宽度输出(实数位数按照格式符默认位数输出)。常用格式符见表1-2。 表1.2 常用格式符
格式符 | 功 能 | d | 以带符号的十进制形式输出整数(整数不输出正号) | o | 以不带符号的八进制形式输出整数 | x | 以不带符号的十六进制形式输出整数 | u | 以不带符号的十进制形式输出整数 | c | 以字符形式输出一个字符 | s | 输出一个或多个字符 | f | 以小数形式输出单、双精度数,默认输出6位小数 | e | 以标准指数形式输出单、双精度数,数字部分小数位数为6位 | #include <stdio.h> main() { printf( “a=%4d,b=%-6.2f,c=%c,d=%s”,12,3.456,'A',”hello” ); } 运行结果: a=12,b=3.46,c=A,d=hello 举一反三:写出下列输出结果 printf( “x=%d,y=%-6.2f,z=%2d”,2,8.999,300); 2.输出表列可以是变量、表达式或者是数值。 输出表列的类型决定了“格式控制”中使用的“数据格式符”,其个数决定了“数据格式说明”的个数。 如已知a=3,则语句 printf( “%d+%d=%d”,a,12,a+12); 3+12=15
二、函数scanf( ) 功能:通过标准输入设备(如键盘)输入一组数据。 格式:scanf(格式控制,地址表列) 格式控制同printf()函数的格式控制。其中特别注意:如果格式控制中加入了格式符以外的其它字符,则通过键盘等输入设备输入数据时这些字符也要同样输入,如果格式符中无其它字符间隔,输入时可以用空格、回车或跳格键Tab。 地址表列是由若干个地址组成的表列,变量的地址表示法是在变量前加上&符(数组不用)。 函数scanf()是将输入设备输入的数据赋给地址表列中对应的变量。地址表列的个数和变量类型,决定了格式控制中格式符的个数和形式。
§1.5 C程序的开发过程
开发一个C程序,一般要经历编辑、编译、连接和运行四个步骤。
一、源文件的编辑 用户通过编辑器,将自己开发的C语言程序输入计算机的过程称为C程序源文件的编辑。编辑生成的文件以文本形式存储,扩展名为“.C”,也称为C的源程序。 源程序文件以ASCII码形式存储,不含任何格式和样式,计算机不能直接执行。
二、编译 计算机把C的源程序翻译成计算机可以识别的二进制形式的目标代码文件,这个过程称为编译,由C的编译程序完成。 C的编译程序在编译的同时,还对源程序的语法和程序的逻辑结构等进行检查。当发现错误时,将会列出错误的位置和种类,此时需要重新编辑修改源程序。如果编辑成功则生成目标文件,文件名同源程序文件名,扩展名为“.obj”。 编译生成的目标文件,不包含程序运行所需要的库函数等,计算机仍然不能直接执行。
三、连接 连接程序以将目标程序和其它目标程序模块,以及系统提供的C库函数等进行连接生成可执行文件的过程,称为“连接”。连接生成的可执行文件的文件名同源程序文件名,扩展名为“.exe”。 连接生成的可执行文件,计算机可以直接执行。
四、运行 在DOS环境直接键入C程序的可执行文件名,或者在C的集成环境下选择“RUN”命令,以及在Windows的资源管理器内双击该可执行文件名,都可以获得运行结果。如果运行结果有误,需要重新编辑源程序,再进行编译、连接、运行,直到得到满意的运行结果。 作业及上机练习学以致用 1.使用printf()函数显示下列菜单: Menu ======================================== 1. Input the students' names and scores 2. Search scores of some students 3. Modify scores of some students 4. List all students' scores 5. Quit the system ======================================== Please input your choise (1-5): 2.参照例1.7和例1.8,选择一种方法编写一个程序,实现输入六个数输出最小数。 3.编写一个程序,从键盘上输入华氏温度,屏幕显示对应的摄氏温度。华氏温度和摄氏温度的转换公式为: c=(f-32)/1.8 答案: 1.#include <stdio.h> #include <stdlib.h> int select(int n); char name[10]; float score; void main(){ int n; printf("/t/t/tmenu/n"); printf("************************************************/n"); printf("1. Input the students’ names and scores/n"); printf("2. Search scores of some students/n"); printf("3. Modify scores of some students/n"); printf("4. List all students’ scores/n"); printf("5. Quit the system/n"); printf("************************************************/n"); printf("Please input your choise (1-5): "); do{ scanf("%d",&n); }while(n>5||n<1); select(n); } int select(int n){ switch(n){ case 1:{ printf("please input the student's name and scores:"); scanf("%s%f",name,score); printf("**************************************************/n"); printf("name/t/tscore/t/n"); printf("%s/t/t%f",name,score); printf("**************************************************/n"); break; } case 2:{ printf("please input the student's name:"); scanf("%s",name); break; } case 3:{ printf("please input the student's new name and new scores:"); scanf("%s%f",name,score); break; } case 4:{ printf("please input the student's new name and new scores:"); scanf("%s%f",name,score); break; } case 5:{ system("exit"); } } return n; } 2.#include <stdio.h> main() { int a,b,c,d,e,f,min; printf("Please input six numbers:/n"); scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f); min=a; if(min>b) {min=b; if(min>c) min=c; if(min>d) min=d; if(min>e) min=e; if(min>f) min=f; } printf("%d",min); getch(); }
|