版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言项目式系统开发教程(微课版)(第2版)-课后习题答案
第一章
一、选择题
1.B
2.B
3.A
4.C
5.D
二、填空题
1.c
2.函数头、函数体
3.编译
4.main函数
5./*、*/
三、编程题
#include<stdio.h>
voidmain()
(
printf("姓名:张俊杰,年龄:18岁,籍贯:湖南长沙");
)
第二章
一、选择题
1.B
2.C
3.D
4.C
5.C
6.A
7.D
8.A
9.B
10.C
11.D
12.C
13.A
14.A
15.B
16.B
17.A
二、填空题
1.3.141593,3.1416,3.142,UUUUU3.142
3.1415936+00,3.14166+00,3.1426+00,3.1426+00
2.c=h
3.i=l,k=LIJ=2
4.
1.xl=98,x2=765,yl=4,y2=l
2.xl=98,x2=76,yl=LJ/y2=3
3.xl=98,x2=765,yl=4,y2=2
5.使用了读入整数的%d作为格式说明符
6.123、45
三、编程题
#include<stdio.h>
voidmain()
int1,w;
scanf("%d%d\&1,&w);
printf(“长方形周长:%d,长方形面积:%.2f\(1+w)*2,(float)l*w);
}
第三章
一、选择题
1.A
2.A
3.C
4.D
5.C
二、填空题
1.x==0
2.1
3.####
4.
1.ch>='A'&&ch<='Z'
2.ch=ch-32;
5.0
6.3
7.!#
三、编程题
雷达测速
#include<stdio.h>
//雷达测速
voidmain()
{
intspeed;
scanf("%d",&speed);
printf("速度为:%dspeed);
if(speed<=60)
{
printf("速度正常");
}
else
printf("您已超速");
)
)
判断是否是会员
#include<stdio.h>
//判断是否是会员
voidmain()
(
charc;
scanf("%c",&c);
if(c=='y')
{
printf("欢迎您,您是尊贵的会员\n");
}
elseif(c=='n')
{
printf("期待您尽快入会\n");
)
)
3个整数排序
#include<stdio.h>
//3个整数排序
voidmain()
{
intx,y,z,t;
scanf("%d%d%d”,&x,&y,&z);
if(y>z)
(
t=z;
Z=y;
y=t;
}
if(x>y)
{
t=X;
x=y;
y=t;
)
if(y>z)
(
t=z;
Z=y;
y=t;
}
printf("%d%d%d",x,y,z);
)
分段函数
#include<stdio.h>
//分段函数
voidmain()
(
intx,y;
scanf("%d",&x);
if(x>=90)
y=4;
elseif(x>=80)
y=3;
elseif(x>=70)
y=2;
elseif(x>=60)
y=1;
else
y=0;
printf("y=%d",y);
)
快递运费计算器
#include<stdio.h>
#include<math.h>
//快递运费计算器
voidmain()
(
intw;
floatc=0;
scanf("%d",&w);
switch((int)ceil(O.l*w))
(
case5:
c+=(w-30)*5;
w-=w-30;
case3:
c+=(w-20)*4.5;
w-=w-20;
case2:
c+=(w-10)*4;
w-=w-10;
case1:
c+=(w-5)*3.5;
w-=w-5;
case0:
c+=w*3;
printf("快递费用:%.2f元;c);
default:
break;
)
)
第四章
一、选择题
1.A
2.D
3.D
4.A
5.BCE
二、填空题
1.55
2.0
3.无限次
4.15
5.21
6.UUUUUULUUU*
UUUUUULUUU*UU
UUUUUULUUU*uuuu
I|lIIIIIIIIII0IIIII*******
UUUUUULUUU*UUULUUUU
UUUUUULUUU*UUULUUUUUU
7.*#*#*#$
三、编程题
求奇偶数个数
#include<stdio.h>
//求奇偶数个数
voidmain()
{
intd,j,o;
j=o=0;
while(scanf(”%d,&d),d!=-1)
d%2?j++:o++;
printf("%d%d\j,o);
}
计算公式的结果
#include<stdio.h>
voidmain()
(
intm;
floatt=1.0;
scanf("m=%d",&m);
for(inti=2;i<=m;i++)
t-=1.0/(i*i);
printf("t=t);
)
黑洞陷阱
#include<stdio.h>
voidmain()
{
intn;
inta,b,c,max,min,num,trem;
intmaxi,midi,mini;
scanf("%d"&n);
for(num=1;n!=495;num++)
{
if(n>=100)
{
a=n/100;
b=n/10%10;
c=n%10;
if(a<b)
{
trem=a;
a=b;
b=trem;
}
if(a<c)
{
trem=a;
a=c;
c=trem;
}
.
1
{(b<c)
trem=b;
b=cj
c=trem;
}
maxi=a;
midi=b;
mini=c;
max=maxi*100+midi*10+mini;
min=mini*100+midi*10+maxi;
)
elseif(n<10)
{
max=n*100;
min=n;
)
else
(
a=n/10;
b=n%10;
if(a>b)
{
max=a*100+b*10;
min=b*10+a;
)
else
{
max=b*100+a*10;
min=a*10+b;
)
)
n=max-min;
printf("%d:%d-%d=%d\n"num,max,min,n);
if(n==495)
break;
}
)
编写程序,计算级数和S=l+x+x2!+x3++xhl,例如。当n=10、xO3时。值为
1349859
#include<stdio.h>
#include<math.h>
voidmain()
{
floats=1,x;
inti,n,j,m=1;
scanf("%d%f\&n,&x);
if(n==0)
s=1;
else
for(i=1;i<=n;i++)
{
m=1;
for(j=1;j<=i;j++)
m*=j;
s+=pow(x,i)/m;
)
printf("%f",s);
)
编写程序,求整数的各位数字及位数。从键盘输入一个正整数,逆序输出各位数字,
并输出该整数的位数。
#include<stdio.h>
voidmain()
{
intd,t,i;
scanf("%d\&d);
t=d;
for(i=0;t>0;i++,t/=10)
printf("%d't%10);
printf("\n%d",i);
}
百马担问题
#include<stdio.h>
intmain(void)
{
intm,n,k;
intsum=0;
for(m=1;m<=100/3;m++)
for(n=1;n<100/2;n++)
{
k=100-m-n;
if((2*3*m+2*2*n+k)==2*100)
printf("大马:%2d中马:%2d小马:%2d\n”,m,n>k);
sum++;
)
)
return0;
}
第五章
一、选择题
1.A
2.C
3.A
4.C
5.A
6.C
7.C
8.D
9.B
10.B
二、填空题
1.10、0、9
2.6
3.scanf("%d",&a[i]);>continue
4.0、6
5.s[i++]
三、编程题
编写一个程序:学生输入5门功课的成绩计算出该生本学期5门功课的平均成绩,
结果保留两位
小数(注:使用数组完成)。
#include<stdio.h>
intmain()
{
intscore[5]sum=0;
for(inti=0;i<5;i++)
{
scanf("%d",&score[i]);
sum+=score[i];
)
printf(“本学期5门功课平均成绩为:%.2f分\n”,(float)sum/5);
return0;
}
输出斐波那契数列。
#include<stdio.h>
intmain()
(
inti,n,tl=1,t2=1,nextTerm;
scanf(H%d\&n);
for(i=1;i<=n;++i)
{
printf("%d\t",tl);
nextTerm=tl+t2;
tl=t2;
t2=nextTerm;
if(!(i%5))
putchar('\n');
)
return0;
)
用户从键盘输入一组正整数,以-1为结束符。请计算并输出该组数据中最小的那
个数。
#include<stdio.h>
intmain()
{
intd,min;
scanf("%d\&d);
min=d;
while(d!=-1)
{
if(d<min)
min=d;
scanf(“%d\&d);
)
if(min!=-1)
printfC喋d”,min);
return0;
)
编写程序实现简单的字符串加密。加密规则如下:将字符串中的英文字母替换成
ASCII表中它后面
的第2个字符,其他字符不处理。
#include<stdio.h>
intmain()
{
charc;
while((c=getchar())!='\n')
putchar(c+2);
return0;
)
编写程序,定义NxN的二维数组,输出将数组左下半角元素中的值全部置0的新
数组。
#include<stdio.h>
#defineN3
intmain()
{
inta[N][N];
for(inti=0;i<N;i++)
for(intj=0;j<N;j++)
{
scanf("%d",&a[i][j]);
if(j<=i)
a[i][j]=0;
)
putchar('\n');
for(inti=0;i<N;i++)
{
for(intj=0;j<N;j++)
printf("%da[i][j]);
putchar(An*);
)
return0;
}
求NxW整型数组的正对角线和反对角线元素的和。
#include<stdio.h>
#defineN3
intmain()
{
inta[N][N],xl,x2;
xl=x2=0;
for(inti=0;i<N;i++)
for(intj=0;j<N;j++)
{
scanf("%d",&a[i][j]);
if(j==i)
xl+=a[i][j];
if(j==N-i-1)
x2+=a[i][j];
)
printf("正对角线的和是%d,反对角线的和是%d。\n",xl,x2);
return0;
)
新草分布在R行C列的牧场里。用户想计算一下牧场中的草丛数量。
#include<stdio.h>
charmap[16][16];
intn,m;
inttotal;
voidSearch(intx,inty)
{
if(x<0||x>=n||y<0||y>=m||map[x][y]=='*')
{
return;
)
map[x][y]=
Search(x-1,y);
Search(xJy-1);
Search(x,y+1);
Search(x+1,y);
}
intmain()
{
scanf("%d%d\n"&n,&m);
inti,j;
for(i=0;i<n;++i)
(
for(j=0;j<m;++j)
{
scanf("%c",&map[i][j]);
)
getchar();
)
for(i=0;i<n;++i)
{
for(j=0;j<m;++j)
{
if(map[i][j]=='#')
{
++total;
Search,,j);
}
)
}
printf("%d\n",total);
return0;
)
给定一个字符串,在字符串中找到第一个连续出现至少k次的字符。
#include<stdio.h>
intmain()
{
charc,last;
intt,count=1;
scanf("%d\n",&t);
c=getchar();
last=c;
while((c=getchar())!='\n')
{
if(last==c)
{
if(++count==t)
{
printf("%c\n\last);
break;
)
)
elseF
{
count=1;
last=c;
}
)
return0;
}
第六章
一、选择题
1.C
2.D
3.D
4.B
5.B
6.A
二、填空题
1.math.h
2.int
3.函数首部定义的类型
4.函数值的类型
5.无返回值
6.全局、局部
7.2
8.直接、间接
三、编程题
请编写函数fun(),该函数的功能是:计算并输出n(包括n)以内所有能被5或9整
除的自然数的倒数之和。注意:n的值要求不大于100。
#include<stdio.h>
floatfun(intn);
intmain()
{
inta;
scanfC^d",&a);
printf("此范围内满足条件的数的倒数和为:%f",fun(a));
)
floatfun(intn)
(
floatsum=0;
for(inti=1;i<=n;i++)
{
if(i%5==0||i%9==0)
{
sum+=1.0/i;
)
)
returnsum;
)
函数fun()的功能是:将s所指字符串中下标为偶数同时ASCII值为奇数的字符到
除,s所指字符串中剩余的字符形成的新字符串放在t所指的数组中。
#include<stdio.h>
#include<string.h>
#defineN80
voidfun(char*s,chart[])
{
inti,j=0;
for(i=0;i<strlen(s);i++)
if(i%2||s[i]%2==0)
t[j++]=s[i];
t[j]='\0';
)
intmain()
{
chars[N],t[N];
gets(s);
fun(s,t);
printf("%s\n",t);
return0;
)
请编写函数fun().其功能是:计算并输出多项式。S=(l-l/2)+(l/3-l/4)+...+[l/(2n-
l)-l/2n]的值。
#include<stdio.h>
floatfun(intn)
{
if(n==0)
return0;
else
return(1.0/(2.0*n-1)-1.0/(2.0*n))+fun(n-1);
}
intmain()
{
intn;
scanf("%d",&n);
printf("%f\n\fun(n));
return0;
}
编写函数fun(),其功能是:从字符串中除指定的字符。同字母的大、小写按不同字
符处理。注意:
如果输入的字符在字符串中不存在,则字符串照原样输出。
#include<stdio.h>
#include<string.h>
voidfun(chara[],charb[],charc)
{
intib=0;
for(inti=0;a[i]!='\0f;i++)
{
if(a[i]==c)
continue;
b[ib++]=a[i];
}
b[ib]='\0";
)
intmain()
{
chara[32],b[32]>c;
gets(a);
c=getchar();
fun(a.,b,c);
puts(b);
return0;
)
编写函数fun。,其功能是:实现两个字符串的连接(不要使用库函数scO),即把p2所
指的字符
串连接到pl所指的字符串的后面。
#include<stdio.h>
#include<string.h>
voidfun(charstr[],charpuls[])
{
intlenght=strlen(str);
inti;
for(i=0;puls[i]!='\0';i++)
strflenght+i]=puls[i];
}
intmain()
{
charstring[32]string2[32]]
gets(string);
gets(string2);
fun(string,string2);
puts(string);
return0;
)
请编写函数fun().其功能是:计算并输出给定10个数的方差。(方差计算方式:
先计算10个数的平
均值再用平均值减去每个数的平方,求累加和:对累加和开平方。)
#include<stdio.h>
#include<math.h>
floatfun(floatn[10])
floataverage=0,s=0;
shorti=0;
for(i=0;i<10;i++)
{
printfC^fXn",n[i]);
average+=n[i];
)
average/=10.0;
for(i=0;i<10;i++)
s+=pow(n[i]-average,2);
S/=10.0;
returnsqrt(s);
)
intmain()
{
floatn[10]={0};
for(inti=0;i<10;i++)
',,,
scanf(%fJ&n[i]);
printf("s=%lf"Jfun(n));
return0;
}
编写函数fun。,其功能是:求ss所指字符串中指定字符的个数并返回。
#include<stdio.h>
#include<string.h>
intfun(charcharb)
{
intcount,1=strlen(a);
for(inti=0;i<1||a[i]=='\0';i++)
if(a[i]==b)
count++;
returncount;
)
intmain()
{
chara[32],c;
gets(a);
c=getchar();
',,,
printf(%d\nJfun(a,c));
return0;
}
请编一个函数fun((charsO,该函数的功能是:把字符串中的内容逆置。
#include<stdio.h>
#include<string.h>
voidfun(chars[])
{
intlength=strlen(s);
for(inti=0;i<length/2;i++)
{
charc=s[length-i-1];
s[length-i-1]=s[i];
s[i]=c;
)
)
intmain()
(
chars[32];
gets(s);
fun(s);
puts(s);
return0;
)
第七章
一、选择题
1.A
2.B
3.D
4.D
5.C
6.C
7.D
8.B
9.D
10.B
11.c
二、填空题
1.指针地址
2.3
3.整型
4.自增
5.a[5]
6.A
7.book
8.aabc
9.b,B,A,b
10.4
11.16
12.8,7,65432,1,
13.4
三、编程题
1.使用动态内存分配方式申请4个字节的内存单元存放整数类型变量,通过指针
访问内存单元,向其中写入5,并输出结果。
#include"stdio.h"
#include"malloc.h"
voidmainQ
(
intnum=(int*)malloc(sizeof(int)),*p=#
*p=5;
printf("整数为:%d",*p);
)
2..定义一个动态数组,长度为变量n,用11〜99的随机数给数组各元素赋值,
然后遍历输出数组。(首先使用srand。来设置产生随机数时的种子,然后调用随
机函数randQ,调用后会返回在0〜RAND_MAX均匀分布的随机整数,
RAND_MAX至少为32767,一般都默认为32767。)
#include"stdio.h"
#include"stdlib.h"
voidmain(]
(
int*a,n,i;
srand((int)time(NULL]);
printff'Iputn:
scanf("%d”,&n);
for(i=0;i<n;i++)
a[i]=ll+rand()%89;
for(i=0;i<n;i++]
printf(',%4d,,,a[i]);
}
3.在主函数中定义一个整数类型数组并完成初始化(inta[8]={1,2,3,456,7,8};),
从键盘输入一个整数并存放于变量n,在数组中查找整数,如果能找到,则在找到
后,求它前面的所有整数之和。如果找不到,输出“没有找到该整数"。
#include"stdio.h"
voidmainQ
(
inta[8]={l,2,3,4,5,6,7,8},n,sum=0,i;
printf(HIputn:n);
scanf("%d",&n);
for(i=0;i<8;i++)
(
sum+=a[i];
if[a[i]==n)
break;
if(i==8)
sum=O,printf("没有找到该整数%d",n);
else
printf("%d之前所有整数之和:%d",n,sum);
)
4.定义一个字符数组存放明文,从键盘输入明文,然后将明文转换成密文并输出。
转换规则是每个字母都由其后的第4个字母代替,例如,A变成E(a变成e)、Z
变成D,非字母字符不变。使用指针完成程序。
#include"stdio.h"
#include"ctype.h"
voidmainQ
(
chara[81],b[81],*p=a,*q=b;
printff'lputPlaintext:
gets(a);
while(*p!=,\0')
(
if(isalpha(*p)==O)
*(q++)=*(p++);
else
if((*p>='A'&&*p<='Z'-4)||(*p>='a'&&*p<='z'-4))
*q++=(*p++)+4;
else
*q++=(*p++)-22;
*q='\0';
printf("密文内容为:");
puts(b);
}
5.定义二维数组存放下列矩阵,编写程序找出矩阵中的最大值和最小值,同时输
出它们的下标(即所处的行号和列号),使用指针数组访问二维数组。
#include"stdio.h"
voidmainQ
(
inta[3][3]={l,2,3,0,6,8,4,5,9},*p[3];
int
intmax=a[0][0],min=a[0][0];
for(i=0;i<3;i++)
P[i]=a[>];
for(i=0;i<3;i++)
(
for0=O;j<3;j++)
(
if(max<p[i][j])
{max=p[i][j];mi=i;mj=j;}
if(min>p[i][j]]
{min=p[i][j];ni=i;nj=j;}
}
}
printf("最大值:%d,行标:%d,列标:%d\n",max,mi,mj);
printf("最小值:%d,行标:%d,列标:%d\n",min,ni,nj);
6.编写一个程序,根据输入星期序号输出其英文名,用指针数组完成。
#include"stdio.h"
voidmainQ
chara[7][20]={nSunday
,7'Monday,7'Tuesday,7,Wednesday,7,Thursday,7,Friday,7'Saturday");
intn,i;
char*p[7];
for(i=0;i<7;i++]
P[i]=a[i];
scanf("%dn,&n);
printf(nTheDayIs%s",p[n]J;
}
7.在主函数定义两个字符数组,从键盘中输入字符数组内容,调用compstr。函
数,比较两个字符数组存放的字符串是否相等,在主函数中输出比较结果,使用
指针完成。
#include"stdio.h"
intcompstr(char*p,char*q)
(
while(*p!=,\O,&&*p==*q)
P++,q++;
if(*p==f\O,)
return1;
else
return0;
}
voidmain。
chara[81],b[81];
gets(a);
gets(b);
iffcompstrfa,b]]
printf("两个字符串的比较结果:相等)
else
printf("两个字符串的比较结果:不相等)
)
8.在主函数中定义两个字符数组,从键盘中输入两个字符数组的内容,调用
cpystr。函数,将第1个字符数组的内容复制至第2个字符数组,最后在主函数中
输出第2个字符数组,使用指针完成。
#include"stdio.h"
cpystr(char*p,char*q)
(
char*t=p;
while(*p!=,\0,)
P++;
while(*q!='\0,)
*p++=*q++;
*P=,\0';
)
voidmainQ
(
chara[81],b[81];
gets(a);
gets(b);
cpystr(a,b);
puts(a);
}
第八章
一、选择题
1.A
2.C
3.D
4.C
5.D
6.D
7.A
二、填空题
1.20
2.P->a
3.连续的
4.q->next=p->nextp->next=q;
5.list=list->next
6.2002Shangxian
7.6
8.5,7
三、编程题
1.编写程序:计算两点之间的距离。
#include"stdio.h"
#include"math.hn
structpoint{
doublex;
doubley;
);
voidmainQ
(
structpointa,b;
doubleresult=0.0;
,,
scanf(%lf%lf\n%lf%lf\&a.x/&a.y,&b.x,&b.y];
result=sqrt(pow(a.x-b.x/2)+pow(a.y-b.y,2));
printf("%lf\nn,result);
}
2.编写程序:计算员工的实发工资。
#include"stdio.h"
structSalary{
charname[20];
doublejb;
doublefd;
doublekc;
);
voidmainQ
(
structSalarys[3];
doublea[3],max;
inti=0,key;
for(i=0;i<3;i++)
,,
scanf('%s%lf%lf%lf/s[i].name,&s[i].jb,&s[i].fd,&s[i].kc);
a[i]=s[i].jb+s[i].fd-s[i].kc;
}
for(i=0/max=a[0];i<3;i++)
(
max=a[i],key=i;
printf("姓名:%s,实发工资:%lf\n",s[i].name,a[i]);
)
printf("实发工资最高的员工是:%s\n",s[key].name);
)
3.编写程序来实现倒计时。
#include"stdio.h"
structDate{
intyear;
intmouth;
intday;
);
intGetDayNumfstructDatestart,structDateend)
{
if(start.year==end.year&&start.mouth==end.mouth)
returnend.day-start.day;
else
if(start.year==end.year]
returnDaylnyear(end)-Daylnyear(start);
else
intdl,d2,d3,j;
if(IsLeap(start.year))
dl=366-DayInyear(start.year);
else
dl=365-DayInyear(start.year);
d2=DayInyear(end.year);
d3=0;
forQ=start.year+l;j<end.year;j++)
(
if(IsLeap(j))
d3+=366;
else
d3+=365;
)
returndl+d2+d3;
)
}
intDaylnyearfstructDate*p)
(
intiret=O,i;
intDay[12]={31,28,31,30,31,30,31,31,30,31,30,31);
if(IsLeap(p->year))
Day[l]=29;
for(i=0;i<p->mouth-l;i++]
iret+=Day[i];
returniret;
intIsLeap(intY)
return(Y%4==0||Y%400==0)&&(Y%100!=0);
}
voidmainQ
(
structDatepl,p2;
intresult;
n
scanf(%d%d%d"/&pl.year,&pl.mouth,&pl.day);
scanf("%d%d%d",&p2.year/&p2.mouth/&p2.day);
result=GetDayNum(pllp2);
printf("剩余天数:%d天,result);
)
4.编写程序:建立个人通信录。
#include"stdio.h"
structmemu
(
charname[81];
charphone[81];
charaddress[81];
);
intmainQ
(
inti;
structmemua[3];
for(i=0;i<3;i++)
printf("Iuput%dthperson'sinformation:n,i+l);
,,,
scanf(%s%s%s\a[i].name/a[i].phone,a[i].address);
)
for(i=0;i<3;i++)
printf(nName:%s,phone:%s,
Address:%s\n",a[i].name/a[i].phone/a[i].address];
return0;
)
四、程序改错题
#include<stdio.h>
#include<stdlib.h>
#defineLENsizeof(structparts)
typedefstructparts{
charpname[10];
intwnum;
structparts*next;
)AS;
intmain()
(
AS*head,*p,*q;
inti;
for(i=0;i<100;i++)
(
p=(AS*)malloc(sizeof(AS));
sca
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论