1、C语言程序设计讲座南湘1994-01-28该课程是关于程序设计的一门重要课程,通过对该课程的学习,学生应能掌握C语言的语法结构,一般C程序的编写、调试和上机运行,并能解决一定的实际问题。C语言程序设计包括两个方面的内容:C语言的主要语法规则和C语言的程序设计,程序设计贯穿始终,不要求学生死记硬背语法规定,而应当通过多看程序,多编程序,多上机调试程序来熟悉C语言语法规则的使用。要特别注意算法的设计,即学会分析问题,整理出思路,画出流程图,要求掌握结构化程序设计方法,养成程序设计的良好习惯和风格。程序设计应当是深思熟虑的结果,而不是信手拈来的产物。这里的辅导以谭浩强编写的 C语言程序设计 ( 学出
2、 出 ) 。学习 课程 好 一定的 语 ,以 对C语言的 一个 面的 。的 一 ,是C语言 ,对C语言出 的 背C语言的特currency1, “ 一C语言的程序结构。 fifl,对于C语言的特, 学好C语言 会 。 ” 运算 要求C语言 一fi”,并对 的” 一个 面的解, fi别, 法 fi规则。定 的”, ”的 内 fi不 ,不 行 运算。对于运算,要求能C语言 ”运算, 一 运算 , 是 和学上的 一 , 的重 分,要求能 ,掌握 一 的 写以 求 。fl是 的求 问题和 的 写。 是 要求能掌握算 , 和 的 写和求 即“。面对fl和重一 要 : 写成C语言的 ab+cd(1) _e
3、fgh_(2) y=(-b+ bb-4ac)/2aa,b,c,d,e,f,g,h, (1) :(a*b+c*d)/(e*f*g*h)两个括 不能 , ,会 。分的括 :a*b+c*d/(e*f*g*h)这 :dab+c_efgh分 的括 :(a*b+c*d)/e*f*g*h这 :ab+cd_fghe两个括 :a*b+c*d/e*f*g*h这 :dab+c_fghe,要写出 的C语言 , 要求 的 , 再考虑语句 。(2) :y=(-b+SQRT(b*b-4*a*c)/(2*a) ,要求注意括 的匹配关系,学上不一的是C语句无括 、小括 分,一律用小括 代替。 求 举 :设a=1,b=4,c=2
4、,d=3求a+b/c*d-c*a ,即求 :a+b/c*d-c*a ,规则 :算高一级运算, 一级运算从左 右 行,上 5, 注意C语言(面currency1) 的运算是从右左的,学上不一 。另外,要学好C语言, 好对 计算机内的放 一个 面的解。并解十 制 制互 转化。三 简单的C语言程序设计 搞 楚fi是C语句,C语言语句“以分”,C语言的语句? 高级语言 fi不 ,搞 楚结构化程序设计的三 结构,并结?构化程序设计三 框图或流程图的画法,并能简单的库函调用,一 语句用法和 ”的输入输出格 和 用法。 ?重fl是何控制 ”的的输入输出格 函调用和流程?图的画法。对 的重fl简要的 :结构化
5、程序设计的 流程图 :顺序流程图:A|BA和B者是看成语句,根语句的 写顺序,执行A,执行B, 执行?B面的语句。判断选择流程图:条件成立|不成立A B根条件的成立 来判断:是执行A还是执行B。顺序结构不 的是,两者A和B, 执行一个,不“能两个 执行。循环流程 当循环和直 循环两 。当 :当条件成立,重复执行A。A“以是一条语句,也“以是一批语句。条件不?成立,退出循环,执行A面的语句。直 :重复执行A,直 条件成立,退出循环,执行A的面的语句。这的?条件应 循环程序的反条件,即程序的条件 i=100,则流程图?条件应写 i100。关于库函 的 调用, 搞 楚某一个库函是包 fi头文件?(即
6、*.H),编程开始用文件包 命令包 头文件即“。: 要求某一弧度的 弦函 , 函包 fi头文件(? MATH.H),用包 文件命令#include“math.?h”放入程序的开始即“。接着 程序调用SIN函。是关于 ”的输入/输出控制: 搞 ”使用的格 字,D用于十 制整( ),?O用于无 的八 制整,X用于无 的十六 制整,U用于无 的?十 制整,C用于字, 输出一个字,S用于字串,F、G?、E用于实。 要搞 楚是系统规定的宽度还是己定 的宽度,当两者矛盾,依fi 则 行输入输出。看输出 :设i 整,且i=345printf(“d,5d,2d”,i,i,i)则输出的结果应 :345 3453
7、45格 d按的实际位输出 3位,5d按宽度 5位输出, 实际上?位 3,帮左边补两个空格,2d按宽度 2位输出, 实际 3位?发生矛盾,故系统隐 优,仍以3位输出。对于O格 和X格 ?”似的情, 输出的不会出 负 ,并且当 负, 的 的补?码。考虑输入 :输入方 上输出”似, 别, 归纳:输入对无 整不用u而用d,o,x;“用md,mo,mx输入, 的 按规定的宽度?截 ;输入不能用m.nf,-m.nf,m.ne,-m.ne?;对于长整的“用1d,1o,1x输入,短整的“以用?hd,ho,hx输入;双实的“以用1f或1e输入;规则等 于输出 ,不再讲 。四 逻辑运算判断选择控制 搞 楚逻辑运算
8、、关系运算,关系 和逻辑 写,并能求出关系 和逻辑 的 ,C语言的关系 或逻辑 语言不 ,是用0和1来 的,0 假,或不成立,1 真或成立。,搞 楚判断选择结构的程序 写,以 地使用判断选择结构。的重fl 于if语句的嵌套switch语句的使用以 们 互 间嵌套嵌套的从属关系, 搞 楚。面 的重fl一简要 :ifelse的配对关系,eles总是 上面的 近的if匹配, 改 们的从属关系,“以使用复 语句的花括 。:if(条件1)if(条件2)语句1else语句2elseif(条件3)语句3else语句4们的从属关系 :条件1前的if 个else匹配,条件2前的if 一个else匹配,条件3前的
9、if 三个else匹配if(条件1)(if(条件2)语句1)elseif(条件3)语句2else语句3这的从属关系 :条件1前的if 一个else匹配,条件3前的if 个else匹配,条件2前的if 匹配的else语句。从上面“以看出,语句的 写顺序不,加上 干个花括 “以改ifelse的配对关系, 编程,千万要搞 楚 们 间的从属关系, 则,程序的 完 改。if语句的嵌套, 容 if语句else的匹配关系, 这 的发生,多路判断问题“以不用if语句的嵌套而改用switch语句实 , 并不是 if语句的嵌套不能用,而是两者 “以用,并且 们 间“以互 转化。 是, 路判断结 ,要从switch
10、退出, 应的break语句 终 switch语句的 。 则,会一个分 接一个分 地执行 ,直 switch的结 。:switch(grade)case “A“:Printf(“85-100n“);case “B“:Printf(“70-84n“);case “C“:Printf(“60-69n“);case “D“:Printf(“60n“);default:Printf(errOrn“);当grade的 A,输出结果 :85_10070_8460_6960error,上 的结果不 们的要求, 一的结果, 一个分 的面加上break语句, 程序改 :Switch(grate)case A:Pr
11、intf(85-100n“);break;case B:Printf(70-84n“);break;case C:Printf(60-69n“);break;case D:Printf(“60n“);break;default:Printf(“errorn“);对于多路判断问题,“ 看 6 4.7程序。循环控制解循环结构的三 一 的 和使用循环,以三 间的转 。能 好地 写循环程序并画出 的结构化流程图。的重是搞 楚循环的语句写法,是一条语句还是 干条语句, 是 干条语句, 。fl 于 理嵌套循环和循环分 的 互嵌套关系。面 的重fl一 要 : 楚三 循环的 fi不 :当循环,也 while循
12、环, 当条件成立执行循环,直 条件不成立 。当循环的特是:判断,执行,循环语句 “能一 不执行。直 循环,也 D0_while循环, 执行循环语句,直 条件成立 。直 循环的特是:执行,判断,循环语句 执行一 。for循环,也是当循环”似的一 循环, 当循环 。一般 :for( 1; 2; 3)。循环语句 当循环一 。 :分别用当循环,直 循环和for循环编程。求:100S= ii=1(1)用While循环main( )int i,S;S=0;i=1;While(i=100)S=S+i;i=i+1;Printf(“%d“,S);(2)用DO_While循环main( )int i,S;S=0;
13、i=1;do S=S+i;i=i+1;While (i=100);Printf(“%d“,S);(3) 用for循环main( )int i,s=0;for (i=1;i=100;i+) S=S+i;Printf(“%d“,S);接着要 的是循环循环 间嵌套,即多 循环用,三 循环“以 互嵌套, 是 注意,嵌套循环 完 包 ,不“能或不应 的地方。另外,循环语句“以包 判断结构,判断结构也“以包 循环。举 。关于循环这一 ,一定要好好掌握 , 程序的设计不开循环语句, 是C程序设计的重 一,多编写这方面的程序和上机调试, 以的程序设计良好的 。六 ? 要求的定 和用,并解不是C语言的 ”,而是
14、一 构currency1”,即”。另外搞 楚多的无“ 计算机内的方 ,并要fi的能 行fi化,单fl的 “用。字串字 fi别, 理字串, 的重应 的用、字串的 理、用编写C程序、解决 的问题。 的重fl简单 :的定 :”:int a10char b1010定 a 一个整, 10个 “,这10个 “是:a0,a1,a2,a3,a9, “ 用括 。定 b 一个字, 1010=100个 “。即从b00,b01,b99100个 “。a 一个一,b 一个。的 “以直接用。:a0+a7+a5/a3是 法的。“以 定 , 始化, 和外 ”, 者不能始化,能 程序 。字字串 似, 字串 一个结 o,而字不一定
15、 ,字串用双 ,字的 “ 能用单 。用编写程序,“ 考P:87 6.4和P.88 6.5 P.906.6。字串的一库函 要能 是干fi的,用 “以。 函 函是C语言的重 。C语言的程序是一个主函和 干个 函构成, 函“以是”的库函和用己编写的函。C语言的这 结构 于程序实 化,“ 好。,要求学会调用 ”的库函,用己编写函。C语言的函主函外,何函 “以 互调用,并 “以主函调用。要求解无 函和 函的定 。 和实际 是,函的 ,是 一定要 ,函的嵌套调用 行,fi是 和,fi是 和 ,fi是内 函和外 函。的重 于函的定 和调用, 实 对应关系, , ,内 函和外 函。fl 于 。 这里对 和实
16、一要 ,以于函的调用。 函定 的 , 行函调用,不内单 ,调用,分配内单 ,调用结 ,用的内单 放。实际 是 的、或 ,们 的 , 内单 , 函调用,实 代替函的 ,即发生函调用。 是函调用,要求 实 ”、个、顺序三方面一一对应,调用的方 :函(实际 ),即用实 代替定 的 。果 调用函,要函 ,则 函定 return语句。果 不 “以用Void”定 函的”,即无”或 空”。另外,函“以嵌套调用,即一个函“以调用另一个函。另一个函 “以调用 函。果嵌套调用,函间接或直接地调用己, 函的间接 归调用或直接 归调用。一个函内 定 的 内 , 函 内 , 函以外是不能使用这的,这 们 。 这里,应特
17、别注意,主程序(主函)定 的也 能 主函使用,而不能 函使用,这是和 高级语言不 的。不 的函“以使用 的 , 们互不发生干 ,另外, 也是 。 一个函的外面定 的 外 ,外 , 的用 是从定 该的位 开始 文件结 。和 是从的用来分的, 从 的间 度来分,“分 和 。 方 是 程序运行 间分配 定的 空间的方 ,而 方 是程序运行 间根 要 行 的分配 空间的方 。 和 包 四 : 的(auto), (static), 的(yepister),外 的(extern)。 ”别方面 fl理解, 多花一间搞 楚, 的 看 上P136的 ”别小结, 的结 , 看 : 出程序 的 属 ,并写出程序的执
18、行结果。#include “stdio.h“int i=1;main()int i,j;i=reset();for(j=1;j=3;j+) printf(“i=%d;j=%d;n“,i,j);printf(“(i)=%dn“,next(i);printf(“last(i)=%dn“,last(i);printf(“new(i+j)=%dn“,new(i+j);int reset()return(i);int next(i)int j;return(i=i+);int last(j)int j;static int i=10;return(i=i-);int new(i)int i;int j=10;return(i=j+=i);执行结果 : i=1;j=1;(i)=1 last(j)=10 new(i+i)=12 i=1; j=2 (i)=2 last(i)=10 new(i+j)=13 i=1;j=3; (i)=3 last(i)=10 new(i+j)=1 #