C Primer Plus第六章编程练习答案

news2024/12/28 2:31:46

学完C语言之后,我就去阅读《C Primer Plus》这本经典的C语言书籍,对每一章的编程练习题都做了相关的解答,仅仅代表着我个人的解答思路,如有错误,请各位大佬帮忙点出!

1.编写一个程序,创建一个包含26个元素的数组,并在其中储存26个小 写字母。然后打印数组的所有内容。

#include <stdio.h>
int main(void)
{
	char ouput[26];

	for (int i = 0,input = 'a'; input <= 'z';input++,i++)
	{
		ouput[i] = input;
	}
	for (int i = 0; i <26; i++)
	{
		printf("%c ",ouput[i]);
	}
	printf("\n");

	return 0;
}

2.使用嵌套循环,按下面的格式打印字符:

$

$$

$$$

$$$$

$$$$$

#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;
}

 3.使用嵌套循环,按下面的格式打印字母:

F

FE

FED

FEDC

FEDCB

FEDCBA

注意:如果你的系统不使用ASCII或其他以数字顺序编码的代码,可以 把字符数组初始化为字母表中的字母:

char lets[27] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

然后用数组下标选择单独的字母,例如lets[0]是‘A’,等等。

#include <stdio.h>
int main(void)
{
	int i, j;
	char c;
	for (i = 0; i < 6; i++)
	{
		for (c = 'F',j = 0; j <= i; c--,j++)
		{
			printf("%c", c);
		}
		printf("\n");
	}

	return 0;
}

4.使用嵌套循环,按下面的格式打印字母:

A

BC

DEF

GHIJ

KLMNO

PQRSTU

如果你的系统不使用以数字顺序编码的代码,请参照练习3的方案解 决。

#include <stdio.h>
int main(void)
{
	char c = 'A';
	for (int i = 0; i < 6; i++)
	{
		for (int j = 0; j <= i; j++,c++)
		{
			printf("%c",c);
		}
		printf("\n");
	}

	return 0;
}

5.编写一个程序,提示用户输入大写字母。使用嵌套循环以下面金字塔 型的格式打印字母: 

         A

       ABA  

     ABCBA

   ABCDCBA

ABCDEDCBA

打印这样的图形,要根据用户输入的字母来决定。例如,上面的图形是 在用户输入E后的打印结果。 提示:用外层循环处理行,每行使用3个内层循环,分别处理空格、以升序打印字母、以降序打印字母。如果系统不使用ASCII或其他以数字顺序 编码的代码,请参照练习3的解决方案。

#include <stdio.h>
int main(void)
{
	int i, j, num;
	char input,c = 'A';
	printf("请输入一个大写字母:");
	scanf("%c", &input);
	num = input - 'A' + 1;

	for (int i = 1; i <= num; i++)
	{
		for (j = 0; j < num  - i; j++)
		{
			printf(" ");
		}
		for (c = 'A';j < num;c++,j++)
		{
			printf("%c",c);
		}
		for (j = 1,c -= 2; j < i; j++,c--)
		{
			printf("%c",c);
		}
		printf("\n");
	}

	return 0;
}

6.编写一个程序打印一个表格,每一行打印一个整数、该数的平方、该 数的立方。要求用户输入表格的上下限。使用一个for循环。

#include <stdio.h>
int main(void)
{
	int input1 = 0;
	int input2 = 0;

	printf("请输入上限:");
	scanf("%d", &input1);
	printf("请输入下限:");
	scanf("%d", &input2);

	for (int i = input2; i <= input1; i++) 
	{
		printf("%d\t%d\t%d\n", i, i * i, i * i * i);
	}

	return 0;
}

7.编写一个程序把一个单词读入一个字符数组中,然后倒序打印这个单 词。提示:strlen()函数(第4章介绍过)可用于计算数组最后一个字符的下 标。

#include <stdio.h>
#include <string.h>
int main(void)
{
	char word[20] = "0";

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

	for(int i = strlen(word)-1;i >=0;i--)
	{
		printf("%c", word[i]);
	}
	printf("\n");

	return 0;
}

8.编写一个程序,要求用户输入两个浮点数,并打印两数之差除以两数 乘积的结果。在用户输入非数字之前,程序应循环处理用户输入的每对值。

