数学与软件科学学院 实验报告
学期:11至12___ 第_1 学期 2011年10 月 17 日
课程名称:程序设计基础教程-C语言 专业:2010级5_班
实验编号:04 实验项目:分支结构的程序设计 指导教师_
姓名: 学号: 实验成绩:
一、实验目的及要求
(1) 掌握C语言程序设计中逻辑量的表示和运用方法;
(2) 掌握C语言程序设计中条件表达式的值的计算方法及其跟程序执行流程之间的逻辑顺序关系;
(3) 掌握C语言中的4中选择结构语句的执行逻辑及其运用方法。
二、实验内容
1. if 语句的实验。请分析如下语句段的逻辑关系:
int main(void)
{
...
if (nA>1 && nB==0) nX=nX/nA;
if (nA==2 || nX>1) nX=nX+1;
...
return 0;
}
(a) 以算法流程图的形式表述;
(b) 增加输入、输出功能以补充完整该程序段,使之能够运行;
(c) 测试该程序段的各种条件组合下的运行结果。测试数据组如下:
nA nB nX
1 1 1
1 1 2
3 0 1
2 0 4
2 1 1
1 0 2
2 1 2
3 0 2
(d) 分析讨论:
1) 用哪组数据就可以使程序段中每个处理语句都执行一次?为了找出程序中的逻辑错误,应使用什么样的数据进行测试?请上机验证自己的分析结果。
2) 用哪两组数据可以使程序段中的每个分支都至少运行一次?为找出各个分支中的逻辑错误,应选用什么样的数据进行逻辑测试?请上机验证自己的分析结果。
3) 用哪四组数据可以将从起点到终点的各条路径都覆盖一次?为了测试程序在各个不同路径上的错误,应选用什么样的测试数据?请上机验证自己的分析结果。
2. if else语句实验。用if else句型,编写求4个数中最大者的程序,并设计测试用例、记录测试结果;
3. (选做)试用if else if else if ...else实现求4个数中最大者的程序,并做相应测试;
4.请理清习题5-23的逻辑关系,并上机进行验证。
三、实验步骤(该部分不够填写.请填写附页)
1. 书P84-4-17
打开TC,输入程序#include<stdio.h>
int main()
{
int nYY,nWJ,nLJ,nYJ,nWF,nLF,nYF,nN;
clrscr();
printf("YY WJ LJ YJ WF LF YF\n");
for(nYY=0;nYY<=1;nYY++)
for(nWJ=0;nWJ<=10;nWJ++)
for(nLJ=0;nLJ<=10;nLJ++)
for(nYJ=0;nYJ<=10;nYJ++)
for(nWF=0;nWF<=100;nWF++)
for(nLF=0;nLF<=100;nLF++)
for(nYF=0;nYF<=100;nYF++)
if(nYY*100+nWJ*50+nLJ*20+nYJ*10+nWF*5+nLF*2+nYF==100)
printf("%2d%2d%2d%2d%2d%2d%2d%d\n",nYY,nWJ,nLJ,nYJ,nWF,nLF,nYF,nN);
getch();
return 0;
}
按ctrl+F9运行,结果见图一
2. 书P84-4-19
选择file菜单下的new,输入
#include<stdio.h>
#include<math.h>
int main()
{
int k,j;
clrscr();
for(k=1;k<=9;k++)
{for(j=1;j<=9;j++)
if(j<k)
printf(" ");
else
printf("%d%c%d%c%d\t",k,'*',j,'=',k*j);
printf("\n");}
getch();
return 0;
}
按ctrl+F9运行,结果见图二
3. 用if else句型,编写求4个数中最大者的程序
#include<stdio.h>
int main()
{
float fA,fB,fC,fD,fMAX;
clrscr();
printf("please input four numbers::\n");
scanf("%f %f %f %f", &fA,&fB,&fC,&fD);
fMAX=fA;
if(fMAX<fB)fMAX=fB;
if(fMAX<fC)fMAX=fC;
if(fMAX<fD)fMAX=fD;
printf("The max is %f\n",fMAX);
getch();
return 0;
}
按ctrl+F9运行,结果如图三
4. if 语句的实验。请分析如下语句段的逻辑关系:
int main(void)
{
...
if (nA>1 && nB==0) nX=nX/nA;
if (nA==2 || nX>1) nX=nX+1;
...
return 0;
}
(a) 以算法流程图的形式表述;
(b) 增加输入、输出功能以补充完整该程序段,使之能够运行;
int main()
{
int na,nb,nx,nc=0,nd=0;
clrscr();
scanf("%d %d %d",&na,&nb,&nx);
if(na>1&&nb==0)
{nx=nx/na;
nc=nc+1 ;}
if(na==2||nx>1)
{nx=nx+1;
nd=nd+1;}
printf("na=%d nb=%d nx=%d nc=%d nd=%d\n",na,nb,nx,nc,nd);
getch();
return 0;
}
(c) 测试该程序段的各种条件组合下的运行结果。测试数据组如下:
nA nB nX
1 1 1
1 1 2
3 0 1
2 0 4
2 1 1
1 0 2
2 1 2
3 0 2
实验结果见图四
(d) 分析讨论:
1)204
2)206,306实验结果见图五
3)
5.重新书写5-23的程序
int main()
{
int a,b,c,d,x;
clrscr();
scanf("%d %d %d %d",&a,&b,&c,&d);
if(a<b)
if(c<d)
x=1;
else
if(a<c)
if(b<d)
x=2;
else
x=3;
else
if(a<d)
if(b<c)
x=4;
else
x=5;
else
x=6;
else
x=7;
printf("x=%d",x);
getch();
return 0;
}
实 验 报 告 附 页
四、实验结果分析与评价 (该部分不够填写.请填写附页)
图一
图二
图三
图四
图五
注:实验成绩等级分为(90-100分)优,(80-89分)良,(70-79分)中,(60-69分)及格,(59分)不及格
第二篇:c语言 实验报告 范例
程序设计基础实验报告――选择结构程序设计
实验报告
实验题目:选择结构程序设计
实验目的:
(1) 了解C语言表示逻辑量的方法(以0代表“假”以非0
代表“真”)。
(2)
(3)
(4)
(5)
(6) 学会正确使用逻辑运算算符和逻辑表达式。 熟练掌握if语句的使用(包括if语句的嵌套)。 熟练掌握多分支选择语句——switch语句。 结合程序掌握一些简单的算法。 进一步学习调试程序的方法。
实验内容:
本实验要求事先编好解决下面问题的程序,然后上级输入程序并调试运行程序。
(1) 有一函数:
程序设计基础实验报告――选择结构程序设计
(x?1)?x?y??2x?1(1?x?10)
?3x?11x?10 ?
输入x的值,输出y相应的值。用scanf函数输入x的值,求y
x的值(分别为x<1、1?x?10、x?10这三值(第四章第六题) 运行程序,输入
种情况),检查输出y值是否正确。
答:
1)调试通过的程序清单如下:
#include<stdio.h>
void main() {
int x,y;
printf("请输入X:");
scanf("%d",&x);
if(x<1)
y=x;
else if(x<10)
y=2*x-1;
程序设计基础实验报告――选择结构程序设计
else y=3*x-11; printf("y=%d\n",y);
}
3)调试过程出现的问题说明及处理方法:
编译提示信息如下:
Compiling...
c4_4.c
F:\20113009711_选择结构程序设计\第四次实验\c4_4.c(10) : error C2059: syntax error : 'bad suffix on number'
F:\20113009711_选择结构程序设计\第四次实验\c4_4.c(10) : error C2146: syntax error : missing ';' before identifier 'x'
F:\20113009711_选择结构程序设计\第四次实验\c4_4.c(10) : warning C4552: '-' : operator has no effect; expected operator with side-effect
F:\20113009711_选择结构程序设计\第四次实验\c4_4.c(11) : error C2181: illegal else without matching if
F:\20113009711_选择结构程序设计\第四次实验\c4_4.c(11) : error C2059: syntax error : 'bad suffix on number'
F:\20113009711_选择结构程序设计\第四次实验\c4_4.c(11) : error C2146: syntax error : missing ';' before identifier 'x'
F:\20113009711_选择结构程序设计\第四次实验\c4_4.c(11) :
程序设计基础实验报告――选择结构程序设计
warning C4552: '-' : operator has no effect; expected operator with side-effect
执行 cl.exe 时出错.
c4_4.obj - 1 error(s), 0 warning(s) 原因分析:
由于习惯在数学上习惯于用2x表示2*x,导致在这里忽略了“*”,以致程序出现严重错误。
(2) 从键盘输入一个小于1000的正数,
要求输出它的平方根(如平方根不是
整数,则输出其整数部分)。要求在输入数据后先对其进行检查是否小
于1000的正数。若不是,则要求重
新输入。
1)调试通过的程序清单如下:
#include<stdio.h>
#include<math.h>
#define M 1000
int main()
{
程序设计基础实验报告――选择结构程序设计
int i,k;
printf("请输入一个小于%d的整数i:",M); scanf("%d",&i);
if(i>1000) {printf("输入的数据有误,请重新输入:",M);
scanf("%d",&i); }
k=sqrt(i);
printf("%d的平方根的整数部分是%d\n",i,k);
return 0;
}
2)调试通过的运行结果:
3)调试过程出现的问题说明及处理方法: Compiling...
c4_4.c
F:\20113009711_选择结构程序设计\第四次实验\c4_4.c(10) :
程序设计基础实验报告――选择结构程序设计
error C2018: unknown character '0xa3'
F:\20113009711_选择结构程序设计\第四次实验\c4_4.c(10) : error C2018: unknown character '0xbb'
F:\20113009711_选择结构程序设计\第四次实验\c4_4.c(11) : error C2146: syntax error : missing ';' before identifier 'scanf' F:\20113009711_选择结构程序设计\第四次实验\c4_4.c(13) : warning C4244: '=' : conversion from 'double ' to 'int ', possible loss of data
执行 cl.exe 时出错.
c4_4.exe - 1 error(s), 0 warning(s)
答:
因为把第十行的“;”在中文模式输入,变成了“;”导致编译错误。
(3) 给出一个百分制成绩,要求输出成绩
等级A,B,C,D,E.90分以上为A,81~89分为B,70~79分为C,60分
~69分为D,60分以下为E。
① 事先编好程序,要求分别用if语句和
程序设计基础实验报告――选择结构程序设计
switch语句来实现。运行程序,并检查结果是否正确。 1)调试通过的程序清单如下: #include<stdio.h> void main() {
int g,s; char ch; printf("\n输入学生的分数:"); scanf("%d",&g); s=g/10; if(s<0||s>10) { switch(s) { case 10: case 9:ch='A';break; case 8:ch='B';break; case 7:ch='C';break; case 6:ch='D';break; printf("\n输入数据错误!\n\n"); else
程序设计基础实验报告――选择结构程序设计
} } default:ch='E'; } printf("\n学生的成绩等级是:%c\n\n",ch); 2)调试通过的运行结果:
3)调试过程出现的问题说明及处理方法:
(1)编译提示信息如下: Compiling...
c4_4.c
c4_4.obj - 0 error(s), 0 warning(s)
(2)连接提示信息如下:
程序设计基础实验报告――选择结构程序设计
Linking...
c4_4.exe - 0 error(s), 0 warning(s)
原因分析:
由于忽略了在程序中加入换行符,导致输出成绩等级和“Press any ey to contine”连在一起。
② 再运行一次程序,输入分数为负值,这显
然是输入时出错,不应给出等级,修改程序,使之能正确处理任何数据,当输入数据大于100和小于0时,通知用户“输入数据错误”。程序结束。
答:在编写程序的时候已经考虑到了该情况,第一次编写时已经进行了优化,能够自动处理该情况的出现。以下是运行结果:
程序设计基础实验报告――选择结构程序设计
(4) 输入4个整数,要求按由小到大顺序
输出,在得到正确结果后,修改程序
使之按由大到小的顺序输出。 1) 调试通过的程序清单如下: #include<stdio.h> int main()
{
int a,b,c,d,t; printf("请依次输入四个整数以空格隔开。\n"); scanf("%d%d%d%d",&a,&b,&c,&d); if(a>b) { t=a; a=b; b=t; } if(a>c) { t=a; a=c; c=t;
程序设计基础实验报告――选择结构程序设计
} if(a>d) { } if(b>c) { } if(b>d) { } if(c>d) { t=c; t=b; b=d; d=t; t=b; b=c; c=t; t=a; a=d; d=t;
程序设计基础实验报告――选择结构程序设计
} c=d; d=t; printf("四个整数经从小到大的顺序排列后的结果如下\n");
}
printf("%d,%d,%d,%d\n",a,b,c,d); return 0;
2) 程序运行的结果:
从大到小排列的程序是: 1) 通过排列的程序清单如下: #include<stdio.h>
int main()
{
int a,b,c,d,t; printf("请依次输入四个整数以空格隔开。\n");
程序设计基础实验报告――选择结构程序设计
scanf("%d%d%d%d",&a,&b,&c,&d); if(a<b) { t=a; a=b; b=t; } if(a<c) { } if(a<d) { } if(b<c) { t=b; t=a; a=d; d=t; t=a; a=c; c=t;
程序设计基础实验报告――选择结构程序设计
} b=c; c=t; if(b<d) { } if(c<d) { } printf("四个整数经从大到小的顺序排列后的结果如下t=c; c=d; d=t; t=b; b=d; d=t; \n");
} printf("%d,%d,%d,%d\n",a,b,c,d); return 0;
3) 运行的结果:
程序设计基础实验报告――选择结构程序设计
实验心得:
通过此次实验本人更加熟练的掌握了程序C语言逻辑运算符和逻辑表达式的应用,也深深了解到了,C语言的强大,同时是我对这门语言的兴趣更加深厚。做完本次实验,我纠正了以往的一个观点,学习一门语言不要以为看书看明白了就以为对这方面的知识掌握了,学习语言更为重要的是要会使用,不能仅仅是以为明白就可以了事,合上书本,能够应用这方面的知识写出一个程序来,才能算对它的初步掌握。