清华大学出版社 TSINGHUA UNIVERSITY PRESS 如何提高编程能力: 第一步理清解题思路,用伪代 码描述清變解题步(自顶向下, 步细化);第二步用NS图将算 法准确地予以意示(此时分析算法 是否有错),第三步根据NS图上 机調试(训试语法是否有错)并骖诳 结果正确性(不正确则看算法)
如何提高编程能力: 第一步理清解题思路,用伪代 码描述清楚解题步骤(自顶向下, 逐步细化);第二步用N-S图将算 法准确地予以表示(此时分析算法 是否有错),第三步根据N-S图上 机调试(调试语法是否有错)并验证 结果正确性(不正确则看算法)
清华大学出版社 00 关子字符与字符串輸入的缆明 char cl, c2, temp char str 120- str 2 20 /*以下语句执行结果与通常预期不同,注意测试* scanf("%od", &i); scanf("%c, &c1): printf("errorI\n; scanf("%c, &cl); scanf(%c", &c2); printf("error2 in scan f(%od", &i); gets( str 1) printf(error n scanf("%c " &cl) gets( str 1): printf("error4 n") scanf(%os" strD) gets(str ): printf(error5In 体以下形式的语有则能避免上述语句的问题* scanf"O⌒ &cl): scant("%c, &c2): printi("%oc ok7n", c2) /*第二个%前有空格* scanf("%oc", &c1); scanf("%s", &str 1); printf("%s ok8 n", str1) gets( str 1); gets(str 2) printf("ok9\n") scanf("%od", &i); scanf("%c", &ctemp); scanf("%oc", &cl): printf("ok1on
关于字符与字符串输入的说明: int i,j; char c1,c2,ctemp; char str1[20],str2[20]; /*以下语句执行结果与通常预期不同,注意测试*/ scanf("%d",&i);scanf("%c",&c1);printf("error1\n"); scanf("%c",&c1);scanf("%c",&c2);printf("error2\n"); scanf("%d",&i);gets(str1);printf("error3\n"); scanf("%c",&c1);gets(str1);printf("error4\n"); scanf("%s",str1);gets(str1);printf("error5\n"); /*以下形式的语句则能避免上述语句的问题*/ scanf("%c",&c1);scanf(" %c",&c2);printf("%c ok7\n",c2); /*第二个%c前有空格*/ scanf("%c",&c1);scanf("%s",&str1);printf("%s ok8\n",str1); gets(str1);gets(str2);printf("ok9\n"); scanf("%d",&i);scanf("%c",&ctemp);scanf("%c",&c1);printf("ok10\n");
清华大学出版社 TSINGHUA UNIVERSITY PRESS 第八章
第八章
清华大学出版社 TSINGHUA UNIVERSITY PRESS 本章要 8.1什么是函数,为什么用函数? 82-84如何定义函数,函数工作原理如何? 88局部变量与全局变量 89/810内部函数与外部函数、变量存信类分 函数的嵌套调用、递归调用与数组作函数参数
本章要点: 8.1 什么是函数,为什么用函数? 8.2-8.4 如何定义函数,函数工作原理如何? 8.8 局部变量与全局变量 8.9/8.10 内部函数与外部函数、变量存储类别 函数的嵌套调用、递归调用与数组作函数参数
§8.1概述一什么是函数,为样么用函数? 编程求解复杂问题时通常把整个程序划分为若干 功能较为单一的程序模块,然后分别予以实现,最 后再把所有的程序模块像搭积木一样装配起来,这 种在程序设计中分而治之的策略,被称为模块化程 序设计方法 C语言把每个模块都编写成一个C函数,然后通 过主函数调用这些功能相对独立的模块从而实现大 型问题的求解。 这样,一方面可以使程序设计简单直观,提高 了程序的易读性和可维护性;另一方面可以把常用 的一些计算或操作编成通用的函数供随时调用,这 样可以大大地减轻程序员的代码工作量
§8.1概述--什么是函数,为什么用函数? 编程求解复杂问题时通常把整个程序划分为若干 功能较为单一的程序模块,然后分别予以实现,最 后再把所有的程序模块像搭积木一样装配起来,这 种在程序设计中分而治之的策略,被称为模块化程 序设计方法 C语言把每个模块都编写成一个C函数,然后通 过主函数调用这些功能相对独立的模块从而实现大 型问题的求解。 这样,一方面可以使程序设计简单直观,提高 了程序的易读性和可维护性;另一方面可以把常用 的一些计算或操作编成通用的函数供随时调用,这 样可以大大地减轻程序员的代码工作量
odmm社 TSINGHUA UNIVERSITY PRESS while(1) welcome scanf("%d", &i; huiwen O if(i==2) erfen( else if(i==3) diedaio else if(i==4) diamondo else if(i=-5 break else printi(“输入有误!重新输入")
void main() { int i; while(1) { welcome(); scanf("%d",&i); if(i==1) huiwen (); else if(i==2) erfen(); else if(i==3) diedai(); else if(i==4) diamond(); else if(i==5) break; else printf(“输入有误!重新输入"); } }
清华大学出版社 INIVERSTY PRESS /函数 welcome用以输出 欢迎界面* void welcomed printi("使用菜单选择趣味程序v") printfr'r 求某范围内的回文数n printf" 2--二分法求一元二次方程根m" printf(”3-顿迭代法求一元三次方程稂m" printi("4-输出菱形图n"); printf(" 5-退出n") printf(*求*求米**求**求*求**n") 函数 huiwen用以输入两个正整数,求两数之间的回文数* void huiwen 函数声明部分 函数执行部分
/*函数welcome用以输出一个欢迎界面*/ void welcome() { printf("使用菜单选择趣味程序\n"); printf(" 1---求某范围内的回文数\n"); printf(" 2---二分法求一元二次方程根\n"); printf(" 3---牛顿迭代法求一元三次方程根\n"); printf(" 4---输出菱形图\n"); printf(" 5---退出\n"); printf("***************************************\n"); } /*函数huiwen用以输入两个正整数,求两数之间的回文数*/ void huiwen() { 函数声明部分 函数执行部分 }
函数说明与分类:m 程序从main函数开始执行,它可以调用其 它函数,但不能被别的函数所调用,main 函数之外的函数相互之间可以调用,此外,函 数是平行的,不能嵌套定义 从用户使用角度看,函数分标准函数 (库函数)和用户自定义函数;从函数形式看, 函数分无参函数和有参函数
程序从main函数开始执行,它可以调用其 它函数,但不能被别的函数所调用,main 函数之外的函数相互之间可以调用,此外,函 数是平行的,不能嵌套定义 从用户使用角度看,函数分标准函数 (库函数)和用户自定义函数;从函数形式看, 函数分无参函数和有参函数 函数说明与分类:
§8.2函数的定义形式 NIVERSITY尸RESS 类型标识符函数名(形参及其类型) 定义函数时要用 声明部分 “类型标识符”指 语句部分 定函数返回值的类 型,默认为int型 i n t m x (int x, inty 1 n t z Z X ? X re turn(z)
§8.2函数的定义形式 类型标识符 函数名(形参及其类型) { 声明部分 语句部分 } int max(int x,int y) { int z; z=x>y?x∶y; return(z); } 定义函数时要用 “类型标识符”指 定函数返回值的类 型,默认为int型
§8.3函数工作原理 NGHUA UNIVERSITY PRESS 8.3.1形式参数/实际参数/函数返回值 定义函数时函数头部括弧中的变量称为“ 形式参数”;发生调用时,调用语句中函数 名后括弧内的参数称为“实际参数”;函数 体内 return后括弧中的值称函数返回值 int max(int x, int y)void m a i n () int z int a. b: z=X>y? :y; scanf(W%d%d〃,&a,&b) return (Z) c=ma x (a,b)
§8.3函数工作原理 8.3.1形式参数/实际参数/函数返回值 定义函数时函数头部括弧中的变量称为“ 形式参数” ;发生调用时,调用语句中函数 名后括弧内的参数称为“实际参数”;函数 体内return后括弧中的值称函数返回值 int max(int x,int y) { int z; z=x>y?x∶y; return(z); } void main() { int a,b; scanf(“%d%d”,&a,&b); c=max(a,b); }