实验三:程序流程控制结构
专业班级 | | 学 号 | | 姓 名 | | |||
实验学时 | 2 | 实验类型 | 验证+简单设计 | 实验地点 | 4 号楼网络实验室 | |||
实验时间 | | 指导老师 | | 成 绩 | | |||
教师批语 |
|
1、实验目的:学会正确使用逻辑运算符和逻辑表达式以及关系运算符与关系表达式,
熟练掌握if语句和switch语句,掌握在程序设计中灵活使用顺序结构和选择结构,掌握
while、for、do…while循环结构的使用方法以及循环条件的使用;能够使用三种循环结构
设计程序、分析程序并解决实际问题;掌握三种循环结构的差异和不同,能灵活地实现三
种结构间的转换。
2、实验内容:
(1)有一个函数
y | | 5 x 10 x | x | 1 | x | | 1 | |||||
| 10 | | x | | 10 | |||||||
| 20 | x | | 10 |
编写程序计算y的值。用scanf函数输入x的值(分别为x≤0,1<x<10,x≥10),输出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 万元 | ******** |
本息和为m=4.485173(万元)利息0.985173(万元); | ******** |
(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,-1,1,0,2,3,3,8,4,15,Pressany key to continue
②函数voidmain() 中的变量i与函数intf(int i)中的变量i,是同一个变量吗?为什么?
答:函数voidmain() 中的变量i与函数intf(int i)中的变量i不是同一个变量。因为它们
虽然公用同一个标识符,但各自作用域不同。
(2)下面程序为选择排序,要求按如下步骤完成本题实验,理解和掌握函数参数的传递,理
解函数的嵌套调用。
#include <stdio.h> | { |
程序设计基础实验报告
int i,j=0; ①上机编辑,调试程序; | 789 |
987
#include <stdio.h> | 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 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++) ②用两组数据,给出程序运行结果;将测试结果写 在下面。 运行结果: 356 | ⑤用单步执行,观察程序执行的流程并 用流程图描述程序的实现;并回答什么是函 数的嵌套调用? (注:流程图以函数为模块 来画) 答:函数的嵌套调用指的是被调用的函 数内容里面又调用了其它函数。 (3)输入以下程序,编译运行并回答问 题。 #include <stdio.h> | |||
1325486599105281356676743Press | any | key | to | |
continue |
程序设计基础实验报告
运行结果:
va=0,vs0
va=0,vs1
va=0,vs2
va=0,vs3
va=0,vs4
Pressany key to continue
①函数voidauto_static(void)中变量va与vs的数据类型是什么?他们的存储类别各是什
么类别的?
答:函数voidauto_static(void)中变量va与vs的数据类型都是int型,va的存储类型是
动态存储类,而vs是静态存储类。
②程序在每次调用voidauto_static(void)时va与vs都初始化为0了,且都进行了相同的
++运算,但是va与vs却有不同的值,这是为什么?请解释出现不同值的原因。
答:va是动态存储类,是在被调函数内声明的局部变量,该变量会随着函数的调用结
束而释放。
vs变量虽然也是在被调用函数内声明的,也是局部变量。但是它的定义是静态的局部
变量。存储类型是静态存储类,该变量在函数调用结束不会释放,而且保留原值,这也就
是上面程序中,vs与va变量有不同值的原因。
3、实验总结
通过本次试验,我发现自己混淆了“值传递”与“地址传递”的方式与区别,对函数
的嵌套调用与递归调用的设计方法不是很清楚,我今后会多看书,多操作,来弥补自己的
不足。