C语言程序与设计第四版课后习题 - 第三章

第三章课后习题

3.1 表达式的简答题

  • 怎样区分表达式和表达式语句? 可以参考教材P64 (3)表达式语句

    • 书本说法:表达式语句由一个表达式+一个分号构成,也就是一个表达式 + 分号就是表达式语句
      • a = 3 表达式
      • a = 3; 表达式语句
    • 而表达式是一个值,表达式语句是一条指令(参考书本P63中C语言的语句用来向计算机系统发出操作指令)
  • C 语言为什么要设表达式语句?

    • 原因:用短的指令代替了复杂的函数运算,程序运行效率高。
  • 什么时候用表达式?

    • 当我们需要将表达式的值用于某些操作时,我们应该使用表达式

      • 最简单的例子,就是用表达式的值进行语句的判断

        int x = 3;
        if(x > 3)
        	;
        
  • 什么时候用表达式语句?

    • 我们需要表达式的副作用,而不是它的值
      • 最简单的例子, a++;

3.2 输入输出函数简答题

C语言为什么要把输入输出的功能作为函数,而不作为语言的基本部分?

  • 将输入输出视为函数而不是语言的基本部分,使程序员更容易编写可重复使用的模块化代码。将输入输出作为函数,程序员可以使用不同输入源和输出目的地,而不必更改他们的代码。
  • 将输入输出作为函数还有助于提高代码的可读性和可维护性,函数名和参数列表可以清晰地表达函数的目的和行为,使代码更易于理解和调试。
  • 将输入输出作为函数还可以帮助编译器进行优化。将输输出转换为函数调用,使编译器可以在优化时更容易将功能拆分为单独的模块,并更好地利用系统资源。

3.3 scanf输入数据问题

题目概述:

用下面的scaf函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=‘A’,c2=‘a’。如何在键盘上输入

#include
int main()
{
	int a, b;
	float x, y;
	char c1, c2;
	scanf("a = %d, b = %d", &a, &b);
	scanf("%f %e", &x, &y);
	scanf("%c %c", &c1, &c2);
	return 0;
}

输入如下:
C语言程序与设计第四版课后习题 - 第三章_第1张图片

注意

  • 书本中的第七行是没有那么多空格的,是a=%d b = %d,在输入时要严格按照这个格式进行输入,否则无法输出

  • 其次,在输入完71.82后,我们发现,其实%e和%c是紧挨着的,是不能加空格的,如果加了空格,空格是字符之一,那么scanf就会读入空格并赋给c1,看下方:
    C语言程序与设计第四版课后习题 - 第三章_第2张图片

  • 如果你发现在你的程序敲出了上述代码后,运行发现是空的,那是因为你没有加上输出函数,加上一个printf函数即可

    #define _CRT_SECURE_NO_WARNINGS 1
    #include
    int main()
    {
    	int a, b;
    	float x, y;
    	char c1, c2;
    	scanf("a = %d, b = %d", &a, &b);
    	scanf("%f %e", &x, &y);
    	scanf("%c %c", &c1, &c2);
    
    	printf("输出为:\n");
    	printf("a = %d, b = %d\n%f %e\n%c %c", a, b, x, y, c1, c2);
    
    	return 0;
    }
    

3.4 scanf输入数据问题(2)

题目概述:

下面的scanf函数,输入数据,使a=10,b=20,c1=‘A‘,c2=‘a‘,x=1.5,y=-3.75,z=67.8,请问如何在键盘上输入数据

scanf("%5d%5d%c%c%f%f%*f,%f", &a, &b, &c1, &c2, &x, &y, &z);

输出如下:
在这里插入图片描述

注意事项:

  • 首先是%5d的输入,他是占5列,所以打3个空格输入10 再加3空格输入20
  • 其次就是字符的输入,字符是不能打空格的,因为空格算是字符,字符会被scanf读入并赋值给A1,详情请看3.3的解释
  • 还有就是后面的实数就可以打空格了,因为scanf函数除了读%c(字符)的时候会读入,在读入整数%d,实数%f的时候是跳过空格不读的,所以我们在输入的时候可以放心的加入空格
  • 最后是%*f,这个意思是:禁止赋值,所以我们在输入时,可以随便输入一个实数,他是不会赋值给任何一个变量的
  • 再注意就是记得最后的字符之前是有逗号的,不要忘记加了

3.5 圆的一生

题目概述:

设圆半径r=1.5,圆柱高 h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。
用 scanf输人数据,输出计算结果,输出时要求有文字说明,取小数点后 2 位数字。请编程序。

野鸡有话说:

这道题要想写对,首先你要知道圆上面的公式,整理如下:

圆的周长:在这里插入图片描述

圆的面积:在这里插入图片描述

圆球表面积:在这里插入图片描述

圆球体积:在这里插入图片描述

圆柱体积:在这里插入图片描述

知道了上述公式,编写程序手到擒来

代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include
int main()
{
	float r = 1.5;
	float h = 3;
	float pi = 3.1415926;
	float c = 0;//圆周长
	float s = 0;//圆面积
	float sq = 0;//圆球表面积
	float vq = 0;//圆球体积
	float vz = 0;//圆柱体积

	scanf("%f %f", &r, &h);

	c = 2 * pi * r;
	s = pi * r * r;
	sq = 4 * pi * r * r;
	vq = 4 / 3 * pi * r * r * r;
	vz = pi * r * r * h;

	printf("圆周长为:     %.2f\n", c);
	printf("圆面积为:     %.2f\n", s);
	printf("圆球表面积为: %.2f\n", sq);
	printf("圆球体积为:   %.2f\n", vq);
	printf("圆柱体积为:   %.2f\n", vz);

	return 0;
}

运行结果:
C语言程序与设计第四版课后习题 - 第三章_第3张图片

3.6 华氏度转摄氏度

题目概述:

输入一个华氏温度,要求输出摄氏温度。公式为:
在这里插入图片描述

代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include 
int main()
{
	float f = 0;
	float c = 0;

	printf("请输入一个华氏温度:");
	scanf("%f", &f);

	c = 5.0 / 9 * (f - 32);

	printf("摄氏度为:%.2f°C\n", c);


	return 0;
}
  • 在计算摄氏度的时候,也就是11行,要注意把一个数写成实型,否则5/9两个都是整型,相除为0,就会出现输出是0的情况

3.7 putchar和printf

题目概述:

用getchar函数读入两个字符给c1,c2,分别用putchar和printf输出这两个字符。思考以下问题:

(1)变量c1和c2定义为字符型还是整型?或二者皆可?

(2)要求输出c1和c2的ASCII码,应如何处理?

(3)整形变量和字符变量是否在任何情况下都可以互相代替?char c1, c2;和int c1, c2;是否无条件等价?

野鸡有话说:

具体的putchar和getchar的用法请参考书本P72 3.6部分

代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include 
int main()
{
	char c1 = 0;
	char c2 = 0;

	c1 = getchar();
	c2 = getchar();

	putchar(c1);
	putchar(c2);

	printf("\n");
	printf("%c%c", c1, c2);

	return 0;
}

运行结果:
C语言程序与设计第四版课后习题 - 第三章_第4张图片

注意事项:

  • 在输入时,不能打空格,那是因为getchar()函数读入两个字符,而空格也是字符,如果输入了a<空格>b,那么getchar读入的是a和空格,而不是a和b
    C语言程序与设计第四版课后习题 - 第三章_第5张图片

  • 类似的,如果我们a回车b,getchar函数也是读入a和回车,回车也是一个字符:‘\n’
    C语言程序与设计第四版课后习题 - 第三章_第6张图片

回答:

(1)变量c1和c2定义为字符型还是整型?或二者皆可?

  • 两者皆可,int和char都可以,char类型本质上以ASCII码存储,而ASCII码本身就是整数

(2)要求输出c1和c2的ASCII码,应如何处理?

  • 直接用printf函数输出即可,用%d格式符

    #define _CRT_SECURE_NO_WARNINGS 1
    #include 
    int main()
    {
    	char c1 = 0;
    	char c2 = 0;
    
    	c1 = getchar();
    	c2 = getchar();
    
    	printf("%c %c\n", c1, c2);
    	printf("%d %d\n", c1, c2);
    
    	return 0;
    }
    

    运行结果如下:
    C语言程序与设计第四版课后习题 - 第三章_第7张图片

(3)整形变量和字符变量是否在任何情况下都可以互相代替?char c1, c2;和int c1, c2;是否无条件等价?

不是的。
整型变量要在可输出字符范围内(ASCII码为0-255字符)是可以互相转换的,但是如果整型变量的值在可输出字符范围之外,是不能代替字符变量的

你可能感兴趣的:(c语言,开发语言)