#include <stdio.h>
int main(void)
{
	float f1 = 0.0, f2 = 0.0;

	printf("请输入两个浮点数:");

	while (scanf("%f%f", &f1, &f2) == 2)
	{
		printf("(%.2f-%.2f)/%.2f*%.2f = %.2f\n", f1,f2,f1,f2,(f1-f2)/f1*f2);
		printf("请输入两个浮点数:");
	}

	return 0;
}

9.修改练习8,使用一个函数返回计算的结果。

#include <stdio.h>
float cal(float f1, float f2)
{
	return (f1 - f2) / f1 * f2;
}
int main(void)
{
	float f1 = 0.0, f2 = 0.0;

	printf("请输入两个浮点数:");

	while (scanf("%f%f", &f1, &f2) == 2)
	{
		printf("(%.2f-%.2f)/%.2f*%.2f = %.2f\n", f1, f2, f1, f2, cal(f1,f2));
		printf("请输入两个浮点数:");
	}

	return 0;
}

10.编写一个程序,要求用户输入一个上限整数和一个下限整数,计算 从上限到下限范围内所有整数的平方和,并显示计算结果。然后程序继续提 示用户输入上限和下限整数,并显示结果,直到用户输入的上限整数小于下 限整数为止。程序的运行示例如下:

Enter lower and upper integer limits: 5 9

The sums of the squares from 25 to 81 is 255

Enter next set of limits: 3 25

The sums of the squares from 9 to 625 is 5520

Enter next set of limits: 5 5

Done

#include <stdio.h>
int main(void)
{
	int input1 = 0;
	int input2 = 0;
	int sum = 0;

	printf("Enter lower and upper integer limits:");
	scanf("%d%d", &input1, &input2);
	while (input1 < input2)
	{
		sum = 0;
		for (int i = input1; i <= input2; i++)
		{
			sum = sum + i * i;
		}
		printf("The sums of the squares from %d to %d is %d\n", input1 * input1, input2 * input2, sum);
		printf("Enter next set of limits:");
		scanf("%d%d", &input1, &input2);
	}
	printf("Done\n");

	return 0;
}

11.编写一个程序,在数组中读入8个整数,然后按倒序打印这8个整 数。

#include <stdio.h>
int main(void)
{
	int arr[8] = { 0 };

	for (int i = 0; i < 8; i++)
	{
		scanf("%d", &arr[i]);
	}
	for (int i = 7; i >= 0; i--)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");

	return 0;
}

12.考虑下面两个无限序列: 1.0 + 1.0/2.0 + 1.0/3.0 + 1.0/4.0 + ... 1.0 - 1.0/2.0 + 1.0/3.0 - 1.0/4.0 + ... 编写一个程序计算这两个无限序列的总和,直到到达某次数。提示:奇 数个-1 相乘得-1,偶数个-1相乘得1。让用户交互地输入指定的次数,当用 户输入0或负值时结束输入。查看运行100项、1000项、10000项后的总和, 是否发现每个序列都收敛于某值?

#include <stdio.h>
int main(void)
{
	int length = 0;
	double sum = 0.0;

	printf("请输入一个整型数据:");
	scanf("%d", &length);

	while (length > 0)
	{
		sum = 0.0;
		for (int i = 1; i < length; i++)
		{
			sum = sum + 1.0 / i;
		}
		printf("1.0 + ... + 1.0 / %d = %lf\n", length, sum);

		sum = 0.0;
		for (int i = 1; i <= length; i++)
		{
			if (i % 2 == 0)
				sum = sum - 1.0 / i;
			else
				sum = sum + 1.0 / i;
		}
		printf("1.0 - ... + 1.0 / %d = %lf\n", length, sum);

		sum = 0.0;
		for (int i = 1; i <= length; i++)
		{
			if (i % 2 != 0)
				sum = sum + 2 * 1.0 / i;
		}
		printf("1.0 + 1.0 + 2.0/3.0... + 1.0 / %d = %lf\n", length, sum);

		printf("请输入一个整型数据:");
		scanf("%d", &length);
	}

	return 0;
}

13.编写一个程序,创建一个包含8个元素的int类型数组,分别把数组元 素设置为2的前8次幂。使用for循环设置数组元素的值,使用do while循环显 示数组元素的值。

