1,c程序都是由函数和变量组成的。
练习1.6验证布尔表达式getchar()!= EOF的取值是0还是1
答:
#include <stdio.h> #include <stdlib.h>
int main() {
int c;
while(c=getchar()!=EOF)
{
printf("%d",c);
/*c=getchar();//此行用来消除回车键*/
}
printf("%d",c);
return 0;
}
运行结果:
运行结果显示EOF为0;(第一个为记录空格与换行,第二个不记录空格与换行);
练习1.9编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替
答:
#include <stdio.h>
#include <stdlib.h>
#define BLANK 'a'
int main()
{
int c,fro=BLANK;
while((c=getchar())!=EOF)
{
if(c!=' ')
{
putchar(c);
}
else
{
if(fro!=' ')
putchar(c);
}
fro=c;
}
return 0;
}
//整型c记录输入字符的ASCII码,整型fro记录前一个字符的ASCII码。(将fro初始化为任意的非空格字符)
运行结果:
练习1.10编写一个将输入复制到输出的程序,并将其中的制表符替换为\ t?把回退符替换为\b?
把反斜杠替换为\ \?这样可以将制表符和回退符以可见的方式显示出来
答:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int c;
while((c=getchar())!=EOF)
{
if(c=='\t')
{
printf("\\t");
}
else
{
if(c=='\b')
{
printf("\\b");
}
else
{
if(c=='\\')
{
printf("\\\\");
}
else
{
putchar(c);
}
}
}
}
return 0;
}
运行结果:
无法显示'\\b'
说明:C语言中输入字符串会先存入缓冲区,退格是从缓冲区取出一个字符,而不是加一个'\b'
若你输入 \b 则系统会认为是 '\\b'
若你输入 abc(退格)abc 则系统不会认为是abc\babc,而是ababc
练习1.12编写一个程序,以每行一个单词的形式打印其输入?
答:
#include <stdio.h>
#include <stdlib.h>
#define IN 1
#define OUT 0
int main()
{
int c;
int state=0;
while((c=getchar())!=EOF)
{
if(c==' '||c=='\n'||c=='\t')
{
if(state==IN)
{
putchar('\n');
state=OUT;
}
}
else
{
if(state==OUT)
{
putchar(c);
state=IN;
}
else
{
putchar(c);
}
}
}
return 0;
}
运行结果: