4.1 函数的基本知识
如果函数定义中省略了返回值类型,则默认为int类型。
练习4-1 编写函数strindex(s, t),它返回字符串t在s中最右边出现的位置。
如果s中不包含t,则返回-1。
答:
#include <stdio.h>
int strindex(char s[], char t[])
{
int i, j, k;
for (i = 0; s[i] != '\0'; i++) // to end of s
;
for (i = i - 1; i >= 0; i--) {
for (j = 0; t[j] != '\0'; j++) // to end of t
;
// compare s and t in reverse order
for (j = j - 1, k = i; j >= 0 && k >= 0; j--, k--)
if (s[k] != t[j])
break;
if (j == -1)
return k + 1;
}
return -1;
}
main()
{
char s[] = "thisiscdaiandrachel";
char t1[] = "cdai";
char t2[] = "xyz";
char t3[] = "this";
int strindex(char s[], char t[])
{
int i, j, k;
for (i = 0; s[i] != '\0'; i++) // to end of s
;
for (i = i - 1; i >= 0; i--) {
for (j = 0; t[j] != '\0'; j++) // to end of t
;
// compare s and t in reverse order
for (j = j - 1, k = i; j >= 0 && k >= 0; j--, k--)
if (s[k] != t[j])
break;
if (j == -1)
return k + 1;
}
return -1;
}
main()
{
char s[] = "thisiscdaiandrachel";
char t1[] = "cdai";
char t2[] = "xyz";
char t3[] = "this";
char t4[] = "elx";
printf("%d\n", strindex(s, t1));
printf("%d\n", strindex(s, t2));
printf("%d\n", strindex(s, t3));
printf("%d\n", strindex(s, t1));
printf("%d\n", strindex(s, t2));
printf("%d\n", strindex(s, t3));
printf("%d\n", strindex(s, t4));
}
}
4.2 返回非整型值的函数
由于atof函数的返回值类型不是int,因此该函数必须声明返回值的类型。
其次,调用函数必须知道atof函数返回的是非整型值。可以在调用函数中显示声明atof函数。
#include <stdio.h>
#define MAXLINE 100
main()
{
double sum, atof(char []);
char line[MAXLINE];
int getline(char line[], int max);
sum = 0;
while (getline(line, MAXLINE) > 0)
printf("\t%g\n", sum += atof(line));
return 0;
}
函数atof的声明与定义必须一致。如果atof函数与调用它的main函数放在同一源文件中,
并且类型不一致,编译器会检测到该错误。如果atof函数式单独编译的,这种不匹配的
错误就无法检测出来。
如果没有函数原型,则函数将在第一次出现的表达式