#include <stdio.h>
int main(void)
{
	int arr[8] = { 2 };

	for (int i = 1; i < 8; i++)
	{
		arr[i] = arr[i - 1] * 2;
	}

	int i = 7;
	do
	{
		printf("%d ", arr[i]);
	}while(i--);

	return 0;
}

14.编写一个程序,创建两个包含8个元素的double类型数组,使用循环 提示用户为第一个数组输入8 个值。第二个数组元素的值设置为第一个数组 对应元素的累积之和。例如,第二个数组的第 4个元素的值是第一个数组前 4个元素之和,第二个数组的第5个元素的值是第一个数组前5个元素之和 (用嵌套循环可以完成,但是利用第二个数组的第5个元素是第二个数组的 第4个元素与第一个数组的第5个元素之和,只用一个循环就能完成任务,不 需要使用嵌套循环)。最后,使用循环显示两个数组的内容,第一个数组显 示成一行,第二个数组显示在第一个数组的下一行,而且每个元素都与第一 个数组各元素相对应。

#include <stdio.h>
int main(void)
{
	double d1[8] = { 0.0 };
	double d2[8] = { 0.0 };
	double sum = 0.0;

	printf("请输入第一个数组的8个值:");
	for (int i = 0; i < 8; i++)
	{
		scanf("%lf", &d1[i]);
	}

	for (int i = 0; i < 8; i++)
	{
		sum += d1[i];
		d2[i] = sum;
	}

	for (int i = 0; i < 8; i++)
	{
		printf("%10lf ", d1[i]);
	}
	printf("\n");
	for (int i = 0; i < 8; i++)
	{
		printf("%10lf ", d2[i]);
	}
	printf("\n");

	return 0;
}

 15.编写一个程序,读取一行输入,然后把输入的内容倒序打印出来。 可以把输入储存在char类型的数组中,假设每行字符不超过255。回忆一 下,根据%c转换说明,scanf()函数一次只能从输入中读取一个字符,而且 在用户按下Enter键时scanf()函数会生成一个换行字符(\n)。

#include <stdio.h>
int main(void)
{
	char ch = '0';
	char ouput[255] = "0";
	int i = 0;

	printf("请输入一行字符:");
	while ((ch = getchar()) != '\n')
	{
		ouput[i++] = ch;
	}

	for (int j = i -1; j >= 0; j--)
	{
		printf("%c", ouput[j]);
	}
	printf("\n");

	return 0;
}

16.Daphne以10%的单利息投资了100美元(也就是说,每年投资获利相 当于原始投资的10%)。Deirdre以 5%的复合利息投资了 100 美元(也就是 说,利息是当前余额的 5%,包含之前的利息)。编写一个程序,计算需要多少年Deirdre的投资额才会超过Daphne,并显示那时两人的投资额。

#include <stdio.h>
int main(void)
{
	float Daphne_money = 100.0;
	float Deirdre_money = 100.0;
	int count = 0;

	do
	{
		Daphne_money = Daphne_money  + 0.1 * 100.0;
		Deirdre_money = Deirdre_money * 0.05 + Deirdre_money;
		count++;
	} while ((Deirdre_money - Daphne_money) < 0);

	printf("Daphne_money : %f\tDeirdre_money : %f\n", Daphne_money, Deirdre_money);
	printf("所需的年数为:%d\n", count);

	return 0;
}

17.Chuckie Lucky赢得了100万美元(税后),他把奖金存入年利率8%的 账户。在每年的最后一天, Chuckie取出10万美元。编写一个程序,计算多 少年后Chuckie会取完账户的钱?

#include <stdio.h>
int main(void) 
{
	float money = 1000000;
	int year = 0;

	while (money >= 0)
	{
		money = 1.08 * money - 100000;
		year++;
    }
	printf("%d年后Chuckie取完账户的钱\n", year);

	return 0;
}

18.Rabnud博士加入了一个社交圈。起初他有5个朋友。他注意到他的朋 友数量以下面的方式增长。第1周少了1个朋友,剩下的朋友数量翻倍;第2 周少了2个朋友,剩下的朋友数量翻倍。一般而言,第N周少了N个朋友,剩 下的朋友数量翻倍。编写一个程序,计算并显示Rabnud博士每周的朋友数 量。该程序一直运行,直到超过邓巴数(Dunbar’s number)。邓巴数是粗略 估算一个人在社交圈中有稳定关系的成员的最大值,该值大约是150。

