C语言程序设计实验57.docx
《C语言程序设计实验57.docx》由会员分享,可在线阅读,更多相关《C语言程序设计实验57.docx(11页珍藏版)》请在冰点文库上搜索。
C语言程序设计实验57
实验4
1.以下几段源程序有错,请调试修改正确。
①/*源程序实现的功能:
输入两个实数,按从小到大的顺序输出*/main()
{floata,b,t;
scanf(“%f,%,f&”a,&b);
if(a>b)
t=a;a=b;b=t
printf(“%5.2f,%5.2f”,a,b);
}
#include
intmain(){
floata,b,t;
scanf("%f,%f",&a,&b);
if(a>b){
t=a;a=b;b=t;}printf("%5.2f,%5.2f",a,b);
}
②该源程序实现的功能是:
有如下函数关系:
x(x>0)
y=2(x=0)
3x(x<0)
根据输入的x值,求出y的值。
main(){intx,y;
printf(“Enterx:
”);
scanf(“d%”&,x);
ifx>0y=x;
elseif(x=0)y=2;
elsey=3*x;
printf(“x=%yd=%dn”,x,y);
}
#include
intmain(){
intx,y;
printf("Enterx:
");scanf("%d",&x);
if(x>0)y=x;
elseif(x==0)
y=2;elsey=3*x;
printf("x=%dy=%d\n",x,y);}
#includeintmain(){
intx,y;scanf("%d",&x);if(x<1)
y=x;
elseif(x<10)y=2*x-1;else
y=3*x-11;
printf("y=%d",y);
}
t(月数)确定如下:
某物品原有价值为p,由于使用使其价值降低,价值的折扣率根据时间t<3,无折扣
3<=t<6,2%折扣
6<=t<12,5%折扣
12==21,10%折扣编程实现:
根据输入的时间和原有价值计算物品的现有价值。
#include
intmain(){
intp,t;floaty;
printf("输入原有价值和使用时间:
");scanf("%d,%d",&p,&t);
if(t<3)y=p;
elseif(t<6)y=0.98*p;
elseif(t<12)y=0.95*p;
elseif(t<21)y=0.92*p;
elsey=0.9*p;
printf("现有价值为:
%.2f",y);
4.给一个不多于5位的正整数,要求:
①求出它是几位数;
②分别打出每一位数字;③按逆序打出各位数字,例如原数为321,应输出123
#include
intmain(){
intnum,a,ge,shi,bai,qian,wan;printf("enteranumber(0-99999):
");scanf("%d",&num);
if(num>9999)a=5;
elseif(num>999)a=4;
elseif(num>99)a=3;
elseif(num>9)a=2;elsea=1;
wan=num/10000;qian=num/1000%10;
bai=num/100%10;shi=num/10%10;
ge=num%10;
switch(a){
case5:
{printf("5位数");printf("---%d,%d,%d,%d,%d---",wan,qian,bai,shi,ge);printf("倒序为:
%d%d%d%d%d",ge,shi,bai,qian,wan);break;
}
case4:
{printf("4位数");printf("---%d,%d,%d,%d---",qian,bai,shi,ge);printf("倒序为:
%d%d%d%d",ge,shi,bai,qian);break;
}
case3:
{printf("3位数");printf("---%d,%d,%d---",bai,shi,ge);printf("倒序为:
%d%d%d",ge,shi,bai);break;
}
case2:
{printf("2位数");printf("---%d,%d---",shi,ge);printf("倒序为:
%d%d",ge,shi);break;
}
case1:
{
printf("1位数");
printf("---%d---",ge);
printf("倒序为:
%d%d%d%d%d",ge);break;}}}
实验5
1.以下程序的功能是实现从键盘输入一组字符,统计出大写字母的个数m和小写字母的个数n,并输出m、n中的较大者。
程序中有错,请调试修改正确。
main()
{intm,n;charc;while((c=getchar())!
='\n');{if(c>='A'&&c<='Z')m++;
if(c>='a'&&c<='z')n++;
}
printf("%d\n",mm:
n);
}
#include
intmain()
{intm=0,n=0;charc;
while((c=getchar())!
='\n')
{if(c>='A'&&c<='Z')m++;if(c>='a'&&c<='z')n++;
}printf("%d\n",m>n?
m:
n);}
2.以下程序可以实现从键盘输入一串数字,然后以相反的顺序将它们输出,如输入:
1234,输出4321,请填空。
main()
{intnumber,right;
printf("enteryounumber:
\n");scanf("%d",&number);
do
①→number%10
②→number/10
{right=①;printf("%d",right)number=②;
}
while(number!
=0);
printf("\n");}
3.求Sn=a+aa+aaa+⋯+aa⋯a之值,其中a是一个数字。
例如:
2+22+222+2222+22222(此时n=5),n由键盘输入。
#include
intmain(){
intSn=0,n,sum=0;
inta=2;printf("entern:
");scanf("%d",&n);for(inti=0;i}printf("Sn=%d",Sn);
}
4.有一数列:
2/1,3/2,5/3,8/5,⋯求出这个数列的前20项之和。
#includeintmain(){floatsum=0,c,a=2,b=1;for(inti=0;i<20;i++){
sum=sum+a/b;c=a;a=b+c;b=c;
}
printf("sum=%.2f",sum);}
四、思考题
1.猜数游戏。
玩游戏者输入一个数,提示此数是太大、太小或猜中,重新输入数据直到猜
中为止。
(提示:
在程序中设置一个整数,此数即是玩游戏者要猜的数)
2.百钱买百鸡问题。
公鸡每只5元,母鸡每只3元,小鸡3只一元,问一百元买一百只鸡有几种解法。
提示:
设x,y,z为三种鸡的只数,按题目写出代数方程为:
x+y+z=1005x+3y+z/3=100
用穷举法列举出x、y、z的值能懂就懂,不懂就不看了。
#include
intmain(){
intx,y,z;
for(x=1;x<=20;x++)
for(y=1;y<=33;y++)
for(z=1;z<=100;z++)
if(x+y+z==100&x*5+3*y+z/3==100)printf("%d,%d,%d\n",x,y,z);}
这是结果输出,后面最后一个是小鸡的,但是很明显,小鸡的个数要能整
除3,所以,再怎么改,请自己操作。
TIP:
就只需要在一个地方加一个条件。
实验6
1.以下程序段将输出computer,请填空。
#include“stdio.h”
main()
{inti,j=0;
charc[]=”it'sacomputer”;
for(i=0;①;i++)①→i<8
{②;②→j=i+7
printf(“%c”,c[j]);
}}
2.以下程序的功能是求数组num中小于零的数据之和,程序中存在错误,请上机调试并改正。
#include“stdio.h”
main()
{intnum[20];
intsum,i;
for(i=0;i<=19;i++)
scanf(“%d”,&num[i]);
for(i=0;i<=19;i++);这个引号去掉程序就对了。
WHY?
自己去想。
if(num[i]<0)sum+=num[i];
printf(“sum=%6d”,sum);}
3.调试程序。
下面程序完成用气泡法对10个整型数排序(从小到大),其中带*行有错,请调试修正。
#include
main()
{
inta[10];
inti,j,t;
printf(“intput10numbne”rs:
);
for(i=0;i<10;i++)
*scanf(“%d”,i,a[i]);
printf(n“”);
*for(j=1;j<10;j++)
*for(i=j+1;i<10;i++)if(a[i]{t=a[i];a[i]=a[i+1];a[i+1]=t;}
printf(“thesortednumbne”rs:
);
*for(i=1;i<11;i++)
*printf(“%d”,&a[i]);
}
第一个*:
scanf("%d",&a[i]);
第二个*:
for(j=1;j<=10;j++)
第三个*:
for(i=0;i<10-j;i++)
第四个*:
for(i=0;i<10;i++)
第五个*:
printf("%d",a[i]);别问我原因。
4.已有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入数组中
#include
intmain(){
inta[10]={2,3,5,9,11,13,17,20,23};
intn,i=0;
printf("enteranumber:
");
scanf("%d",&n);
//先比较找到位置
while(a[i]i++;}
//将位置向后面移动
for(intk=0;k<10-i;k++){
a[9-k]=a[8-k];
a[i]=n;
for(intj=0;j<10;j++)
strcat函数
printf("%3d",a[j]);}
5.编一程序,将两个字符串连接起来,不要用
#include
intmain(){
chara[100];
charb[50];
gets(a);
gets(b);
inti=0;
while(a[i]!
='\0')i++;
for(intj=0;b[j]!
='\0';j++){a[i]=b[j];i++;}
puts(a);}
6.求一个3×3矩阵对角线元素之和。
#include
/*求一个3×3矩阵对角线元素之和。
*/intmain(){
inta[3][3];
inti,j;
printf("enterninenumbers:
");
for(i=0;i<3;i++)
for(j=0;j<3;j++)scanf("%d",&a[i][j]);intsum=0;
sum=a[0][0]+a[1][1]+a[2][2];//只有一条对角线。
for(i=0;i<3;i++){for(j=0;j<3;j++){
printf("%3d",a[i][j]);}printf("\n");}printf("\nsum=%3d",sum);}
实验7
1.上机调试下面的程序,记录系统给出的出错信息,并指出出错原因main()
{
intx,y;printf("%d\n",sum(x+y));
intsum(a,b);
{
inta,b;return(a+b);
}}
#include
intmain(){
intx=1,y=2;
intsum(inta,intb);
printf("%d\n",sum(x,y));
}
intsum(inta,intb)
{
return(a+b);
}
2.已有变量定义和函数语句“inta=1,b=-5,c;c=fun(a,b);”,fun函数的作用是计算两个数之差的绝对值,并将差值返回给调用函数,请编写fun函数,并调试。
fun(intx,inty)
{}
函数如下:
intfun(intx,inty){
intz;
z=x+y;
if(z<0)
z=-z;
returnz;}
3.有一青年歌手大奖赛,试编写一个评分系统,具体实现方法为:
编写一个对n个数据从大到小的排序函数,再编写一个计算最后得分的函数,计算方法是去除一个最高分,去除一个最低分,其余的平均分为参赛选手的最后得分。
并在主函数中调用它们对有n个评委评分,m个选手参赛的最后得分,从大到小排序输出。
PS:
这个太复杂,不写。
(我不会告诉你有一部分我没写出来,所以不写了
4.自己写一个字符串复制函数strcpy(),并调试运行;
#include
intmain(){
chara[]="IloveChina!
";
charb[100];
for(inti=0;a[i]!
='\0';i++){b[i]=a[i];}puts(b);}