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;