高教c语言程序设计课后编程题答案.docx
《高教c语言程序设计课后编程题答案.docx》由会员分享,可在线阅读,更多相关《高教c语言程序设计课后编程题答案.docx(42页珍藏版)》请在冰点文库上搜索。
高教c语言程序设计课后编程题答案
第三章顺序结构
3.30编写程序,把560分钟换算成用小时和分钟表示,然后进行输出。
※程序如下※
main()
{
inthour,minute;
hour=560/60;
minute=560%60;
printf("hour=%d,minute=%d",hour,minute);
}
3.31编写程序,输入两个整数:
1500和350,求出它们的商数和余数并进行输出。
※程序如下※
#include
main()
{
intnuml,num2,i,j;/*定义变量i—商,j—余数*/
printf("inputnum1andnum2:
\n");
scanf("%d%d",&num1,&num2);
i=n
}
3.32编写程序,读入三个双精度数,求它们的平均值并保留此平均值小数点后一位数,对小数点后第二位数进行四舍五入,最后输出结果。
※程序如下※
main()
{
doublea,b,c,average=0;
printf("inputa,b,c(double):
\n");
scanf("%lf%lf%lf",&a,&b,&c);
average=(a+b+c)/3;
average=average*10;
average=average+0.5;
average=(int)average;
average=average/10;
printf("average=%lf",average);
}
3.33编写程序,读入三个整数给a,b,c,然后交换它们中的数,把a中原来的值给b,
把b中原来的值给c,把c中的值给a。
※程序如下※
main()
{
inta,b,c,t=0;printf("inputabc:
\n");scanf("%d%d%d",&a,&b,&c);t=c;c=b;b=a;a=t;
printf("a=%db=%dc=%d",a,b,c);
}
第四章选择结构
4.21当a>0时,请将以下语句改写成switch语句。
if(a<30)m=1;
elseif(a<40)m=2;
elseif(a<50)m=3;
elseif(a<60)m=4;elsem=5;
※程序如下※
main()
{inta;printf("Entera:
\n");scanf("%d",&a);switch(a/10)
{
case0:
case1:
case2:
printf("m=1");break;
case3:
printf("m=2");break;
case4:
printf("m=3");break;case5:
printf("m=4");break;default:
printf("m=5");
}
}
dO);并输入当前的日
4.22编写程序,输入一位学生的生日(年:
yO、月:
mO、日
期(年:
y1、月:
ml、日:
di);输出该生的实足年龄。
※程序如下※这道题仅做参考!
!
!
系统不一样无法运行!
main()
{
intyO,y1,mO,m1,dO,d1,age=O;
printf("YourBirthday(yyyy-mm-dd):
\n");scanf("%d-%d-%d",&y0,&m0,&d0);printf("CurrentDate(yyyy-mm-dd):
\n");scanf("%d-%d-%d",&y1,&m1,&d1);if(d1if(m1printf("\nAge=%d",age);
}
4.23编写程序,输入一个整数,打印出它是奇数还是偶数。
※程序如下※
main()
{
inti;printf("inputainteger:
\n");scanf("%d",&i);
if(i%2==0)/*条件判断*/printf("%disaeven",i);elseprintf("%disaodd",i);
}
4.24编写程序,输入a、b、c三个数,打印出最大者。
※程序如下※
main()
{
inta,b,c,max=0;
printf("input(int)abandc:
\n");scanf("%d%d%d",&a,&b,&c);max=a;
if(max
}
4.25有一函数:
编写一程序,要求输入x的值,输出y的值。
分别
(1)不嵌套的if语句
(2)嵌套的if语句
(3)if_else语句(4)switch语句
尽飓七星«臨Q)nlw
宀_(=」0」」①lndu=)41u_」d(0lrAX=9dvxMML+x=%HA=)tu_」d(0LVXO3O30AXMMv>OHHX)七
MX-J%UA=)tu_」d0VX03039人X)七Jx03-J%==ueosx=uvxIndu&lu一」d
Xleoq=()urolu
尽®七星«臨0(L)rlw探K吕吐^探
(OLVX03039人X)七Jx03-J%==ueosx=uvxIndu&lu一」d
Xleoq=()urolu尽®①so—七(e)-111吐咽w
宀M=」o」」①lndu=)41u_」d(0lrAX=9dvxM
宀ML+x=%HA==lu_」doaxmMX=%UA=£u_」dovx)七xv>Xleoq=
()uroE
if(x<0)printf("y=%f",x-1);elseif(x==0)printf("y=%f",x);elseprintf("y=%f",x+1);elseprintf("inputerror");}
源程序四:
(4)switch语句
*/
main()
{
intflag;
floatx;
printf("Enterx:
\n");scanf("%f",&x);if(x>-5&&x<0)flag=-1;
if(x==0)flag=0;
if(x>0&&x<10)flag=1;
switch(flag)
{
case-1:
printf("y=%f",x);break;
case0:
printf("y=%f",x-1);break;
case1:
printf("y=%f",x+1);break;
}
}/*
第五章循环结构
三、编程题
5.17编写程序,求1-3+5-7+...-99+101的值。
※程序如下※
main()
{
inti,sum=0,s=1;
for(i=1;i<=101;i+=2)
{
sum=sum+i*s;
s=-s;/*控制符号交替变换*/
}printf("sum=%d",sum);
}
5.18编写程序,求e的值,e=1+1/1!
+1/2!
+1/3!
+1/4!
+...+1/n!
(1)用for循环,计算前50项
(2)用while循环,要求直至最后一项的值小于1e-4。
※程序如下※
源程序一:
(1)用for循环实现
main()
{
inti,n;
doublesum=1,t=1;printf("inputn:
\n");
scanf("%d",&n);for(i=1;i<=n;i++)
{
t=t*i;/*实现阶乘*/sum=sum+1/t;
}printf("e=%lf",sum);
}
源程序二:
(2)用while循环实现
#includemain()
{
inti;
doubelsum=1,t=1;
while(fabs(1.0/t)>1e-4)/*fabs求浮点型数据的绝对值*/
{
t=t*i;sum=sum+1/t;
i++;
}
printf("e=%lf",sum);
}
5.19编写程序,输出从公元1000年至2000年所有闰年的年号每输出3个年号换一行。
判断公元年是否闰年的条件是:
(1)公元年数如能被4整除,而不能被100整除,则是闰年。
(2)公元年数能被400整除也是闰年。
※程序如下※
main()
{
inti,j=0;
for(i=1000;i<=2000;i++)
{
if((i%4==0)&&(i%100!
=0)||(i%400==0))/*判断是否是闰年的条件*/{
printf("&d",i);
j++;
if(j%3==0)/*控制换行*/
printf("\n");
}
}
}
5.20编写程序,打印以下图形:
*
*****
*******
*****
'k'k'k
*
※程序如下※
#include
main()
{
inti,j;
for(i=1;i<=7;i++)/*控制行数*/
{
for(j=1;j<=7;j++)/*控制星数*/
{if((j<=fabs(4-i))||(j>7-fabs(4-i)))printf("");
elseprintf("*")
}printf("\n");
}
}
#include
#include
main()
{inti,j,k;
for(i=-3;i<=abs(i);i++)
{for(j=0;j<=abs(i);j++)printf(“”);
for(k=0;k<=7-abs(i);k++)printf(“*”);
printf(“\n”);
}
}
第六章字符型数据
6.21
ASCII代码
请编写程序,输入一行字符(用回车结束),输出每个字符以及与之对应的值,每行输出三队.
※程序如下※#include
main()
{
inti=0;
charch;
while((ch=getchar())!
='\n')
{
printf("%4c%4d",ch,ch);
i++;
if(i%3==0)
printf("\n");
}
}
6.21请编写程序,输入一行数字字符(用EOF结束),每个数字字符的前后都有空格。
请编程,把这一行中的数字转换成一个整数。
例如,若输入:
2483(代表Enter键)
则输出整数:
2483
※程序如下※
#include
main()
{
charch;
while((ch=getchar())!
=EOF)
{
if(ch=='')
continue;
else
printf("%c",ch);
}
}
6.22请编写程序统计输入的行数,输入用EOF结束输入。
※程序如下※
#include
main()
{
charch;
inti=0;
while((ch=getchar())!
=EOF)
{
if(ch=='\n')i++;
}
printf("%d",i);
}
6.23请编写程序统计输入的一行中小写字母的个数。
※程序如下※
#include
main()
{
inti=0;
charch;
while((ch=getchar())!
='\n')
{
if((ch>='a')&&(ch<='z'))
i++;
}
printf("%d",i);
}
6.24请编写输出以下图案的程序,图案的行数由输入的值确定。
A
BBB
CCCCC
DDDDDDD
EEEEEEEEE
※程序如下※
#include
main()
{
inti,j,k,n;
printf("Entern(integer):
\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=n;j>i;j--)
printf("");
for(k=1;k<=2*i-1;k++)printf("%c",64+i);
printf("\n");
}
}
第七章函数
7.14以下fun函数用以判断n是否是素数,fun函数中有逻辑错,请调试改正。
fun(intn)
{
intk,yes;for(k=2;k<=n/2;k++)if(n%k==0)returnyes=0;
returnyes=1;
}
※正确答案是:
fun(intn)
{
intk,yes=1;for(k=2;k<=n/2;k++)if(n%k==0)returnyes=0;
returnyes;
}
main()
{
intn,yes;printf("Entern(int):
\n");scanf("%d",&n);
yes=fun(n);
if(yes==1)printf("%disaprime",n);
elseprintf("%disnotaprime",n);
}
7.15编写函数intmymod(inta,intb)用以求a被b除之后的余数。
※程序如下※
#include
intmymod(inta,intb)
{
intremainder;remainder=a%b;
returnremainder;
}
main()
{
inta,b;printf("Enterab(int):
\n");
scanf("%d%d",&a,&b);
printf("余数=%d",mymod(a,b));
}
7.16编写程序求:
1-1/2+1/3-1/4+1/5-1/6+1/7-...1/n
※程序如下※
main()
{
intn;
floata;
floatsum(intn);
scanf("%d",&n);
a=sum(n);
printf("%10.5f",a);
}
floatsum(intn)
{
floats=0;
inti,t=1;
for(i=1;i{
s=s+1/i*t;
t=-t;
}
returns;
}
7.17编写函数,根据整型形参m的值,计算如下公式的值。
t=1—1/(2x2)-1/(3x3)-...-1/(mxm)
例如:
若m=5,则应输出0.536389。
※程序如下※
main()
{
floatt=1;
floatf2(int);
inti,m;
scanf("%d",&m);
for(i=2;i<=m;i++)
t=t-f2(i);
printf("t=%f",t);
}
floatf2(intm)
{
floats;
s=1.0/(m*m);
returns;
}
7.18编写函数用以求表达式x2-5x+4,x作为参数传给函数,调用此函数求:
y1=22-5*2+4
y2=(x+15)2-5*(x+15)+4
y3=sin2x-5*sinx+4
※程序如下※
#include
#include
floatfun(floatx)
{
floaty;
y=pow(x,2)-5*x+4;
returny;
}
main()
{
floatx,y1,y2,y3;
clrscr();
printf("Enterx:
\n");
scanf("%f",&x);
y1=fun
(2);
y2=fun((x+15));
y3=fun(sin(x));
printf("y1=%f\ny2=%f\ny3=%f\n",y1,y2,y3);
}
第八章地址和指针
8.17请编写函数,其功能是对传送过来的两个浮点数求出和值与差值,并通过形参传送回调用函数。
※程序如下※
#include
sum_sub(floata,floatb,float*sum,float*sub)
{
*sum=a+b;
*sub=a-b;
}
main()
{
floata,b,sum,sub;/*定义变量sum求和,变量sub求差*/printf("Enterab(float):
\n");
scanf("%f%f",&a,&b);sum_sub(a,b,&sum,&sub);printf("sum=%f,sub=%f",sum,sub);
}
8.18请编写函数,对传送过来的三个数选出最大和最小数,并通过形参传回调用函数。
※程序如下※
#include
max_min(doublea,doubleb,doublec,double*max,double*min)
{
*max=a;/*假定a的值为最大,把a值赋给指针变量*max*/if(*max
if(*max*min=a;/*假定a的值为最小,把a值赋给指针变量*min*/if(*min>b)*min=b;
if(*min>c)*min=c;
}
main()
{
doublea,b,c,max,min;printf("Enterabc(double):
\n");scanf("%lf%lf%lf",&a,&b,&c);max_min(a,b,c,&max,&min);
printf("max=%lf,min=%lf",max,min);
}
第九章函数
9.27输入一行数字字符,请用数组元素作为计数器来统计每个数字字符的个数.用下标为
0元素统计字符"1"的个数,下标为1的元素统计字符"2"的个数,...
※程序如下※
#include
voidcount(inta[])
{
inti;
charch;while((ch=getchar())!
='\n')for(i=0;i<10;i++)if(i==ch-'0')if(i==0)a[9]++;
elsea[i-1]++;
}
main()
{
inti,a[10]={0};count(a);for(i=0;i<10;i++)printf("a[%d]=%d\n",i,a);
}
9.28编写函数,对具有10个整数的数组进行如下操作:
从第n个元素开始直到最后一个元素,依次向前移动一个位置.输出移动后的结果.
※程序如下※
fun(inta[],intn)
{inti;for(i=n;i<9;i++)a=a[i+1];
}
main()
{
inta[10]={0,1,2,3,4,5,6,7,8,9},n,i;scanf("%d",&n);
fun(a,n);for(i=0;i<9;i++)printf("%d",a);
}
9.29编写函数把数组中所有奇数放在另一个数组中返回.
※程序如下※
#include#includeintfun(inta[],intb[])
{
inti,j=0;
for(i=0;i<10;i++)
if(a%2==1)b[j++]=a;return(j);
}
main()
{
inti,j,a[10],b[10];
clrscr();
printf("\n****Enter10integernumber:
****\n");
for(i=0;i<10;i++)
scanf("%d",&a);
j=fun(a,b);
printf("****Outputtheoddarrage***:
\n");
for(i=0;iprintf("%d",b);
getchar();
}
9.30编写函数对字符数组中的输入字母,按由大到小的字母顺序进行排序。
※程序如下※
#include
voidalpha_sort(chara[],intn);
voidalpha_rout(chara[],intn);
main()
{
chara[20];
intn;
clrscr();
printf("****Theoriginalalphabeticis****:
\n");gets(a);
n=strlen(a);
alpha_sort(a,n);
alpha_rout(a,n);
}
voidalpha_sort(chara[],intn)
{
inti,j,p,t;
for(j=0;j{p=j;
for(i=j+1;iif(a[p]if(p!
=j)
{
t=a[j];
a[j]=a[p];
a[p]=t;
}
}
}
voidalpha_rout(chara[],intn)
{
inti;
printf("\n****Thealphabeticofsortingis****:
\n");
for(i=0;iprintf("%c",a[i]);
}
9.31输入若干有序数放在数组中。
然后输入一个数,插入到此有序数列中,插入后,数组中的数仍然有序。
请对以下三种情况运行你的程序,以便验证你的程序是否正确。
(1)插在最前
(2)插在最后(3)插在中间
※程序如下※
#include
#defineM10
voidsort(inta[M],intb[M+1],intn)
{
inti;
for(i=0;i{
if(a[0]>a[M-1])
{
if(nb=a;
else
{
b=n;
break;
}
}
else
{
if(n>a)
b=a;
else
{
b=n;
break;
}
}
}
if(ifor(;ib[i+1]=a;
else
b=n;
}
main()
{
inti,n,a[M],b[M+1];
clrscr();
printf("En