南京邮电大学C语言实验(一)顺序结构编程练习(仅参考)

实验名称:顺序结构编程练习

一、实验目的和要求

1)初识Microsoft Visual Studio 2010上机环境,学会建立工程、文件,学会编译、链接并运行程序,查找并修改简单的语法错。

2)正确调用输入输出处理的函数scanf( )printf( )getchar( )putchar( )进行数据的I/O,观察输出格式,掌握键盘输入方法。

3)初步使用调试器跟踪程序,观察变量的值的变化情况。

二、实验环境(实验设备)

硬件:  微型计算机

软件:  Windows 操作系统、Microsoft Visual Studio 2010

三、实验原理及内容

实验题目1

【见实验教材实验一的题目1】D盘上建立以自己学号命名的文件夹(例如:B07020518)(以后实验的所有文件存于此文件夹下);正确进入VS2010集成开发环境,建立一个单文件项目,项目名为:exp1_1,然后向该项目中以新建方式添加一个源文件,名为:exp1_1.c,完成:从键盘输入两个整数ab,计算并输出他们的和sum、差difference、积product、商quotient和平均值ave(注意ave和商的定义类型)。

具体要求:

编辑、编译、连接并运行程序,观察运行结果。

观察exp1_1.objexp1_1.exeexp1_1.c所在的文件夹。

对变量quotient分别定义为intdouble型,在printf函数中正确使用格式串,当读入的两个整数为45时,观察运行结果并分析原因,思考怎么使变量quotient更准确。

对变量ave分别定义为intdouble型,在printf函数中正确使用格式串,当读入的两个整数为45时,观察不同的运行结果并分析原因。

单步跟踪程序(用F10键),观察每一步程序运行时各个变量的变化情况。

实验解答:

源程序代码如下:

(1)直接法:

#include<stdio.h>
int main()
{
	int x, y, sum, difference, product;
	double quotient, ave;
	printf("Please input two integers:");
	scanf_s("%d%d", &x, &y);
	sum = x + y;
	difference = x - y;
	product = x * y;
	quotient = x / (double)y;
	ave = (x + y) / 2.0;
	printf(" The sum is %d\n The difference is %d\n The product is %d\n The quotient is %f\n The average is %f\n", sum, difference, product, quotient, ave);
	return 0;
}

(2)定义函数法:

#include<stdio.h>
int add(int a, int b)
{
	return a + b;
}
int subtract(int a, int b)
{
	return a - b;
}
int multiply(int a, int b)
{
	return a * b;
}
double divide(double a, double b)
{
	return a / b;
}
double average(double a, double b)
{
	return (a + b) / 2;
}
int main()
{
	int x, y,sum,difference,product;
	double quotient, ave;
	printf("Please input two integers:");
	scanf_s("%d%d", &x, &y);
	sum = add(x, y);
	difference = subtract(x, y);
	product = multiply(x, y);
	quotient = divide(x, y);
	ave = average(x, y);
	printf(" The sum is %d\n The difference is %d\n The product is %d\n The quotient is %f\n The average is %f\n", sum, difference, product, quotient, ave);
	return 0;
}
文件名文件所在的完整路径(例如:d:\ttt\t1.c)
exp1_1.cE:\C_Test\Test1_code\exp1_1.c
exp1_1.objE:\C_Test\Test1_code\Test1_code\x64\Debug\ exp1_1.obj
exp1_1.exeE:\C_Test\Test1_code\x64\Debug\ exp1_1.exe

方法1:

quotient的类型求解quotient的语句输出quotient的格式串屏幕输出的quotient值
intquotient = x / y;print("The quotient is %f\n",quotient)0.000000
doublequotient = x / (double)y;print("The quotient is %f\n",quotient)0.666667

方法2:

quotient的类型求解quotient的语句输出quotient的格式串屏幕输出的quotient值
int

int divide(int a, int b)

{

    return a / b;

}

print("The quotient is %f\n",quotient)0.000000
double

double divide(double a, double b)

{

    return a / b;

}

