您的当前位置:首页正文

实验三程序流程控制结构实验四模块化程序设计

2024-07-16 来源:星星旅游

实验三:程序流程控制结构

专业班级




实验学时

2

实验类型

验证+简单设计

实验地点

4 号楼网络实验室

实验时间


指导老师



教师批语



1、实验目的:学会正确使用逻辑运算符和逻辑表达式以及关系运算符与关系表达式,

熟练掌握if语句和switch语句,掌握在程序设计中灵活使用顺序结构和选择结构,掌握

whilefordowhile循环结构的使用方法以及循环条件的使用;能够使用三种循环结构

设计程序、分析程序并解决实际问题;掌握三种循环结构的差异和不同,能灵活地实现三

种结构间的转换。

2、实验内容:

(1)有一个函数

y

5 x

10 x

x

1

x

1

10

x

10

20

x

10

编写程序计算y的值。用scanf函数输入x的值(分别为x01<x<10x10),输出y

的值。运行程序,察看并分析程序执行结果。请将编译通过的程序抄写在下边的空白处。

#include<stdio.h>
voidmain()
{
intx,y;
printf("请您输入一个数\n");
scanf("%d",&x);

if(x<=1)
y=x;
elseif(1<x&&x<=10)
y=5*x-10;
elseif(x>10)
y=10*x-20;
printf("x=%d,y=%d\n",x,y);

}

运行结果:

请您输入一个数

59
x=59,y=570
Pressany key yo continue

(2)给出一个不多于5位的正整数,要求:求出它是几位数;分别输出每一位数;按逆

序输出各位数字,例如原数为5631,应输出为1365。运行程序,察看并分析程序执行结果。

#include<stdio.h>

voidmain()
{
inta,b,c,d,e,num;
printf("请输入一个不多于五位的整数\n");
scanf("%d\n",&num);
if(num<0||num>99999)
printf("输入有误\n");
else
{
a=num/10000;
b=num/1000%10;
c=num/100%10;
d=num/10%10;
e=num%10;

}
if(a!=0)
{
printf("num是一个五位数\n");
printf("%d%d%d%d%d\n",a,b,c,d,e);
printf("逆序数为\n");
printf("%d%d%d%d%d\n",e,d,c,b,a);
}
elseif(b!=0)
{
printf("num是一个四位数\n");
printf("%d%d%d%d\n",b,c,d,e);
printf("逆序数为\n");
printf("%d%d%d%d\n",e,d,c,b);

}
elseif(c!=0)
{
printf("num是一个三位数\n");
printf("%d%d%d\n",c,d,e);
printf("逆序数为\n");
printf("%d%d%d\n",e,d,c);

}
elseif(d!=0)
{
printf("num是一个二位数\n");
printf("%d%d\n",d,e);
printf("逆序数为\n");
printf("%d%d\n",d,e);

}
else
{
printf("num是一个一位数\n");
printf("%d\n",e);
}

}

输出结果

请输入一个不多于五位的整数

5698
5698是一个四位数

5,6,9,8逆序数为
8,9,6,5pressany key to continue

(3)某人从汽车销售公司以分期付款的方式购买一辆总价为14.5万元的小客车。约定首

付款为5万元,未付款部分以5.8%的年利率按月计息,从买车后的第7个月开始每月付款

3000元。编写程序计算此人付清余款后最终支出了多少利息?(先画流程图后写程序)

#include<stdio.h>
voidmain()
{
doublem,lixi;
inti,c=6;
m=14.5,lixi=0;
printf("购买车花费14.5万元\n");
m=m-5;
printf("首付5万元后剩余%f\n",m);
for(i=1;i<=6;i++)
{
lixi=lixi+m*(0.058/12);
m=m*(1+(0.058/12));
}
printf("六个月后产生利息为%f(万元)\n",lixi);

printf("本息和为%f(万元)\n",m);

printf("从第七个月开始每月付0.3(万元)\n");
printf("***************\n");
for(i=1;;i++)
{
c=c+1;
lixi=lixi+m*(0.058/12);
m=m*(0.058/12+1)-0.3;
{
if(m>0)
{
printf("********\n");
printf("%d;\n",c);

printf("本息和为m=%f(万元)\n",m);

printf("利息%f(万元);\n",lixi);

}
elsebreak;
}
}
printf("********\n");
printf("最后一个月;\n");
lixi=lixi+m*(0.058/12);
printf("利息%f(万元);\n",lixi);
printf("********\n");
printf("总共支付利息%f(万元)\a\n",lixi);
}

