您好,欢迎来到纷纭教育。
搜索
您的当前位置:首页实验解答-2

实验解答-2

来源:纷纭教育


实验2 变量类型与输入输出

2.1 实验目的

1. 了解不同变量类型占据物理空间的大小

2. 学习使用scanf()、和printf ()函数进行输入输出

2.2 实验预习

1. 熟悉在scanf() 和printf()的参数格式

2. 熟悉在scanf() 和printf()中不同数据类型的控制符

3. 实验前完成实验内容部分的填空和程序编写

2.3 实验内容

1. 运行下面程序并写出下列程序的输出结果,a,b变量的输出值是否相同,为什么?

#include

void main()

{

char a;

int b;

a=0x1234;

b=0x1234;

printf(\"a=%x,a=%d,b=%x,b=%d\\n\

}

输出:a=34,a=52,b=1234,b=4660

解释:由于变量a的类型是char ,该类型的数据在内存中占据1个字节的存储空间,当为其赋一个整数(int类型的数据在内存中占据4字节的存储空间)值时,C编译器必须进行数据类型转换后才能赋值,编译器将4字节中最低字节中的数值(0x34)赋给变量a,因此a的值就是0x34,用十进制表示为52。变量b的数据类型与要赋的值类型完全相同,无需转换,因此b的值就是0x1234,用10进制表示为4660。

2. 运行下面程序并写出下列程序的输出结果,解释ch2的输出。

#include \"stdio.h\"

void main()

{

char ch1,ch2;

ch1=getchar();

ch2=getchar();

printf(\"\\n*****ch1=%c,%d*****\\n\

printf(\"\\n*****ch2=%c,%d*****\\n\

}

输入:a回车

输出:

A

*****ch1=A,65*****

*****ch2=

,10*****

解释ch2的输出: 本程序的功能是从键盘输入两个字符,并分别以字符格式(%c)和10进制数格式(%d,该数就是字符的ASCII码值)输出。当从键盘输入a回车后,变量ch1将读入字符a,变量ch2将读入换行符 '\\n'(ASCII码值为10),然后按指定格式进行输出。

我不能理解:明明输入了回车,为什么却变成了换行符?

答:这是因为Unix的缘故。在Unix中,一行的结束是以单独的换行符'\\n'为标志的;而有些系统中,一行的结束是以回车符'\\r'+换行符'\\n'为标志的。为保证C程序的可移植性,C语言的输入输出库函数自动将行结束标志(不管它是什么)一律转换为换行符。

3. 改正程序中的错误,使程序能输出正确结果(即输入输出相同)。

#include

void main()

{

float a;

scanf(\"%f\&a);

printf(\"a=%f\\n\

}

①将转换说明%d改为%f

②在变量a的前面增加取地址运算符&

4. 运行下面程序,注意结果是否正确,应怎样改?

#include

void main()

{

double a;

scanf(\"%lf\

printf(\"a=%lf\\n\

}

①去掉%f后的空格(这个空格是不是特别讨厌?)

②将转换说明%f改为%1f

5. 运行下列输出语句,观察输出结果的异同点。

#include \"stdio.h\"

void main()

{

printf(\"%d\\n\

printf(\"%5d\\n\

printf(\"%f\\n\

printf(\"%12f\\n\

printf(\"%e\\n\

printf(\"%13e\\n\

}

输出结果如下,自己观察吧:

42

42

123.540000

123.540000

1.235400e+002

1.235400e+002

6. 输入语句scanf(\"a=%f,b=%f c=%f\,要求给a赋予3.12,b赋予9.0,c赋予10.0,写出正确的输入形式。

正确的形式:a=3.12,b=9.0 c=10.0

测试代码如下:

#include

void main()

{

float a,b,c;

scanf(\"a=%f,b=%f c=%f\

printf(\"a=%f,b=%f c=%f\\n\

}

如何理解scanf()格式字符串中的空白符?

当在格式字符串中遇到一个或多个连续的空白字符时,scanf函数从输入中重复读空白符(空格、制表符、换行符等)直到遇到一个非空白符为止。在格式字符串中,所有空白符都是等价的,格式字符串中一个空白符都可以匹配任意数量的空格、换行符或其他空白字符。

7. 试分析下列程序的输出结果。

#include \"stdio.h\"

void main()

{

unsigned short int a=65535;

short int b=-1;

printf(\"a=%hd,%ho,%hx,%hu\\n\

printf(\"b=%hd,%ho,%hx,%hu\\n\

}

输出:

a=-1,177777,ffff,65535

b=-1,177777,ffff,65535

为什么a和b两个变量的输出结果完全相同呢?这是因为a和b在内存中的值完全相同,而变量的数据类型则决定了如何解释这个值。

8. 实现输入圆柱体的底面半径和高,输出其体积(C语言中的乘号是 *)。

代码如下:

#include

void main()

{

float r,h,v;

printf(\"Enter radius and height:\");

scanf(\"%f%f\

v=3.14*r*r*h;

printf(\"Volume is: %f\\n\

}

9. 编程实现输入一个整数,分别用无符号方式、八进制方式、十六进制方式输出。

代码如下:

#include

void main()

{

int a ;

printf(\"Enter a number:\");

scanf(\"%d\

printf(\"unsigned a = %u\\n\

printf(\"octal a = %o\\n\

printf(\"hexadecimal a = %x\\n\

}

10. 编程实现输入一个字符,输出这个字符的ASCII码。

代码如下:

#include

void main()

{

char ch ;

printf(\"Enter a char:\");

ch=getchar();

printf(\"ASCII CODE(%c)= %d\\n\

}

11. 输入两个整数x和y,交换它们的值并输出。

代码如下:

#include

void main()

{

int a,b,t ;

printf(\"Enter two number:\");

scanf(\"%d%d\

printf(\"a=%d,b=%d\\n\

t=a;

a=b;

b=t;

printf(\"a=%d,b=%d\\n\

}

12. 编程实现输入一个double类型的正数,对第三位小数进行四舍五入处理后(不使用函数及类型运算符)输出,输出格式整数部分占12位,小数点后两位。

代码如下:

#include

void main()

{

double a;

printf(\"Enter a double number:\");

scanf(\"%lf\

printf(\"a=%15.2f\\n\

}

2.4 注意事项

1. 注意scanf( )函数中需要的是地址列表。

2. 用scanf()、printf()输入输出不同数据类型,需要不同的格式控制符,否则结果可能错误。

3. 不同数据类型的精度和表达范围不同,编程时注意选择合适的数据类型。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- fenyunshixun.cn 版权所有 湘ICP备2023022495号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务