IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C程序设计(谭浩强第五版)第四章习题精解。C语言考研,C语言专升本,C语言期末考试,初学C语言,程序设计基础,编程题必备。C语言第四章:选择结构程序设计编程题解析。 -> 正文阅读

[C++知识库]C程序设计(谭浩强第五版)第四章习题精解。C语言考研,C语言专升本,C语言期末考试,初学C语言,程序设计基础,编程题必备。C语言第四章:选择结构程序设计编程题解析。

C程序设计(谭浩强第五版)第四章习题精解

第四章:选择结构程序设计

什么是算术运算?什么是关系运算?什么是逻辑运算?

2.C语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”?

3.写出下面各逻辑表达式的值。设a=3,b=4,c=5。

4. 有3个整数a, b, c,由键盘输入,输出其中最大的数。

5.从键盘输入一个小于1000的正数,要求输出它的平方根(如平方根不是整数,则输 出其整数部分)。要求在输入数据后先对其进行检查是否为小于1000 的正数。若不 是,则要求重新输入。

6.有一个函数,编写程序,输入x的值,输出y相应的值。

7.有人编写了以下两个程序,请分析它们是否能实现题目要求。

8.给出一百分制成绩,要求输出成绩等级'A'、'B'、'C'、'D'、'E'。 90分以上 为'A',80~89分为'B',70~79分为'C' ,60~69分为'D' ,60分以下为'E'。

给一个不多于5位的正整数,要求:①求出它是几位数;②分别输出每一位数字;③按逆序输出各位数字,例如原数为321,应输出123

12.企业发放的奖金根据利润提成。

11. 输入4个整数,要求按由小到大的顺序输出。

12.有4个圆塔,圆心分别为(2,2)、(-2,2)、(-2,-2)、(2,-2),圆半径为1,见图。这4个塔的高度为10m,塔以外无建筑物。今输入任一点的坐标,求该点的建筑高度(塔外的高度为零)。


第四章:选择结构程序设计

  1. 什么是算术运算?什么是关系运算?什么是逻辑运算?

A解题思路

  1. 算术运算即“四则运算”,是加减乘除,开方乘方等几种运算的统称

  2. 关系的基本运算有两类:一类是传统的集合运算(并、交、差、笛卡尔积),另一类是专门的关系运算(选择σ、投影π、连接∞、除运算÷等),在C语言中,关系运算通常被认为是比较运算,将两个数值进行比较,判断比较结果是否符合给定的条件。

  3. 逻辑运算:与,或,非(&&,||,!)三种基本逻辑语言,在C语言中,逻辑运算通常使用逻辑运算符将关系表达式或其他逻辑运算量连接起来组成逻辑表达式用来测试真假值。

2.C语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”?

A解题思路

在C语言中逻辑常亮有2个,0为假,1为真。

对于系统来说,判断一个逻辑量时,系统会以0为假,非0为真。

3.写出下面各逻辑表达式的值。设a=3,b=4,c=5。

(1)a + b > c && b == c

(2)a || b + c && b - c

(3)!(a > b) && !c || 1

(4)!(x = a) && (y = b) && 0

(5)!(a + b) + c - 1 && b + c / 2

A解题思路

首先我们先把数字代入各个表达式,然后再算出即可。

  1. a + b > c && b == c

代换后为:3+4>5&&4==5

因为&&需要两边为真时才为真,很明显4==5结果为假,所以本题结果为假

答案:0

2.a || b + c && b - c

代换后为:3||4+5&&4-5

本题运算顺序是先算算术运算再算&&再算||,4+5&&-1的结果为非0即为真,然后3||真结果为真

答案:1

3.!(a > b) && !c || 1

替换为:!(3>4)&&!5||1

先算!(3>4)结果为真,真&&!5结果为假,假||1结果为真。

答案:1

4.!(x = a) && (y = b) && 0

不用替换了,因为&&是这个表达式中优先级最低的一个逻辑运算,因此看到&&0时,结果直接为假。

答案:0

5.!(a + b) + c - 1 && b + c / 2

替换为:!(3+4)+5-1&&4+5/2

