练习1-1
#include <stdio.h>
int main()
{
printf("hello world!");
return 0;
}
练习1-2
#include <stdio.h>
int main()
{
printf("1 \n 2");
return 0;
}
练习1-3
#include <stdio.h>
int main()
{
int fahr, celsius;
int lower, upper, step;
lower = 0;
upper = 300;
step = 20;
fahr = lower;
//增加的表头
printf("fahr\tcelsius\n");
while (fahr <= upper)
{
celsius = 5 * (fahr - 32) / 9;
printf("%d\t%d\n", fahr, celsius);
fahr = fahr + step;
}
return 0;
}
练习1-4
#include <stdio.h>
int main()
{
int fahr, celsius;
int lower, upper, step;
lower = 0;
upper = 300;
step = 20;
celsius = lower;
//增加的表头
printf("celsius\tfahr\n");
while (celsius <= upper)
{
//celsius = 5 * (fahr - 32) / 9;
fahr = (9.0*celsius) / 5.0 + 32.0;
printf("%d\t%d\n", celsius, fahr);
celsius = celsius + step;
}
return 0;
}
练习1-5
#include <stdio.h>
int main()
{
int fahr, celsius;
int lower, upper, step;
lower = 0;
upper = 300;
step = 20;
celsius = upper;
//增加的表头
printf("celsius\tfahr\n");
while (celsius >= lower)
{
fahr = (9.0*celsius) / 5.0 + 32.0;
printf("%d\t%d\n", celsius, fahr);
celsius = celsius - step;
}
return 0;
}
练习1-6
#include <stdio.h>
//验证表达式getchar()!=EOF的值是0还是1
int main()
{
int c;
while (c = getchar() != EOF)
printf("%d\n", c);
return 0;
}
练习1-7
#include <stdio.h>
//编写一个打印EOF值的程序
int main()
{
printf("EOF is %d", EOF);
return 0;
}
练习1-8
#include <stdio.h>
int main()
{
int n1 = 0; //空格
int n2 = 0; //制表符
int n3 = 0; //换行符
char c;
while ((c = getchar()) != EOF)
{
if (c == ' ')
n1++;
if (c == '\t')
n2++;
if (c == '\n')
n3++;
}
printf("\n空格计数=%d,制表符计数=%d,换行计数=%d\n", n1, n2, n3);
return 0;
}
练习1-9
#include <stdio.h>
int main()
{
char c;
int flag = 0; //空格标识
while ((c = getchar()) != EOF)
{
if (c == ' ')
{
if (flag == 0)
{
putchar(c);
}
flag = 1;
}
else
{
putchar(c);
flag = 0;
}
}
return 0;
}
练习1-10
#include <stdio.h>
int main()
{
char c;
while ((c = getchar()) != EOF)
{
if (c == '\t')
printf("\\t");
if (c == '\b')
printf("\\b");
if (c == '\\')
printf("\\\\");
if (c != '\t')
if (c != '\b')
if (c != '\\')
putchar(c);
}
return 0;
}
练习1-11
#include <stdio.h>
#define IN 1 /* 在单词内 */
#define OUT 0 /* 在单词外 */
/* 统计输入的行数, 单词数与字符数 */
int main()
{
char c;
int n1, nw, nc, state;
state = OUT;
n1 = nw = nc = 0;
while ((c = getchar()) != EOF)
{
++nc;
if (c == '\n')
++n1;
if (c == ' ' || c == '\n' || c == '\t')
{
state = OUT;
}
else if (state == OUT)
{
state = IN;
++nw;
}
}
printf("%d %d %d \n", n1, nw, nc);
return 0;
}
练习1-12
#include <stdio.h>
#define IN 1 /* 在单词内 */
#define OUT 0 /* 在单词外 */
/* 统计输入的行数, 单词数与字符数 */
int main()
{
char c;
int n1, nw, nc, state;
state = OUT;
n1 = nw = nc = 0;
while ((c = getchar()) != EOF)
{
++nc;
if (c == '\n')
++n1;
if (c == ' ' || c == '\n' || c == '\t')
{
state = OUT;
}
else if (state == OUT)
{
state = IN;
++nw;
putchar('\n');
putchar(c);
}
else if (state == IN)
{
putchar(c);
}
}
printf("%d %d %d \n", n1, nw, nc);
return 0;
}
练习1-13
#include <stdio.h>
#define MAXHIST 15
#define MAXWORD 11
#define IN 1
#define OUT 0
int main()
{
int c, i, nc, state;
int len;
int maxvalue;
int ovflow;
int wl[MAXHIST];
state = OUT;
nc = 0;
ovflow = 0;
for (i = 0; i < MAXHIST; i++)
wl[i] = 0;
while ((c = getchar()) != EOF)
{
if (c == ' ' || c == '\n' || c == '\t')
{
state = OUT;
if (nc>0)
{
if (nc < MAXHIST)
++wl[nc];
else
++ovflow;
nc = 0;
}
}
else if (state == OUT)
{
state = IN;
nc = 1;
}
else
++nc;
}
maxvalue = 0;
for (i = 1; i < MAXWORD; ++i)
{
if (wl[i]>maxvalue)
{
maxvalue = wl[i];
}
}
for (i = 1; i < MAXWORD; ++i)
{
printf("%5d - %5d : ", i, wl[i]);
if (wl[i]>0)
{
if ((len = wl[i] * MAXHIST / maxvalue) <= 0)
{
len = 1;
}
}
else
{
len = 0;
}
while (len > 0)
{
putchar('*');
--len;
}
putchar('\n');
}
if (ovflow > 0)
{
printf("There are %d words >= %d\n", ovflow, MAXWORD);
}
return 0;
}
练习1-14
#include <stdio.h>
#include <ctype.h>
#define MAXHIST 15
#define MAXCHAR 128
int main()
{
int c, i;
int len;
int maxvalue;
int cc[MAXCHAR];
//初始化数组
for (i = 0; i < MAXCHAR; ++i)
{
cc[i] = 0;
}
while ((c = getchar()) != EOF)
{
if (c < MAXCHAR)
++cc[c];
}
maxvalue = 0;
//找出最大值
for (i = 0; i < MAXCHAR; ++i)
{
if (cc[i]>maxvalue)
{
maxvalue = cc[i];
}
}
//输出
for (i = 0; i < MAXCHAR; ++i)
{
if (isprint(i))
{
printf("%5d - %c - %5d : ", i, i, cc[i]);
}
else
{
printf("%5d - - %5d : ", i, cc[i]);
}
if (cc[i] > 0)
{
if ((len = cc[i] * MAXHIST / maxvalue) <= 0)
{
len = 1;
}
}
else
{
len = 0;
}
while (len > 0)
{
putchar('*');
--len;
}
putchar('\n');
}
return 0;
}
练习1-15
#include <stdio.h>
float celsius(float fahr);
int main()
{
float fahr;
int lower, upper, step;
lower = 0;
upper = 300;
step = 20;
fahr = lower;
while (fahr <= upper)
{
printf("%3.0f %6.1f\n", fahr, celsius(fahr));
fahr = fahr + step;
}
return 0;
}
float celsius(float fahr)
{
return (5.0 / 9.0)*(fahr - 32.0);
}
练习1-16
#include <stdio.h>
#define MAXLINE 10 //允许输入行的最大长度
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;
while ((len = getline(line, MAXLINE)) > 0)
{
if (len > max)
{
max = len;
copy(longest, line);
}
}
if (max > 0) //存在这样的行
{
printf("%s", longest);
}
return 0;
}
//读入一行到s中并且返回长度
int getline(char s[], int lim)
{
int c, i, j;
j = 0;
for (i = 0; (c = getchar()) != EOF&&c != '\n'; ++i)
{
if (i < lim - 2)
{
s[j] = c;
++j;
}
}
if (c == '\n')
{
s[j] = c;
++i;
++j;
}
s[j] = '\0';
return i;
}
//将from复制到to
void copy(char to[], char from[])
{
int i;
i = 0;
while ((to[i] = from[i]) != '\0')
{
++i;
}
}
练习1-17
#include <stdio.h>
#define MAXLINE 10 //允许输入行的最大长度
int getline(char line[], int maxline);
void copy(char to[], char from[]);
//打印最长输入行
int main()
{
int len; //当前行长度
char line[MAXLINE]; //当前输入行
char longest[MAXLINE]; //用于保存最长的行
while ((len = getline(line, MAXLINE)) > 0)
{
if (len > 80)
{
printf("%s", line);
}
}
return 0;
}
//读入一行到s中并且返回长度
int getline(char s[], int lim)
{
int c, i, j;
j = 0;
for (i = 0; (c = getchar()) != EOF&&c != '\n'; ++i)
{
if (i < lim - 2)
{
s[j] = c;
++j;
}
}
if (c == '\n')
{
s[j] = c;
++i;
++j;
}
s[j] = '\0';
return i;
}
//将from复制到to
void copy(char to[], char from[])
{
int i;
i = 0;
while ((to[i] = from[i]) != '\0')
{
++i;
}
}
练习1-18
#include <stdio.h>
#define MAXLINE 10 //允许输入行的最大长度
int getline(char line[], int maxline);
int remove(char s[]);
//打印最长输入行
int main()
{
char line[MAXLINE]; //当前输入行
while ( getline(line, MAXLINE) > 0)
{
if (remove(line) > 0)
{
printf("%s", line);
}
}
return 0;
}
int remove(char s[])
{
int i;
i = 0;
while (s[i] != '\n')
{
++i;
}
--i;
while (i >= 0 && (s[i] == ' ' || s[i] == '\t'))
{
--i;
}
if (i >= 0)
{
++i;
s[i] = '\n';
++i;
s[i] = '\0';
}
return i;
}
//读入一行到s中并且返回长度
int getline(char s[], int lim)
{
int c, i, j;
j = 0;
for (i = 0; (c = getchar()) != EOF&&c != '\n'; ++i)
{
if (i < lim - 2)
{
s[j] = c;
++j;
}
}
if (c == '\n')
{
s[j] = c;
++i;
++j;
}
s[j] = '\0';
return i;
}
练习1-19
#include <stdio.h>
#define MAXLINE 1000 //允许输入行的最大长度
int getline(char line[], int maxline);
void reverse(char s[]);
//打印最长输入行
int main()
{
char line[MAXLINE]; //当前输入行
while ( getline(line, MAXLINE) > 0)
{
reverse(line);
printf("%s", line);
}
return 0;
}
void reverse(char s[])
{
int i, j;
char temp;
i = 0;
while (s[i] != '\0')
{
i++;
}
i--;
if (s[i] == '\n')
{
i--;
}
j = 0;
while (j < i)
{
temp = s[j];
s[j] = s[i];
s[i] = temp;
--i;
++j;
}
}
//读入一行到s中并且返回长度
int getline(char s[], int lim)
{
int c, i, j;
j = 0;
for (i = 0; (c = getchar()) != EOF&&c != '\n'; ++i)
{
if (i < lim - 2)
{
s[j] = c;
++j;
}
}
if (c == '\n')
{
s[j] = c;
++i;
++j;
}
s[j] = '\0';
return i;
}
练习1-20
#include <stdio.h>
#define TABINC 8
int main()
{
int c, nb, pos;
nb = 0;
pos = 1;
while ((c = getchar()) != EOF)
{
if (c == '\t')
{
nb = TABINC - (pos - 1) % TABINC;
while (nb > 0)
{
putchar(' ');
++pos;
--nb;
}
}
else if (c == '\n')
{
putchar(c);
pos = 1;
}
else
{
putchar(c);
++pos;
}
}
return 0;
}
练习1-21
#include <stdio.h>
#define TABINC 8
int main()
{
int c, nb, nt, pos;
nb = 0;
nt = 0;
for (pos = 1; (c = getchar()) != EOF; ++pos)
{
if (c == ' ')
{
if (pos%TABINC != 0)
{
++nb;
}
else
{
nb = 0;
++nt;
}
}
else
{
for (; nt > 0; --nt) //输出制表符
{
putchar('\t');
}
if (c == '\t')
{
nb = 0;
}
else
{
for (; nb > 0; --nb)
{
putchar(' ');
}
}
putchar(c);
if (c == '\n')
{
pos = 0;
}
else if (c == '\t')
{
pos = pos + (TABINC - (pos - 1) % TABINC) - 1;
}
}
}
return 0;
}