图5.7两层函数嵌套调用示意图函数的嵌套调用即一个函数在被调用的过程中又调用了另外的一个函数。函数fac和powers的返回值类型均被设计为double型,其主要目的是为了避免n!x:0.5//0.5从键盘输入的数据0.50 powers of e=1.648721//程序执行结果......
2023-11-20
在操作系统下,为执行某个程序而键入的一行字符称为命令行。命令行的一般形式为:
命令名参数1参数2参数3…参数n
命令行中的每一个成分之间以一个或者多个空格隔开。例如,DOS操作系统的copy命令使用形式为:
copy c:\source.c c:\bak\prg.c
上式中,copy是DOS系统的文件拷贝命令,是执行文件名。命令实现的功能是将C盘根目录下的文件source.c拷贝到C盘bak子目录下,并改名为prg.c。
在视窗系统中,也可以在Windows系统的运行对话框中通过输入命令行“winword d:\abc.doc”,实现启动字处理程序Word的同时打开D盘根目录下Word文档“d:\abc.doc”,如图8.10所示。
图8.10 命令行参数
C程序通过主函数带形参表来实现命令行参数功能,带参数的main函数形式为:
主函数的形式参数有两个,一个整型参数用于记录命令行输入的参数个数,习惯上用标识符argc表示;另一个是字符型指针数组argv,用于存放命令行上输入的各实参字符串的起始地址,即指针数组的每一个元素指向一个由命令行上传递而来的字符串。
例如,若有C源程序文件echo.c,程序中的主函数头为:
int main(int argc,char*argv[])
源程序文件编译连接后生成执行文件echo.exe,执行程序时命令行为:
echo file1.txt file2.txt
则参数传递的结果为:argc=3、argv[0]指向字符串"echo.exe"(即第一个参数是main所在的可执行文件名)、argv[1]指向字符串"file1.txt"、argv[2]指向字符串"file2.txt",如图8.11所示。
图8.11 命令行参数结构示意图
【例8.15】 命令行参数演示示例。(www.chuimin.cn)
对ex0615.c编译、链接后得到执行文件ex0615.exe。在命令提示符窗口中进入到ex0615.exe所在文件夹。在DOS命令提示符输入命令行:ex0615 hello world执行,程序执行的结果为:
test
hello
world
在VC++6集成环境中可以直接调试含有命令行参数的程序,具体方法请参考附录C。
使用命令行参数时特别需要注意的是,通过命令行参数只是从程序外向程序内部传递了若干个字符串,程序中用字符指针数组来组织这些字符串,至于这些字符串的物理含义(即传递这些字符串的目的)由程序员自己解释,如表示某个文件的名字、表示被处理的字符串等。如果通过命令传递进来的是其他意义的数据,则需要按使用要求进行转换,下面的例8.16说明了这个问题。
【例8.16】 编写程序实现功能:程序执行时从命令行上带入两个实数,求两个实数之和并输出。
上面程序执行时,如果没有按要求正确提供命令行参数(即命令行上的参数不是3个)则输出提示信息Using:command arg1 arg2<CR>后退出程序。若正确提供了命令行参数(假设参数为130.45 33.9)则输出结果为:sum=164.350000。
有关C语言程序设计基础(第3版)的文章
图5.7两层函数嵌套调用示意图函数的嵌套调用即一个函数在被调用的过程中又调用了另外的一个函数。函数fac和powers的返回值类型均被设计为double型,其主要目的是为了避免n!x:0.5//0.5从键盘输入的数据0.50 powers of e=1.648721//程序执行结果......
2023-11-20
在进行C语言程序设计时,合理使用库函数有以下好处:①对于某些功能的实现已经存在标准化的函数代码,这时直接使用库函数,可以避免重复编制,简化程序设计过程,提高程序设计的效率。②库函数在开发时充分考虑了各种影响因素,经过了长期使用的考验,使用标准库函数可以使程序的健壮性得到足够的保证,从而提高编程的质量。使用标准库函数时要注意函数的功能、参数的个数与类型、函数值的类型。......
2023-11-20
A.与参数x的类型相同B.无法确定C.void类型D.int类型3.为了避免嵌套的条件语句if-else的二义性,C语言规定()。A.else与缩排位置相同的if配对B.else与同一行上的if配对C.else与其之后最近的if配对D.else与其之前最近的尚未配对的if配对4.设x、y、z和k都是int型变量,则执行表达式:x=后,x的值为()。A.7 B.6 C.5 D.47.在C语言程序中,用关键字()定义无符号型变量。else语句实现两个分支。......
2023-09-19
C语言中逻辑运算符及其含义见表3.2。表3.2逻辑运算符及其含义逻辑运算符“&&”和“||”是双目运算符,具有左结合性;“!”表3.3逻辑运算真值表C语言中进行逻辑表达式求值运算时,不但要注意逻辑运算符本身的运算规则,而且还必须要遵循下面的两条原则:·对逻辑表达式从左到右进行求解。......
2023-11-20
将一维数组看成一个整体作为函数参数时,用数组名作为函数的形式参数或实际参数。一维数组作为函数的形式参数本质上是一个指针变量,所以在描述上不需要指定形参数组的长度。上面程序中函数sum的原型为:int sum;,表示了该函数在被调用时应该传递一个整型数组给一维数组形式参数v[],数组的长度由整型变量n表示,函数sum的功能是将用形式参数v表示的长度为n的数组元素求和。......
2023-11-20
我们通过下面的示例来说明按值传递方式中参数在函数之间的传递。图5.1实参与形参传递示意图当数组名作为函数参数时,函数传递数据方式采用的是“按地址传递”的方式,但要求形参和相对应的实参都必须是类型相同的数组。图5.3数组v的存储形式这样一来,形参数组中元素值的改变就会反过来影响到实参数组。......
2023-11-18
针对不同的实际应用,数据排序方法有很多种。本节介绍两种常用排序方法的基本思想和实现方法,帮助读者初步理解排序方法的计算机解决思路。②不考虑已排好序的数据,将剩下的数据作为待排序列。编写程序实现冒泡排序算法,对随机生成的10个3位整数按升序进行排序并输出。......
2023-11-20
一个函数直接或间接地调用自己,称为函数的递归调用。所以函数递归调用的实现必须依靠系统提供一个特殊部件(堆栈)存放未完成的操作,以保证当递归调用结束回溯时不会丢失任何应该执行而没有执行的操作。为了理解函数递归调用的特性,参照例5.9的程序讨论函数递归调用的执行过程,为了讨论方便为程序加上行号。函数递归调用示例。......
2023-11-20
相关推荐