C程序设计语言(第二版)学习笔记

第一章 导言

#include <stdio.h>
int main()
{
	printf("hello, world\n");
	return 0;
}
#include <stdio.h>

int main()
{
	printf("hello, ");
	printf("world");
        return 0;
}
#include <stdio.h>

int main()
{
	int fahr, celsius;
	int lower, upper, step;

	lower = 0;
	upper = 300;
	step = 20;

	fahr = lower;
	while (fahr <= upper)
	{
		celsius = 5 * (fahr - 32) / 9;
		printf("%d\t%d\n", fahr, celsius);
		fahr = fahr + step;
	}
	return 0;
}

#include <stdio.h>

int main()
{
	float fahr, celsius;
	int lower, upper, step;

	lower = 0;
	upper = 300;
	step = 20;

	fahr = lower;
	while (fahr <= upper)
	{
		celsius = (5.0/9.0) * (fahr - 32.0);
		printf("%3.0f %6.1f\n", fahr, celsius);
		fahr = fahr + step;
	}
	return 0;
}
#include <stdio.h>

int main()
{
	int c;

	while ((c=getchar()) != EOF)
	{
		putchar(c);
	}
	return 0;
}
#include <stdio.h>

int main()
{
	long nc;
	nc = 0;
	while (getchar()!=EOF)
	{
		nc++;
	}
	printf("%ld\n", nc);
	return 0;
}
#include <stdio.h>

int main()
{
	double nc;
	for (nc = 0; getchar() != EOF; ++nc);
	printf("%.0f\n", nc);
	return 0;
}
练习1-8 编写一个统计空格、制表符与换行符个数的程序
#include <stdio.h>

int main()
{
	int c, nb, nt, nl;

	nb = nt = nl = 0;
	while ((c = getchar())!=EOF)
	{
		if (c == ' ')
		{
			nb++;
		}
		else if (c == '\t')
		{
			nt++;
		}
		else if (c == '\n')
		{
			nl++;
		}
	}
	printf("nb=%d,nt=%d,nl=%d\n", nb, nl, nt);
	return 0;
}
#include <stdio.h>

#define NOBLANK 'a'

int main()
{
	int c, lastc;
	while ((c=getchar())!=EOF)
	{
		if (c != ' ')
		{
			putchar(c);
		}
		else if (lastc != ' ')
		{
			putchar(c);
		}
		lastc = c;
	}
	return 0;
}
练习1-10 编写一个将输入复制到输出的程序,并将其中的制表符替换为\t,把回退符替换为\b,把反斜杠替换为\\。这样可以将制表符和回退符以可见的方式显示出来。
#include <stdio.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;
}
#include <stdio.h>

#define IN 1
#define OUT 0

int main()
{
	int c, nl, nw, nc, state;

	state = OUT;
	nl = nw = nc = 0;
	while ((c=getchar())!=EOF)
	{
		nc++;
		if (c == '\n')
		{
			nl++;
		}
		if (c == ' ' || c == '\n' || c == '\t')
		{
			state = OUT;
		}
		else if (state == OUT)
		{
			state = IN;
			nw++;
		}
	}
	printf("%d %d %d\n", nl, nw, nc);
	return 0;
}
#include <stdio.h>

