实验报告
实验目的:
(1)掌握“条件”的正确表示
(2)掌握多分支控制的逻辑结构
(3)继续巩固表达式的运用,并通过编程具体运用
实验内容:
【实验3-1】编写一程序,实现分段函数求值,其中y关于x的函数为:
(1) 程序代码
(2) #include<iostream>
#include<cmath>
using namespace std;
void main()
{
float x,y;
cout<<"请输入x"<<endl;
cin>>x;
if (x<0)
{
y=-x;
}
else if (x>=0&&x<10)
{
y=exp(x)*sin(x);
}
else if (x>=10&&x<20)
{
y=pow(x,30);
}
else
{
y=(3+2*x)*log(x);
}
cout<<"当x="<<x<<"时,y="<<y<<endl;
}
(2)运行结果
【实验3-2】从键盘输入三个数据,求其中最大值,并输出。
(1)程序代码
(2)运行结果
【实验3-3】求ax2+bx+c=0方程的解
a=0,不是二次方程
b2-4ac=0,有两个相等实根
b2-4ac>0 ,有两个不等实根
b2-4ac<0 ,有两个共轭复根
#include <iostream>
#include<cmath>
using namespace std;
void main()
{
int a,b,c;
float x1,x2,z;
cin>>a>>b>>c;
z=b*b-4*a*c;
if(z>0)
{
x1=((-b)+sqrt(z))/(2*a);
x2=((-b)-sqrt(z))/(2*a);
cout<<"The result: x1="<<x1<<" x2="<<x2<<endl;
}
else
if(z==0)
{
x1=-b/(2*a);
cout<<"The result: x1="<<x1<<endl;
}
else
cout<<"no result";
}
(1)程序代码
(2)运行结果
提示:浮点数不能直接相等,例如判断单精度浮点数a的值是否等于1.01,验证下面程序:
分析两段程序的运行结果,浮点数不能精确判定是否相等,只能在一定范围内判定值大概相等。掌握处理方法;
思考二次方程中判别式等于0的情况,判定条件应如何处理。
实验小结:
第二篇:c语言-选择结构程序设计实验报告4
实验报告
实验题目:选择结构程序设计
实验目的:
(1) 了解C语言表示逻辑量的方法(以0代表“假”以非0代表“真”)。
(2) 学会正确使用逻辑运算算符和逻辑表达式。
(3) 熟练掌握if语句的使用(包括if语句的嵌套)。
(4) 熟练掌握多分支选择语句——switch语句。
(5) 结合程序掌握一些简单的算法。
(6) 进一步学习调试程序的方法。
实验内容:
本实验要求事先编好解决下面问题的程序,然后上级输入程序并调试运行程序。
(1) 有一函数:
输入的值,输出相应的值。用scanf函数输入的值,求值(第四章第六题)
运行程序,输入的值(分别为x<1、、这三种情况),检查输出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)
printf("\n输入数据错误!\n\n");
else
{
switch(s)
{
case 10:
case 9:ch='A';break;
case 8:ch='B';break;
case 7:ch='C';break;
case 6:ch='D';break;
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)
{
t=a;
a=d;
d=t;
}
if(b>c)
{
t=b;
b=c;
c=t;
}
if(b>d)
{
t=b;
b=d;
d=t;
}
if(c>d)
{
t=c;
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)
{
t=a;
a=c;
c=t;
}
if(a<d)
{
t=a;
a=d;
d=t;
}
if(b<c)
{
t=b;
b=c;
c=t;
}
if(b<d)
{
t=b;
b=d;
d=t;
}
if(c<d)
{
t=c;
c=d;
d=t;
}
printf("四个整数经从大到小的顺序排列后的结果如下\n");
printf("%d,%d,%d,%d\n",a,b,c,d);
return 0;
}
3) 运行的结果:
实验心得:
通过此次实验本人更加熟练的掌握了程序C语言逻辑运算符和逻辑表达式的应用,也深深了解到了,C语言的强大,同时是我对这门语言的兴趣更加深厚。做完本次实验,我纠正了以往的一个观点,学习一门语言不要以为看书看明白了就以为对这方面的知识掌握了,学习语言更为重要的是要会使用,不能仅仅是以为明白就可以了事,合上书本,能够应用这方面的知识写出一个程序来,才能算对它的初步掌握。