购买车花费14.5 万元
首付5 万元后剩余9.500000
六个月后产生利息为0.278850(万元)本息和为9.778850(万元)
从第七个月开始每月付0.3(万元) ***************
********
7 ;
本息和为m=9.526115(万元)
利息0.326115(万元);
********
8 ;
本息和为m=9.272158(万元)
利息0.372158(万元);
********
9 ;
本息和为m=9.016973(万元)
利息0.416973(万元);
********
10 ;
本息和为m=8.760555(万元)
利息0.460555(万元);
********
11 ;
本息和为m=8.502898(万元)
利息0.502898(万元);
********
12 ;
本息和为m=8.243995(万元)
利息0.543995(万元);
********
13 ;
本息和为m=7.983841(万元)
利息0.583841(万元);
********
14 ;
本息和为m=7.722430(万元)
利息0.622430(万元);
********
15 ;
本息和为m=7.459755(万元)
利息0.659755(万元);

********
16 ;
本息和为m=7.195810(万元)利息0.695810(万元);
********
17 ;
本息和为m=6.930590(万元)利息0.730590(万元);
********
18 ;
本息和为m=6.664088(万元)利息0.764088(万元);
********
19 ;
本息和为m=6.396298(万元)利息0.796298(万元);
********
20 ;
本息和为m=6.127213(万元)利息0.827213(万元);
********
21 ;
本息和为m=5.856828(万元)利息0.856828(万元);
********
22 ;
本息和为m=5.585136(万元)利息0.885136(万元);
********
23 ;
本息和为m=5.312131(万元)利息0.912131(万元);
********
24 ;
本息和为m=5.037806(万元)利息0.937806(万元);
********
25 ;
本息和为m=4.762156(万元)利息0.962156(万元);
********
26 ;



本息和为m=4.485173(万元)利息0.985173(万元);
********
27 ;
本息和为m=4.206851(万元)利息1.006851(万元);
********
28 ;
本息和为m=3.927184(万元)利息1.027184(万元);
********
29 ;
本息和为m=3.646166(万元)利息1.046166(万元);
********
30 ;
本息和为m=3.363789(万元)利息1.063789(万元);
********
31 ;
本息和为m=3.080047(万元)利息1.080047(万元);
********
32 ;
本息和为m=2.794934(万元)利息1.094934(万元);
********
33 ;
本息和为m=2.508443(万元)利息1.108443(万元);
********
34 ;
本息和为m=2.220567(万元)利息1.120567(万元);

********
35 ;
本息和为m=1.931300(万元)利息1.131300(万元);
********
36 ;
本息和为m=1.640634(万元)利息1.140634(万元);
********
37 ;
本息和为m=1.348564(万元)利息1.148564(万元);
********
38 ;
本息和为m=1.055082(万元)利息1.155082(万元);
********
39 ;
本息和为m=0.760182(万元)利息1.160182(万元);
********
40 ;
本息和为m=0.463856(万元)利息1.163856(万元);
********
41 ;
本息和为m=0.166098(万元)利息1.166098(万元);
********
最后一个月;
利息1.166257(万元);
********
总共支付利息1.166257(万元) Press any key to continue

(4)一个人大代表选区,要从甲、乙、丙、丁4个候选人中选人大代表。请编写一个计

票程序(先画出程序流程图后写程序)

