大学教材《C语言程序设计》(浙大版)课后习题解析 | 第一、二章

概述

      本文主要提供《C语言程序设计》(浙大版) 第一、二章课后习题解析,以方便同学们完成题目后作为参考对照。后续将写出三、四章节课后习题解析,如想了解更多,请持续关注该专栏。

专栏直达链接:《C语言程序设计》(浙大版)_孟俊宇-MJY的博客-CSDN博客icon-default.png?t=N7T8http://t.csdnimg.cn/ZtcgY

一.第一章

[1-1]

对C语言来说,下列标示符中哪些是合法的,哪些是不合法的?

      total,_debug, Large&Tall, Counter1, begin_

解析:

合法的: total、_debug、 Counter1、 begin_ 
不合法的: Large&Tall

[1-2]

改写 1.4 节中的流程图 1.2, 求 1-100 中能被 6 整除的所有整数的和。

解析:

[1-3]

改写 1.4 节中的程序,求 1-100 中能被 6 整除的所有整数的和,并在编程环境中验证该程序的运行结果。

解析: 

#include <stdio.h>
int main(void)
{
	int i,
		sum = 0;
	for (i = 1; i <= 100; i++)
		if (i % 6 == 0)
			sum = sum + i;
	printf("sum=%d\n", sum);
	return 0;
}

输出结果:

sum = 816

[1-4]

对于给定的整数 n (n>1),请设计一个流程图判别 n 是否为一个素数(只能被1和自己整除的整数),并分析该流程图中哪些是顺序结构、哪些是分支结构和循环结构。

解析:

二.第二章 

1.选择题

[2-1]

改正下列程序中( )处错误后,程序的运行结果是在屏幕上显示短句“ Welcome to You!"。

