printf("min=%d\n",c);
}
2.输入1-7之间的任意数字,程序按照用户的输入输出相应的星期值
#include
voidmain()
{
intday;
scanf("%d",&day);
switch(day)
{
case1:
printf("Monday\n");break;
case2:
printf("Tuesday\n");break;
case3:
printf("Wednesday\n");break;
case4:
printf("Thursday\n");break;
case5:
printf("Friday\n");break;
case6:
printf("Saturday\n");break;
case7:
printf("Sunday\n");break;
default:
printf("Theinputiswrong!
\n");
}
}
四读程序:
1.计算sum=1!
+2!
+…+n!
#include
voidmain()
{
inti,ns=1,sum=0;
scanf(“%d”,&n);
for(i=1;i<=n;i++)
{
s=i*s;
sum=sum+s;
}
printf(“%d!
=%d”,n,sum);
}
2.从数字1开始到200之间,求能被3整除的数,然后求这些数的累加和,直到和的值不大于100为止。
输出这些数及累加和。
#include
voidmain()
{
inti,sum=0;
for(i=1;i<=200;i++)
{
if(i%3!
=0)continue;
sum=sum+i;
printf(i=%6d”,i);
}
printf(“sum=%6d”,sum);
}
3.编写程序以输出下图:
*
***
*****
***
*
#include
main()
{
inti,j,k;
for(i=0;i<3;i++)/*第一个双循环输出上面3行*号*/
{
for(j=0;j<2-i;j++)printf("");/*输出*号前面的空格*/
for(k=0;k<=2*i;k++)printf("*");/*输出*号*/
printf("\n");/*输出完一行*号后换行*/
}
for(i=0;i<2;i++)/*第二个循环嵌套输出下面2行*号*/
{
for(j=0;j<=i;j++)printf("");
for(k=0;k<3-2*i;k++)printf("*");
printf("\n");
}
}
4.求Fibonacci数列前40个数。
这个数列有如下特点,第1、2两个数为1,1。
从第三个数开始,该数是其前面两个数之和。
即
F1=F2=1(n=1,2)
Fn=Fn-1+Fn-2(
)
这是由一个古典数学问题引出的,这个问题是这样,有一对兔子,从出生第3个月起每个月都生一对兔子。
小兔子长到第三个月又生一对兔子。
假设所有兔子不死,问每个月的兔子总是多少。
这个问题就是Fibonacci数列问题。
#include
main()
{
longf1=1,f2=1;/*定义长整型变量f1,f2,以免数据溢出*/
inti;
for(i=1;i<=20;i++)
{
printf("%10ld,%10ld\n",f1,f2);/*10ld表示输出数据为长整型,10个字符位置*/
f1=f1+f2;
f2=f1+f2;
}
}
五读程序:
1.利用循环对数组进行赋值和输出:
将任意4个实型数赋给数组a,然后输出数组a。
#include
main()
{
floata[4];
inti;
printf(“Pleaseinput4floatnumber:
”);
for(i=0;i<4;i++)
scanf(“%f”,&a[i]);/*第一个for循环是对数组赋值,i控制数组元素个数*/
for(i=0;i<4;i++)
printf(“%f”,a[i]);/*第二个for循环,依次输出每个数组元素*/
}
如果在对数组元素进行赋值的时候,想在输入每个数之前显示对应的数组名称,第一个for循环可改成如下形式:
for(i=0;i<4;i++)
{
printf(“a[%d]=”,i);
scanf(“%f”,&a[i]);
}
输出时要显示数组名称可将第二个for循环中的printf函数改为
printf(“a[%d]=%f”,i,a[i]);
2利用双循环对二维数组进行赋值和输出:
将数据3,0,-2,11,-5,10赋给一个2行3列的二维数组,输出这个二维数组。
#include
main()
{
inti,j,a[2][3]={{3,0,-2},{11,-5,10}};
for(i=0;i<2;i++)/*外层循环控制行数*/
for(j=0;j<2;j++)/*内循环控制列数*/
printf(“a[%d][%d]=%d”,i,j,a[i][j]);
}
2.从键盘任意输入字符串,将其中所有的大写字母改为小写字母,而所有小写字母改为大写字母,其它字符不变。
(不调用任何字符串处理函数)
#include
main()
{
chars[100];
inti;
gets(s);
for(i=0;s[i]!
='\0';i++)
{
if(s[i]>='A'&&s[i]<='Z')
s[i]=s[i]+32;
else
if(s[i]>='a'&&s[i]<='z')
s[i]=s[i]-32;
}
puts(s);
}
六读程序:
3.猴子吃桃问题:
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃一个。
以后每天早上都吃了前一天剩下的一半加一个。
到第5天早上想再吃时,见只剩下一个桃子了,求第一天摘了多少?
#include
intfun(intp)
{
intn=1,day;
for(day=1;day<=p;day++)
n=(n+1)*2;
returnn;
}
voidmain()
{
intn,day;
printf("Pleaseinputday:
");
scanf("%d",&day);
n=fun(day);
printf("%d",n);
}
(1)算法分析:
解决此问题采取逆向思维的方法,从后往前推断。
(2)子函数分析:
本题的子函数写在主函数的上面,并设置成带有返回值,当然也可以改成不带返回值的。
参数的传递过程是将主函数中day的值传给子函数的参数p,代表已过的天数。
题目中说“到第5天早上想再吃时”,此题中的子函数可以实现任意天的计算,比如9天,8天吃光,这个值由主函数输入。
另外变量n表示猴子摘下的桃子个数。
2.编写程序,利用递归的方法计算n!
#include"stdio.h"
voidmain()
{
longfun(intn);
intn;
printf("Pleaseinputn:
");
scanf("%ld",&n);
printf("%d!
=%ld",n,fun(n));
}
longfun(intn)
{
longs;
if(n==1)return1;
else
{
s=n*fun(n-1);
returns;
}
}
分析:
此题目求n!
时候采用了递归调用。
其结束条件是当n的值减到1时停止递归调用,采用递归调用时候最主要一点就是一定在函数中明确递归的结束条件。
而且递归的过程同学们也需要注意一下,书中151页图5-5表示的非常清晰,请参考。
此题子函数放在了主函数的下边,这样在主函数中要声明一下子函数,即语句longfun(intn);另外此题中的子函数也是有返回值函数。
3.判断一个整数是否为素数,是的输出YES,不是输出NO,这个整数由主函数输入。
#include"stdio.h"
#include"math.h"
intfun(intx)
{
inti,flag=1;
if(x==2||x==3)
return1;
elseif(x==1)
return0;
else
{
for(i=2;i<=(int)sqrt(x);i++)
if(x%i==0)
flag=0;
if(flag==1)
return1;
elsereturn0;
}
}
voidmain()
{
intx,flag;
printf("Pleaseinputintegerx:
");
scanf("%d",&x);
flag=fun(x);
if(flag==1)
printf("YES\n");
else
printf("NO\n");
}
知识补充:
素数:
它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积。
素数也是质数。
需要稍微注意的是1不是素数。
(记住一句话:
1什么都不是。
)2是素数,3是素数。
4以上相信大家都会判断了。
4.一个一维数组score,内放10个学生的成绩,求这10个人的平均成绩。
#include"stdio.h"
floataverage(floata[10])
{
inti;
floatave,sum=a[0];
for(i=1;i<10;i++)
sum=sum+a[i];
ave=sum/10;
returnave;
}
main()
{
floatscore[10],ave;
inti;
printf("Pleaseinput10numbers:
\n");
for(i=1;i<10;i++)
scanf("%f",&score[i]);
printf("\n");
ave=average(score);
printf("averagescoreis%.2f\n",ave);
}
说明:
此题用数组名做函数参数,score是实参数组名,a为形参数组名。
调用时数组类型一定要一致,数组名称可相同也可不相同,此题中不相同。
实验二参考答案
1.输入两个整型数字,输出他们的和。
#include
main()
{
inta,b,sum;
scanf(“%d%d”,&a,&b);
sum=a+b;
printf(“a+b=%d”,sum);
}
2.输入两个实型数,输出他们的和与乘积。
#include
main()
{
floata,b,sum,product;
scanf(“%f%f”,&a,&b);
sum=a+b;
product=a*b;
printf(“a+b=%5.2f,a*b=%5.2f”,sum,product);
}
3.求方程
的根(设
)(其中a,b,c的值由键盘输入)。
#include
#include
main()
{
floata,b,c,dt,x1,x2;
scanf(“%f%f%f”,&a,&b,&c);
dt=sqrt(b*b-4*a*c);
x1=(-b+dt)/(2*a);
x2=(-b-dt)/(2*a);
printf(“x1=%5.2f,x2=%5.2f”,x1,x2);
}4.鸡兔同笼,已知鸡兔总头数为h,总脚数为f,求鸡兔各多少只?
(h和f的值由键盘输入,输出鸡和兔的头数)
#include
main()
{
inth,f,x,y;
scanf(“%d%d”,&h,&f);
x=2*h-f/2;
y=f/2-h;
printf(“x=%d,y=%d”,x,y);
}
实验三参考答案
1.输入三个数a、b、c,要求按由小到大的顺序输出。
#include
main()
{
floata,b,c,t;
scanf(“%f,%f,%f”,&a,&b,&c);
if(a>b)
{
t=a;a=b;b=t;
}
if(a>c)
{
t=a;a=c;c=t;
}
if(b>c)
{
t=b;b=c;c=t;
}
printf(“%f,%f,%f”,a,b,c);
}
2.编写程序,输入三角形三边a、b、c,判断a、b、c能否构成三角形,若不
能则输出相应的信息,若能则判断组成的是等腰、等边、直角还是一般三角形。
#include
main()
{
floata,b,c,t;
scanf(“%f,%f,%f”,&a,&b,&c);
if(a>b)
{
t=a;a=b;b=t;
}
if(a>c)
{
t=a;a=c;c=t;
}
if(b>c)
{
t=b;b=c;c=t;
}
if(a+b>c)
{
if(a==b||b==c)
{
if(a==c)printf(“等边三角型”);
elseif(c*c==a*a+b*b)printf(“等腰直角三角形”);
elseprintf(“一般等腰三角形”);
}
elseif(c*c==a*a+b*b)printf(“一般直角三角形”);
elseprintf(“一般三角形”);
}
elseprintf(“不构成三角形”);
}
3.编程实现下列函数
x(x<1)
y=2x-1(
)
|3x-11|(
)
#include
#include
main()
{
intx,y;
printf("inputx=:
");
scanf("%d",&x);
if(x<1)y=x;
elseif(x<10)y=2*x-1;
elsey=abs(3*x-11);
printf("x=%dy=%d\n",x,y);
}
4.编写程序,输入一百分制成绩,对应输出等级A、B、C、D、E,90分以上为A,80分—89分为B,70分—79分为C,60分—69分为D,60分以下为E。
方法一:
用if语句
#include
main()
{
floatscore;
chargrade;
scanf("%f",&score);
if(score>100||score<0)printf("\ninputerror!
");
else
{
if(score>=90)grade='A';
elseif(score>=80)grade='B';
elseif(score>=70)grade='C';
elseif(score>=60)grade='D';
elsegrade='E';
}
printf("thestudentgrade=%c\n",grade);
}
方法二:
用switch语句。
注意,case后的表达式必须是一个常量表达式,所以在以用switch语句之前,必须把0~100之间的成绩分别化成相关的常量。
所有A(除100以外),B,C,D类的成绩的共同特点是十位数相同,此外都是E类。
则由此可得把score除十取整,化为相应的常数。
#include
main()
{
floatscore,
ints;
chargrade;
scanf("%f",&score);
s=score/10;
if(s<0||s>10)printf("\ninputerror!
");
else
{
switch(s)
{
case10:
case9:
grade='A';break;
case8:
grade='B';break;
case7:
grade='C';break;
case6:
grade='D';break;
default:
grade='E';
}
printf("thestudentgrade=%c\n",ch);
}
}
实验四参考答案
1.编写程序,计算以下级数前n项之和。
#include
voidmain()
{
inti,n;
floats=1.0,sum=1.0,x;
scanf(“%d,%f”,&n,&x);
for(i=1;i<=n;i++)
{
s=s*x/i;
sum=sum+s;
}
printf(“sum=%5.2f”,sum);
}
2.编程打印如下图案(书后习题第3题):
**
****
******
********
**********
************
**************
#include
main()
{
inti,j,n;
for(i=1;i<=7;i++)
{
for(j=0;j<14-2*i;j++)printf("");
for(j=0;j<2*i;j++)printf("*");
printf("\n");
}
}3.编写程序实现输入整数n,输出如下所示由数字组成的菱形。
(图中n=5)
1
121
12321
1234321
123454321
1234321
12321
121
1
#include
main()
{
inti,j,n;
scanf("%d",&n);
for(i=1;i{
for(j=1;j
for(j=i;j>0;j--)printf("%d",j);
printf("\n");
}
for(i=n;i>0;i--)
{
for(j=1;j
for(j=i;j>0;j--)printf("%d",j);
printf("\n");
}
}
4.输出Fibonacci数列第n项。
其数列通项公式为Fn=Fn-1+Fn-2,F1=1,F2=1。
方法一:
#include
main()
{
floatf,f1=1,f2=1;
inti,n;
scanf("%d",&n);
for(i=3;i<=n;i++)
{
f=f1+f2;
f1=f2;
f2=f;
}
printf("%10.0f\n",f);
}
方法二:
#include
#defineNUM20
voidmain()
{
inti;
floatf[NUM]={1,1};
for(i=2;if[i]=f[i-2]+f[i-1];
for(i=0;iprintf("%10.0f\n",f[i]);
}
实验五参考答案
1.编写程序,将1,2,3这三个数赋给数组a,将5,6,7赋给数组b,将两数组对应元素相加的和赋给数组c,输出数组c
#include
voidmain()
{
inta[3]={1,2,3},b[3]={4,5,6},c[3];
inti;
for(i=0;i<3;i++)
{
c[i]=a[i]+b[i];
printf("%d",c[i]);
}
}2.输入任意10个数,按从大到小或从小到大的