c语言实例教程 课后题答案Word格式文档下载.docx
- 文档编号:7942853
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:95
- 大小:79.65KB
c语言实例教程 课后题答案Word格式文档下载.docx
《c语言实例教程 课后题答案Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《c语言实例教程 课后题答案Word格式文档下载.docx(95页珍藏版)》请在冰点文库上搜索。
printf(”x=%d,y=3*x-11=%d\n”,x,y);
3.编写程序,输入一位学生的生日,并输入当前的日期,输出该生的实足年龄。
intage,y1,m1,d1,y2,m2,d2;
printf(”输入生日日期(年、月、日):
scanf(”%d%d%d”,&
y1,&
m1,&
d1);
printf(”输入当前日期(年、月、日):
y2,&
m2,&
d2);
age=y2-y1;
if(m1>
m2)age--;
if(m1==m2&
&
d1>
d2)age--;
printf(”ageis%d\n”,age);
4.给一个不多于5位的正整数,求出它是几位数,分别打印出每一位数字,然后再按逆序打印出各位数字。
longintnum;
intindiv,ten,hundred,thousand,ten_thousand,place;
printf(”请输入一个整数(0~99999):
scanf(”%ld”,&
num);
if(num>
9999)place=5;
elseif(num>
999)place=4;
elseif(num>
99)place=3;
9)place=2;
elseplace=1;
printf(”place=%d\n”,place);
printf(”每位数字为:
ten_thousand=num/10000;
thousand=(num-ten_thousand*10000)/1000;
hundred=(num-ten_thousand*10000-thousand*1000)/100;
ten=(num-ten_thousand*10000-thousand*1000-hundred*100)/10;
indiv=num-ten_thousand*10000-thousand*1000-hundred*100-ten*10;
switch(place)
case5:
printf(”%d,%d,%d,%d,%d\n”,ten_thousand,thousand,hundred,ten,indiv);
printf(”反序数字为:
printf(”%d,%d,%d,%d,%d\n”,indiv,ten,hundred,thousand,ten_thousand);
break;
case4:
printf(”%d,%d,%d,%d\n”,thousand,hundred,ten,indiv);
printf(”%d,%d,%d,%d\n”,indiv,ten,hundred,thousand);
case3:
printf(”%d,%d,%d\n”,hundred,ten,indiv);
printf(”%d,%d,%d\n”,indiv,ten,hundred);
case2:
printf(”%d,%d\n”,ten,indiv);
printf(”%d,%d\n”,indiv,ten);
case1:
printf(”%d\n”,indiv);
printf(”%d\n”,indiv);
}
5.某商场在节日期间举办促销活动,顾客可按购买商品的款数多少分别给予以下不同的优惠折扣:
购物不足250元的,没有折扣,赠送小礼品;
购物满250元,不足500元的,折扣5%;
购物满500元,不足1000元的,折扣10%;
购物满1000元,不足2000元的,折扣15%;
购物满2000元及2000元以上,折扣20%;
试用switch语句编写程序,计算顾客的实际付款数。
floatpayment,discount,amount;
inttemp;
charrmb=’\x9d’;
printf(”Pleaseinputyourpayment:
scanf(”%f”,&
payment);
temp=(int)payment/250;
switch(temp)
case0:
discount=0;
printf(”youcangetalittlegift.\n”);
break;
discount=5.0;
discount=10.0;
case5:
case6:
case7:
discount=15.0;
default:
discount=20.0;
amount=payment*(1-discount/100);
printf(”youpay%c%.2f\n”,rmb,amount);
第5章循环结构程序设计
1.求从1到100之间的偶数之和。
inti,sum=0;
for(i=1;
i<
=100;
i++)
if(i%2==0)sum+=i;
printf("
sum=%d\n"
sum);
2.编程求出200~300之间,满足条件:
三位数字之积为42,三位数字之和为12的数。
main()
inti=2,j,k;
for(j=0;
j<
=9;
j++)
for(k=0;
k<
k++)
if(i*j*k==42&
i+j+k==12)
%d\t"
100*i+10*j+k);
3.打印出以下图案:
*
***
*****
*******
inti,j,k;
for(i=1;
=4;
for(j=1;
=4-i;
printf((””);
for(k=1;
=2*i-1;
k++)
printf(”*”);
printf(”\n”);
4.编程实现百钱买百鸡的方法。
设公鸡每只5钱,母鸡每只3钱,小鸡3只1钱,且需包含公鸡、母鸡和小鸡,求可有哪几种方案。
=20;
=33;
for(k=1;
if(5*i+3*j+k/3.0==100&
i+j+k==100)
%d,%d,%d\n"
i,j,k);
5.从键盘输入一些整数,统计大于零的整数个数和小于零的整数个数。
提示:
用输入零来结束输入。
intn,sum1=0,sum2=0;
n);
while(n!
=0)
if(n>
0)sum1++;
elsesum2++;
scanf(”inputn:
”,&
printf(”大于零的整数个数=%d,小于零的整数个数=%d”,sum1,sum2);
1、D2、A3、C4、B5、C6、C7、D
8、B9、C10、D11、B12、A13、A14、A
1、52、523、89214、175、#*#*$6、y=-1
7、1010918、X9、x>
=0x<
min10、x1x1/2-2
第6章
1.用带参的宏,从3个数中找出最大数。
#include"
stdio.h"
#defineMAX(a,b)((a)>
(b)?
(a):
(b))/*带参宏定义,注意加括号*/
voidmain()
inta,b,c;
Inputthreeintegers:
"
);
scanf("
%d,%d,%d"
&
a,&
b,&
c);
max=%d\n"
MAX(MAX(a,b),c));
2.用条件编译方法实现以下功能:
输入一行电报文字,可以任选两种输出:
一为原文输出;
一为将字母变成其下一字母(如’a’变成’b’……’z’变成’a’。
其他字符不变)。
用#define命令来控制是否要译成密码。
例如:
“#defineCHANGE1”
则输出密码。
若
“#defineCHANGE0”
则不译成密码,按原码输出。
(字符数组请参阅第8章)程序见下一页
分析:
字符数组以‘\0’结束,可采用第3种方式条件编译。
如果想输出原文,可以将程序第3行改为:
#defineCHANGE0
#defineMAX80/*宏定义*/
#defineCHANGE1
charstr[MAX];
inti;
Inputtext:
\n"
gets(str);
#if(CHANGE)/*条件编译*/
{for(i=0;
MAX;
{if(str[i]!
='
\0'
)
if(str[i]>
a'
str[i]<
'
z'
||str[i]=='
A'
str[i]=='
Z'
str[i]+=1;
elseif(str[i]=='
str[i]-=25;
}
#endif
Output:
\n%s"
str);
第7章函数
1.写两个函数,分别求两个整数的最大公约数和最小公倍数。
设两个整数为u和v,用辗转相除法求最大公约数,最小公倍数=uv/最大公约数。
“辗转相除”法有下列步骤:
1)若u>
v,用u除以v求余数r.
2)若r=0,则v为最大公约数;
若r!
=0,将r赋给v,v赋给u.
3)r=0,v(最后一次)为最大公约数。
程序如下:
inthcf(intu,intv)/*求最大公约数*/
intt,r;
if(v>
u)
{t=u;
u=v;
v=t;
while((r=u%v)!
=0)
{u=v;
v=r;
return(v);
intlcd(intu,intv,inth)/*求最小公倍数*/
{
return(u*v/h);
main()/*主函数*/
intu,v,h,l;
scanf(”d%,d%”,&
u,&
v);
h=hcf(u,v);
printf(”H.C.F=d%\n”,h);
l=lcd(u,v,h);
printf(”L.C.D=d%\n”,l);
2.编写一个函数,判断从键盘输入的一个整数是否为奇数,并在调用函数中输出是奇数的整数。
#include<
stdio.h>
intodd(intn)/*判断是否为奇数,是奇数flag值为1,不为奇数flag值为0*/
intflag=1;
if(n%2==0)
flag=0;
return(flag);
intx;
Inputaninteger:
%d"
if(odd(x))/*调用函数odd*/
printf("
\n%disaodd."
x);
elseprintf("
\n%disnotaodd."
3.编写两个函数分别完成电文的加密和解密工作。
加密方法为:
将电文中字母A变成E,a变成e,即变成其后的第4个字母,W变成A,X编程B,Y变成C,Z变成D,非字母字符不变,例如”China!
”加密后变为”Glmre!
”。
在主程序中输入一行字符,对其进行加密,输出密码,并对密码进行解密,输出原文。
#include”stdio.h”
charjiami(charc)
if((c>
=′a′&
c<
=′z′)||(c>
=′A′&
=′Z′))
if(c>
=′w′&
=′W′&
=′Z′)}c=c-22;
elsec=c+4;
return(c);
charjiemi(charc)
{
=′d′)||(c>
=′D′)}c=c+22;
elsec=c-4;
charc[100],d[100];
gets(c);
printf(″原文:
″);
puts(c);
printf(″\n密码:
for(i=0;
c[i]!
=′\0′;
d[i]=jiami(c[i]);
printf(″%c″,d[i]);
d[i]=’\0’;
printf(″\n解密后原文:
d[i]!
printf(″%c″,jiemi(d[i]);
4.编写一个递归函数fib,用于计算Fibonacci数列的第n项。
fib(0)=0,fib
(1)=1,fib(n)=fib(n-1)+fib(n-2))。
fib(intn)
intc;
if(n==1||n==0)
c=1;
else
c=fib(n-1)+fib(n-2);
/*递归调用*/
intn;
printf(”Entern:
scanf(”d%”,&
printf(”theresultis:
d%\n”,fib(n));
5.写一个判素数的函数,在主函数中输入一个整数,输出是否素数的信息。
intprime(intn);
/*函数声明*/
intn;
if(prime(n))/*调用函数prime*/
\n%disaprime."
n);
\n%disnotaprime."
intprime(intn)/*判断是否为素数,是素数flag值为1,不为素数flag值为0*/
intflag=1,i;
for(i=2;
=n/2&
flag==1;
if(n%i==0)
6.编写函数,求输入的三个整数值的最大值,并在主函数中输出。
intmaxmum(intx,inty,intz);
/*说明一个用户自定义函数*/
inti,j,k,max;
i,j,k=?
%4d%4d%4d"
i,&
j,&
k);
%4d%4d%4d\n"
max=maxmum(i,j,k);
/*调用子函数,并将返回值赋给max*/
Themaxmumvalueis%d\n"
max);
maxmum(intx,inty,intz)
intmax;
/*求最大值*/
max=x>
y?
x:
y;
max=max>
z?
max:
z;
return(max);
/*返回最大值*/
例1:
定义一维数组,从键盘输入10个数,计算其中负数的和,在屏幕上显示输出结果。
inta[10],i,sum=0;
for(i=0;
10;
i++)scanf("
a[i]);
if(a[i]<
0)sum=sum+a[i];
i++)printf("
%f"
a[i]);
printf(“\n"
printf(“sum=%d\n"
sum);
例2:
纠错题.程序功能:
逐个输入8个浮点型数到数组a中,然后找出数组元素中的最小值并输出min的值。
mian()
inta[8],i,min;
InputScore(8):
for(i=1;
8;
min=a[0];
=8;
i++)
if(a[i]>
min)min=a[i];
min=%d"
min);
正确程序:
floata[8],min;
%f"
if(a[i]<
min=%f"
例4:
定义一个5行5列的整型二维数组,对角线上元素赋值为1,其它元素赋值为0,在屏幕上显示输出矩阵数据。
inta[5][5],i,j;
5;
for(j=0;
if(i==j)a[i][j]=1;
elsea[i][j]=0;
j++)printf(”%d”,a[i][j]);
printf(”\n”);
例5:
定义一个3行4列的整型二维数组,存放矩阵数据,用循环嵌套的方式输入数据,统计二维数组中负数的个数,在屏幕上显示输出矩阵数据,输出矩阵数据中负数个数。
inta[3][4],i,j,n=0;
Inputa[3][4]\n:
"
3;
for(j=0;
4;
{
scanf("
a[i][j]);
if(a[i][j]<
0)n++;
}
j++)printf("
%d"
a[i][j]);
printf(”\n”);
二维数组中负数的个数为%d\n"
例6:
分析程序运行结果。
intf(intx)
inty=4;
x=x+1;
y=y+1;
return(x+y);
intm=3,i;
=2;
%4d"
f(m));
程序的运行结果是:
999
intfun(intx)
staticinty=4;
i++)printf("
fun(m));
运行结果是:
91011
例8:
inta=3,b=5;
max(a,b)
inta,b;
return(a>
b?
a:
b);
inta=8;
max(a,b));
运行结果:
8
将上面程序改为如下形式:
max(inta,intb)
数组
1.编写一个程序,从键盘输入10个学生成绩,统计最高分、最低分和平均分。
main()
inti,j,k;
floatarray[10],max,min,avg,sum=0;
printf("
输入10个学生的成绩:
for(i=0;
i++)
array[i]);
max=a[0];
min=a[0];
if(a[i]>
max)max=a[i];
if(a[i]<
sum
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c语言实例教程 课后题答案 语言 实例教程 课后 答案