c-add(a,b); 时,编译系统不知道add是否为函数名,也无法判断实参a和b的类型和个数是否正确, 因而无法进行正确性的检查,此错误属于语法错误,当我们把第1个错误纠正之后,第2个 错误自动消失。 注意:在编译出错的情况下,请按照从上到下的顺序纠正错误,因为有些错误提示是前 面的错误引起的,所以当我们纠正了某个错误,有些错误提示就自动消失。 凶pg5101.cpp c:\c-programming\5\pg5101.cpp(7):error C2065:'add':undeclared identifier c:\c-programming\5\pg5101.cpp(7):warning C4244:'=conversion from 'int' c:c-programmingpe():error c2373:add:redefinition;differ 代譯撒查我发件1人入查我文件丁山 Ln 10,Col 1 REC COL OVR READ 图5.1.1程序编译后的错误信息 改正程序后的运行结果示例如图5.1.2所示: c "C:\c-programming\5\Debug\pg5101_ok.exe" 回 请输入两个数,中间用逗号隔开:3.5 两个数之和为:8.00000 Press any key to continue 图5.1.2pg5101_ok.cpp的运行结果 2.打开c:lc-programming\5pg5102.cpp,该程序是求两个数的最大值,有个小问题,请修 改,使程序能正确运行。修改后的程序以pg5102ok.cpp保存。该源程序内容如下: #include <stdio.h> void main(void) float a,b,c; int max(float x,float y); printf("请输入两个实数,中间用逗号分隔:"); scanf("%f,%f",&a,&b); c=max(a,b)月 printf"两个数的最大值为:%fn",c方 } int max(float x,float y) -85-
c=add(a,b); 时,编译系统不知道 add 是否为函数名,也无法判断实参 a 和 b 的类型和个数是否正确, 因而无法进行正确性的检查,此错误属于语法错误,当我们把第 1 个错误纠正之后,第 2 个 错误自动消失。 注意:在编译出错的情况下,请按照从上到下的顺序纠正错误,因为有些错误提示是前 面的错误引起的,所以当我们纠正了某个错误,有些错误提示就自动消失。 图 5.1.1 程序编译后的错误信息 改正程序后的运行结果示例如图 5.1.2 所示: 图 5.1.2 pg5101_ok.cpp 的运行结果 2.打开 c:\c-programming\5\pg5102.cpp,该程序是求两个数的最大值,有个小问题,请修 改,使程序能正确运行。修改后的程序以 pg5102_ok.cpp 保存。该源程序内容如下: #include <stdio.h> void main(void) { float a,b,c; int max(float x,float y); printf("请输入两个实数,中间用逗号分隔:"); scanf("%f,%f",&a,&b); c=max(a,b); printf("两个数的最大值为:%f\n",c); } int max(float x,float y) { - 85 -
float z: if(x>y) Z-X: else z-y, return z; 了提示:如何发现问题? 编译、链接该程序,系统未报告任何错误信息,但是运行该程序时,正确输入两个实数 之后,输出结果却出现问题:打印输出的最大值的小数部分丢失,主要原因在于函数的返回 值类型和函数类型不一致,max()函数的类型为int类型,而函数返回值z变量的类型为oat 类型,当两者类型不一致时,系统以函数类型为准,所以max(a,b)的函数结果是一个it类型 的数据,该函数结果赋值给变量c,最终导致最大值的小数部分丢失。 改正程序后的运行结果示例如图5.1.3所示。 可'C:\e-programsing\5\Debugipg5102.ok.exe回冈 情输入两个实数,中间用逗号分隔:3.2.6.7 两个数的最大值为:6.?886gg Press any key to continue 4 图5.1.3pg5102_ok.cpp的运行结果 二、程序扩展 1.打开c:lc-programming5pg5201.cpp,该程序是通过调用函数来实现求两个整数的最大 值问题。该源程序内容如下: #include <stdio.h> void main(void) int a,b,d; int max(int x,int y); printf("请输入两个整数,中间用逗号分隔:"); scanf("%d,%d",&a,&b); -86-
float z; if (x>y) z=x; else z=y; return z; } 提示:如何发现问题? 编译、链接该程序,系统未报告任何错误信息,但是运行该程序时,正确输入两个实数 之后,输出结果却出现问题:打印输出的最大值的小数部分丢失,主要原因在于函数的返回 值类型和函数类型不一致,max( )函数的类型为 int 类型,而函数返回值 z 变量的类型为 float 类型,当两者类型不一致时,系统以函数类型为准,所以 max(a,b)的函数结果是一个 int 类型 的数据,该函数结果赋值给变量 c,最终导致最大值的小数部分丢失。 改正程序后的运行结果示例如图 5.1.3 所示。 图 5.1.3 pg5102_ok.cpp 的运行结果 二、程序扩展 1.打开 c:\c-programming\5\pg5201.cpp,该程序是通过调用函数来实现求两个整数的最大 值问题。该源程序内容如下: #include <stdio.h> void main(void) { int a,b,d; int max(int x,int y); printf("请输入两个整数,中间用逗号分隔:"); scanf("%d,%d",&a,&b); - 86 -
d=max(a,b); printf"%d和%d两者的最大值为:%dn",a,b,d); } int max(intx,inty) int z: if(x>y) Z-X, else z-y, return z: } 要求:修改上面的程序,将ax()函数定义进行修改,实现求三个整数的最大值问题。修 改后的程序以pg520la.cpp保存。 训练要点:读懂程序中通过定义ax()函数,来实现求两个整数最大值问题,体会函数是 一个完成特定工作的独立程序模块,用户可以根据自己的需要自定义函数,程序中一旦调用 该函数,该函数将完成特定的工作,在此基础上,修改自定义函数max(),将max()函数的功 能加以改变,实现求三个整数的最大值问题。 修改后程序的运行结果如图5.1.4所示。 c "C:\c-programming\5\Debug\pg5201a.exe" 回x 请输入三个整数,中间用逗号分隔:21.3 2、1、3三个整数的最大值为:3 Press any key to continue 4 图5.1.4pg5201a.cpp的运行结果 2.打开c:lc-programming\5pg5202.cpp,该程序是已知三个整数,求它们的平方之和与平 均值之间的差值。该源程序内容如下: #include <stdio.h> void main(void) int a,b.c; -87-
d=max(a,b); printf("%d 和%d 两者的最大值为:%d\n",a,b,d); } int max(int x,int y) { int z; if (x>y) z=x; else z=y; return z; } 要求:修改上面的程序,将 max( )函数定义进行修改,实现求三个整数的最大值问题。修 改后的程序以 pg5201a.cpp 保存。 训练要点:读懂程序中通过定义 max( )函数,来实现求两个整数最大值问题,体会函数是 一个完成特定工作的独立程序模块,用户可以根据自己的需要自定义函数,程序中一旦调用 该函数,该函数将完成特定的工作,在此基础上,修改自定义函数 max( ),将 max( )函数的功 能加以改变,实现求三个整数的最大值问题。 修改后程序的运行结果如图 5.1.4 所示。 图 5.1.4 pg5201a.cpp 的运行结果 2.打开 c:\c-programming\5\pg5202.cpp,该程序是已知三个整数,求它们的平方之和与平 均值之间的差值。该源程序内容如下: #include <stdio.h> void main(void) { int a,b,c; - 87 -
float ave,s; int square(int x.int y,int z); printf("请输入三个整数,中间用逗号分隔:"方 scanf("%d,%d,%d",&a&b,&c); ave=(a+b+c)/3.0; s=square(a,b,c)-ave; printf"%d、%d、%d三个整数平方之和与平均值之间的差值为:%.2fn",a,b,c,s; } int square(int x,int y,int z) int m; m=x*x+y*y+z*z; return m; } 要求l:修改上面的程序,将求平均值问题用函数来实现,函数名为average,修改后的 程序以pg5202a.cpp保存。 要求2:修改上面的程序,将求三个整数平方之和与平均值之间的差值问题用函数来实现, 函数名为sub,修改后的程序以pg5202b.cpp保存。 训练要点:读懂程序中通过自定义square()函数,实现求三个整数平方之和功能的思路, 了解函数实际上是一个完成特定工作的独立程序模块,在程序设计中,常将一些常用的功能 模块编写函数,供其他函数调用,要善于利用函数,以减少重复编写程序段的工作量,在此 基础上,按照要求1将求平均值的功能模块编写成函数,按照要求2将求平方数之和与平均 值差值的功能模块编写成函数。 要求1修改后程序的运行结果如图5.1.5所示。 e"C:\c-programming\5\Debug\pg5202a.exe 回 请输入三个整数,电中间用逗号分隔:123 1、2、3这三个整数苹方之和与平均值之间的差值为:12.0 Press any key to continue 图5.1.5pg5202a.cpp的运行结果 要求2修改后程序的运行结果如图5.1.6所示。 -88-
float ave,s; int square(int x,int y,int z); printf("请输入三个整数,中间用逗号分隔:"); scanf("%d,%d,%d",&a,&b,&c); ave=(a+b+c)/3.0; s=square(a,b,c)-ave; printf("%d、%d、%d 三个整数平方之和与平均值之间的差值为:%.2f\n",a,b,c,s); } int square(int x,int y,int z) { int m; m=x*x+y*y+z*z; return m; } 要求 1:修改上面的程序,将求平均值问题用函数来实现,函数名为 average,修改后的 程序以 pg5202a.cpp 保存。 要求 2:修改上面的程序,将求三个整数平方之和与平均值之间的差值问题用函数来实现, 函数名为 sub,修改后的程序以 pg5202b.cpp 保存。 训练要点:读懂程序中通过自定义 square( )函数,实现求三个整数平方之和功能的思路, 了解函数实际上是一个完成特定工作的独立程序模块,在程序设计中,常将一些常用的功能 模块编写函数,供其他函数调用,要善于利用函数,以减少重复编写程序段的工作量,在此 基础上,按照要求 1 将求平均值的功能模块编写成函数,按照要求 2 将求平方数之和与平均 值差值的功能模块编写成函数。 要求 1 修改后程序的运行结果如图 5.1.5 所示。 图 5.1.5 pg5202a.cpp 的运行结果 要求 2 修改后程序的运行结果如图 5.1.6 所示。 - 88 -
"C:\c-programming\5\Debug\pg5202b.exe" 回 请输入三个整数,中间用逗号分隔:123 1、2、3这三个整数平方,之和与平均值之间的差值为:12.0 Press any key to continue 4 图5.1.6pg5202b.cpp的运行结果 3.打开c:lc-programming5pgS203.cpp,该程序是通过调用函数prime()来判断m是否为 素数,求100以内的全部素数。该源程序内容如下: #include <stdio.h> #include <math.h> void main(void) int x; int prime(int m); printf("以下是100以内的素数:n")方 for(X=2,x<=100,x+) if (prime(x)) printf("%6d",x方 printf("n"方 int prime(int m) int i.n.flag=1: n=sqrt(m)月 for(i=2:i<=ni++)) if(m%i-=0) flag-0; return flag; } 要求:修改上面的程序,将函数prime()修改成没有返回值的函数,修改后的程序以 pg5203a.cpp保存。 -89-
图 5.1.6 pg5202b.cpp 的运行结果 3.打开 c:\c-programming\5\pg5203.cpp,该程序是通过调用函数 prime( )来判断 m 是否为 素数,求 100 以内的全部素数。该源程序内容如下: #include <stdio.h> #include <math.h> void main(void) { int x; int prime(int m); printf("以下是 100 以内的素数:\n"); for (x=2;x<=100;x++) if (prime(x)) printf("%6d",x); printf("\n"); } int prime(int m) { int i,n,flag=1; n=sqrt(m); for (i=2;i<=n;i++) if (m%i==0) flag=0; return flag; } 要求:修改上面的程序,将函数 prime( )修改成没有返回值的函数,修改后的程序以 pg5203a.cpp 保存。 - 89 -