欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

《C语言程序设计教程》(主编黄迪明、余勤)第三章课后习题答案

程序员文章站 2024-02-02 13:42:04
...

       在阅读代码前,先说一下这本书的在版编目(CIP)数据:C语言程序设计教程/黄迪明、余勤主编.--北京:国防工业出版社,2006.5    ISBN 7-118-04516-0

       所有代码均在 VS2013 中成功运行。若有不妥之处,非常欢迎您提出问题,若能提出改进意见,不胜感激!


3.1  求解二次方程 ax^2+bx+c=0.应用求根公式:(-b±sqrt(b^2-4ac))/2a.

#include<stdio.h>
#include<math.h>
void main()
{
	printf("求解二次方程 ax^2+bx+c=0.应用求根公式:(-b±sqrt(b^2-4ac))/2a.\n\n");
	float x = 0, k =0 , a = 0;
	float temp=0;
	printf("请输入方程的二次项系数:");
	scanf("%f",&x);
	printf("请输入方程的一次项系数:");
	scanf("%f", &k);
	printf("请输入方程的二次项系数:");
	scanf("%f", &a);
	temp = k*k - 4 * x*a;
	if (temp<0)
	{
		printf("\n该方程无实数解.");
	}
	else if (temp=0)
	{
		printf("\n该方程的解为:%f", (-k) / (2 * x));
	}
	else
	{
		printf("\n该方程有两个解.\t第一个解为;%f\t第二个解为:%f", (-k + sqrt(k*k - 4 * x*a)) / (2 * a), (-k - sqrt(k*k - 4 * x*a)) / (2 * a));
	}
	getch();
}

3.3  试编程完成:从键盘上输入一系列字符,包括数字、空格、和其他字符(当输入数字‘1’时结束程序运行),最后要求计算分别计算出所输入的数字、空格和其他字符出现的次数。

#include<stdio.h>
void main()
{
	printf("试编程完成:从键盘上输入一系列字符,包括数字、空格、和其他字符(当输入数字‘1’时结束程序运行),\n最后要求计算分别计算出所输入的数字、空格和其他字符出现的次数。\n\n");
	char c;
	int nu = 0, sp = 0, ot = 0;
	printf("请输入一个字符串:");
	while ((c = getchar()) != EOF)
	if (c - '1' == 0)
	{
		break;
	}
	else
	{
		if ((c - '0'>=0)&&(c-'0'<=9))
		{
			nu = nu + 1;
		}
		else if (c == ' ')
		{
			sp = sp + 1;
		}
		else
		{
			ot = ot + 1;
		}
	}
	printf("输入的数字出现的次数为 %d\n", nu);
	printf("输入的空格出现的次数为 %d\n", sp);
	printf("输入的其他字符出现的次数为 %d\n", ot);
	getch();
}

3.4  写一个程序,将输入复制到输出,当输入正文中有一个以上的连续空格时,在输入中用一个空格代替。

#include<stdio.h>
void main()
{
	printf("写一个程序,将输入复制到输出,当输入正文中有一个以上的连续空格时,在输入中用一个空格代替。\n\n");
	int k = 0;
	char c;
	printf("请输入一串字符(输出的结果显示在下一行!):");
	while ((c = getchar()) != EOF)
	{
		if (c == '\n')
		{
			break;
		}
		if (c == ' ')
		{
			if (k != 1)
			{
				putchar(c);
				k = 1;
			}
		}
		else if (k != ' ')
		{
			putchar(c);
			k = 0;
		}
	}
	printf("\n当输入中有一个及以上连续的空格时,输出中用一个空格符替代的输出显示如上行");
	getch();
}

3.5  用for循环语句计算输入的文本的字符个数。

#include<stdio.h>
void main()
{
	printf("用for循环语句计算输入的文本的字符个数。\n\n");
	int n = 0;
	char c;
	printf("请输入一串字符:");
	while ((c=getchar())!=EOF)
	{
		if (c=='\n')
		{
			break;
		}
		else
		{
			if ((c>='1'&&c<='9')||(c>='a'&&c<='z')||(c>='A'&&c<='Z'))
			{
				n = n + 1;
			}
		}
	}
	printf("输入的文本中字符个数为:%d",n);
	getch();
}