#include<stdio.h>
voidmain()
{
inta,b,c,d,e;
charch;
a=b=c=d=e=0;
printf("投票数为\n");
scanf("%c\n",&ch);
while(a<=ch<=e)
{
switch(ch)
{

case'a':a++;break;
case'b':b++;break;
case'c':c++;break;
case'd':d++;break;
default:e++;

printf("a=甲的得票数,b=已的得票数,c=丙的得票数,d=丁的得票数,e=弃权\n",a,b,c,d,e);
if(a>b&&a>c&&a>d)
printf("甲获选为人大代表\n");
if(b>a&&b>c&&b>d)
printf("已获选为人大代表\n");
if(c>a&&c>b&&c>d)
printf("丙获选为人大代表\n");
if(d>a&&d>b&&d>c)
printf("丁获选为人大代表\n");

3、实验总结:

通过本次试验,我发现自己对if语句和swith语句不够熟练掌握,不能正确使用逻

辑运算符和逻辑表达式以及关系运算符和关系表达式,在上机操作时有一定的困难。因此,

我以后会多加练习。

程序设计基础实验报告

实验四:模块化程序设计

专业班级




实验学时

2

实验类型

验证

实验地点

4 号楼网络实验室

实验时间


指导老师



教师批语



1、实验目的:掌握函数的定义方法,及函数调用的形式;掌握函数实参与形参的对应

关系,“值传递”与“地址传递”的方式与区别;掌握函数的应用方法,熟悉函数的嵌套调

用和递归调用的设计方法;了解全局变量、局部变量、动态变量及静态变量的概念和使用

方法。

2、实验内容:

(1)分析下面程序,给出运行结果。本题要求理解和掌握函数的定义和调用#include<stdio.h>
intf(int i) ;
voidmain()
{
int i,j;
for( i=0;i<5;i++){
j=f(i);
printf("%d,%d,",i,j);
}
}
intf(int i){
returni*i-1;
}

运行程序,察看并分析程序执行结果(用单步执行的方式追踪程序的运行过程,并说

明上述程序的执行方式)

运行结果:

0-1102338415Pressany key to continue

函数voidmain() 中的变量i与函数intf(int i)中的变量i,是同一个变量吗?为什么?

答:函数voidmain() 中的变量i与函数intf(int i)中的变量i不是同一个变量。因为它们

虽然公用同一个标识符,但各自作用域不同。

(2)下面程序为选择排序,要求按如下步骤完成本题实验,理解和掌握函数参数的传递,

解函数的嵌套调用。

#include <stdio.h>
#define N 10
void sel_sort(int x[], int n);
int max(int x[], int n);
void main()
{
int a[N], i;
for(i=0; i<N; i++)scanf("%d", &a[i]); sel_sort(a, N);
for(i=0; i<N; i++)printf("%d ", a[i]); }
void sel_sort(int x[], int n)

{
int i, j;
for(i=n; i>0; i--)
{
j=max(x,i);
int temp=x[j];
x[j]=x[i-1];
x[i-1]=temp;
}
}
int max(int x[], int n)
{


程序设计基础实验报告

int i,j=0;
for(i=1; i<n; i++)
if(x[i]>x[j]) j=i; return j;
}

上机编辑,调试程序;

789
24
63
48
521
320

987

#include <stdio.h>
#define N 10
void sel_sort(int x[], int n);
int max(int x[], int n);
void main()
{
int a[N], i;
for(i=0; i<N; i++)scanf("%d", &a[i]); sel_sort(a, N);

244863320468521568689987Press

any

key

to

continue
程序中有几个函数?它们之间的调

用关系是什么?

答:程序中共有3 个函数,void sel_sort(int x[], int n)函数调用了int max(int x[], int n)函数;main 函调用了void sel_sort(int x[], int n)函数

for(i=0;i<N;i++)printf("%d",a[i]);

}
void sel_sort(int x[], int n){ int i, j;
for(i=n; i>0; i--)
{
j=max(x,i);
int temp=x[j];
x[j]=x[i-1];
x[i-1]=temp;
}
}
int max(int x[], int n){

void sel_sort(int x[], int n)int max(int x[], int n)两个函数在程序中的作用各是什么?

答:int max(int x[], int n)它传递了一个数组名和数组元素个数,求出该数组元素中的最大元素的下标,并且使用void sel_sort(int x[], int n)调换该组数组元素最大元素与最后一个元素的位置,该函数意义为

选择排序。

inti,j=0;

for(i=1; i<n; i++)
if(x[i]>x[j]) j=i;
return j;
}

用两组数据,给出程序运行结果;将测试结果写

在下面。

运行结果:

356
743
281
676
13
25
65
99
105
48

用单步执行,观察程序执行的流程并

用流程图描述程序的实现;并回答什么是函

数的嵌套调用? (注:流程图以函数为模块

来画)

答:函数的嵌套调用指的是被调用的函

数内容里面又调用了其它函数。

(3)输入以下程序,编译运行并回答问

题。

#include <stdio.h>
void auto_static(void){
int va=0;
static int vs=0;
printf("va=%d,vs %d\n", va, vs); ++va;
++vs;
}
void main(){
int i;
for(i=0; i<5; i++)
auto_static();
}

1325486599105281356676743Press

any

key

to

continue
运行结果:
568
689
468


程序设计基础实验报告

运行结果:

va=0,vs0
va=0,vs1
va=0,vs2
va=0,vs3
va=0,vs4
Pressany key to continue

函数voidauto_static(void)中变量vavs的数据类型是什么?他们的存储类别各是什

么类别的?

答:函数voidauto_static(void)中变量vavs的数据类型都是int型,va的存储类型是

动态存储类,而vs是静态存储类。

程序在每次调用voidauto_static(void)vavs都初始化为0了,且都进行了相同的

++运算,但是vavs却有不同的值,这是为什么?请解释出现不同值的原因。

答:va是动态存储类,是在被调函数内声明的局部变量,该变量会随着函数的调用结

束而释放。

vs变量虽然也是在被调用函数内声明的,也是局部变量。但是它的定义是静态的局部

变量。存储类型是静态存储类,该变量在函数调用结束不会释放,而且保留原值,这也就

是上面程序中,vsva变量有不同值的原因。

3、实验总结

通过本次试验,我发现自己混淆了“值传递”与“地址传递”的方式与区别,对函数

的嵌套调用与递归调用的设计方法不是很清楚,我今后会多看书,多操作,来弥补自己的

不足。