高教c语言程序设计版课后编程题答案.docx
《高教c语言程序设计版课后编程题答案.docx》由会员分享,可在线阅读,更多相关《高教c语言程序设计版课后编程题答案.docx(39页珍藏版)》请在冰豆网上搜索。
![高教c语言程序设计版课后编程题答案.docx](https://file1.bdocx.com/fileroot1/2023-2/1/13a93aa9-5f7f-4023-b6a2-7cbd5b289adc/13a93aa9-5f7f-4023-b6a2-7cbd5b289adc1.gif)
高教c语言程序设计版课后编程题答案
第三章顺序结构
3.30 编写程序,把560分钟换算成用小时和分钟表示,然后进行输出。
※程序如下※
main( )
{
int hour,minute;
hour=560/60;
minute=560%60;
printf("hour=%d,minute=%d",hour,minute);
}
3.31 编写程序,输入两个整数:
1500和350,求出它们的商数和余数并进行输出。
※程序如下※
#include
main( )
{
int num1,num2,i,j; /* 定义变量 i-商,j-余数 */
printf("input num1 and num2:
\n");
scanf("%d%d",&num1,&num2);
i=n
}
3.32 编写程序,读入三个双精度数,求它们的平均值并保留此平均值小数点后一位数,
对小数点后第二位数进行四舍五入,最后输出结果。
※程序如下※
main( )
{
double a,b,c,average=0;
printf("input a,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( )
{
int a,b,c,t=0;
printf("input a b c:
\n");
scanf("%d%d%d",&a,&b,&c);
t=c;c=b;b=a;a=t;
printf("a=%d b=%d c=%d",a,b,c);
}
第四章选择结构
4.21 当a>0时,请将以下语句改写成switch语句。
if( a<30 ) m=1;
else if( a<40 ) m=2;
else if( a<50 ) m=3;
else if( a<60 ) m=4;
else m=5;
※程序如下※
main()
{
int a;
printf("Enter a:
\n");
scanf("%d",&a);
switch(a/10)
{
case 0:
case 1:
case 2:
printf("m=1"); break ;
case 3:
printf("m=2"); break ;
case 4:
printf("m=3"); break ;
case 5:
printf("m=4"); break ;
default:
printf("m=5");
}
}
4.22 编写程序,输入一位学生的生日(年:
y0、月:
m0、日:
d0);并输入当前的日
期(年:
y1、月:
m1、日:
d1);输出该生的实足年龄。
※程序如下※ 这道题仅做参考!
!
!
系统不一样无法运行!
main( )
{
int y0,y1,m0,m1,d0,d1,age=0;
printf("Your Birthday(yyyy-mm-dd):
\n");
scanf("%d-%d-%d",&y0,&m0,&d0);
printf("Current Date(yyyy-mm-dd):
\n");
scanf("%d-%d-%d",&y1,&m1,&d1);
if(d1 if(m1 age=y1-y0;
printf("\nAge=%d",age);
}
4.23 编写程序,输入一个整数,打印出它是奇数还是偶数。
※程序如下※
main( )
{
int i;
printf("input a integer:
\n");
scanf("%d",&i);
if(i%2==0) /*条件判断*/
printf("%d is a even",i);
else
printf("%d is a odd",i);
}
——————————————————————————————————
4.24 编写程序,输入a、b、c三个数,打印出最大者。
※程序如下※
main( )
{
int a,b,c,max = 0;
printf("input (int)a b and c:
\n");
scanf("%d%d%d",&a,&b,&c);
max = a;
if(max
if(max printf("max=%d",max);
}
——————————————————————————————————
4.25 有一函数:
编写一程序,要求输入x的值,输出y的值。
分别
(1)不嵌套的if语句
(2)嵌套的if语句
(3)if_else语句 (4)switch语句
※程序如下※
源程序一:
(1)不嵌套的if语句
main( )
{
float x;
printf("input x:
\n");
scanf("%f",&x);
if(x>-5&&x<0)
printf("y=%f",x);
if(x==0)
printf("y=%f",x-1);
if(x>0&&x<10)
printf("y=%f",x+1);
if(x<=-5||x>=10)
printf("input error");
}
源程序二:
(2)嵌套的if语句
main( )
{
float x;
printf("input x:
\n");
scanf("%f",&x);
if(x>-5&&x<10)
{
if(x==0) printf("y=%f",x-1);
if(x<0) printf("y=%f",x);
if(x>0) printf("y=%f",x+1);
}
if(x<=-5||x>=10)
printf("input error");
}
源程序三:
(3)if_else语句
main( )
{
float x;
printf("input x:
\n");
scanf("%f",&x);
if(x>-5&&x<10)
if(x<0)
printf("y=%f",x-1);
else if(x==0)
printf("y=%f",x);
else
printf("y=%f",x+1);
else
printf("input error");
}
源程序四:
(4)switch语句
*/
main()
{
int flag;
float x;
printf("Enter x:
\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;
case 0:
printf("y=%f",x-1); break;
case 1:
printf("y=%f",x+1); break;
}
}/*
第五章循环结构
三、编程题
5.17 编写程序,求1-3+5-7+...-99+101的值。
※程序如下※
main()
{
int i,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( )
{
int i,n;
double sum=1,t=1;
printf("input n:
\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
t=t*i; /* 实现阶乘*/
sum=sum+1/t;
}
printf("e=%lf",sum);
}
源程序二:
(2)用while循环实现
#include
main( )
{
int i;
doubel sum=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( )
{
int i,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 编写程序,打印以下图形:
*
***
*****
*******
*****
***
*
※程序如下※
#include
main( )
{
int i,j;
for(i=1;i<=7;i++) /*控制行数*/
{
for(j=1;j<=7;j++) /*控制星数*/
{
if((j<=fabs(4-i))||(j>7-fabs(4-i)))
printf(" ");
else
printf("*")
}
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( )
{
int i=0;
char ch;
while((ch=getchar( ))!
='\n')
{
printf("%4c%4d",ch,ch);
i++;
if(i%3==0)
printf("\n");
}
}
6.21 请编写程序,输入一行数字字符(用EOF结束),每个数字字符的前后都有空格。
请编程,把这一行中的数字转换成一个整数。
例如,若输入:
2 4 8 3 (代表Enter键)
则输出整数:
2483
※程序如下※
#include
main()
{
char ch;
while((ch=getchar())!
=EOF)
{
if(ch==' ')
continue;
else
printf("%c",ch);
}
}
6.22 请编写程序统计输入的行数,输入用EOF结束输入。
※程序如下※
#include
main()
{
char ch;
int i=0;
while((ch=getchar())!
=EOF)
{
if(ch=='\n') i++;
}
printf("%d",i);
}
6.23 请编写程序统计输入的一行中小写字母的个数。
※程序如下※
#include
main()
{
int i=0;
char ch;
while((ch=getchar())!
='\n')
{
if((ch>='a')&&(ch<='z'))
i++;
}
printf("%d",i);
}
6.24 请编写输出以下图案的程序,图案的行数由输入的值确定。
A
BBB
CCCCC
DDDDDDD
EEEEEEEEE
※程序如下※
#include
main()
{
int i,j,k,n;
printf("Enter n(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(int n)
{
int k,yes;
for(k=2;k<=n/2;k++)
if(n%k==0) return yes=0;
return yes=1;
}
※正确答案是:
fun(int n)
{
int k,yes=1;
for(k=2;k<=n/2;k++)
if(n%k==0) return yes=0;
return yes;
}
main()
{
int n,yes;
printf("Enter n (int):
\n");
scanf("%d",&n);
yes=fun(n);
if(yes==1)printf("%d is a prime",n);
else printf("%d is not a prime",n);
}
7.15 编写函数 int mymod(int a, int b)用以求a被b除之后的余数。
※程序如下※
#include
int mymod( int a, int b )
{
int remainder;
remainder=a%b;
return remainder;
}
main()
{
int a,b;
printf("Enter a b (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()
{
int n;
float a;
float sum(int n);
scanf("%d",&n);
a=sum(n);
printf("%10.5f",a);
}
float sum(int n)
{
float s=0;
int i,t=1;
for(i=1;i {
s=s+1/i*t;
t=-t;
}
return s;
}
7.17 编写函数,根据整型形参m的值,计算如下公式的值。
t=1-1/(2 x 2)-1/(3 x 3)-...-1/(m x m)
例如:
若m=5,则应输出0.536389。
※程序如下※
main()
{
float t=1;
float f2(int);
int i,m;
scanf("%d",&m);
for(i=2;i<=m;i++)
t=t-f2(i);
printf("t=%f",t);
}
float f2(int m)
{
float s;
s=1.0/(m*m);
return s;
}
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
float fun(float x)
{
float y;
y=pow(x,2)-5*x+4;
return y;
}
main()
{
float x,y1,y2,y3;
clrscr();
printf("Enter x:
\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(float a,float b,float *sum, float *sub)
{
*sum=a+b;
*sub=a-b;
}
main()
{
float a,b,sum,sub; /*定义变量sum求和,变量sub求差*/
printf("Enter a b (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(double a,double b,double c,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()
{
double a,b,c,max,min;
printf("Enter a b c (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
void count(int a[])
{
int i;
char ch;
while((ch=getchar())!
='\n')
for(i=0;i<10;i++)
if(i==ch-'0')
if(i==0)
a[9]++;
else
a[i-1]++;
}
main( )
{
int i,a[10]={0};
count(a);
for(i=0;i<10;i++)
printf("a[%d]=%d\n",i,a);
}
9.28 编写函数,对具有10个整数的数组进行如下操作:
从第n个元素开始直到最后一个元
素,依次向前移动一个位置.输出移动后的结果.
※程序如下※
fun (int a[],int n)
{
int i;
for(i=n;i<9;i++)
a=a[i+1];
}
main()
{
int a[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
#include
int fun(int a[],int b[])
{
int i,j=0;
for(i=0;i<10;i++)
if(a%2==1)
b[j++]=a;
return