3.6  编写一个程序,找到输入正文中元音字母最多的那个单词,输出该单词和它所含元音字母的个数(一个单词是由一串不含空格、换行及制表符的字符组成)。需要注意的是,含元音字母最多的单词可能不止一个!

#include<stdio.h>
#include<string.h>
void main()
{
	printf("编写一个程序,找到输入正文中元音字母最多的那个单词,输出该单词和它所含元音字母的个数\n(一个单词是由一串不含空格、换行及制表符的字符组成)。\n\n");
	int n = 0, a = 0, b = 0, j = 0, m = 0, i = 0, e = 0, len = 0, k = 0;
	char c1[100][20] = { '\0' };
	char c2[20] = { '\0' };
	char c;
	printf("请输入一系列字符:");
	while ((c = getchar()) != EOF)
	{
		if (c == '\n')
		{
			if (n > m)
			{
				m = n;
				len = strlen(c2);
				n = 0;
				for (i = 0; i < len; i++)
				{
					c1[0][i] = c2[i];
				}
			}
			else if ((n == m) && (n>0))
			{
				len = strlen(c2);
				e = e + 1;
				for (i = 0; i < len; i++)
				{
					c1[e][i] = c2[i];
				}
			}
			printf("\n正文中元音字母最多的单词是:");
			for (a = 0; a <= e; a++)
			{
				for (b = 0; b < len; b++)
				{
					printf("%c", c1[a][b]);
				}
				printf("\n");
			}
			printf("\n所含的元音字母的个数为:%d", m);
			break;

		}
		else if ((c >= '0'&&c <= '9') || (c >= 'a'&&c <= 'z') || (c >= 'A'&&c <= 'Z'))
		{
			k = 0;
			if ((c == 'a') || (c == 'e') || (c == 'i') || (c == 'o') || (c == 'u') || (c == 'A') || (c == 'E') || (c == 'I') || (c == 'O') || (c == 'U'))
			{
				n = n + 1;
			}
			c2[j] = c;
			j = j + 1;
		}
		if ((c == ' ') && (k == 0))
		{
			if (n > m)
			{
				m = n;
				len = strlen(c2);
				n = 0;
				for (i = 0; i < len; i++)
				{
					c1[0][i] = c2[i];
				}
			}
			else if ((n == m) && (n>0))
			{
				len = strlen(c2);
				e = e + 1;
				for (i = 0; i < len; i++)
				{
					c1[e][i] = c2[i];
				}
			}

			for (i = 0; i < 20; i++)
			{
				c2[i] = '\0';
			}
			n = 0;
			j = 0;
			k = 1;
		}
		else
		{
			continue;
		}
	}
	getch();
}

3.7  //“百鸡问题”是我国古代数学家张丘在其编写的《算经》中提出的一个方程问题,即“鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡。问鸡翁、母、雏各几何?”

#include<stdio.h>
void main()
{
	printf("“百鸡问题”是我国古代数学家张丘在其编写的《算经》中提出的一个方程问题,\n即“鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡。问鸡翁、母、雏各几何?”\n\n");
	int wong = 0, mu = 0, chu = 0;
	for (wong = 1; wong <= 20; wong++)
	{
		for (mu = 1; mu <= 33; mu++)
		{
			chu = 100 - wong - mu;
			if (chu / 3 + 3 * mu + 5 * wong == 100)
			{
				printf("\n鸡翁:%d只\t鸡母:%d只\t鸡雏:%d只", wong, mu, chu);
			}
		}
	}
	getch();
}

