printf("min=%d\n",b);
else
if((c
printf("min=%d\n",c);
}
(2)运行结果:
(3)运行结果分析:
答:
原程序中scanf语句中没有加地址符&,有些分号为全角,应该换成半角,并且原程序中的if语句不够全面,导致输入213时无输出结果,经修改,任意输入三个不同的整数,均可输出与实际相符的正确结果。
2.参考上一题,编写一个C程序,求a、b、c、d四个数中的最大者。
编程点拨:
①多定义一个变量,并一开始令变量max=a;
②if(max
解答:
(1)源代码:
#include"stdio.h"
intmain()
{
inta,b,c,d,max;
printf("请输入4个数:
\n");
scanf("%d%d%d%d",&a,&b,&c,&d);
max=a;
if(b>max)
{
max=b;
}
if(c>max)
{
max=c;
}
if(d>max)
{
max=d;
}
printf("最大的数是%d\n",max);
return0;
}
(2)运行结果:
(3)运行结果分析:
首先max=a,即51,然后执行第一条if语句,b=21,b>max为假,执行下一条if语句,c=3,c>max为假,执行下一条if语句,d=98,d>max为真,执行花括号里面的语句,max=d,即a与d互换,max变为d,即98,输出最大的数是98.
3.输入4个整数,要求按由小到大顺序输出。
得到正确结果后,修改程序使之按由大到小顺序输出。
相关知识:
①输入函数scanf()的使用;②简单的排序算法;③通过中间变量t交换a和b值的方法:
t=a;a=b;b=t;。
解答:
(1)源代码:
#include
intmain()
{
floata,b,c,d,t;
printf("请输入四个正整数:
\n");
scanf("%f%f%f%f",&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("%5.2f,%5.2f,%5.2f,%5.2f\n",a,b,c,d);
return0;
}
(2)运行结果:
(3)运行结果分析:
首先a=25,b=11,c=6,d=64,a>b为真,从而a、b互换,现在a=11,b=25,c=6,d=64,
a>c为真,从而a、c互换,现在a=6,b=25,c=11,d=64,然后a>d为假,不执行接在它下面花括号里面的内容,再,b>c为真,从而b、c互换,现在a=6,b=11,c=25,d=64,接下来b>d和c>d均为假,最终执行输入语句,输出结果如上图所示。
4.根据以下函数关系,对输入的每个x值,计算出相应的y值。
当X取其他值时
解答:
(1)源代码:
#include
#include
intmain()
{
doublex,y;
printf("请输入一个x值\n");
scanf("%lf",&x);
if(x>=0&&x<=1)
y=exp(sqrt(x))-1;
else
if(x>=3&&x<=4)
y=fabs(x)+2;
else
y=sin(x*x);
printf("y=%f\n",y);
return0;
}
(2)运行结果:
(3)运行结果分析:
试验了3个值,x分别等于0,3,5经验证均与实际情况相符合。
5模仿第4题,写程序实现以下函数:
用scanf函数输入x的值,求y值。
运行程序,输入x的值(分别为x<1、1≤x<10、x≥10三种情况),检查输出的y值是否正确。
解答:
(1)源代码:
#include
#include
intmain()
{
doublex,y;
printf("请输入自变量x的值\n");
scanf("%lf",&x);
if(x<1)
y=x;
else
if(x>=1&&x<=10)
y=2*x-1;
else
y=3*x-11;
printf("y的值为%f\n",y);
return0;
}
(2)运行结果:
(3)运行结果分析:
试验了3个值,分别为0,8,100,输出结果均与实际运算相符合
6.阅读分析以下程序的功能。
#include
voidmain()
{intchoice;
intvalue;
printf("Convert:
\n");/*显示菜单*/
printf("1:
decimaltohexadecimal\n");
printf("2:
hexadecimaltodecimal\n");
printf("3:
decimaltooctal\n");
printf("4:
octaltodecimal\n");
printf("enteryourchoice:
");
scanf("%d",&choice);
switch(choice)
{case1:
/*选中1时处理*/
printf("enterdecimalvalue:
");
scanf("%d",&value);
printf("%dinhexadecimalis:
%x\n",value,value);
break;
case2:
/*选中2时处理*/
printf("enterhexadecimalvalue:
");
scanf("%x",&value);
printf("%xindecimalis:
%d\n",value,value);
break;
case3:
/*选中3时处理*/
printf("enterdecimalvalue:
");
scanf("%d",&value);
XX文库-让每个人平等地提升自我printf("%dinoctalis:
%o\n",value,value);
XX文库-让每个人平等地提升自我break;
case4:
/*选中4时处理*/
XX文库-让每个人平等地提升自我printf("enteroctalvalue:
");
scanf("%o",&value);
printf("%oindecimalis:
%d\n",value,value);
break;
}
}
解答:
(1)运行结果:
(2)运行结果分析:
该程序为一个实现进制转换功能的程序,choice1对应十进制转十六进制,choice2对应十六进制转十进制,choice3对应十进制转八进制,choice4对应八进制转十进制。
实验的时候选了choice2,即实现将一个十六进制的数转换为十进制,如上图所示,验证情况如下图。
7.模仿第6题,要求对输入的数字1~7转换成文字星期几,对其它数字不转换。
例如,输入5时,程序应该输出Friday。
解答:
(1)源代码:
#include
intmain()
{
intday;
printf("转换\n");/*显示菜单*/
printf("请输入一个数字:
\n");
scanf("%d",&day);
if(day<0||day>7)
printf("请再次输入\n");
switch(day)
{
case1:
/*选中1时处理*/
printf("Monday\n");
break;
case2:
/*选中2时处理*/
printf("Tuesday\n");
break;
case3:
/*选中3时处理*/
printf("Wednesday\n");
break;
case4:
/*选中4时处理*/
printf("Thursday\n");
break;
case5:
/*选中4时处理*/
printf("Friday\n");
break;
case6:
/*选中4时处理*/
printf("Saturday\n");
break;
case7:
/*选中4时处理*/
printf("Sunday\n");
break;
}
return0;
}
(2)运行结果:
(3)运行结果分析:
输入一个1到7阿拉伯数字,将它转换为星期几。
实验的时候,输入一个数字7,输出结果为Sunday。
当输入一个小于0或大于7的数字时,例如12,输出结果为“请再次输入”。
三、结论
本次试验主要涉及用if语句处理选择结构以及用switch语句实现多分支选择结构,深刻体现了选择结构程序设计的思想以及方法的多样性与灵活性。
还涉及到了用C语言来表现数学中的分段函数问题。
说明:
1.电子实验报告填写好后,以学生的学号+实验项目名作为该word文件名保存,例如某学生学号为20080001,姓名为某某,本次实验名称是:
实验一顺序结构程序设计,则本次实验报告的保存文件名为:
01某某实验一.doc。
2.在规定的时间内,学生将本报告提交给实验指导教师。