#include <stdio.h>
int main(void)
{
	printf(Welcome to You! \n")
	return 0;
}

   A.1            B.2            C.3            D.4                                     

解析:B

printf() 函数是系统提供的库函数,在系统文件stdio.h中声明。

printf() 函数的格式为:

printf(格式控制字符串,输出参数1,...,输出参数n);

所以,printf里的字符串要加双引号。

printf语句末尾要以分号结束。

[2-2]

C语言表达式( )的值不等于1。

A. 123 / 100

B. 901%10

C.76%3

D.625%5

解析:D 

选项A:123/100 的结果是 1 。123 除以 100,商 1 余 23 ,这里取商。

选项B:901%10 的结果是 1 。901除以10,商 90 余 1 ,这里取余数。

选项C:76%3 的结果是 1 。76 除以 3 ,商 25 余 1,这里取余数。

选项D:625%5 的结果是 0 。625 除以 5 ,商 125 余 0 ,这里取余数。

[2-3]

假设 i 和 j 是整型变量,以下语句( )的功能是在屏幕上显示形如 `i*j=i*` j的一句乘法口诀。例如,当 i=2 ,j=3 时,显示 2\*3=6。

A. printf("d * %d=%d\n", i, j, i*j);

B. printf("%d * %d=%d\n",i, j, i*j);

C. printf( "%d * %d=%d\n",i, j);

D. printf("%d=%d * %d\n", i, j, i*j);

解析:B

选项A:printf() 函数中,表示整数,对应 %d 。

选项B:正确

选项C:printf() 函数中,3 个 %d ,需要对应 3 个int类型数值。

选项D:printf() 函数中,3 个 %d,要和后面的参数一一对应。

[2-4]

若 x 是 double 型变量,n 是 int 型变量,执行以下语句( ),并输入3 1.25 后,x=1.25,n=3。

A. scanf( "%d%lf",&n, &x) ;

B. scanf( "%lf%d",&x,&n);

C. scanf( "%lf%d", &n, &x);

D. scanf( "%d, %lf", &n, &x);

解析:A

题目里说输入 3 和 1.25 。所以要先输入 n 的值,再输入 x 的值。x 是 double 类型,所以对应 %lf ,n 是 int 类型,所以对应 %d 。所以最后选 A。

[2-5]

下列运算符中,优先级最低的是( )。

A. *

B. =

C. ==

D. %

解析:B

选项A * 是算术运算符,选项B=是赋值运算符,选项C==是关系运算符,选项D%是算术运算符。

这里的优先级:算术运算符 > 关系运算符 > 赋值运算符

所以选项B = 的优先级最低。

[2-6]

将以下 if-else 语句补充完整,正确的选项是( )。

if(x>=y){
	printf( "max=%d\n", x);
______________
	printf( "max=%d\n",y);
}

A. else;

B. else {

C.}else{

D. else

解析:C

{}要成对儿使用。

[2-7]

为了检查第 6 题的 if-else 语句的两个分支是否正确,至少需要设计 3 组测试用例,其相应的输入数据和预期输出结果是( )。

A.输入 3 和 4 ,输出 4 ; 输入 5 和 100 , 输出 100 ; 输入 4 和 3 ,输出 4 。

B.输入 3 和 4 ,输出 4 ; 输入 100 和 5 ,输出 100; 输入 4 和 3 ,输出 4 。

C.输入 3 和 4 ,输出 4 ; 输入 5 和 5 ,输出 5 ; 输入 -2 和 -1 ,输出 -1 。

D.输入 3 和 4 ,输出 4 ; 输入 5 和 5 ,输出 5 ; 输入 4 和 3 ,输出 4 。

解析:D

题目中是要比较 2 个数的大小,分为 3 种情况, a > b,a = b,a < b。所以选项 D 正确。

[2-8]

对 C 语言程序,以下说法正确的是( )。

A.main 函数是主函数,一定要写在最前面。

B.所有的自定义函数,都必须先声明。

C.程序总是从 main 函数开始执行的。

D.程序中只能调用库函数,不能自己定义函数。

解析:C

程序总是从 main() 函数开始。

2.填空题

[2-1]

假设 k 是整型变量,计算表达式 1/k , 结果的数据类型是( ),计算表达式 1.0/k,结果的数据类型是( )。

解析:整型,实型

整型除整型的结果也是整型。1.0是实型(浮点型),除整型,要先将除法运算符两侧的数据类型统一,所以系统会自动进行类型转换。将k由整型转为浮点型,再进行计算。

[2-2]

输入 3 和 2 ,下列程序段的输出结果是( )。

int a, b;
scanf("%d%d",&a, &b);
a=a+b;
b=a-b;
a=a-b;
printf("a=%d#b=%d\n",a, b);

解析: a=2#b=3。

整个程序其实是在进行 a 和 b 的数值交换。通过输入赋值,这里 a 初始值为 3 , b 初始值为 2 。执行a=a+b 计算之后,a 的值为 5 ,b 的值依然为 2 。然后执行 b=a-b 计算之后,a 的值依然为 5 ,但是 b 的值被更改为 3 ,然后再执行 a=a-b 计算之后,a 的值被改为 2 ,b 的值依然为 3 。至此,交换了 a 和 b 的数值。

[2-3]

交换变量的值。输入 a 和 b ,然后交换它们的值,并输出交换后 a 和 b 的值。请填空。

int a, b, temp;
printf( "Enter a, b:");
scanf("%d%d", &a, &b);
______________
a=b;
______________
printf( "a=%d#b=%d\n", a, b);

解析: 

temp=a;
b=temp;

上面的代码已经定义了第三个变量 temp,用于交换 a 和 b 的值。我们先将 a 的值赋值给 temp,然后 a=b 表示将b 的值赋值给 a ,最后再将 temp 中存储的a的值,赋值给 b 。就完成了交换 a 和 b 的值。 

[2-4]

假设 n 是整型变量,判断 n 是偶数的表达式是( )。

解析:n%2==0

所谓的偶数,就是能被 2 整除的数,那么我们让 n 除 2 然后取它的余数,判断是否为 0 即可。

[2-5]

与数学式<省略>对应的 C 语言表达式是( )。

解析:

sqrt(s*(s-a)*(s-b)*(s-c))

在 c 语言中有函数库 math.h,里面有函数 sqrt() 用于表示开平方。 

[2-6]

调用数学库函数时,编译预处理命令为( )。调用输入输出库函数时,编译预处理命令为( )。

解析: 

#include<math.h> 
#include<stdio.h>

编译预处理命令使用#include,后面跟着函数库。数学函数库需要math.h,输入输出函数是在系统文件stdio.h中声明。注意:编译预处理命令的末尾不加分号。

[2-7]

本章介绍了 3 种运算符,分别是算术、赋值和关系运算符,按照优先级从高到低的顺序排列为( )运算符、( )运算符、( )运算符。

解析:算术,关系,赋值。

算术运算符的优先级高于关系运算符,关系运算符的优先级高于赋值运算符。

[2-8]

下列程序段的输出结果是( )。

int k , flag;
if(k=0){
	flag=0;
}else{
	flag=1;
}
printf( "k=%d#flag=%d\n",k,flag);

解析: k=0#flag=1

这里首先声明了两个 int 类型的变量 k 和 flag ,然后执行 if 语句,判断条件为 k=0 ,这里是个赋值语句,这里 k 被赋值为 0 ,但是作为 if 语句的条件是不成立的,会执行 else 语句,flag 被赋值为 1 。所以最终结果就是 k 为 0 ,flag 为 1。

[2-9]

C 语言 3 种基本的控制结构是( )结构、( )结构和( )结构。

解析:顺序,分支,循环。

[2-10]

下列程序段的输出结果是( )。

int i;
	double s = 0;
	for (i = 1; i < 4; i++)
	{
		s = s + 1.0 / i;
		printf("i=%d#s=%.3f\n", i, s);
	}
	printf("i=%d#s=%.3f\n",i, s);

解析: 

i=1#s=1.000
i=2#s=1.500
i=3#s=1.833
i=4#s=1.833

for 循环里,

i 的初始值为 1 ,s 的初始值为 0+1.0/1,结果为 1.0 ,第一次打印的时候保留小数点后 3 位,结果为 i=1#s=1.000。

然后累加 i 的值为 2 ,s的 值为1.0+1.0/2,等于1.0+0.5等于1.5,所以第二次打印的时候保留小数点后3位,结果为i=2#s=1.500。

然后再累加i的值为3,s的值为1.5+1.0/3,等于1.5+0.333等于1.833,所以第三次打印的死后保留小数点后3位,结果为i=3#s=1.833。

然后再累加i的值为4,不满足for循环的条件,循环结束了。

继续执行,打印最后一次:i=4#s=1.833。

3.程序设计题

[2-1]

求整数均值:输入 4 个整数,计算并输出这些整数的和与平均值,其中平均值精确到小数点后1位。试编写相应程序。

解析:

#include <stdio.h>
int main(void)
{
	//求整数均值:输入 4 个整数,计算并输出这些整数的和与平均值,其中平均值精确到小数点后1位。试编写相应程序。
	int a, b, c, d, sum = 0;
	double average;
	printf("input a,b,c,d:");
	scanf("%d%d%d%d", &a, &b, &c, &d);
	sum = a + b + c + d;
	average = sum / 4.0;
	printf("average=%.1lf\n", average);
	return 0;
}

输出结果:

input a,b,c,d:8 4 19 33
average=16.0

[2-2]

阶梯电价:为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量 50kW . h ( 含 50kW. h )以内的,电价为 0.53 元 /kW . h;超过 50kW . h 的,超出部分的用电量电价每千瓦时上调 0.05 元。输入用户的月用电量(千瓦时),计算并输出该用户应支付的电费(元),若用电量小于 0 ,则输出" Invalid Value!"。试编写相应程序。

解析:

#include <stdio.h>
int main(void)
{
	/*
	阶梯电价:为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:
	月用电量 50kW . h ( 含 50kW,h )以内的,电价为 0.53 元 /kW . h;
	超过 50kW . h 的,超出部分的用电量电价每千瓦时上调 0.05 元。
	输入用户的月用电量(千瓦时),计算并输出该用户应支付的电费(元),
	若用电量小于 0 ,则输出" Invalid Value!"。试编写相应程序。
	*/
	double x, y; // x为用户月用电量,单位为千瓦每时。y为电费,单位 元。
	printf("input x:");
	scanf("%lf", &x);
	if (x < 0)
	{
		printf("Invaild Value!\n");
	}
	else if (x <= 50)
	{
		y = 0.53 * x;
		printf("电费 = %lf 元\n", y);
	}
	else if (x > 50)
	{
		y = 0.53 * 50 + (x - 50) * (0.53 + 0.05);
		printf("电费 = %lf 元\n", y);
	}
	return 0;
}

输出结果:

input x:44.6
电费 = 23.638000

[2-3]

序列求和:输入两个正整数 m 和 n ( 0<m≤n),求<省略> ,结果保留 6 位小数。试编写相应程序。

解析:

#include <stdio.h>
int main(void)
{
	/*
	序列求和:输入两个正整数 m 和 n ( 0<m≤n),求 $ \sum_{i=m}^n(i^2+\frac{1}{i}) $  ,结果保留 6 位小数。试编写相应程序。
	*/
	int m, n, i;
	double sum = 0;
	printf("input m,n(0<m<=n):");
	scanf("%d%d", &m, &n);
	for (i = m; i <= n; i++)
	{
		sum += i * i + 1.0 / i;
	}
	printf("∑=%lf\n", sum);
	return 0;
}

输出结果:

input m,n(0<m<=n):2 9
Σ=285.828968

[2-4]

求交错序列前 n 项和:输入一个正整数 n ,计算交错序列<省略>的前 n 项之和。试编写相应程序。

解析:

#include <stdio.h>
int main(void)
{
	/*
	求交错序列前n项和:输入一个正整数n,计算交错序列的前n项之和。试编写相应程序。
	*/
	int i, n, flag = 1;
	double sum = 0;
	printf("input n:");
	scanf("%d", &n);
	for (i = 1; i <= n; i++)
	{
		sum += (double)flag * i / (2 * i - 1);
		flag = -flag;
	}
	printf("sum = %lf\n", sum);
	return 0;
}

输出结果:

input n:18
sum = 0.385760

[2-5]

平方根求和:输入一个正整数 n ,计算<省略>的值(保留 2 位小数)。可包含头文件math.h ,并调用 sqrt( ) 函数求平方根。试编写相应程序。

解析:

#include <stdio.h>
#include <math.h>
int main(void)
{
	/*
	平方根求和:输入一个正整数 n ,计算 $ 1+\sqrt{2}+\sqrt{3}+...+\sqrt{n} $ 的值(保留 2 位小数)。可包含头文件math.h ,并调用 sqrt( ) 函数求平方根。
	*/
	int n, i;
	double sum = 0;
	printf("input n:");
	scanf("%d", &n);
	for (i = 1; i <= n; i++)
	{
		sum += sqrt(i);
	}
	printf("sum = %lf\n", sum);
	return 0;
}

输出结果:

input n:8
sum = 16.306001

[2-6]

求给定序列前 n 项和 ( 1!+2!+...):输入一个正整数 n,求 e=1!+2!+3!+...+n! 的值。要求定义和调用函数fact(n) 计算 n!,函数类型是double。试编写相应程序。

解析:

#include <stdio.h>
double fact(int n);
int main(void)
{
	/*
	求给定序列前 n 项和 ( 1!+2!+...):输入一个正整数 n,
	求 e=1!+2!+3!+...+n! 的值。要求定义和调用函数fact(n) 计算 n!,函数类型是double。
	*/
	int n, e = 0, i;
	printf("input n:");
	scanf("%d", &n);
	for (i = 1; i <= n; i++)
	{
		e += fact(i);
	}
	printf("e = %d\n", e);
	return 0;
}
double fact(int n)
{
	int i;
	double product = 1;
	for (i = 1; i <= n; i++)
	{
		product *= i;
	}
	return product;
}

输出结果:

input n:5
e = 153

总结

      以上为本篇文章的所有内容,后续将各个章节课后习题解析,如想了解更多,请持续关注该专栏。如有疑问或提供意见,请指出,谢谢!!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Hive SQL必刷练习题:复购率问题(*****)

是说这个数据表中&#xff0c;找到最后一天 &#xff0c;也就是今天的日期&#xff0c;max(date) over()S today 【借助开窗函数】 截至最后一天位置&#xff0c;也就是“今天“&#xff0c;表中的最新的一天 去看90天内“某商品复购率 近90天内购买它至少两次的人数 购买它…

c++常考基础知识(2)

二.c关键字 关键字汇总 c中共有63个关键字&#xff0c;其中包括int&#xff0c;char&#xff0c;double等类型关键字&#xff0c;if&#xff0c;else&#xff0c;while&#xff0c;do&#xff0c;等语法关键字&#xff0c;还有sizeof等函数关键字。 三.数据结构 1.数组&#x…

常见的OOM 问题的 6 种场景

今天跟大家一起聊聊线上服务出现 OOM 问题的 6 种场景,希望对你会有所帮助。 一、堆内存 OOM 堆内存 OOM 是最常见的 OOM 了。 出现堆内存 OOM 问题的异常信息如下: java.lang.OutOfMemoryError: Java heap space此 OOM 是由于 JVM 中 heap 的最大值,已经不能满足需求了…

Git的原理和使用(四)

目录 远程操作 理解分布式版本控制系统 远程仓库 新建远程仓库 克隆远程仓库 向远程仓库推送 拉取远程仓库 配置Git 忽略特殊文件 为命令配置别名 标签管理 理解标签 创建标签 操作标签 远程操作 理解分布式版本控制系统 1、每个人的电脑上都是一个完整的版本库…

批量重命名文件名,批量管理文件,复制后轻松删除原文件

在现代工作中&#xff0c;我们经常需要处理大量的文件&#xff0c;无论是工作文档、图片还是视频资料。对于很多人来说&#xff0c;文件管理是一项繁琐且耗时的任务。不过&#xff0c;现在有一种高效的文件管理方法&#xff0c;可以帮助你轻松复制文件后删除原文件夹&#xff0…

2024.03.24 exam

2024.03.24 exam 据说是事业单位考试例题&#xff0c;娱乐一下脑子

zabbix安装及使用(错误及解决方案)

安装zabbix 常见错误&#xff1a; Zabbix下载错误 6.0与5.0版本冲突 解决方法 yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-get --skip-broken zabbix6.0-web 自己有数据库&#xff0c;使用以下命令 pid找不到 /var/log/zabbix/zabbix_server.log 错误&a…

Docker Command

小试牛刀 # 查看docker版本 docker -v docker --version # 查看帮助 docker --help # 永远的Hello World docker run hello-world镜像操作 查看本地已有的镜像 docker images -a :列出本地所有的镜像&#xff08;含中间映像层&#xff09; -q :只显示镜像ID --digests :显示…

尝试Docker Dev Environments

无法从本地目录创建容器环境 创建的容器环境无法在VS Code打开 从官方仓库打开 结果vscode报错。fine&#xff0c;告辞。老老实实用本地环境开发。

为什么LLM都在卷上下文长度?不是其他卷不起,而是上下文更有性价比!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

深度学习pytorch——2D函数优化实例(持续更新)

课程&#xff1a;课时46 优化问题实战_哔哩哔哩_bilibili 这就是我们今天要求的2D函数&#xff1a; 下图是使用python绘制出来的图像&#xff1a; 但是可以看出有4个最小值&#xff0c;但是还是不够直观&#xff0c;还是看课程里面给的比较好&#xff0c;蓝色是最低点位置&am…

哲学♂家带你用动态内存函数实现二维数组

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、思路分析 二、实现 总结 前言 最近在做题的时候发现一个比较考验技术的问题&#xff0c;用内存函数模拟实现二维数组&#xff0c;接下来给大家演示一下我的做…

20240318-2-推荐算法Graph_Embedding

Graph Embedding 在许多推荐场景下&#xff0c;可以用网络结构数据来刻画对象&#xff08;用户、商品等&#xff09;之间的关系。例如&#xff1a;可以将用户和商品作为网络中的结点&#xff0c;用户和商品之间的边代表购买关系。 Graph Embedding 是一种将网络中对象之间的关…

python项目格式代码风格

Visual Studio Code 选择使用 black 作为代码格式化工具&#xff0c;保证提交代码风格的统一 1. Install black pip install black2. Install black and isort extension for vscode: 3. 设定black及isort的格式化配置 3.1. ctrl , 打开配置面板 3.2. 在弹出的json配置中添…

域名防红源码-再次启用已经红掉拦截的域名-提示跳转浏览器打开

比如说你的域名已经红掉了被拦截了&#xff0c;还想继续在使用&#xff0c;那么你用这个系统后呢&#xff0c;他就会提示跳转浏览器打开。以此达到再次启用的效果。 假如你的域名是A&#xff0c;已经红掉的&#xff1b;使用此方法新加一个域名B&#xff1b;之后你每次发域名B或…

【理解机器学习算法】之Clustering算法(K-Means)

实现 K-means 聚类从零开始涉及几个关键步骤&#xff1a;初始化质心、将点分配给最近的质心、根据分配更新质心&#xff0c;以及重复这个过程直到收敛。这里是一个基本的 Python 实现&#xff1a; K-means 算法步骤&#xff1a; 初始化质心&#xff1a;从数据点中随机选择 k …

docker推拉时的数据交换详解

前言 docker用了这么久了, 有没有想过, 在执行docker push 和 docker pull命令的时候, 数据是如何传递的呢? 换句话说, 如果要实现一个镜像仓库, 针对推拉的服务, 如何实现接口呢? 根据OCI 分发规范文档 的描述, 已经对整个推拉过程中要调用的接口有描述了. 但是, 纸上学来…

何为布控球?布控球的分类对比

主要的分类有&#xff1a; 根据内部的主控板卡的系统分类&#xff0c;典型的是基于海思芯片的嵌入式LINUX系统的&#xff0c;一般出国标GB28181&#xff0c;另外一种是剑走偏锋的安卓系统的&#xff0c;需要把球机的输出YUV转换为UVC接入安卓主板&#xff0c;作为外接USB摄像头…

Java进阶—GC回收(垃圾回收)

1. 什么是垃圾回收 垃圾回收(Garbage Collection&#xff0c;GC)是Java虚拟机(JVM)的一项重要功能&#xff0c;用于自动管理程序中不再使用的内存。在Java中&#xff0c;程序员不需要手动释放内存&#xff0c;因为GC会自动检测并回收不再使用的对象&#xff0c;从而减少内存泄…

param参数

param参数介绍及使用 在 Web 开发中&#xff0c;param 是指路由中的参数&#xff0c;用于捕获 URL 中的动态部分&#xff0c;并将其作为参数传递给路由处理函数。当定义包含参数的路由时&#xff0c;可以使用 param 方法来捕获 URL 中的动态部分&#xff0c;并将其传递给路由处…