3.8  写一个程序,读入并计算如下形式的整常数表达式:-20-4-3+169;试编写一个程序来计算这个问题。此表达式是执行整数的加减法,每个整数前都带一个符号(+或-),表达式由一个分号结束。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
	printf("写一个程序,读入并计算如下形式的整常数表达式:-20-4-3+169;试编写一个程序来计算这个问题。\n此表达式是执行整数的加减法,每个整数前都带一个符号(+或-),表达式由一个分号结束。"\n\n);
	char cc[101], ch;
	int i, s, L;
	long a, b;
	s = 0;
	i = 0;
	a = 0;
	printf("输入表达式:");
	scanf("%s", cc);
	L = strlen(cc);
	ch = '+';
	for (i = 0; i <= L; ++i)
	{
		if (cc[i]<'0' || cc[i]>'9')
		{
			char *p = cc + s;
			ch = p[i - s];
			p[i - s] = '\0';
			b = atol(p);
			p[i - s] = ch;
			if (ch=='+')
			{
				a = a + b;
			}
			else
			{
				a = a - b;
			}
			s = i + 1;
		}
	}
	printf("%ld\n", a);
	getch();
	return 0;
}


3.9  从每个输入行中删去前置的空格符,再打印此行。

#include<stdio.h>
void main()
{
	printf("从每个输入行中删去前置的空格符,再打印此行。\n\n");
	int i = 0, k = 0;
	char c;
	printf("\n请在下一个输入行中输入一串字符:\n");
	while ((c=getchar())!=EOF)
	{
			if (c==' ')
			{
				continue;
			}
			else
			{
				putchar(c);
				while ((c = getchar()) != EOF)
				{
					if (c=='\n')
					{
						printf("\n输出的结果如上一行所示\n");
						break;
					}
					else
					{
						putchar(c);
					}
				}
			}
		}	
	getch();
}

3.10  编一个程序,找出整数P内的所有素数。寻找的方法是对3到P内的每个整数q做如下测试,当i从2逐增到i^2≤q时,所有的i都不能整除q,则q为素数,否则q为合数。

#include<stdio.h>
#include<math.h>
void main()
{
	printf("编一个程序,找出整数P内的所有素数。寻找的方法是对3到P内的每个整数q做如下测试,\n当i从2逐增到i^2≤q时,所有的i都不能整除q,则q为素数,否则q为合数。\n\n");
	int p = 0, i = 0, j = 0, k = 0, n = 2;
	printf("请输入一个整数:");
	scanf("%d", &p);
	if (p <= 1)
	{
		printf("该整数以内的所有数均不是素数.");
	}
	else if (p == 2)
	{
		printf("该数以内的所有素数为:2");
	}
	else if (p == 3)
	{
		printf("该数以内的所有素数为:2,3");
	}
	else
	{
		printf("该数以内的所有素数为:\n%6d%6d", 2, 3);
		for (i = 4; i <= p; i++)
		{
			for (j = 2; j <= sqrt(i); j++)
			{
				if (i%j == 0)
				{
					k = 1;
				}
			}
			if (k == 0)
			{
				printf("%6d", i);
				n = n + 1;
				if (n % 5 == 0)
				{
					printf("\n");
				}
			}
			k = 0;
		}
	}
	getch();
}

3.11  司机计算油耗通常要计算行驶的公里数和汽油的消耗量。编写程序,输入汽车行驶的公里数和消耗汽油的升数,计算并显示每升汽油可使汽车行驶的公里数和每百公里消耗的汽油量。

#include<stdio.h>
void main()
{
	printf("司机计算油耗通常要计算行驶的公里数和汽油的消耗量。\n编写程序,输入汽车行驶的公里数和消耗汽油的升数,计算并显示每升汽油可使汽车行驶的公里数和每百公里消耗的汽油量.\n\n");
	double S = 0, L = 0;
	printf("请输入汽车行驶的公里数:");
	scanf("%f", &S);
loop: printf("请输入汽车消耗的汽油升数:");
	scanf("%f", &L);
	printf("该车主驾驶该汽车每升油行驶: %f 公里\n", S / L);
	printf("该车主驾驶该汽车每百公里消耗的油量为: %f 升\n", 100 * L / S);
	int k = 0;
	printf("请输入汽车行驶的公里数:");
	scanf("%f", &S);
	if (S != -1)
	{
		goto loop;
	}
	else
	{
		printf("此程序运行到此结束");
	}
	getch();
}

    业精于勤荒于嬉,行成于思毁于随。撸代码的你,好好加油吧!