先算!(3+4)结果为0,+5为真,-1为4还是真,另一边4+5/2也等于真,所以本题为真。

答案:1

4. 有3个整数a, b, c,由键盘输入,输出其中最大的数。

A解题思路

先拿a和b比,把最大数放在a上,再拿a和c比,把最大数放a上,最后输出a即可。

B代码部分

#include<stdio.h>

int main()

{

int a, b, c;

printf("请输入3个数:\n");

scanf("%d %d %d", &a, &b, &c);

if (a < b)

a = b;

if (a < c)

a = c;

printf("3个数中最大数为:%d", a);

return 0;

}

C执行结果

5.从键盘输入一个小于1000的正数,要求输出它的平方根(如平方根不是整数,则输 出其整数部分)。要求在输入数据后先对其进行检查是否为小于1000 的正数。若不 是,则要求重新输入。

A解题思路

c语言中求平方根的函数是sqrt()注意需要引用头文件《math.h》,否则计算的错误会出错,sqrt函数返回的是double类型,题目要求只输出整数部分,那么我们只需要在sqrt前加上强制类型转换(int)将其转换为整形即可,或者在输出时修改输出格式为%4.0lf。

B代码部分

#include<stdio.h>

#include<math.h>

int main()

{

int a, b;

/*要求在输入数据后先对其进行检查是否为小于1000 的正数。若不是, 则要求重新输入。*/

while (1)

{

printf("请输入一个小于1000的正数:\n");

scanf("%d", &a);

if (a > 1000 || a <= 0)

printf("输入数据有误,需重新输入:\n");

else

break;

}

b = (int)sqrt(a);

printf("%d", b);

return 0;

}

C执行结果

6.有一个函数,编写程序,输入x的值,输出y相应的值。

A解题思路

使用多分支选择结构,根据x的值进行判断,然后决定y的值。

B代码部分

#include<Stdio.h>

int main()

{

int x, y;

while (1)

{

printf("请输入x的值:");

scanf("%d", &x);

if (x < 1)

y = x;

else if (x < 10)

y = 2 * x - 1;

else

y = 3 * x - 11;

printf("y的值为:%d\n", y);

}

return 0;

}

C执行结果

7.有人编写了以下两个程序,请分析它们是否能实现题目要求。

1.第一个:

int main()

{

int x, y;

printf("enter x:");

scanf("%d", &x);

y=-1;

if (x != 0)

if (x > 0)

y=1;

else

y=0

printf("x=%d,y=%d\n", x, y);

return 0;

}

A解题思路

If中的else语句总是与他最近的且未被匹配的if进行配对,所以这个代码的含义就是:

当x=0时,y=-1.

当x!=0且x>0时,y=1.

当x!=0且x<0时,y=0;

C执行结果

我们把这一段代码敲进VS运行后发现分析是正确的

2.第二个:

int main()

{

int x, y;

printf("enter x:");

scanf("%d", &x);

y=0;

if (x >= 0)

if (x > 0) y=1;

else y=-1;

printf("x=%d,y=%d\n", x, y);

return 0

}

A解题思路

If中的else语句总是与他最近的且未被匹配的if进行配对,所以这个代码的含义就是:

x < 0,y = 0;

x >= 0 && x > 0, y = 1;

x >= 0 && x = 0, y = -1;

C执行结果

我们把这一段代码敲进VS运行后发现分析是正确的

8.给出一百分制成绩,要求输出成绩等级'A'、'B'、'C'、'D'、'E'。 90分以上 为'A',80~89分为'B',70~79分为'C' ,60~69分为'D' ,60分以下为'E'。

A解题思路

使用多分支选择结构,根据题目要求满足相应的条件输出相应的值即可。

B代码部分

#include<stdio.h>

int main()

{

int gre;

while (1)

{

while (1)

{

printf("请输入一百分以内的成绩:");

scanf("%d", &gre);

if (gre > 100 || gre < 0)

printf("输入数据有误,请输入0-100之间的分数。");

else

break;

}

if (gre >= 90)

printf("A\n");

else if (gre >= 80)

printf("B\n");

else if (gre >= 70)

printf("C\n");

else if (gre >= 60)

printf("D\n");

else

printf("E\n");

}

return 0;

}