print("The quotient is %f\n",quotient)0.666667

运行结果的差异、原因以及保证结果正确的措施:

差异:当结果不是整数时,int类型屏幕输出值为0,而double有值

原因:int为整型,而double是实型双精度型

措施:将输出quotient的divide自定义函数ave的average自定义函数用double定义

方法1:

ave的类型求解ave的语句

输ave的格式串

屏幕输出的ave值
intave = (x + y) / 2;print("The average is %f\n",ave)0.000000
doubleave = (x + y) / 2.0;print("The average is %f\n",ave)2.500000

方法2:

ave的类型求解ave的语句

输ave的格式串

屏幕输出的ave值
int

int average(int a, int b)

{

    return (a + b) / 2;

}

print("The average is %f\n",ave)0.000000
double

double average(double a, double b)

{

    return (a + b) / 2;

}

print("The average is %f\n",ave)2.500000

运行结果的差异及原因:

差异:int类型屏幕输出值为0,double类型有屏幕输出值

原因:int为整型,而double是实型双精度型

实验题目(2)

【见实验教材实验一的题目3】编程序exp1_3.c,实现两个整数a,b的交换,提示思考:我们在现实生活中,两杯水是怎么交换的。

实验解答:

 源程序exp1_3.c的代码是:

#include<stdio.h>
int main()
{
    int a, b, temp;
    printf("Please input two integers ");
    scanf_s("%d%d", &a, &b);
    temp = a;
    a = b;
    b = temp;
    printf("The result of the swap is %d %d\n", a, b);
    return 0;
}
实验题目(3)

【见实验教材实验一的题目4】编程序exp1_4.c,工厂给一圆柱体镀膜,每平方厘米造价10元,现从键盘上输入圆柱底面的半径radius(厘米)和圆柱的高height(厘米),求该圆柱体的表面积area(平方厘米)和所需费用,要求输出结果保留两位小数。

实验解答:

源程序exp1_4.c的代码是:

#include<stdio.h>
#define PI 3.14159
int main()
{
    double r, h, s, w;
    printf("Please input the radius and height of the cylinder\n  ");
    scanf_s("%lf%lf", &r, &h);
    s = 2 * PI * r * (r + h);
    w = 10 * s;
    printf("The area is %f\n The cost is %f\n", s, w);
    return 0;
}

②多次运行程序,根据下表第一列要求,输入不同的数据,请填写下表

输入数据的要求

你输入的数据

你程序的输出结果

半径和高均为正整数

2 3

62.831800   628.318000

半径和高均为正实型数

1.5 3.5

47.123850   471.238500

半径和高有一个为负数

-1 2

-6.283180   -62.831800

半径和高均为负数

-2 -3

62.831800   628.318000

其他测试用例

-2 3.3

-16.336268  -163.362680

实验题目(4)

【见实验教材实验一的题目6】编写程序exp1_6.c输入一个3位正整数,计算该数的逆序数,并输出。例如:输入789,输出987

实验解答:源程序exp1_6.c的代码是:

#include<stdio.h>
int main()
{
    int a, b, c, abc;
    printf("Please input a three-digit number");
    scanf_s("%d", &abc);
    c = abc / 100, b = abc / 10 % 10, a = abc % 10;
    printf("The number of inversions of this number=%d%d%d", a, b, c);
    return 0;
}

四、实验小结(包括问题和解决方法、心得体会、意见与建议、实验出错信息及解决方案等)

(一)实验中遇到的主要问题及解决方法

1.容易忘记最后的printf(),多加练习后记住了

2.既用int又用double定义了变量x,y,调试时发现了问题

3.刚开始在源程序exp1_4.c的scanf_s函数中用的是%f,后在检查资料和结合mooc相关视频,修改为%lf

(二)实验心得

1.多加练习,反复尝试,得出满意的数据

2.通过一些网站、搜索引擎等手段,查询自己解决方法

3.学会将书本、mooc、CSDN有机结合使用

(三)意见与建议(没有可省略)

         

  • 31
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲤鱼Louis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值