、第八章第一次作业需要注意的问题 (1)主函数和子函数的N-S图都要画,且要分开画 (2)子函数的NS图外要给出完整的具体的函数头,返回值类型、参数类型及参数名等都不能 省略。调用处只需且必须给岀具体的完整的语句,要传递的实参不能省略,且不能要类型说明 符。此外要注意参数个数。 如求一元二次方程的根,当deta<0时,若用如下方法则需要三个参数,因a、b和deta的 值在子函数都用到,三者都需要从调用处传递过来。此时,对应函数头为void smaller than zero( float a, float b, float deta),主函数中发生调用的位置写“ smaller than zero(a,b, de 主函数:输入a/b/c的值调用相应函数求根 /*当deta<0时求根并且输出* 输入abc void smaller than zero(float a, float b, float deta deta=b*b-4*aFc Deta<o L输出pq与pqi smaller than z 注意不能写“xl=p+q输出x1”,因无复数类型 ero(a, b, deta) 若用如下方法则只需两个参数,因子函数中只有a和b需要从调用处传递过来,此时,对 应函数头为 void smaller than zero( float a, float b),主函数中发生调用的位置写 主函数:输入a/b/c的值调用相应函数求根 当deta<0时求根并且输出* 输入abc void smaller than zero(float a, float b) deta=b*b-4*a**c 输出pqi与 (3)尽量避免用全局变量,确实需要用时,要在主函数N-S图的开始说明哪些是全局变量。 (4)变量名与函数名不能相同,且都不能与系统的保留字(如 int long for goto if等)重 复 (5)子函数头中已经定义的形参不能在子函数体内重新定义,且形参的值由调用语句中的对应 实参(按顺序对应)传递过来,通常不需重新赋初值。 (6)主函数或者子函数两者至少要有一个有输出,否则,整个程序无输出! (7)函数功能划分要合理,各自相互独立。 (8)8.16输入一个十六进制串,求对应的十进制并输出,可参考如下答案: 主函数将十六进制串输入字符数组s,之后判断str是否合法,合法则调用函数求对应十进制数并输出* 0n/n为1代表字符合法/判断字符是否十六进制合法字符,是则返回1,否则返回0+ hile(str[1=\0' int judge( char c) ae= judge(stray*返回值要接收并利用 本函数N-S图省略,自己补充 f== /*将十六进制字符串转化为十进制数并返回* break id trans( char sl 本函数NS图参考指导书中对应子函数中NS图,此外,指 导书中该题的主函数NS图中,EOF应改作n’,且指导书中的 输出不 答案也正确。 合法!puts(st) 注意:当子函数有返回值时,调用语句处要把该返回值接收并利用起来,如fag= judge(str[)一、第八章第一次作业需要注意的问题: (1)主函数和子函数的 N-S 图都要画,且要分开画 (2)子函数的 N-S 图外要给出完整的具体的函数头,返回值类型、参数类型及参数名等都不能 省略。调用处只需且必须给出具体的完整的语句,要传递的实参不能省略,且不能要类型说明 符。此外要注意参数个数。 如求一元二次方程的根,当 deta<0 时,若用如下方法则需要三个参数,因 a、b 和 deta 的 值在子函数都用到,三者都需要从调用处传递过来。此时,对应函数头为 void smaller_than_zero(float a,float b,float deta),主函数中发生调用的位置写“smaller_than_zero(a, b, deta)” 若用如下方法则只需两个参数,因子函数中只有 a 和 b 需要从调用处传递过来,此时,对 应 函 数 头 为 void smaller_than_zero(float a,float b) ,主函数中发生调用的位置写 “smaller_than_zero(a, b)” (3)尽量避免用全局变量,确实需要用时,要在主函数 N-S图的开始说明哪些是全局变量。 (4)变量名与函数名不能相同,且都不能与系统的保留字(如 int long for goto if 等)重 复 (5)子函数头中已经定义的形参不能在子函数体内重新定义,且形参的值由调用语句中的对应 实参(按顺序对应)传递过来,通常不需重新赋初值。 (6)主函数或者子函数两者至少要有一个有输出,否则,整个程序无输出! (7)函数功能划分要合理,各自相互独立。 (8)8.16 输入一个十六进制串,求对应的十进制并输出,可参考如下答案: /*主函数将十六进制串输入字符数组 s,之后判断 str 是否合法,合法则调用函数求对应十进制数并输出*/ 注意:当子函数有返回值时,调用语句处要把该返回值接收并利用起来,如 flag=judge(str[i]), 输入 a b c deta=b*b-4*a*c Deta<0 Y N smaller_than_z ero(a,b,deta) ………….. 主函数:输入 a/b/c 的值调用相应函数求根 输入 a b c deta=b*b-4*a*c Deta<0 Y N smaller_than_z ero(a,b) ………….. 主函数:输入 a/b/c 的值调用相应函数求根 p=-b/(2*a) q=sqrt(-(b*b-4*a*c))/(2*a) 输出 p+qi 与 p-qi void smaller_than_zero(float a,float b) /*当 deta<0 时求根并且输出*/ p=-b/(2*a) q=sqrt(-deta)/(2*a) 输出 p+qi 与 p-qi void smaller_than_zero(float a,float b,float deta) /*当 deta<0 时求根并且输出*/ 注意不能写“x1=p+qi,输出 x1”,因无复数类型 gets(str) i=0;flag/*flag 为 1 代表字符合法*/ while(str[i]!=’\0’) flag=judge(str[i])/*返回值要接收并利用*/ flag= =0 Y N break flag= =0 Y 输出不 合法! N trans(str)/**/ puts(str) /*判断字符是否十六进制合法字符,是则返回 1,否则返回 0*/ int judge(char c) 本函数 N-S 图省略,自己补充 /*将十六进制字符串转化为十进制数并返回*/ void trans(char s[]) 本函数 N-S 图参考指导书中对应子函数中 N-S 图,此外,指 导书中该题的主函数 N-S 图中,EOF 应改作’\n’,且指导书中的 答案也正确