预处理程序:define
?
定义函数
宏定义还可带变元(参数):
#define 标识符(标识符,标识符,…)如:
#define
max(A, B) ((A) > (B) ?(A) : (B))反例:
单词串于是语句x = max(p+q, r+s); 可替换为:#define prod(x,y) x*y
x = ((p+q) > (r+s) ? (p+q) : (r+s));则:注意:
a.b.
a=prod(b+c,d+e);被替换为:#define isupper(c ) (c >=?A? && c<=?Z?)?1:0
a=b+c*d+e;
宏定义名与参数间不能有空格,如max(A,B); 参数应用括号括起来,如(A)>(B)?(A) : (B)
intindex(chars[],chart[])
问题4.1:思考1(代码实现)inti,j,k;
{
#include
#define tolower(c) (c>=?A?&&c<=?Z? ? ?a?-?A?+c:c)int index(char s[ ], char t[ ]);int main( ){
char filename[64], s[81], line[MAXLINE];
}
return(-1);}
for(i=0;s[i]!=?\\0?;i++){
for(j=i,k=0;t[k]!=?\\0?&&tolower(s[j])==tolower(t[k]);
j++,k++)
;if(t[k]==?\\0?)
return(i);
FILE *fp;
scanf(\scanf(\
if((fp = fopen(filename, \
printf(\
return 1;
}
while(fgets(line, 81, fp) != NULL)if(index(line, s) >= 0)printf(\
return 0;}
问题4.1:思考2
??
其它实现方法?
问题4.1中index只能查找的是子字符串的首次出现。请考虑如何查找子字符串的最后一次出现?
?
如果要查找一个字符串在一个文件中的出现次数,或查找一个字符串在一个文件中的所有出现行列位置,如何实现?(注意,index只能查找子字符串首次出现,如果一行中有多个子字符串怎样办?)
问题4.2
【问题描述】
某班有不超过200名的学生,从文件中输入某班学生成绩,对输入成绩按由高到低进行排序,并输出到另一个文件中。【输入形式】
从文件scorelist.in中读入学生成绩,学生成绩以整数形式按行存放。注意,学生成绩数目不确定。【输出形式】
将排序结果按行写到文件sorelist.out中。【样例输入】
若文件scorelist.in中有如下成绩:
5875628698【样例输出】
程序运行结束后文件scorelist.out中内容为:9886756258
问题4.2:算法分析算法:FILE *in, *out;in = fopen(“scorelist.in”, “r”);out = fopen(“scorelist.out”,”w”);算法:int socrelist[NUM],n=0;while(!feof(in))fscanf(in, “%d”, &scorelist[n++]);函数feof用来测试是否已读写到文件尾,若?问题可分解为如下几个部分:到文件尾,则返回1,否则返回0。函数fscanf用来从文件中读数据。与标准打开输入/输出文件输入scanf不同的是第一个参数为文件指针算法:。从文件中读入学生成绩设一个函数专门用来对学生成绩进行排序,函数原型为:void sortScore(int list[], int len )算法:for(i=0; i