版本一:
#include1.7 函数 现在通过编写一个求幂的函数power(m,n)来说明函数定义的方法int main() { int c,i,nwhite,nother; //定义变量 int ndigit[10]; //定义数组,用以记录数字出现的次数 nwhite = nother = 0; //初始化变量空白符和其他字符出现的次数为0 for(i=0;i<10;i++) { ndigit[i]=0; //遍历数组,使每个数组值都为0 } while((c=getchar()) != EOF) if(c >= '0' or c <='9') ++ndigit[c-'0']; //在asc码中'0'对应的值为48,'5'对应于53,故53-48=5,ndigit[5]+=ndigit[5] else if (c == ' ' || c == 'n' || c == 't') ++nwhite; else ++nother; printf("digits ="); for(i = 0;i < 10;i++) printf("%d",ndigit[i]);//遍历数组,输出他们的次数 printf(",white space = %d, other = %dn",nwhite,nother); }
# include1.8 参数——传值调用int power(int m,int n); //声明函数 int main() { int i; for (i = 0; i < 10; i++) { printf("%d %d %dn",i, power(2,i), power(-3,i)); } return 0; } int power(int base,int n) { int i,p; p=1; for (i = 0; i <= n; i++) { p = p * base; } return p; }
才C语言中,所有函数参数都是“通过值”传递的。也就是说,传递给被调用函数的参数值存放在临时变量中,而不是存放在原来的变量中。
才C语言中,被调用函数不能直接修改主调函数中变量的值,而只能修改其私有的临时副本的值。
上例中的power函数就利用了这一性质。
int power(int base,int n)
{
int i,p;
p=1;
for (i = 0; i <= n; i++) {
p = p * base;
}
return p;
}
1.9 字符数组
字符数组是C语言中最常用的数组类型。
编写一个程序,该程序读入一组文本行,并把最长的文本行打印出来。该算法的基本框架:
while (还有未处理的行) if(该行比已处理的最长行还要长) 保存该行 保存该行长度 打印最长行
# include#define MAXLINE 1000//宏定义 int getline(char line[],int maxline); //声明获取行长度的函数 void copy(char to[],char from[]); //声明拷贝行的函数 int main() { int len; //当前行长度 int max; //目前为止发现最长行的长度 char line[MAXLINE]; //当前的输入行 char longest[MAXLINE]; //用于保存最长的行 max=0; //初始化最长行为0 while ((len = getline(line,MAXLINE)) > 0) if (len > max){ max = len; copy(longest,line); } if (max > 0) printf("%s",longest); return 0; } int getline(char s[],int lim) //函数定义。lim:数组长度 { int c,i; for (i = 0; i < lim-1 && (c=getchar()) != EOF && c != 'n'; ++i) { s[i]=c; } if (c == 'n'){ s[i]=c; ++i; } s[i]='n'; return i; } void copy(char to[],char from[]) { int i; i=0; while ((to[i] = from[i]) != ' ') ++i; }