int main()
{
	int c, i, nwhite, nother;
	int ndigit[10];

	nwhite = nother = 0;

	for (i=0; i<10; i++)
	{
		ndigit[i] = 0;
	}

	while ((c=getchar())!=EOF)
	{
		if (c >= '0' && c <= '9')
		{
			ndigit[c - '0']++;
		}
		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 = %d\n", nwhite, nother);
	return 0;
}
练习1-12 编写一个程序, 以每行一个单词的形式打印其输入。
#include <stdio.h>

#define IN 1
#define OUT 0

int main()
{
	int c, state;
	state = OUT;
	while ((c=getchar())!=EOF)
	{
		if (c==' ' || c=='\n' || c=='\t')
		{
			if (state == IN)
			{
				putchar('\n');
				state = OUT;
			}
		}
		else if(state == OUT)
		{
			state = IN;
			putchar(c);
		}
		else
		{
			putchar(c);
		}
	}
	return 0;
}
#include <stdio.h>

#define MAXHIST 15
#define MAXWORD 11
#define IN 1
#define OUT 0

int main()
{
	int c, i, j, nc, state;
	int maxvalue;
	int ovflow;
	int wl[MAXWORD];
	state = OUT;
	nc = 0;
	ovflow = 0;
	for (i=0; i<MAXWORD; i++)
	{
		wl[i] = 0;
	}
	while ((c=getchar())!=EOF)
	{
		if (c==' ' || c=='\n' || c=='\t')
		{
			if (state == IN)
			{
				if (nc>0)
				{
					if (nc<MAXWORD)
					{
						wl[nc]++;
					}
					else
					{
						ovflow++;
					}
				}
				state = OUT;
			}
			nc = 0;
		}
		else if(state == OUT)
		{
			state = IN;
			nc = 1;
		}
		else
		{
			nc++;
		}
	}
	maxvalue = 0;
	for (i=1; i<MAXWORD; i++)
	{
		if (maxvalue < wl[i])
		{
			maxvalue = wl[i];
		}
	}
	for (i=MAXHIST; i>0; i--)
	{
		for (j=1; j<MAXWORD; j++)
		{
			if (wl[j]*MAXHIST/maxvalue>=i)
			{
				printf(" * ");
			}
			else
			{
				printf("   ");
			}
			putchar('\n');
		}
	}
	for (i=1; i<MAXWORD; i++)
	{
		printf("%4d ", i);
	}
	putchar('\n');
	for (i = 1; i < MAXWORD; i++)
	{
		printf("%4d ", wl[i]);
	}
	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 (maxvalue<cc[i])
		{
			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;
}
#include <stdio.h>

int power(int m, int n);

int main()
{
	int i;
	for (i=0; i<10; i++)
	{
		printf("%d %d %d\n", i, power(2, i), power(-3, i));
	}
	return 0;
}

int power(int base, int n)
{
	int i, p;
	p = 1;
	for (i=1; i<=n; i++)
	{
		p = p*i;
	}
	return p;
}
#include <stdio.h>

#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;
	while ((len=getline(line, MAXLINE))>0)
	{
		if (max < len)
		{
			max = len;
			copy(longest, line);
		}
	}
	if (max > 0)
	{
		printf("%s\n", longest);
	}
	return 0;
}

int getline(char s[], int 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] = '\0';
	return i;
}

void copy(char to[], char from[])
{
	int i;
	while ((to[i]=from[i])!='\0')
	{
		i++;
	}
}

第二章 类型、运算符与表达式

#include <stdio.h>
#include <limits.h>

int main()
{
	printf("signed char min = %d\n", SCHAR_MIN);
	printf("signed char max = %d\n", SCHAR_MAX);
	printf("signed short min = %d\n", SHRT_MIN);
	printf("signed short max = %d\n", SHRT_MAX);
	printf("signed int min = %d\n", INT_MIN);
	printf("signed int max = %d\n", INT_MAX);
	printf("signed long min = %d\n", LONG_MIN);
	printf("signed long max = %d\n", LONG_MAX);
	printf("unsigned char max = %d\n", UCHAR_MAX);
	printf("unsigned short max = %d\n", USHRT_MAX);
	printf("unsigned int max = %d\n", UINT_MAX);
	printf("unsigned long max = %d\n", ULONG_MAX);
	return 0;
}
#define YES 1
#define NO 0

int htoi(char s[])
{
	int i, n, hexdigit, inhex;
	i = 0;
	if (s[i]=='0')
	{
		++i;
		if (s[i]=='x' || s[i]=='X')
		{
			++i;
		}
	}
	n = 0;
	inhex = YES;
	for (;inhex==YES;++i)
	{
		if (s[i]>='0' && s[i]<='9')
		{
			hexdigit = s[i] - '0';
		}
		else if (s[i]>='a' && s[i]<='z')
		{
			hexdigit = s[i] - 'a' + 10;
		}
		else if (s[i] >= 'A' && s[i] <= 'Z')
		{
			hexdigit = s[i] - 'A' + 10;
		}
		else
		{
			inhex = NO;
		}
		if (inhex == YES)
		{
			n = n * 16 + hexdigit;
		}
	}
	return n;
}
























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值