c语言课后答案_c语言课后全部答案
c语言课后答案由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c语言课后全部答案”。
c语言课后答案
第一章 习题答案
一、选择题
1~5:BDCDA 6~10:DABBB 11~12:CC
二、填空题
1、main()
2、函数首部,函数体
3、函数
4、编辑、编译、连接、运行
5、.cpp、.obj、.exe6、;或 分号
三、编程题
#include
/* 包含标准库的信息 */
void main()
/* 定义名为main 的函数,它不接受参数值 */
{
/* main函数的语句都被括在花括号中 */
printf(“hello, worldn”);
/* main 函数调用库函数printf 以显示字符序列,其中n代表换行符 */
}
第二章 习题答案
一、选择题
1~5:CBABB 6~10:CDCDD 11~15:CADBC 16~20:BDAAD
二、填空题
1、整型,实型,字符型,枚举类型2、1 3、9 4、12353514 5、2,16、2,2 7、10 20 0
8、a=14 9、2,3,1
10、double
第三章 习题答案
一、选择题
1~5:CBBBC 6~10:DDDBB
二、填空题
1、控制语句,表达式语句,复合语句
2、;
3、{} 4、1
5、a
6、c:dec=120,oct=170,hex=78,ASCII=x 7、32767,32767 8、10,A,10 9、3 3
10、(1)123.456001
(2)□□□□□□□ 123.456
(3)123.4560
(4)8765.456700
(5)□□□□□□ 8765.457
(6)8765.4567
(7)8765.4567
三、编程题
1、参考答案:
#include void main()
{
int a,b,c;
long int u,n;
float x,y,z;char c1,c2;
a=3;b=4;c=5;
x=1.2;y=2.4;z=-3.6;
u=51274;n=128765;
c1='a';c2='b';printf(“n”);
printf(“a=%2d b=%2d
c=%2dn”,a,b,c);
printf(“x=%8.6f,y=%8.6f,z=%9.6fn”,x,y,z);
printf(“x+y=%5.2f y+z=%5.2f z+x=%5.2fn”,x+y,y+z,z+x);
printf(“u=%6ld n=%9ldn”,u,n);
printf(“c1='%c' or %d(ASCII)n”,c1,c1);
printf(“c2='%c' or %d(ASCII)n”,c2,c2);
}
2、参考答案:
#include
void main()
{
float a, b, c, t;
printf(“please input a,b,c:n”);
scanf(“%f, %f, %f”, &a, &b, &c);
t=(a+b+c)/3;
printf(“average of %6.2f、%6.2f and
%6.2f }
3、参考答案:
#include main()
{
int R, d;
float s;
printf(”请输入圆的半径“);
scanf(”%d“,&R);
d=2*R;
c=2*3.14159*R;
printf(”d=%d,c=%fn“,d,c);
}
4、参考答案:
#include void main()
{
int h, f, x, y;/* x为鸡的数量,y为兔的数量 */ printf(”请输入鸡兔的总头数h,总脚数 f:“);
scanf(”%d%d“, &h, &f);
x=(4*h-f)/2;
y=(f-2*h)/2;
printf(”笼中有鸡%d 只,有兔%d只。n“, x, y);is %6.2fn”,a,b,c,t);
}
第四章 习题答案
一、选择题
CDDDD CDBBC
二、填空题
1、&&,||,!,!,| |
2、(y%2 0)3、1
4、(a+b>c&&a+c>b&&b+c>a)5、2 3 3 6、7
三、编程题
1、参考答案:
#include void main()
{ int x;
scanf(“%d”,&x);
if(x%5 0 && x%7 0)
printf(“yesn”);else
printf(“non”);
}
2、参考答案:
#include void main()
{ int
a, b, c, max;
printf(“请输入三个整数:%%d%%d%%dn”);
scanf(“%d%d%d”, &a, &b, &c);
if(a>=b)
if(a>=c)max=a;
else max=c;
else
if(b>=c)max=b;
else
max=c;
printf(“n 最大数为:%dn”,max);
}
3、参考答案:
#include void main()
{
float
x , y;
printf(“请输入x 的值:”);
scanf(“%f”, &x);
if(x
else if(x
y=2*x-1;
else
y=3*x-11;
printf(“y = %.2fn”, y);
}
4、参考答案:
#include void main()
{
int year;
float money,rate,total;
/* money:本金 rate:月利率 total:本利合计
*/
printf(“Input money and year =?”);
scanf(“%f%d”, &money, &year);
/* 输入本金和存款年限 */
if(year 1)rate=0.00315;
/* 根据年限确定利率 */
else if(year 2)rate=0.00330;
else if(year 3)rate=0.00345;else if(year 5)rate=0.00375;
else if(year 8)rate=0.00420;
else rate=0.0;
total=money + money * rate * 12 * year;
/* 计算到期的本利合计 */
printf(“ Total = %.2fn”, total);
}
第五章 习题答案
一、选择题
1~5: ACCBA 6~10:ACDCB
二、填空题
1、(1)i
2、7
3、(1)ch=ch+
1、(2)printf(“n”)
三、编程题
1、参考答案:
#include void main()
{ int i=2;
long p=1;
do
{ p=p*i;
i=i+2;
} while(i
printf(“2*4*6*8=%ldn”,p);
}
2、参考答案:
#include void main()
{int n=0;
char c;
c=getchar();
while(c!='n')
{ if((c>='a'&&c='A'&&c
c=getchar();
}
printf(“%dn”,n);
}
3、参考答案:
#include void main()
{int a,max;
scanf(“%d”,&a);max=a;while(a!=0)
{scanf(“%d”,&a);
if(max
}
printf(“%d”,max);
}
4、参考答案: #include void main()
{
int day = 0, buy = 2;
float sum = 0.0, ave;do {
sum += 0.8 * buy;
day++;
buy *= 2;
}
while(buy
ave = sum / day;
printf(“%f”, ave);
}
5、参考答案: #include void main()
{ int f1,f2,f5,count=0;
for(f5=0;f5
for(f2=0;f2
{ f1=100-f5*5-f2*2;
if(f5*5+f2*2+f1 100)
printf(“No.%2d >> 5: %4d 2: %4d 1: %4dn”,++count,f5,f2,f1);
}
printf(“共有%d 种换法”,count);
}
6、参考答案: #include void main()
{ int i,j,n;printf(“nPlease Enter n:”);
scanf(“%d”,&n);
for(i=1;i
{ for(j=1;j
printf(“ ”);
for(j=1;j
printf(“*”);
printf(“n”);
}
}
7、参考答案: #include void main()
{
int i, j;
float g, sum, ave;
for(i=1;i
{
sum = 0;
for(j=1;j
{
scanf(“%f”, &g);sum += g;}
ave = sum / 5;
printf(“No.%d ave=%5.2fn”, i, ave);
}
}
8、参考答案: #include void main()
{int n,t,number=20;
float a=2,b=1,s=0;
for(n=1;n
{s=s+a/b;t=a;a=a+b;
b=t;}
printf(“s=%9.6fn”,s);
} 第六章 习题答案
一、选择题
1~5:CBABD 6~10:CDBCD
二、填空题
1、库函数(或系统函数),自定义函数
2、无参函数,有参函数
3、传值方式
4、实参,形参5、1 3
6、max is 2 7、15 8、1,2,3
三、编程题
1、参考答案:
#include
int is_prime(int a)
{ int i,p=1;
for(i=2;i
if(a%i 0)
{ p=0;break;}
return(p);}
void main()
{int i=11;
if(is_prime(i))
printf(“1”);
else
printf(“0”);
}
2、参考答案:
#include
int gongyue(int num1,int num2)
{int temp,a,b;
if(num1
{temp=num1;num1=num2;num2=temp;}
a=num1;
b=num2;
while(b)
{temp=a%b;a=b;b=temp;}
return(a);
}
void main()
{int i=12,j=8;
printf(“%d”,gongyue(i,j));
}
第七章 习题答案
一、选择题
1~5:BDDCC 6~10:CDCAB
二、填空题
1、字符、1 2、2
3、c:win98cmd.exe4、1,2,3,4,5,6,7,8,9,0 5、325678 6、1,0,7,0, 7、4332
8、(1)j=2
三、编程题
1、参考答案:
#include
void main()
{ int i,a[20],s,count;
s=count=0;
for(i=0;i
scanf(“%d”, &a[i]);
for(i=0;i
{ if(a[i]
continue;
s+=a[i];
2)j>=i
(count++;
}
printf(“s=%dt count=%dn”,s,count);
}
2、参考答案:
#include void main()
{ int a[3][4],i,j,max;
for(i=0;i
for(j=0;j
scanf(“%d”,&a[i][j]);
max=a[0][0];
for(i=0;i
for(j=0;j
if(a[i][j]>max)
printf(“max=%dn”,max);
}
3、参考答案:
#include void main()
{ int a[11]={3,4,7,9,10,13,14,15,18,20};
int i,j,n;
scanf(“%d”,&n);
i=0;
while(i
{ if(n
{
for(j=10;j>i;j--)
a[j]=a[j-1];
a[i]=n;
break;
}
i++;
}
if(i>=10)
a[10]=n;
for(i=0;i
printf(“%4d”,a[i]);
}
第八章 习题答案
max=a[i][j];
一、选择题
1?5 A B C C B 6?10 D A C B B 11?15 D A C C C
二、填空题
1.(1)*(2)&
2.(1)*p(2)**a
(3)2 3.10 4.*p>*s
5.*(++p)
三、编程题
1.编程实现从键盘输入一个字符串,将其字符顺序颠倒后重新存放,并输出这个字符串。
#include
#include
void Inverse(char *pStr)?
main()
{
char str[80]?
printf(“Input a string:n”)?
gets(str)?
/*输入字符串*/
Inverse(str)?
/*将存于 str 数组中的字符串逆序存放*/
printf(“The inversed string is:n”)?
puts(str)?
/*输出字符串*/
}
/*函数功能: 实现字符串逆序存放
函数参数: 字符指针变量,所指向的存储单元存放源字符串,逆序后的字符串也存放于此
返回值: 无*/
void Inverse(char *pStr)
{
int len?
char temp?
char *pStart?
/*指针变量 pStart 指向字符串的第一个字符*/
char *pEnd?
/*指针变量 pEnd指向字符串的最后一个字符*/
len = strlen(pStr)?
/*求出字符串长度*/
for(pStart=pStr,pEnd=pStr+len?1? pStart
{
temp = *pStart?
*pStart = *pEnd?
*pEnd = temp?
}
}
2.从键盘任意输入 10 个整数,用函数编程实现计算最大值和最小值,并返回它们所在数组
中的位置。
#include
int FindMax(int num[], int n, int *pMaxPos)?
int FindMin(int num[], int n, int *pMinPos)? main()
{
int num[10], maxValue, maxPos, minValue, minPos, i?
printf(“Input 10 numbers:n ”)?
for(i=0? i
{
scanf(“%d”, &num[i])?
/* 输入 10 个数*/
}
maxValue = FindMax(num, 10, &maxPos)? /* 找最大值及其所在下标位置 */
minValue = FindMin(num, 10, &minPos)? /* 找最小值及其所在下标位置 */
printf(“Max=%d, Position=%d, Min=%d, Position=%dn”,maxValue, maxPos, minValue, minPos)?
}
/*函数功能:求 n个数中的最大值及其所在下标位置
函数入口参数:整型数组 num,存储 n个整数,整型变量 n,表示数组元素个数
函数出口参数:整型指针变量 pMaxPos,指向的地址单元存储最大值在数组中的下标位置
函数返回值: 最大值*/
int FindMax(int num[], int n, int *pMaxPos)
{
int i, max?
max = num[0]?
/*假设 num[0]为最大*/
*pMaxPos = 0?
/*假设最大值在数组中的下标位置为 0 */
for(i = 1? i
{
if(num[i] > max)
{
max = num[i]?
*pMaxPos = i?
}
}
return max ? }
/*函数功能: 求 n个数中的最小值及其所在下标位置
函数入口参数: 整型数组 num,存储 n个整数,整型变量 n,表示数组元素个数
函数出口参数: 整型指针变量 pMinPos,指向的地址单元存储最小值在数组中的下标位置
函数返回值: 最小值*/
int FindMin(int num[], int n, int *pMinPos)
{
int i, min?
min = num[0]?
/*假设 num[0]为最小*/
*pMinPos = 0?
/*假设最小值在数组中的下标位置为 0 */
for(i = 1?i
{
if(num[i]
{
min = num[i]?
*pMinPos = i?
}
}
return min ?
}
3.将 5 个字符串从小到大排序后输出。
#include
void main(void)
{ int i?
char *pcolor[5]={ “red”, “blue”, “yellow”, “green”, “purple” }?
void fsort(char *color[ ], int n)?
fsort(pcolor, 5)?
for(i = 0? i
printf(“%s ”, pcolor[i])?
}
void fsort(char *color[ ], int n)
{
int k, j?
char *temp?
for(k = 1? k
for(j = 0? j
if(strcmp(color[j],color[j+1])>0)
{
temp = color[j]?
color[j] = color[j+1]?
color[j+1]
temp?
}
}
4.编写一个能对任意m×n阶矩阵进行转置运算的函数 Transpose()。
#include
#define ROW 3
#define COL 4
void Transpose(int(*a)[COL], int(*at)[ROW], int row, int col)?
void InputMatrix(int(*s)[COL], int row, int col)?
void PrintMatrix(int(*s)[ROW], int row, int col)?
main()
{
int s[ROW][COL]?
/*s 代表原矩阵*/
int st[COL][ROW]?
/*st 代表转置后的矩阵*/
printf(“Please enter matrix:n”)?
InputMatrix(s, ROW, COL)? /*输入原矩阵,s 指向矩阵 s的第 0行,是行指针*/
Transpose(s, st, ROW, COL)?/*对矩阵 s 进行转置,结果存放于 st 中*/
printf(“The transposed matrix is:n”)?
PrintMatrix(st, COL, ROW)? /*输出转置矩阵,*st 指向 st 的第 0 行,是行指针*/
}
/* 函数功能:对任意row行 col 列的矩阵转置
函数入口参数:指向一维整型数组的指针变量a,指向单元存放转置前的矩阵元素
整型变量 row,矩阵的行数即二维整型数组的行数
整型变量 col,矩阵的列数即二维整型数组的列数
函数出口参数:指向一维整型数组的指针变量at,指向单元存放转置后的矩阵元素
函数返回值: 无*/
void Transpose(int(*a)[COL], int(*at)[ROW], int row, int col)
{
int i, j?
for(i=0? i
{
for(j=0? j
{
*(*(at+j)+i)= *(*(a+i)+j)?
}
}
}
void InputMatrix(int(*s)[COL], int row, int col)
/*输入矩阵元素*/
{
int i, j?
for(i=0? i
{
for(j=0? j
{
scanf(“%d”, *(s+i)+j)?
/*这里*(s+i)+j 等价于&s[i][j]*/
}
}
} void PrintMatrix(int(*s)[ROW], int row, int col)
/*输入矩阵元素*/
{
int i, j?
for(i=0? i
{
for(j=0? j
{
printf(“%dt”, *(*(s+i)+j))? /*这里*(*(s+i)+j)等价于 s[i][j]*/
}
printf(“ n”)?
}
} 第九章 习题答案
一、选择题
1?5 B D D A C
6?10 B C A D C
二、填空题
1.struct DATA d={2006,10,1}?
2.sizeof(struct node)
3.person[i].sex
4.13431
5.(1)struct node*(2)*s(3)p
三、编程题
1.定义一个能正常反映教师情况的结构体 teacher,包含教师姓名、性别、年龄、所在部门和
薪水; 定义一个能存放两人数据的结构体数组 tea,并用如下数据初始化:{{ “Mary “, ‘W’,40,‘Computer’ , 1234 },{“Andy“, ‘M’,55, ‘English’ , 1834}};要求:分别用结构体数组 tea 和指针
p输出各位教师的信息,写出完整定义、初始化、输出过程。
#include
struct teacher
{ char name[8]?
char sex?
int age?
char department[20]?
float salary?
} ?
struct teacher tea[2]= {{“Mary ”, 'W',40, “Computer” , 1234 },{“Andy ”, 'M',55, “English” , 1834}} ?
main()
{ int i?
struct teacher *p?
for(i=0?i
printf(“%s,t%c,t%d,t%s,t%f”,tea[i].name,tea[i].sex,tea[i].age,tea[i].department,tea[i].salary)?
for(p=tea?p
printf(“%s,t%c,t%d,t%s,t%f”, p?>department, p?>salary)?
}
2.定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题。
#include
struct
{int year?
int month?
int day?
}date?
main()
{int days?
printf(“Input year,month,day:”)?
scanf(“%d,%D,%d”,&date.year,&date.month,&date.day)?
switch(date.month)
{case 1: days=date.day?
break?
case 2: days=date.day+31?
break?
case 3: days=date.day+59?
break?
case 4: days=date.day+90?
break?
case 5: days=date.day+120?
break?
case 6: days date.day+31?
break?
case 7: days=date.day+181?
break?
case 8: days=date.day+212?
break?
case 9: days date.day+243?
break?
case 10: days date.day+273?
break?
case11: days=date.day+304?
break?
case 12: days date.day+334?
break?
p?>name,p?>sex,p?>age,}
if((date.year%4 0&&date.year%100!=0||date.year%400 0)&&date.month> 3)
days+=1?
printf(“n%d/%d is the %dth day in%d.”,date.month,date.day,days,date.year)?
}
3.构建简单的手机通讯录,手机通讯录包括信息(姓名、年龄、联系电话),要求实现新建、查询功能。假设通信录最多容纳 50 名联系人信息。
#include
#include
/*手机通讯录结构定义*/
struct friends_list{
char name[10]?
/* 姓名 */
int age?
/* 年龄 */
char telephone[13]?
/* 联系电话 */
}?
int Count = 0?
/* 定义全局变量 Count,记录当前联系人总数 */
void new_friend(struct friends_list friends[ ])?
void search_friend(struct friends_list friends[ ], char *name)? int main(void){
int choice?
char name[10]?
struct friends_list friends[50]?
/* 包含 50 个人的通讯录 */
do{
printf(“手机通讯录功能选项:1:新建 2:查询 0:退出n”)?
printf(“请选择功能:”)?
scanf(“%d”, &choice)?
switch(choice){
case 1:
new_friend(friends)?
break?
case 2:
printf(“请输入要查找的联系人名:”)?
scanf(“%s”, name)?
search_friend(friends, name)?
break?
case 0: break?
}
}while(choice!= 0)?
printf(“谢谢使用通讯录功能!n”)?
return 0?
}
/*新建联系人*/
void new_friend(struct friends_list friends[ ])
{
struct friends_list f?
if(Count
50){
printf(“通讯录已满!n”)?
return?
}
printf(“请输入新联系人的姓名:”)?
scanf(“%s”, f.name)?
printf(“请输入新联系人的年龄:”)?
scanf(“%d”, &f.age)?
printf(“请输入新联系人的联系电话:”)?
scanf(“%s”, f.telephone)?
friends[Count] = f?
Count++?
}
/*查询联系人*/
void search_friend(struct friends_list friends[ ], char *name)
{
int i, flag = 0?
if(Count
0){
printf(“通讯录是空的!n”)?
return?
}
for(i = 0? i
if(strcmp(name,friends[i].name)
0){
/* 找到联系人*/
flag=1?
break?
}
if(flag){
printf(“姓名: %st”, friends[i].name)?
printf(“年龄: %dt”, friends[i].age)?
printf(“电话: %sn”, friends[i].telephone)?
}
else
printf(“无此联系人!”)?
}
4.建立一个教师链表,每个结点包括学号(no),姓名(name[8]),工资(wage),写出动态创建
函数 creat 和输出函数 print。
#include
#include
#define NULL 0
#define LEN sizeof(struct teacher)
struct teacher
{int no?
char name[8]?
float wage?
struct teacher * next?
}?
int n?
struct teacher *creat(void)
{ struct teacher *head?
struct teacher *p1,*p2?
n=0?
p1=p2=(struct teacher *)malloc(LEN)?
scanf(“%d%s%f”,&p1?>no,p1?>name, &p1?>wage)?
head=NULL?
while(p1?>no!=0)
{ n=n+1?
if(n 1)head p1?
else p2?>next p1?
p2=p1?
p1=(struct teacher *)malloc(LEN)?
scanf(“%d%s%f”,&p1?>no,p1?>name, &p1?>wage)?
}
p2?>next=NULL?
return(head)?
}
void print(struct teacher *head)
{ struct teacher *p?
p=head?
if(head!=NULL)
do{
printf(“%dt%st%fn”, p?>no, p?>name, p?>wage)?
p=p?>next?
} while(p!=NULL)?
}
5.在上一题基础上,假如已经按学号升序排列,写出插入一个新教师的结点的函数 insert。
struct teacher insert(struct teacher *head,struct teacher *tea)
{ struct teacher *p0,*p1,*p2?
p1=head?
p0=tea?
if(head=NULL)
{head=p0? p0?>next=NULL?}
else
while((p0?>no>p1?>no)&&(p1?>next!=NULL))
{ p2=p1?
p1=p1?>next?}
if(p0?>nono)
{ if(head p1)
head=p0?
else
{ p2?>next p0?
p0?>next p1?
}
else
{ p1?>next p0?p0?>next=NULL?}
n=n+1?
return(head)?
}