1、课后习题1答案
一、选择题
1、A 2、D 3、C
二、编程题
1.
#include
2、\n"); printf(" *****\n"); printf("*******\n"); return 0; } 课后习题2答案 一、选择题 1-5、 DDBAB 6-10、 DDABA 11-15、CAABA 16、 B 二、填空题 1、54,146,255 2、字母,数字,下划线 3、(换行字符)换行,(退格字符)移动到当前行的前一个位置,(反斜杠字符)产生反斜杠字符 4、float,double,char 5、(10101010)2,(00010000)2 6、(11111011)2,(373)8,(fb)16 7、000
3、0000010011101, 0000000010011101, 1000000010011001,1111111101100111 课后习题3答案 一、选择题 1-5、 CB DACD 6-10、 CCBAC 11-15、CADDB 16-17、CD 二、填空题 1、-16 2、12,4 3、m/100,m/10%10,m%10 4、(注:□表示空格) □□□□12## 12□□□□## □□3.1415926000## 3.1415926000□□## 5、55,A,B 三、编程题 1. #define PI 3.14 #include <
4、stdio.h>
#include
5、anf("%f%f%f",&x,&y,&z); /*输入长方体的长、宽和高*/
s=2*(x*y+x*z+y*z); /*计算长方体的表面积*/
v=x*y*z; /*计算长方体的体积*/
printf("Area=%.2f,Volume=%.2f\n",s,v);
return 0;
}
运行结果:
3 4 5↙
Area=94.00,Volume=60.00
3.
#include
6、b,c,p,s; /*输入3个顶点的坐标*/ scanf("%f%f%f%f%f%f",&x1,&y1,&x2,&y2,&x3,&y3); /*求第一条边的长度*/ a=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); /*求第二条边的长度*/ b=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3)); /*求第三条边的长度*/ c=sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3)); p=(a+b+c)/2; /*求三角形的面积*/ s=sqrt(p*(p-a)*(p-b)
7、p-c)); printf("Area=%f\n",s); return 0; } 运行结果: 5 6 3 8 0 23↙ Area=12.000013 课后习题4答案 一、选择题 1-5、 CCCCC 6-8、 DBB 二、填空题 1、0 2、y%2或y%2==1 3、(x<0 && y<0 && z>0) || (x<0 && y>0 && z<0) || (x>0 && y<0 && z<0) 4、0 5、x>2 && x<3 || x<-10 6、13 7、①c=c+5 ②c=c-21 8、①a+b>c &&
8、 a+c>b && b+c>a
②a==b && b==c
③a==b || a==c || b==c
9、0.600000
10、①x>=0
②x
9、"%d",num);
return 0;
}
运行结果:
(1)测试数据一:
3 4↙
7
(2)测试数据二:
9 5↙
1
2.
#include
10、include
11、
}
printf("%c\n",grade);
return 0;
}
运行结果:
96↙
A
4.
#include
12、 scanf("%d",&n);
/*外层循环控制输出的行数*/
for(i=1;i<=n;i++)
{
/*输出每行的空格*/
for(j=1;j<=i-1;j++)
printf(" ");
/*输出每行的星号*/
for(j=1;j<=2*n+1-2*i;j++)
printf("*");
/*输出换行符*/
printf("\n");
}
return 0;
}
6.
#include
13、e x,an,sum; printf("input x:"); scanf("%lf",&x); sum=0; an=1; n=1; do { sum+=an; an*=(-x*x)/((n+1)*(n+2)); n+=2; }while(fabs(an)>=EPS); printf("sin(%.4lf)=%.4lf\n",x,sum); return 0; } 课后习题5答案 一、选择题 1-5、 DABDC 6-8、 DCB 二、填空题 1、①j=2 ②j>=0 2、Search Successful!
14、The index is:5
3、①j+=2
②a[i]>a[j]
4、#&*&%
三、编程题
1.
#include 15、[i]=sum/5.0;
}
for(i=0;i<6;i++)
printf("%.2f ",arrAver[i]);
printf("\n");
return 0;
}
运行结果:
6.00 22.00 48.00 84.00 130.00 186.00
2.
#include 16、 for(j=0;j 17、\n",M,N );
for(i=0;i 18、)
if(a[j][maxj]
#define N 40
int main()
{
int i,j=0,iMax,max,count;
char str[N];
19、
char insertStr[5]={'(','m','a','x',')'};//待插入的多个字符“(max)”
printf("输入一个字符串:");
gets(str);
/*用假设法求字符串str中最大的元素max和最大元素所在的下标iMax*/
count=strlen(str);/*字符串str中字符元素的个数*/
max=str[0]; /*假设字符串的第一个字符最大*/
iMax=0; /*字符串中最大字符的下标置为0*/
for(i=1;i 20、字符串中最大的字符存放到max中*/
iMax=i; /*字符串中最大的字符的下标存放到iMax中*/
}
/*字符串最大的字符后的字符依次往后移动5个字符*/
for(i=count-1;i>iMax;i--)
str[i+5]=str[i];
/*字符串最大的字符后插入字符串“(max)”*/
for(i=iMax+1;i<=iMax+5;i++)
{
str[i]=insertStr[j];
j++;
}
/*新串的末尾加上\0*/
str[count+5]='\0';
puts(str);
retur 21、n 0;
}
运行结果:
MyFriend↙
My(max)Friend
5.
#include 22、{
/*将b串的所有字符都连接到a串末尾*/
while(strB[j]!='\0')
{
strA[i+j]=strB[j];
j++;
}
}
else
{
/*将b串的前5个字符连接到a串末尾*/
while(j<5)
{
strA[i+j]=strB[j];
j++;
}
}
/*新串的末尾加上串结束标志\0*/
strA[i+j]='\0';
puts(strA);
return 0;
}
运行结果:
(1)测试数据一:
请输入字符串a:hubei↙ 23、
请输入字符串b:wuhan↙
hubeiwuhan
(2)测试数据二:
请输入字符串a:shanxi↙
请输入字符串b:xian↙
hubeiwuhan
6.略
7.
#include 24、建","王连","李立","刘虹",
"丁平"},tmpName[8];
/*学生的四门课程数组*/
int score[N][4]={{85,90,92,88},{90,95,95,90},{76,78,80,70},
{56,36,66,97},{78,79,87,89},{89,79,70,87}},tmpScore;
int sum[N],i,j,k;
float aver[N],tmpAver; /*学生平均分数组*/
/*求每个学生4门课程成绩的总分sum和平均分ave*/
for(i=0;i 25、 /*每个学生4门课程成绩总分置0*/
for(j=0;j<4;j++)
sum[i]+=score[i][j];
aver[i]=(float)sum[i]/4;
}
/*用冒泡排序法将学生信息按升序排序*/
for(i=1;i 26、号*/
strcpy(tmpNum,num[j]);
strcpy(num[j],num[j+1]);
strcpy(num[j+1],tmpNum);
/*交换姓名*/
strcpy(tmpName,name[j]);
strcpy(name[j],name[j+1]);
strcpy(name[j+1],tmpName);
/*交换成绩*/
for(k=0;k<4;k++)
{
tmpScore=score[j][k];
score[j][k]=scor 27、e[j+1][k];
score[j+1][k]=tmpScore;
}
}
}
/*按格式输出学生所有信息*/
printf(" 学号\t 姓名\t 数学\t 物理\t 英语\t计算机\t
平均成绩\n");
for(i=0;i 28、r[i]); /*输出平均分*/
}
return 0;
}
课后习题6答案
一、选择题
1-5、 DBADB
6-10、 BABBB
二、填空题
1、0 2 4 6 8 10 12 14 16 18
0 2 4 6 8 10 12 14 16 18
2、8,17
3、1010
4、7
三、编程题
1.
#include 29、printf("不是水仙花数。\n");
else
printf("是水仙花数。\n");
return 0;
}
int F(int a)
{
int b,c,d;
b=a/100; /*百位*/
c=a%100/10; /*十位*/
d=a%10; /*个位*/
if (a==b*b*b+c*c*c+d*d*d)
return 1;
else
return 0;
}
2.
#include 30、str为字符数组
num为整型数组
返回值:num数组中数字的个数*/
int fun(char str[],int num[])
{
int i,f=0,n=0,j=0;
for(i=0;str[i]!= '\0';i++)/*遍历整个数组str元素 */
{
if(str[i]>='0' && str[i]<='9') /*为数字字符*/
{
num[j]=str[i]- '0'; /*将数字字符转换为数字*/
j++;
}
}
return j; /*返回num数组中有多少个数字*/
}
int main()
31、
{
char string[N];
int number[N];
int n,i;
long sum=0;
gets(string);
n=fun(string,number);/*number数组中有n个数字元素*/
/*将number数组中的数字转换成整数值,存放到sum变量中*/
sum=number[0];
for(i=1;i 32、t s[],int a,int b,int key)
{
int mid;
if(a==b)
if(key==s[a])
return (a);
else
return (-1);
else
{
mid=(a+b)/2;
if(key 33、lude 34、选择题
1-5、 CBDCD
6-10、 CBACA
11-12、DC
二、填空题
1、30
2、12,10,10,12
3、*(p+5)
4、①*p
②p-str
5、4
6、9876876
7、*(p+4*i+j)
8、p[i][j] 或 *(*(p+i)+j) 或 (*(p+i))[j]
9、①p
②q max
④*q 35、1
字符串指针str2
函数返回值:void*/
void strreverse(char *str1,char *str2)
{
char *p1,*p2;
int len2;
/*获取str2所指向的字符串的长度*/
len2=strlen(str2);
p1=str1;
p2=str2+len2-1;
/*将str2所指向的字符串其逆序放入str1中*/
while(p2>=str2)
{
*p1=*p2;
p1++;
p2--;
}
/*str1所指向的字符串的末尾增加串结束标志*/
36、
*p1='\0';
}
int main()
{
char str1[20];
char str2[20];
scanf("%s",str2);
strreverse(str1,str2);
printf("逆序后的字符串为:%s\n",str1);
return 0;
}
方法二:
#include 37、rreverse(char *str1,char *str2)
{
int len2,i;
char tmp;
/*获取str2所指向的字符串的长度*/
len2=strlen(str2);
/*将str2所指向的数组元素全部逆序*/
for(i=0;i 38、str1++=*str2++;
/*str1所指向的数组的末尾加\0*/
*str1='\0';
}
int main()
{
char str1[20];
char str2[20];
scanf("%s",str2);
strreverse(str1,str2);
printf("逆序后的字符串为:%s\n",str1);
return 0;
}
运行结果:
abcdefg
逆序后的字符串为:gfedcba
2.
方法一:
#include 39、大到小的顺序排序
函数参数:书名的二维数组bookName
书的本数n
函数返回值:void*/
void sort(char bookName[][8],int n)
{
char tempName[8];
int i,j;
for(i=1;i<=n-1;i++) /*冒泡法排序*/
{
for(j=1;j<=n-i;j++)
if(strcmp(bookName[j-1],bookName[j])>0)
{
strcpy(tempName,bookName[j-1]);
strc 40、py(bookName[j-1],bookName[j]);
strcpy(bookName[j],tempName);
}
}
}
/*函数功能:输出各字符串
函数参数:书名的二维数组bookName
书的本书n
函数返回值:void*/
void print(char bookName[][8],int n)
{
int i;
for(i=0;i 41、a","C","PHP","HTML","Pascal"};
int n=5;
sort(name,n); /*对字符串排序*/
print(name,n); /*输出排序好的各字符串*/
return 0;
}
方法二:
#include 42、nt i,j;
for(i=1;i<=n-1;i++) /*冒泡法排序*/
{
for(j=1;j<=n-i;j++)
/*name[k]是第k个字符串的起始地址*/
if(strcmp(name[j-1],name[j])>0)
{
temp=name[j-1];
name[j-1]=name[j];
name[j]=temp;
}
}
}
/*函数功能:输出各字符串
函数参数:指针数组name
数组元素个数n
函数返回值:void*/
void print(char *nam 43、e[],int n)
{
int i;
for(i=0;i 44、day , b->day
2、ex
3、①2
②3
4、2002Shangxian
5、①char *data;
②struct link *next;
6、①struct list *next;
②int data;
7、x.link=z;
8、13431
9、①(struct list *) malloc(sizeof(struct list));
②(struct list *)malloc(sizeof(struct list));
③return(h); 或 return h;
10、①break;
②pre->next=newp;
③newp->n 45、ext=suc;
三、编程题
1.
难度系数:★★★★☆
解题思路:用daytab数组存放非闰年和闰年各月份的天数。对于年year,判断其是否为闰年的条件为:
leap=(year%4==0&&year%100!=0||year%400==0);
用一个结构体类型date的变量dt存放用户输入的日期。
程序如下:
#include 46、30,31,31,30,31,30,31}};
/*日期struct date结构体*/
struct date
{
int year;
int month;
int day;
}dt;
/*函数功能:求指定日期是该年的第几天
函数参数:年year
月month
日day
函数返回值:整数第几天day*/
int day_of_year(int year,int month,int day)
{
int i,leap;
/*是闰年leap=1,非闰年leap=0*/
leap=(year% 47、4==0&&year%100!=0||year%400==0);
for(i=1;i 48、ay)
{
int i,leap;
leap=(year%4==0&&year%100!=0|| year%400==0);
for(i=1;yearday>daytab[leap][i];i++)
yearday-=daytab[leap][i];
*pmonth=i;
*pday=yearday;
}
int main()
{
int k,days;
while(1) /*用户选择:起到菜单的作用*/
{
printf("1:日期→天数\n2:年,天数→日期\n其他:退出\n
请选择:\n");
scanf("%d",&k); 49、
if(k==1)
{
printf("输入日期(年 月 日):\n");
scanf("%d%d%d",&dt.year,&dt.month,&dt.day);
printf("%d年%d月%d日是这一年的第%d天\n",dt.year,dt.month,
dt.day,day_of_year(dt.year,dt.month,dt.day));
}
else if(k==2)
{
printf("输入年份 天数:\n");
scanf("%d%d",&dt.year,&days);
month_day(d 50、t.year,days,&dt.month,&dt.day);
printf("对应日期是%d年%d月%d日\n",
dt.year,dt.month,dt.day);
}
else
break;
}
return 0;
}
运行结果:
2.
难度系数:★★★☆☆
算法设计:
step 1 定义学生链表节点。
step 2 参照教材中的程序8-7,定义创建链表函数create,显示链表节点数据信息函数display,释放链表所有节点内存函数destroy。其中创建链表函数creates[mid])
return(half(s,mid+1,b,key));
if(key==s[mid])
return (mid);
}
}
(2)非递归程序
#inc






