C prime plus 第六章 课后练习答案

不多废话,直接上代码。有问题可评论或者私信作者。

/* 6-1.c -- 创建一个包含26个元素的数组,并在里面储存26个小写字母并打印 */
#include<stdio.h>

int main(void)
{
	char words[26];

	for (int i = 0; i < 26; i++)
		words[i] = 'a' + i;
	for (int i = 0; i < 26; i++)
		printf("%c",words[i]);
	printf("\n");

	return 0;
}
/* 6-2.c -- 使用循环嵌套,按照下面的格式打印字符 */
#include<stdio.h>

int main(void)
{
	for (int i = 0; i < 5; i++)
	{
		for (int j = 0; j <= i; j++)
			printf("$");
		printf("\n");
	}

	return 0;
}
/* 6.3-c -- 使用嵌套循环,按照下面的格式打印字母 */
#include<stdio.h>

int main(void)
{
	for (int i = 0; i < 6; i++)
	{
		for (int j = 0; j <= i; j++)
			printf("%c",'F'- j);
		printf("\n");
	}

	return 0;
}
/* 6-4.c -- 使用嵌套循环,按下面的格式打印字母 */
#include<stdio.h>

int main(void)
{
	int p = 0;      // 累计变量
	for (int i = 0; i < 6; i++)
	{
		for (int j = 0; j <= i; j++)
		{
			printf("%c", 'A' + p);
			p++;
		}
		printf("\n");
	}

	return 0;
}
/* 6-5.c -- 提示用户输入大写字母,以循环嵌套打印金字塔的格式 */
#include<stdio.h>

int main(void)
{
	char ch;

	printf("请输入一个大写字母:");
	scanf("%c", &ch);
	for (char i = 'A'; i <= ch; i++)				// 外层循环控制行数
	{
		for (char j = 1; j <= ch - i; j++)			// 控制空格
			printf(" ");
		for (char k = 'A'; k <= i; k++)				// 顺序打印
			printf("%c",k);
		for (char m = i - 1; m >= 'A'; m--)			// 逆序打印
			printf("%c", m);
		printf("\n");
	}

	return 0;
}
/* 6-6.c -- 编写一个表格,每一行打印一个整数 该数的平方 
该数的立方 要求用户输入表格的上下限 */
#include<stdio.h>

int main(void)
{
	int start, end;

	printf("请输入要打印表格的上下限:");
	scanf("%d %d",&start,&end);
	printf("*******************************************************\n");
	printf("integer	 		 square			 cube\n");
	
	for (;start <= end; start++)
	{
		printf("   %d			   %d			  %d\n",start,start * start,start * start * start);
	}
	printf("*******************************************************\n");
	return 0;
}
/* 6-7.c -- 把单词读入字符数组中,然后倒序打印这个单词 */

#include<stdio.h>
#include<string.h>
#define N 26
int main(void)
{
	char words[N];

	printf("请输入一个单词:");
	scanf("%s",words);

	printf("该单词的倒序为:");
	for (int i = strlen(words) - 1; i >= 0; i--)
		printf("%c",words[i]);
	printf("\n");

	return 0;
}
/* 6-8.c -- 输入两个浮点数,并打印两数之差除以两数乘积的结果 */

#include<stdio.h>

int main(void)
{
	double op1, op2;		

	printf("请输入两个浮点数值:");
	while (scanf("%lf %lf", &op1, &op2) == 2)
	{
		printf("(op1 - op2) / (op1 * op2) = %lf\n",(op1 - op2) / (op1 * op2));
		printf("若想继续,请继续输入浮点数值,若要结束,请输入非数值字符:");
	}

	return 0;
}
/* 6-9.c -- 修改6-8.c的内容,使用一个函数返回计算的结构  */

#include<stdio.h>

double CountDouble(double, double);

int main(void)
{
	double op1, op2;

	printf("请输入两个浮点数:");
	while (scanf("%lf %lf", &op1, &op2) == 2)
	{
		printf("(op1 - op2) / (op1 * op2) = %lf\n", CountDouble(op1,op2));
		printf("若要继续,请继续输入浮点数值,若想结束,请输入非数值字符:");
	}
}

double CountDouble(double op1, double op2)
{
	return (op1 - op2) / (op1 * op2);
}
/* 6-10.c -- 要求用户输入一个上限整数和下限整数,计算从上限到下限范围内所有整数
的平方和,并显示计算结果。然后程序继续提醒用户输入上限和下限整数,并显示结果,直
到用户输入的上限整数等于下限整数为止 */

#include<stdio.h>

int main(void)
{
	int start, end, sum;
	sum = 0;

	printf("Enter lower and upper integer limits:");
	while (scanf("%d %d", &start, &end) == 2 && start != end)
	{
		for (int i = start; i <= end; i++)
			sum += i * i;
		printf("The sums of the squares from %d to %d is %d\n", start * start, end * end, sum);
		sum = 0;			// sum必须清零,否则会将上一次的运算结果做和
		printf("Enter next set of limits:");
	}
	printf("Done\n");

	return 0;
}
/* 6.11.c -- 从数组中读入8个整数,并倒序打印这个整数  */

#include<stdio.h>
#define N 10

int main(void)
{
	int integer[N];

	for (int i = 0; i < 8; i++)
		scanf("%d",&integer[i]);
	for (int i = 7; i >= 0; i--)
		printf("%d ",integer[i]);

	printf("\n");
	return 0;
}
/* 6-12.c*/
#include<stdio.h>

