关于c:浙大版C语言程序设计何钦铭颜晖-第2章-用C语言编写程序-课后习题答案

50次阅读

共计 6003 个字符,预计需要花费 16 分钟才能阅读完成。

你也能够上程序咖 (https://meta.chengxuka.com),关上大学幕题板块,岂但有答案,解说,还能够在线答题。

一、选择题

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.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,这里取余数。

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,要和前面的参数一一对应。

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。

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

A. *

B. =

C. ==

D. %

答案:B

解析:

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

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

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

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

解析:

{} 要成对儿应用。

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 正确。

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

A.main 函数是主函数,肯定要写在最后面。

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

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

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

答案:C

解析:

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

二、填空题

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

答:整型,实型。

解析:整型除整型的后果也是整型。1.0 是实型 (浮点型),除整型,要先将除法运算符两侧的数据类型对立,所以零碎会主动进行类型转换。将 k 由整型转为浮点型,再进行计算。

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 的数值。

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 的值。

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

答:n%2==0

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

5. 与数学式 $ \sqrt {s(s-a)(s-b)(s-c)} $ 对应的 C 语言表达式是()。

答:

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

解析:

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

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

答:

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

解析:

编译预处理命令应用 #include,前面跟着函数库。数学函数库须要 math.h,输入输出函数是在系统文件 stdio.h 中申明。留神:编译预处理命令的开端不加分号。

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

答:算术,关系,赋值。

解析:

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

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。

9.C 语言 3 种根本的控制结构是()构造、()构造和()构造。

答:程序,分支,循环。

解析:无

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。

三、程序设计题

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

解:

答案代码:

#include <stdio.h>
int main(void)
{

    //(习题 2.3.1)// 求整数均值: 输出 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;
}

运行代码:

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

解:

答案代码:

#include <stdio.h>
int main(void)
{
    //(习题 2.3.2)/*
    阶梯电价:为了提倡居民节约用电,某省电力公司执行“阶梯电价”,装置一户一表的居民用户电价分为两个“阶梯”:月用电量 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;
}

运行后果:

题目 3:序列求和:输出两个正整数 m 和 n (0<m≤n),求 $ \sum_{i=m}^n(i^2+\frac{1}{i}) $,后果保留 6 位小数。试编写相应程序。

解:

答案代码:

#include <stdio.h>
int main(void)
{
    //(习题 2.3.3)/*
    序列求和:输出两个正整数 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;
}

运行后果:

题目 4:求交织序列前 n 项和:输出一个正整数 n,计算交织序列 $ 1-\frac{2}{3}+\frac{3}{5}-\frac{4}{7}+\frac{5}{7}-\frac{6}{11}… $ 的前 n 项之和。试编写相应程序。

解:

答案代码:

#include <stdio.h>
int main(void)
{
    //(习题 2.3.4)/*
    求交织序列前 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;
}

运行后果:

题目 5:平方根求和:输出一个正整数 n,计算 $ 1+\sqrt{2}+\sqrt{3}+…+\sqrt{n} $ 的值 (保留 2 位小数)。可蕴含头文件 math.h,并调用 sqrt() 函数求平方根。试编写相应程序。

解:

答案代码:

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

int main(void)
{
    //(习题 2.3.5)/*
    平方根求和:输出一个正整数 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;
}

运行后果:

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

解:

答案代码:

#include <stdio.h>
double fact(int n);

int main(void)
{
    //(习题 2.3.6)/*
    求给定序列前 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;
}

运行后果:

正文完
 0