因此,可以定义一种指向函数的指针来存放函数的入口地址,}程序运行后的输出结果是 (B)
定义方式是:函数返回值类型(*函数指针名)(参数类型列表); A.abc B.789 C.7890 D.979898 本题答案选B。 例11.(2011-09-30)若有定义语句:char *s1=”OK”;*s2=”ok”;,9.知识点:指针与字符串 以下选项中,能够输出“OK”的语句是 (D) ? 可以通过字符指针来处理字符串 A.if(strcmp(s1,s2)==0) puts(s1); 例如:char *p=\或者char *p;p=\把字符串赋值给B.if(strcmp(s1,s2)!=0) puts(s2); 指针p,实质是把保存字符串\的那段内存的首地址赋值C.if(strcmp(s1,s2)==1) puts(s1); 给指针p,使得指针p指向了字符串,这样就可以通过指针来D.if(strcmp(s1,s2)!=0) puts(s1); 操作字符串了。 【解析】strcmp函数作为字符串比较函数,当s1等于s2所指【注意】char str[10] ; str=\是错误的!数组名是地址字符串时结果为0,当s1大于s2所指字符串时结果为 >0,当常量,不能进行赋值操作! s1小于s2所指字符串时结果为 <0 ? “三名主义”(考试的重点) 例11.(07—04—44)有下列程序: 数组名:表示第一个元素的地址。数组名是地址常量名,不main() 能进行赋值和自加(减)等运算。(考了很多次) {char ch[]=“uvwxyz”,*pc; 函数名:表示该函数的入口地址。 pc=ch;printf(”%c\n”,*(pc+5)); 字符串常量名:表示第一个字符的地址。 } 程序运行后的输出结果是(A) 例11.(2011-09-22)有以下程序(注:字符a的ASCII码值为97) A)Z B)0 C)元素ch[5]的地址 D)字符Y的地址 #include
第 41 页 共 78 页
【解析】选项A为正确用法。先将字符串存于字符数组中, 然后将数组名赋给字符指针。选项B为无语法错误,但运行 时可能会出现问题。原因是字符指针没有被赋值,是一个不确 定的值,指向一个不确定的内存区域,这个区域可能存放有用 的指令或数据。在这个不确定的区域重新存放输入的字符串, 可能会发生无法预知的错误。选项C错误。getchar()函数输入 一个字符给字符型变量,而不应该是字符指针。选项D错误。 *c=”string”应该改为c=”string”才是正确的。
第五课 函数
第 42 页 共 78 页
本课重要知识点:
1、知识点:函数的概述
第 43 页 共 78 页
? C源程序是由函数组成的,函数由函数首部与函数体组成, 例1:下列叙述中正确的是( C )
A)C语言程序将从源程序中第一个函数开始执行
函数体包括声明部分和执行语句部分组成。 B)可以在程序中由用户指定任意一个函数作为主函数,程
序将从此开始执行
? C语言程序可以由多个源程序组成,其中一个源程序文件
C)C语言规定必须用main作为主函数名,程序将从此开始
包含main函数,其他函数可以写在另外的源程序文件中,执行,在此结束
D)main可作为用户标识符,用以命名任意一个函数作为主
为单独文件,并且可以单独编译。
函数。
例1:(10-03-11)以下叙述正确的是( B )
? 在一个函数的函数体内,不能再定义另一个函数,即不能
A)C语言程序是由过程和函数组成的
嵌套定义。 B)C语言函数可以嵌套调用,例如:fun(fun(x))
C)C语言函数不可以单独编译 例1、下列叙述中正确的是( D ) D)C语言中除了main函数,其他函数不可以作为单独文件 A)每个C程序文件中都必须要有一个main()函数 形式存在 B)在C程序中main ()函数的位置是固定的 【解析】选项A错误,C语言中没有过程的概念;选项B正 C)C程序中所有函数之间都可以是固定的 确,C语言可以嵌套调用(此知识点在后面介绍);选项C错 D)在C程序的函数中不能定义另一个函数
误,C语言中可以对包含一个或多个函数的源程序单独编译;【解析】一个C源程序可以由多个C程序文件,但只能有一选项D错误,C语言函数可以单独存在。 个main()函数,并不是每个C程序文件都必须要有一个main(),? C程序的执行总是从main函数开始,完成对其它函数的main()函数可以放在任意位置,且不允许被其他函数调用,因
此正确答案是D。
调用后再返回到main函数,最后由main函数结束整个程
2、知识点:函数的定义
序。main 函数可以调用其它函数,而不允许被其它函数调
例1:以下正确的函数定义形式是:(C)
A)double fun(int x,int y);{} B) double fun(int 用。一个C源程序必须有,也只能有一个主函数main。
第 44 页 共 78 页
x ;int y){} 致,以函数类型为准。
C) double fun(int x,int y){} D) double fun(int x, 例2:(06-04-23)已定义以下函数 y);{}
【解析】在函数中对形参的说明,要求对每个形参都必须说明 int fun(int *p){return *p;} fun函数返回值是( B ) 类型,各参数之间用“,”隔开,函数定义后应无“;”。
A)不确定的值 B)一个整数 C)形参P中存放的值 D)形
? 函数返回return语句的一般形式:return 表达式;或return
参P的地址值 (表达式);
在函数中允许有多个return语句,但每次只能有一个
【解析】函数返回性类型取决于定义函数时函数名称前的
return语句被执行。 例1:(10-03-24)以下关于return语句叙述中正确的是( B) 类型,fun前是int,表明函数fun执行完毕后返回一个整型数。 A)一个自定义函数中必须有一条return语句
正确答案:B
B)一个自定义函数中可以根据不同情况设置多条return语句 ? return 后的表达式可以是常量、变量、表达式,也可以空。 C)定义void类型的函数中可以有带返回值的return语句
如:return ; return 0; return a; return (a+b); D)没有return语句的自定义函数在执行结束时不能返回到
调用处。 3、知识点:形参和实参及函数调用 【解析】自定义函数中可以没有return语句(如不需要返回值
? 形参出现在函数定义中(即定义函数时函数名后面括号中
的函数,常见void类型)),可以有多条return语句(如在分
的参数),实参出现在主调函数中(调用函数时函数名后面
支结构中,可以从不同分支中返回到调用程序,常见if..else);括号中的参数)
定义成void类型的函数,不允许从该函数取得返回值,也不
? 形参在本函数体内都可以使用,离开该函数则不能使用。
允许使用return语句。没有return语句的函数在执行到函数的
实参在主调函数中内有效,进入被调函数后,实参变量也
最后一条语句后自动返回达到调用处。
不能使用。(注:在进行函数调用时,函数必须有确定的值)
? 函数值的类型与函数定义中函数的类型保持一致,如不一
? 实参向形参单向传递数值,不能将形参的值反向的传送给
第 45 页 共 78 页