C执行结果

  1. 给一个不多于5位的正整数,要求:①求出它是几位数;②分别输出每一位数字;③按逆序输出各位数字,例如原数为321,应输出123

A解题思路

按题目要求编写3个函数实现各自的功能,实现使用数字分割法求位数,数字每除10就加一位数,条件是该数大于0;然后使用递归实现正序输出,条件是该数小于10时输出当前数然后退出递归,否则递归调用自己的当前数除10,然后输出当前数;最后是逆序输出函数,相当于直接在第一个函数的循环体中增加一条语句:printf 当前数%10即可。

B代码部分

#include<stdio.h>

void outputfig(int fig,int i)//数字分割法求数字的位数

{

while (fig > 0)

{

fig /= 10;

i++;

}

printf("你输入的数字是%d位数\n", i);

}

void myprint(int fig)//递归实现正序输出

{

if (fig < 10)

printf("%d ", fig);

else

{

myprint(fig/ 10);

printf("%d ", fig%10);

}

}

void reorder(int fig, int i)//直接输出每次的余数即可实现逆序输出

{

while (fig > 0)

{

printf("%d ", fig % 10);

fig /= 10;

}

}

int main()

{

int fig,i=0;

while (1)

{

printf("请输入一个不多于5位的正整数:\n");

scanf("%d", &fig);

if (fig > 99999 || fig < 0)

printf("你输入的数据有误,");

else

break;

}

outputfig(fig,i);//①求出它是几位数

printf("正序分别输出每一位数字\n");

myprint(fig);//②分别输出每一位数字

printf("\n");

printf("按逆序输出各位数字\n");

reorder(fig, i);//③按逆序输出各位数字

return 0;

}

C执行结果

12.企业发放的奖金根据利润提成。

本题就是一个套用公式的题,没什么技术含量,没有人会出这样的题在试卷上,把题目翻译成公式然后代入程序就行了,本题略过。

11. 输入4个整数,要求按由小到大的顺序输出。

A解题思路

先定义个整型数组,输入4个数,然后使用冒泡排序从小到大排序,拍完序后输出即可。

B代码部分

#include<stdio.h>

int i,j;

void sort(int a[])

{

for(i=0;i<4;i++)

for(j=i+1;j<4;j++)

if (a[i] > a[j])

{

int tmp = a[i];

a[i] = a[j];

a[j] = tmp;

}

}

int main()

{

printf("请输入4个数:\n");

int a[4] = {0};

for (i = 0; i < 4; i++)

scanf("%d", &a[i]);

sort(a);//使用冒泡排序进行从小到大排序

printf("排完序的数字为:\n");

for (i = 0; i < 4; i++)//输出拍完序的数

printf("%d ", a[i]);

}

C执行结果

12.有4个圆塔,圆心分别为(2,2)、(-2,2)、(-2,-2)、(2,-2),圆半径为1,见图。这4个塔的高度为10m,塔以外无建筑物。今输入任一点的坐标,求该点的建筑高度(塔外的高度为零)。

A解题思路

先输入一个坐标,对这个坐标的行和列取绝对值,然后代入公式计算点到圆心的距离,当距离大于半径时,高度为0,当距离小于半径时,高度为10m。

B代码部分

#include<stdio.h>

#include<math.h>

int main()

{

//在圆内:高度10,不在圆内:高度0;

int r = 1;

printf("请输入任意一点的坐标:");

int a, b;

int x, y;

float c;

scanf("%d %d", &a, &b);

x = fabs(a);

y = fabs(b);//先将a和b的坐标取绝对值

c = sqrt((x - 2) * (x - 2) + (y - 2) * (y - x));//sqrt是求平方根公式,c是求点到圆心的距离为多少,公式为根号下x1-x2的平方+y1-y2的平方

if (c > r)

printf("0");//当求出的点到圆心的距离大于半径,说明不在圆塔上,高度为0

else

printf("10");//当求出的点到圆心的距离小于等于半径,说明在圆塔上,高度为10

return 0;

}

C执行结果

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-30 11:45:05  更:2021-09-30 11:46:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 4:21:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计