C语言程序设计实验(5-7)

更新时间:2024-05-17 10:40:02 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验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); }

#include int main(){ float a,b,t;

scanf(\ if (a>b){

t=a;a=b;b=t;}

printf(\ }

② 该源程序实现的功能是:有如下函数关系:

? 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); }

#include int main(){ int x,y; printf(\ scanf(\ if(x>0) y=x; else if(x==0)

y=2; else y=3*x;

printf(\ y=%d\\n\

#include int main(){ int x,y; scanf(\ if(x<1) y=x; else if(x<10) y=2*x-1; else y=3*x-11; printf(\}

某物品原有价值为p, 由于使用使其价值降低,价值的折扣率根据时间t(月数)确定如下:

t<3, 无折扣 3<=t<6, 2%折扣 6<=t<12, 5%折扣 12==21, 10%折扣

编程实现:根据输入的时间和原有价值计算物品的现有价值。 #include int main(){ int p,t; float y; printf(\输入原有价值和使用时间:\ scanf(\ 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 #include int main(){ int num,a,ge,shi,bai,qian,wan; printf(\ scanf(\ 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; bai=num/100; shi=num/10; ge=num; switch(a){ case 5:{ printf(\位数\ printf(\ printf(\倒序为:%d%d%d%d%d\ break; } case 4:{ printf(\位数\ printf(\ printf(\倒序为:%d%d%d%d\ break; } case 3:{ printf(\位数\ printf(\ printf(\倒序为:%d%d%d\ break; } case 2:{ printf(\位数\ printf(\ printf(\倒序为:%d%d\ break;

}

case 1:{ printf(\位数\ printf(\ 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 (\}

#include int 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 (\

2. 以下程序可以实现从键盘输入一串数字,然后以相反的顺序将它们输出,如输入:1234,

输出4321,请填空。 main()

{ int number, right ;

printf(\ you number:\\n \scanf(\ do

{ right= ① ; ①→ number printf(\ ; number= ② ; ②→number/10 }

while ( number!=0 );

printf(\

3. 求Sn=a+aa+aaa+…+aa…a 之值,其中a是一个数字。例如:2+22+222+2222+22222(此时

n=5), n由键盘输入。 #include int main (){ int Sn=0,n,sum=0; int a=2; printf(\ scanf(\ for(int i = 0;i

4. 有一数列:2/1,3/2,5/3,8/5,…求出这个数列的前20项之和。

#include

int main (){

float sum=0,c,a=2,b=1; for(int i = 0;i<20;i++){ }

printf(\}

sum=sum+a/b; c=a;a=b+c;b=c;

四、思考题

1. 猜数游戏。玩游戏者输入一个数,提示此数是太大、太小或猜中,重新输入数据直到猜

中为止。(提示:在程序中设置一个整数,此数即是玩游戏者要猜的数)

这题群里面有EXE文件可以去看看,然后要代码的话,请自己写一下,不行再问。还有APP提供玩耍。 2. 百钱买百鸡问题。公鸡每只5元,母鸡每只3元,小鸡3只一元,问一百元买一百只鸡

有几种解法。

提示:设x,y,z为三种鸡的只数,按题目写出代数方程为:

x+y+z=100 5x+3y+z/3=100

用穷举法列举出x、y、z的值 能懂就懂,不懂就不看了。 #include int 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(\

这是结果输出,后面最后一个是小鸡的,但是很明显,小鸡的个数要能整

除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+7 printf(“%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]); for(i=0;i<=19;i++); 这个引号去掉程序就对了。WHY?自己去想。 if(num[i]<0) sum+=num[i]; printf(“sum=m”,sum);}

3. 调试程序。下面程序完成用气泡法对10个整型数排序(从小到大),其中带*行有错,

请调试修正。

#include main() { 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]

printf(“the sorted numbers:\\n”); * for(i=1;i<11;i++) * printf(“%d”,& a[i]);

}

第一个*:scanf(\第二个*:for(j=1;j<=10;j++) 第三个*:for(i=0;i<10-j;i++) 第四个*:for(i=0;i<10;i++) 第五个*:printf(\别问我原因。

4. 已有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入数组中

#include int main(){

int a[10]={2,3,5,9,11,13,17,20,23}; int n,i = 0;

printf(\scanf(\//先比较 找到位置 while(a[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(\j]); }

5. 编一程序,将两个字符串连接起来,不要用strcat函数

#include int 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(\for(i = 0;i<3;i++) for(j = 0;j<3;j++) scanf(\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(\printf(\

printf(\

实验7

1. 上机调试下面的程序,记录系统给出的出错信息,并指出出错原因。

main() { int x,y;

printf(\int sum(a,b); { int a,b; return(a+b); }}

#include int main(){ int x=1,y=2;

int sum(int a,int b);

printf(\}

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( ),并调试运行;

#include int main(){

char a[]=\char b[100];

for(int i = 0;a[i]!='\\0';i++){ b[i]=a[i];} puts(b);}

本文来源:https://www.bwwdw.com/article/t1q7.html

Top