c语言上机实验题解析

  • 格式:doc
  • 大小:374.50 KB
  • 文档页数:43

1. 下列程序中,要求 main函数实现如下功能:从键盘上输入三个正整数,求出它们中 的最大值。请完善程序,并在程序最后用注释的方式给出你的测试数据及在这组测试数据下 的运行结果。

#in elude

void mai n()

{ int a,b,c,max;

prin tf("E nter three in tegers:");

scan f("%d%d%d", &a, &b,&c);

if(a>b)

max=a;

else

max=b

if(c>max)

max=c;

printf("max of the three nu mbers is %d",max);

} /*1,2,5 max of the three nu mbers is 5*/

2. 请编程序,对从键盘上输入的 x值,根据以下函数关系计算出相应的 y值(设x,y均为 整型量)。

x y

x<0 0

0<=x<10 x

10<=x<20 10

20<=x<40 -5x+20

#in clude

main ()

{

int x,y;

scan f("%d",& x);

if(x<0)

y=0;

else

if(x>=0&& x<=10)

y=x;

else

if(x>=10&& x<=20) y=10;

else

y=-5*x+20; prin tf("%d",y);

}3. 写程序计算下列各表达式的值:

[ 2 2

13-(2.24-0.24 ) 耳 368

3) 2恵:;13 e2

#in clude

#in clude

main () {

float a,b,c;

a=2.0/(4.0/5+3)+1;

b=sqrt((13-pow(2.24-pow(0.24,2),2))/3.68);

c=2*3.14159*sqrt(13+ exp(2));

prin tf("%f\n%f\n%f',a,b,c);

}

4. 写程序计算5X2+2X+6的两个实根。考虑用合适的方式输出。

(提示:可先计算出判别式b2-4ac的值)

#in clude

#in clude

main ()

{ float a,b,c,x1,x2,p,q,disc;

prin tf("i nput a,b,c:");

scan f("%f%f%f",&a,&b,&c);

disc=b*b-4*a*c ;

if(disc>=0)

{

p=-b/(2*a);

q=sqrt(disc)/(2*a);

x1=p+q; x2=p_q;

prin tf("%f\n%f\n",x1,x2);

}

else

prin tf("No An swer");

}

5. 从键盘上任意输出一个年份 year,判别该年是否为闰年,如是输出“ yes”,否则输出

"no”。提示:如果变量year的值是闰年年份,那么这个值应该是 4的部数但又不是100的 1)1

2

3 4/5

2) 倍数,或者它是400的倍数。

#include

void main()

{

int year;

scanf("%d",&year);

if(year%4==0&&year%100!=0||year%400==0)

printf("yes");

else

printf("no");

}

6. 从键盘上输入 float 型数,判断这三个数能否构成三角形,若能则求该三角形面积,否 则输出不能构成三角形的信息。

#include

#include

void main()

{ float a,b,c,p,area;

printf("input three integers:");

scanf("%f %f %f",&a,&b,&c);

if(a+b>c&&a+c>b&&b+c>a)

{

p=(a+b+c)/ 2.0;

area=sqrt(p*(p-a)*(p-b)*(p-c));

printf("%f\n",area);

}

else

printf("inputs are wrong!");

}

7. 下列程序想求出满足如下条件的三位数 n:(1)n

除以 11(整数相除)所得到的商等于 n

的各位数字的平方和; (2)n 中至少有二位数字相同。如: 131 除以 11 的商为 11, 131 各位 数字的平方和为 11, 131 中有二位数字相同,故 131 是所要求出的三位数中的一个;又如 550,也是满足条件的三位数。源程序中有些错误,请你改正并最终使程序得到如下的运行 结果: 131 550 900

含有错误的源程序】

8. 请编程序,实现从键盘上输入任意一个整数 n,求出n的各位数字之和。例如,当 n

为 263 时,各位数字之和为 11。下面是一个可以实现逐位数字累加功能的程序段,试理解 后应用到自己的程序中。

#include"stdio.h"

void main()

{ int n,k;

scanf("%d",&n);

k=0 ;

do{k+=n%10;

n/=10;

}while (n);

printf("%d",k);

getch();

}

9. 试找出符合下列条件的正整数: (1)该数是一个三位数; (2)该数是 37 的倍数; (3)该数 循环左移后得到的另两个数也是 37的倍数。例如 148是37的倍数, 481和814也是 37的 倍数。

#include"stdio.h"

void main()

{ int n,a,b;

for(n=100;n<1000;n++)

if(n%37==0)

{ a=n/10+n%10*100;

b=n/100+n%100*10; if(a%37==0&&b%37==0) printf("%5d",n); #include

void main()

{ int n , a , b , c;

for(n=1; n<1000; n++)

{ a=n/100; b=n/10%10; c=n/10;

if(n/11=a*a+b*b+c*c||(a==b+a==c+b==c)>=2

)

printf("%5d",n);

}

} #include"stdio.h"

void main()

{ int a,b,c,n;

for(n=100;n<1000;n++)

{ a=n/100;

b=n/10%10; c=n%10;

if(n/11==a*a+b*b+c*c&&(a==b||a==c||b

==c))/* 或 n/11==a*a+b*b+c*c&&

(a==b)+(a==c)+(b== c)>=1 */

printf("%5d",n);

} }

getch();

}

10. 请编辑调试下列程序,观察其运行结果,理解函数定义、函数调用的基本方法,并 理解函数调用时形参和实参之间数据的传递方式。

(1)请将下列源程序进行调试,观察运行结果,尽量想明白为什么得到如此运行结果 后再看题后的评注:

【源程序】

#include

void main()

{

int i=2,x=5,j=7;

fun(j,6);

printf( “ i=%d,j=%d,x=%nd” , i , j , x);

}

int fun(int i ,int j)

{ int x=7;

printf( “ i=%d,j=%d,x=%nd”, i , j ,x);

}

(2)评注:

该题想要使大家明白,函数调用时是实参单向值传递给形参的,函数的形参是随着该 函数被调用而分配空间, 调用结束系统要回收空间; 当执行 main 函数中的语句 fun(j,6) 时, 其中的 j 是 main 函数中的量 j ,这次调用等价于 fun(7,6) ,即将 7 和 6 分别传输给形参变 量 i 和 j ;当执行 fun 函数时,

fun 有其自身的内部变量 x ,fun 函数中的输出语句中, i,j,x 的值分别为 7,6,7 ;执行流程遇 fun 函数中的函数体闭封符“ } ”返回主函数,在主函数中 输出时, i,j,x 的值分别 2,7, 5。

2.(实验报告上的题 2)请按如下步步骤设计程序:

( 1)编辑并运行下列程序:

#include

void main()

{

char i;

float x;

printf("enter x:");

scanf("%f",&x);

printf("1. To calculate e to the power x\n");

printf("2. To calculate logx to the base 10\n");

printf("3. To calculate lnx \n");

printf("4. To calculate square root of x\n");

printf("\n");

printf("enter your choice:[1/2/3/4]");

scanf("%1s",&i); /* 表示截取输入字符串中的 1 个字符,因为输入串中回车也算 1 个字符的 */ switch(i) /*

i 必须视作字符量,这由它的类型及输入的数据所决定 */

{

case '1': fexp(); break;

case '2': flog10();break;

case '3': flog();break;

case '4': fsqrt();break;