C语言程序设计习题.docx
《C语言程序设计习题.docx》由会员分享,可在线阅读,更多相关《C语言程序设计习题.docx(11页珍藏版)》请在冰豆网上搜索。
C语言程序设计习题
习题4参考解答
1.写出下面函数的运行结果。
#include
voidfx701(intk,intn,floata);
intmain()
{
intk=1,n=5;
floata=3.2,b=8.5;
printf("调用前:
k=%dn=%da=%.2fb=%.2f\n",k,n,a,b);
fx701(k,n,a);
printf("调用后:
k=%dn=%da=%.2fb=%.2f\n",k,n,a,b);
return0;
}
voidfx701(intk,intn,floata)
{
intq=100;
floatb,x=6.2;
k+=q;n*=q;a-=x;b=3.5*a;
printf("函数中:
k=%dn=%da=%.2fb=%.2f\n",k,n,a,b);
}
解:
调用前:
k=1n=5a=3.20b=8.50
函数中:
k=101n=500a=-3.00b=-10.50
调用后:
k=1n=5a=3.20b=8.50
2.编写一个函数,实现从键盘输入一个整数,如果该整数为素数,则返回1,否则返回0。
解:
#include
#include
intIs_prime(inti)
{
intj=0;
for(j=2;j
{
if(0==(i%j))
{
return0;
}
}
return1;
}
intmain()
{
inti;
printf("Pleaseinputanumber:
");
scanf("%d",&i);
if(1==Is_prime(i))
{
printf("%disaprime.\n",i);
}
else
printf("%disnotaprime.\n",i);
system("pause");
return0;
}
程序运行结果如下:
Pleaseinputanumber:
13↙
13isaprime.
Pleaseinputanumber:
8↙
8isnotaprime.
3.设计两个函数,分别求矩形的周长和面积,并在主函数中调用这两个函数。
解:
#include
floatarea(floata,floatb)
{
floats;
s=a*b;
return(s);
}
floatzc(floata,floatb)
{
floatp;
p=2*(a+b);
return(p);
}
intmain()
{
floata,b,s,p;
printf("请输入长方形的边长a,b:
");
scanf("%f%f",&a,&b);
s=area(a,b);
p=zc(a,b);
printf("长方形的周长为p=%f,长方形的面积为s=%f",p,s);
}
程序运行情况如下:
请输入长方形的边长a,b:
34↙
长方形的周长为p=14.000000,长方形的面积为s=12.000000
4.编写一个函数求一个整数n的阶乘,在主函数中计算并输出10!
的值。
解:
#include
floatfc(intn)
{
floats;
if(n==1||n==0)s=1;
elses=n*fc(n-1);
return(s);
}
intmain()
{
floatk;
k=fc(10);
printf("10!
=%f\n",k);
return0;
}
程序运行结果如下:
10!
=3628800.000000
5.已知函数fun2的原型说明为“longfun2(intm,intn);”,调用该函数计算m~n的和(其中n>m>0),例如:
若m=5,n=20,则计算5+6+7+8+…+20的值。
要求在主函数中通过键盘输入m和n的值,并输出和的值。
解:
#include
longfun2(intm,intn)
{
longs;
inti;
s=0;
for(i=m;i<=n;i++)
s=s+i;
return(s);
}
intmain()
{
intn,m,sum;
printf("请输入m,n的值n>m:
\n");
scanf("%d%d",&m,&n);
sum=fun2(m,n);
printf("sum=%d\n",sum);
return0;
}
程序运行结果如下:
请输入m,n的值n>m:
520↙
sum=200
6.编写一个函数重复打印给定的字符n次。
解:
#include
voidfun2(charm,intn)
{
inti;
for(i=1;i<=n;i++)
printf("%c",m);
printf("\n");
}
intmain()
{
charm;
intn;
printf("请输入给定的字符\n");
scanf("%c",&m);
printf("请输入打印的次数\n");
scanf("%d",&n);
fun2(m,n);
return0;
}
程序运行结果如下:
请输入给定的字符
*↙
请输入打印的次数
5↙
*****
7.写出程序的运行结果,并上机验证其结果。
#include
voidfun1()
{
intx=5;
printf("x=%d\n",x);
}
voidfun2(intx)
{
printf("x=%d\n",++x);
}
intmain()
{
intx=2;
fun1();
fun2(x);
printf("x=%d\n",x);
return0;
}
解:
x=5
x=3
x=2
8.指出下列程序中各变量的存储属性,并写出程序的执行结果。
(1)#include
voidadd(inti);
intmain()
{
inti=1;
add(i);
printf("main:
i=%d\n",i);
return0;
}
voidadd(inti)
{
i=i+3;
printf("add:
i=%d\n",i);
}
解:
add:
i=4
main:
i=1
其中,i是自动型变量。
(2)#include
inti=1;
voidadd1();
intmain()
{
add1();
printf("i=%d\n",i);
return0;
}
voidadd1()
{
i=i+3;
}
解:
i=4
其中,该变量是外部型变量。
(3)#include
voidadd2(inti);
intmain()
{
inti=2;
add2(i);
add2(i);
return0;
}
voidadd2(inti)
{
staticintj=5;
j=i+j;
printf("j=%d\n",j);
}
解:
j=7
j=9
其中,变量i是静态型变量。
9.编写程序实现以下图形的输出。
解:
#include
voidmain()
{
inti,j,k;
for(i=1;i<=5;i++)//先打印上边的四行
{
for(j=1;j<=5-i;j++)//控制要打印的空格数量
printf("");
for(k=1;k<=2*i-1;k++)//控制要打印的星号数
printf("*");
printf("\n");
}
}
10.写出程序的运行结果。
#include
#defineX5
#defineYX+1
#defineZY*X/2
intmain()
{
inta;
a=Y;
printf("%d%d\n",Z,--a);
return0;
}
解:
75
11.编写一个函数,将一个十进制整数转换为二进制数。
解:
#include
voidmain()
{
longnum;
intozb();
printf("请输入一个十进制数:
");
scanf("%ld",&num);
printf("%ld的二进制数为:
",num);
ozb(num);
}
intozb(longnum)
{
inta[32]={0},i=0;
while(num>=1)
{
a[i]=num%2;
num=num/2;
i++;
}
for(i=i-1;i>=0;i--)
{
printf("%d",a[i]);
}
printf("\n");
return(a[i]);
}
程序运行结果如下:
请输入一个十进制数:
5↙
5的二进制数为:
101
12.编写一个函数,找出任意整数的全部因子。
解:
#include
intN;
voidmain()
{
voidyz();
scanf("%d",&N);/*输入N的值*/
yz(N);
}
voidyz()
{
inti,p=1;
for(i=1;i{
if(N%i==0)/*判断是否是N的因子,如果是则加上*/
{
p=i;
printf("%d",p);
}
}
}
程序运行结果如下:
15↙
13515