c语言课后答案_c语言课后全部答案

2020-02-29 其他范文 下载本文

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)?

}

《c语言课后答案.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
c语言课后答案
点击下载文档
相关专题 c语言课后全部答案 课后 答案 语言 c语言课后全部答案 课后 答案 语言
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文