#include <stdio.h>
int main(void)
{
	int num = 5;
	int weeks = 0;

	while (num <= 150)
	{
		num = (num - 1) * 2;
		weeks++;
		printf("第%d周,Rabnud博士有%d的朋友\n", weeks, num);
	}

	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/571730.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中小企业如何差异化“生意表达”,成为最了不起的小企业?

​如今的市场已经不是几十年前随便卖一点新鲜的玩意儿就能火爆的场景了。科技发达了&#xff0c;人们的眼界也开阔了&#xff0c;各式各样,琳琅满目的商品占据了市场空间&#xff0c;生意越来越饱满。 竞争趋势激烈&#xff0c;商品同质化现象严重。一些商家企业通过压低价格的…

docker入门(1)----服务/镜像/容器相关命令

安装 官网安装app命令行安装&#xff08;但是没有图形界面app&#xff09;brew install docker 架构 镜像&#xff08;Image&#xff09;&#xff1a;Docker 镜像&#xff08;Image&#xff09;&#xff0c;就相当于是一个 root 文件系统。比如官方镜像ubuntu:16.04 就包含了…

深度学习笔记之循环神经网络(七)反向传播角度观察LSTM

深度学习笔记之循环神经网络——反向传播角度观察LSTM 引言回顾加补充&#xff1a;通过时间反向传播 LSTM \text{LSTM} LSTM的反向传播过程场景构建示例&#xff1a;求解梯度 L ( T ) ∂ W X ⇒ F \begin{aligned}\frac{\mathcal L^{(\mathcal T)}}{\partial \mathcal W_{\math…

2023年第十五届B题电工杯初步解题思路

第十五届“中国电机工程学会杯”全国大学生 电工数学建模竞赛题目 B题 人工智能对大学生学习影响的评价 人工智能简称AI&#xff0c;最初由麦卡锡、明斯基等科学家于1956年在美国达特茅斯学院开会研讨时提出。 2016年&#xff0c;人工智能AlphaGo 4:1战胜韩国围棋高手李世石…

javaWeb 兼职管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh兼职管理系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Mye…

服务器被勒索病毒攻击怎么办,如何进行勒索病毒解密与预防工作?

在当今社会中服务器已经成为企业关键数据存储和传输的重要载体&#xff0c;同样也成为黑客攻击和勒索病毒的首要目标。一旦服务器被勒索病毒攻击&#xff0c;企业的正常运转与经济利益和核心数据都将受到威胁。下面将为大家介绍一下服务器被勒索病毒攻击后应该采取怎样的措施及…

【1091. 二进制矩阵中的最短路径】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你一个 n x n 的二进制矩阵 grid 中&#xff0c;返回矩阵中最短 畅通路径 的长度。如果不存在这样的路径&#xff0c;返回 -1 。 二进制矩阵中的 畅通路径 是一条从 左上角 单元格&#xff08;即&…

【参考设计】16芯串联电池包储能系统

电池包的应用与技术问题 为了获得更大的能量密度&#xff0c;锂离子和磷酸铁锂电池在电池包中的使用越来越多&#xff0c;比如&#xff1a;电信机房的UPS单元&#xff0c;移动式电站&#xff0c;储能系统等。 锂离子和磷酸铁锂电池在提供更高的功率和能量密度的同时也需要更准…

Android深入源码分析事件分发机制流程

前言 对于Android中的触摸事件即指手指触摸到屏幕时产生的点击事件&#xff1b; 类型如下&#xff1a; MotionEvent.ACTION_DOWNMotionEvent.ACTION_UPMotionEvent.ACTION_MOVEMotionEvent.ACTION_CANCEL Android事件处理流程 主要涉及三个流程&#xff1a;事件采集、事件中…

电子水尺的应用

品概述 本产品是一种采用微处理器芯片为控制器&#xff0c;内置通讯电路的数字式水位传感器&#xff0c;具备高的可靠性及抗干扰性能。适用于江、河、湖、水库及蓄水池、水渠等处的水位测量使用。 本产品使用不锈钢材料做壳体防护材料&#xff0c;内部用高性能的密封材料进行处…

11省政企单位密集调研实在智能数字员工

当前&#xff0c;数字中国建设迎来前所未有的发展机遇。五月&#xff0c;“数字中国”建设持续如火如荼&#xff0c;实在智能又迎来了新的“考察团路线”&#xff1a;西部新宁甘云中轴线晋豫鄂湘东部鲁苏闽&#xff0c;来自11省&#xff0c;20余个“数字化改革政企考察团”&…

【OS】Python模拟简单的操作系统

【OS】Python模拟简单的操作系统 Background 学习操作系统的时候&#xff0c;关注的对象是&#xff1a; 应用程序系统调用操作系统的内部实现 通常的学习思路&#xff1a; 真实的操作系统编译内核环境qemu模拟 但是&#xff0c;换个角度想一下&#xff0c;把上述的思路抽…

智能蓝牙防丢器

蓝牙防丢器&#xff0c;是采用蓝牙技术专门为智能手机设计的防丢器。其工作原理主要是通过距离变化来判断物品是否还控制在你的安全范围。主要适用于手机、钱包、钥匙、行李等贵重物品的防丢&#xff0c;也可用于防止儿童或宠物的走失。防丢器的原理是在手机和蓝牙之间建立连接…

Nginx一网打尽:动静分离、压缩、缓存、黑白名单、跨域、高可用、性能优化...

干货&#xff01;文章有点长&#xff0c;建议先收藏 目录索引 引言一、性能怪兽-Nginx概念深入浅出二、Nginx环境搭建三、Nginx反向代理-负载均衡四、Nginx动静分离五、Nginx资源压缩六、Nginx缓冲区七、Nginx缓存机制八、Nginx实现IP黑白名单九、Nginx跨域配置十、Nginx防盗链…

黑客必会的10个渗透测试工具

10个渗透测试工具&#xff0c;渗透测试&#xff0c;在之前&#xff0c;黑客攻击是很难的&#xff0c;需要大量的手工操作。然而&#xff0c;今天一套完整的自动化测试工具将黑客变成了半机械人&#xff0c;和以往相比&#xff0c;他们可以进行更多的测试。下面是一些渗透测试工…

Android Jetpack Compose之列表的使用

目录 概述实例解析1.实现简单的列表2.实现可滑动的菜单列表3.实现一个可滑动并且能快速滑动到指定位置的列表 总结 概述 在Android的传统View中&#xff0c;当我们需要展示大量的数据时&#xff0c;一般都会使用ListView或者是更高级的RecyclerView。在Compose中我们可以通过C…

openGauss Developer Day 2023 | 邀您参加南大通用分论坛

聚数成峰 共赢未来 面向数据库开发者的年度技术盛会 openGauss Developer Day 2023 将于5月25-26日在北京召开 GBASE南大通用将携创新数据库产品及行业解决方案亮相本届大会。 5月26日 &#xff0c;更设有南大通用 “多模多态分布式数据库助力数字化转型” 专场论坛&am…

SSM 如何使用 XA 机制实现分布式事务?

SSM 如何使用 XA 机制实现分布式事务&#xff1f; 分布式事务是现代分布式系统中必不可少的一部分&#xff0c;而 XA 机制是一种常用的分布式事务处理方式。在 SSM 框架中&#xff0c;我们可以使用 XA 机制来管理分布式事务。本文将介绍如何在 SSM 框架中使用 XA 机制实现分布…

Find My产品|苹果上架支持Find My功能的旅行保温杯

苹果美国官网近日上架了 Ember 的控温 Travel Mug 2 旅行杯&#xff0c;售价为 199.95 美元。该旅行杯最大的亮点就是支持“Find My”&#xff0c;丢失后可在 iPhone&#xff0c;iPad 和 Mac 上定位找回。 Travel Mug 2 旅行杯和此前推出的 Travel Mug 2 旅行杯在功能方面完全相…

统计软件与数据分析Lesson15----梯度下降(Gradient Descent)过程可视化

梯度下降 Gradient Descent 1.预备知识1.1 什么是机器学习&#xff1f;1.2 几个专业术语 2. 前期准备2.1 加载包2.2 定义模型2.3 生成模拟数据2.4 分割训练集验证集2.5 原始数据可视化 3. 模型训练Step 0: 随机初始化待估参数Step 1: 计算模型预测值Step 2: 计算预测误差&#…