实验4
1. 以下⼏段源程序有错,请调试修改正确。
①/*源程序实现的功能:输⼊两个实数,按从⼩到⼤的顺序输出*/main(){ float a,b,t;
scanf(“%f,%f”,&a,&b);if (a>b)t=a;a=b;b=t
printf(“%5.2f,%5.2f”,a,b);}#includeint main(){float a,b,t;
scanf(\"%f,%f\if (a>b){t=a;a=b;b=t;}
printf(\"%5.2f,%5.2f\}
②该源程序实现的功能是:有如下函数关系:x (x>0)y= ? 2 (x=0)3x (x<0)
根据输⼊的x值,求出y的值。main( ){ int x,y;printf(“Enter x:”);scanf(“%d”,&x);if x>0 y=x;else if(x=0) y=2;else y=3*x;
printf(“x=%d y=%d\\n”,x,y);}#includeint main(){int x,y;
printf(\"Enter x:\");scanf(\"%d\if(x>0)y=x;else if(x==0)y=2;else y=3*x;
printf(\"x=%d y=%d\\n\
#includeint main(){int x,y;
scanf(\"%d\if(x<1)y=x;else if(x<10)y=2*x-1;elsey=3*x-11;printf(\"y=%d\}
某物品原有价值为p, 由于使⽤使其价值降低,价值的折扣率根据时间t(⽉数)确定如下:t<3,⽆折扣
3<=t<6,2%折扣6<=t<12,5%折扣12=
t>=21,10%折扣
编程实现:根据输⼊的时间和原有价值计算物品的现有价值。#includeint main(){int p,t;
float y;
printf(\"输⼊原有价值和使⽤时间:\");scanf(\"%d,%d\if(t<3) y=p;
else if(t<6) y=0.98*p;else if(t<12) y=0.95*p;else if(t<21) y=0.92*p;else y=0.9*p;
printf(\"现有价值为:%.2f\}
4. 给⼀个不多于5位的正整数,要求:①求出它是⼏位数;②分别打出每⼀位数字;
③按逆序打出各位数字,例如原数为321,应输出123#includeint main(){
int num,a,ge,shi,bai,qian,wan;printf(\"enter a number(0-99999):\");scanf(\"%d\if(num>9999) a=5;else if(num>999) a=4;else if(num>99) a=3;else if(num>9) a=2;else a=1;wan=num/10000;qian=num/1000%10;bai=num/100%10;shi=num/10%10;ge=num%10;switch(a){case 5:{printf(\"5位数\");
printf(\"---%d,%d,%d,%d,%d---\printf(\"倒序为:%d%d%d%d%d\break;
}case 4:{printf(\"4位数\");
printf(\"---%d,%d,%d,%d---\printf(\"倒序为:%d%d%d%d\break;}case 3:{printf(\"3位数\");
printf(\"---%d,%d,%d---\printf(\"倒序为:%d%d%d\break;}case 2:{printf(\"2位数\");
printf(\"---%d,%d---\printf(\"倒序为:%d%d\break;}case 1:{printf(\"1位数\");printf(\"---%d---\
printf(\"倒序为:%d%d%d%d%d\break;}}}实验5
1.以下程序的功能是实现从键盘输⼊⼀组字符,统计出⼤写字母的个数m和⼩写字母的个数n,并输出m、n中的较⼤者。程序中有错,请调试修改正确。main ( ){ int m , n ;char c ;
while ( (c=getchar()) != '\\n' );{ if ( c>= 'A'&&c<= 'Z' ) m++ ;if ( c>= 'a'&& c<='z' ) n++ ;}
printf (\"%d \\n\
}#includeint main (){ int m=0 , n=0 ;char c ;
while ( (c=getchar()) != '\\n' ){ if ( c>= 'A'&&c<= 'Z' ) m++ ;if ( c>= 'a'&& c<='z' ) n++ ;}
printf (\"%d \\n\
2.以下程序可以实现从键盘输⼊⼀串数字,然后以相反的顺序将它们输出,如输⼊:1234,输出4321,请填空。main()
{ int number, right ;
printf(\"enter you number:\\n \");scanf(\"%d\do
{ right= ①; ①→number%10printf(\"%d\number= ②; ②→number/10}
while ( number!=0 );printf(\"\\n\");}
3.求Sn=a+aa+aaa+…+aa…a 之值,其中a是⼀个数字。例如:2+22+222+2222+22222(此时n=5), n由键盘输⼊。#includeint main (){int Sn=0,n,sum=0;int a=2;printf(\"enter n:\");scanf(\"%d\for(int i = 0;isum = a + sum * 10;Sn=Sn+sum;}
printf(\"Sn=%d\}
4.有⼀数列:2/1,3/2,5/3,8/5,…求出这个数列的前20项之和。#includeint main (){
float sum=0,c,a=2,b=1;for(int i = 0;i<20;i++){sum=sum+a/b;c=a;a=b+c;b=c;}
printf(\"sum=%.2f\四、思考题
1.猜数游戏。玩游戏者输⼊⼀个数,提⽰此数是太⼤、太⼩或猜中,重新输⼊数据直到猜中为⽌。(提⽰:在程序中设置⼀个整数,此数即是玩游戏者要猜的数)
这题群⾥⾯有EXE⽂件可以去看看,然后要代码的话,请⾃⼰写⼀下,不⾏再问。还有APP提供玩耍。2.百钱买百鸡问题。公鸡每只5元,母鸡每只3元,⼩鸡3只⼀元,问⼀百元买⼀百只鸡有⼏种解法。
提⽰:设x,y,z为三种鸡的只数,按题⽬写出代数⽅程为:x+y+z=1005x+3y+z/3=100
⽤穷举法列举出x、y、z的值能懂就懂,不懂就不看了。#includeint main (){int x,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\
这是结果输出,后⾯最后⼀个是⼩鸡的,但是很明显,⼩鸡的个数要能整除3,所以,再怎么改,请⾃⼰操作。TIP:就只需要在⼀个地⽅加⼀个条件。实验6
1.以下程序段将输出computer,请填空。#include “stdio.h”main()
{ int i,j=0;
char c[]=”it’s a computer”;for(i=0; ①;i++) ①→i<8{ ②; ②→j=i+7printf(“%c”,c[j]);}}
2.以下程序的功能是求数组num中⼩于零的数据之和,程序中存在错误,请上机调试并改正。
#include “stdio.h”main(){ int num[20];int sum,i;for(i=0;i<=19;i++)scanf(“%d”,&num[i]);
这个引号去掉程序就对了。WHY?⾃⼰去想。printf(“sum=%6d”,sum);}
3.调试程序。下⾯程序完成⽤⽓泡法对10个整型数排序(从⼩到⼤),其中带*⾏有错,请调试修正。#includemain(){int a[10];int i,j,t;
printf(“intput 10 numbers:\\n”);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(“the sorted numbers:\\n”);* for(i=1;i<11;i++)* printf(“%d”,& a[i]);}
第⼀个*:scanf(\"%d\第⼆个*:for(j=1;j<=10;j++)第三个*:for(i=0;i<10-j;i++)第四个*:for(i=0;i<10;i++)第五个*:printf(\"%d\别问我原因。
4.已有⼀个已排好序的数组,今输⼊⼀个数,要求按原来排序的规律将它插⼊数组中#includeint main(){
int a[10]={2,3,5,9,11,13,17,20,23};int n,i = 0;
printf(\"enter a number:\");scanf(\"%d\//先⽐较找到位置while(a[i]i++;}
//将位置向后⾯移动for(int k = 0;k<10-i;k++){a[9-k]=a[8-k];}a[i]=n;
for(int j = 0;j<10;j++)printf(\"%3d\
5.编⼀程序,将两个字符串连接起来,不要⽤strcat函数#includeint main(){char a[100];char b[50];gets(a);gets(b);int i = 0;
while(a[i]!='\\0') i++;
for(int j = 0; b[j]!='\\0';j++){a[i]=b[j];i++;}puts(a);}
6.求⼀个3×3矩阵对⾓线元素之和。#include
/*求⼀个3×3矩阵对⾓线元素之和。*/int main(){int a[3][3];int i,j;
printf(\"enter nine numbers:\");for(i = 0;i<3;i++)for(j = 0;j<3;j++)scanf(\"%d\int sum=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\printf(\"\\n\");}
printf(\"\\nsum=%3d\实验7
1.上机调试下⾯的程序,记录系统给出的出错信息,并指出出错原因。main(){int x,y;
printf(\"%d\\n\int sum(a,b);{int a,b;return(a+b);}}#includeint main(){int x=1,y=2;int sum(int a,int b);printf(\"%d\\n\}
int sum(int a,int b){
return(a+b);
}
2 .已有变量定义和函数语句“int a=1,b=-5,c;c=fun(a,b);”,fun函数的作⽤是计算两个数之差的绝对值,并将差值返回给调⽤函数,请编写fun函数,并调试。fun (int x,int y){ }
函数如下:int fun(int x,int y){int z;z=x+y;if(z<0)z=-z;return z;}
3.有⼀青年歌⼿⼤奖赛,试编写⼀个评分系统,具体实现⽅法为:编写⼀个对n个数据从⼤到⼩的排序函数,再编写⼀个计算最后得分的函数,计算⽅法是去除⼀个最⾼分,去除⼀个最低分,其余的平均分为参赛选⼿的最后得分。并在主函数中调⽤它们对有n个评委评分,m个选⼿参赛的最后得分,从⼤到⼩排序输出。PS:这个太复杂,不写。(我不会告诉你有⼀部分我没写出来,所以不写了4.⾃⼰写⼀个字符串复制函数strcpy( ),并调试运⾏;#includeint main(){
char a[]=\"I love China!\";char b[100];
for(int i = 0;a[i]!='\\0';i++){b[i]=a[i];}puts(b);}
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- igbc.cn 版权所有 湘ICP备2023023988号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务