int main(void)
{
	double m = 1.0;
	// sum1 = 1.0 + 1.0 / 2.0 + 1.0 / 3.0..........
	// sum2 = 1.0 - 1.0 / 2.0 + 1.0 / 3.0..........
	double sum1,sum2;      
	double n;

	printf("请输入要计算序列的次数:");
	while (scanf("%lf", &n) == 1 && n > 0)
	{
		int k = 1;		// 累积变量  初始化为1,用于判断奇偶
		sum1 = 0.0;						/* 初始化 + 置0 在while里声明+初始化也可以 但会作为局部变量*/
		sum2 = 1.0;
		for (double i = m; i <= n; i++)
			sum1 += m / i;				// 正数序列  1.0 + 1.0 / 2.0 + 1.0 / 3.0.........
		for (double j = m + 1; j <= n; j++)
		{
			if (k % 2 == 1)
				sum2 -= (m / j);
			else
				sum2 += (m / j);
			k++;
		}
		printf("The sum1 = %lf  The sum1 = %lf\n",sum1,sum2);
		printf("若要继续,请继续输入次数值,若要结束,请输入非正数数值或者非字符数值:");
	}
	return 0;
}
/* 6-13.c -- 创建一个8个元素的int类型数组,分别设置为2的前八次幂 */
#include<stdio.h>
#include<math.h>
#define N 8
int main(void)
{
	int two[N];

	for (int i = 0; i < N; i++)
		two[i] = pow(2, i);
	for (int i = 0; i < N; i++)
		printf("%d ",two[i]);
	printf("\n");

	return 0;
}
/* 6-14.c -- 创建两个8个double类型的数组,提示用户输入第一个数组的值,
第二个数组为第一个元素的累计之和 */
#include<stdio.h>
#define N 8

int main(void)
{
	double Array1[N], Array2[N];
	double sum = 0.0;

	printf("请输入8个double类型的值:");
	for (int i = 0; i < N; i++)			// 键入第一组数组的值
	{
		scanf("%lf",&Array1[i]);
	}
	// 使用嵌套循环
	/* for (int i = 0; i < N; i++)
	{
		sum = 0.0;
		for (int j = 0; j <= i; j++)
		{
			sum += Array1[j];
		}
		Array2[i] = sum;
	} */
	// 不使用嵌套循环
	for (int i = 0; i < N; i++)
	{
		sum += Array1[i];
		Array2[i] = sum;
	}

	for (int i = 0; i < N; i++)
	{
		printf("%.3lf  ",Array1[i]);
	}
	printf("\n");
	for (int i = 0; i < N; i++)
	{
		printf("%.2lf  ",Array2[i]);
	}
	

	return 0;
}
/* 6-15.c -- 读取一行输入,然后将输入的内容倒序打印出来,
可以把输入存放在char类型的数组中 */
#include<stdio.h>

#define N 26

int main(void)
{
	char Data[N];
	int i = 0;

	while (Data[i] != '\n')			
	{
		i++;
		scanf("%c",&Data[i]);
	}
	for (;i >= 0; i--)
	{
		printf("%c",Data[i]);
	}

	printf("\n");
	return 0;
}
/* 6-16.c -- Daphne以10%的单利息投资了100美元。Deirdre以%5的复合利率
投资了100美元。计算Deirdre的投资会超过Daphne */
#include<stdio.h>

#define RATEDP 0.1			// Daphne的利率
#define RATEDR 0.05			// Deirdre的利率
#define DOLLOR 100			// 底金

int main(void)
{
	int per_profit_Dap = 0;
	int per_profit_Dei = 0;
	int sum1 = 0, sum2 = 0;			// sum1为Daphne投资额,sum2为Deirdre的投资额
	int years = 1;			// while外部已经计算过一次  因此years为1
	per_profit_Dap = DOLLOR * RATEDP;			// 第一期利润
	per_profit_Dei = DOLLOR * RATEDR;			// 第一期利润
	sum1 = DOLLOR + per_profit_Dap;				// 第一年总金额
	sum2 = DOLLOR + per_profit_Dei;				// 第二年总金额
	
	while(sum1 > sum2)
	{
		per_profit_Dei = sum2 * RATEDR;
		sum1 += per_profit_Dap;
		sum2 += per_profit_Dei;
		years++;
	}
	printf("需要%d年Deirdre才能超过Daphne\n",years);
	printf("到第%d年,Daphne的投资额为:%d,Deirdre的投资额为:%d\n",years,sum1,sum2);

	return 0;
}
/* 6-17.c -- Chuckie Lucky赢得了100W美元(作者也好生羡慕),
他将奖金存入年利率8%的账户中,每年年底取走10W元,计算多少
年后他会取完账户里的钱*/
#include<stdio.h>
#define BONUS 100
#define RATE 0.08

int main(void)
{
	int years = 0;
	float account;					// 账户余额
	account = BONUS;				// 最初账户的钱

	while (account >= 0)
	{
		account += (account * RATE) - 10;
		printf("%.2f ",account);
		years++;
		if (years % 7 == 0)
			printf("\n");
	}
	printf("需要%d年,Chuckie Lucky可以取走账户里的钱\n",years);
	printf("白嫖21年啊,作者泪目!\n");

	return 0;
}
/* 6-18.c -- Rabnud博士加入了一个社交圈,起初他有五个朋友 
他注意到他的朋友圈数量以以下方式增长,第一周少了一个朋友
,剩下的朋友数量翻倍;第二周少了2个朋友,剩下的朋友数量翻倍
,依次类推,编写一个程序,计算并显示Rabnud博士的朋友数量,直至
超过邓巴数(约为150)*/
#include<stdio.h>
#define DENBA 150		// 邓巴数150

int main(void)
{
	int friends = 5;		// 最初的朋友数
	int weeks = 0;
	while (friends <= 150)
	{
		weeks++;
		friends = (friends - weeks) * 2;
	}

	printf("直至第%d周,Rabnud博士的朋友数量达到饱和\n",weeks);
	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值