您好,欢迎来到宝玛科技网。
搜索
您的当前位置:首页C语言课后习题答案

C语言课后习题答案

来源:宝玛科技网
第一章 习题答案 一、选择题

1~5:BDCDA 6~10:DABBB 11~12:CC 二、填空题 1、main()

2、函数首部 ,函数体 3、函数

4、编辑、编译、连接、运行 5、.cpp、.obj、 .exe 6、; 或 分号 三、编程题

#include /* 包含标准库的信息 */

void main() /* 定义名为main 的函数,它不接受参数值 */

{ /* main函数的语句都被括在花括号中 */

printf(\"hello, world\\n\"); /* main 函数调用库函数printf 以显示字符序列,其中\\n代表换行符 */ }

第二章 习题答案 一、选择题

1~5:CBABB 6~10:CDCDD 11~15:CADBC 16~20:BDAAD 二、填空题

1、整型,实型,字符型,枚举类型 2、1 3、9

4、12353514 5、2,1 6、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=%2d\\n\);

printf(\"x=%8.6f,y=%8.6f,z=%9.6f\\n\y,z);

printf(\"x+y=%5.2f y+z=%5.2f z+x=%5.2f\\n\

printf(\"u=%6ld n=%9ld\\n\printf(\"c1='%c'

or %d(ASCII)\\n\printf(\"c2='%c'

or %d(ASCII)\\n\}

2、参:

#include void main() {

float a, b, c, t;

printf(\"please input a,b,c:\\n\"); scanf (\"%f, %f, %f=(a+b+c)/3; printf (\"average

of %6.2f、%6.2f and %6.2f is %6.2f\\n\}

3、参:

#include main() {

int R, d; float s;

printf(\"请输入圆的半径\"); scanf(\"%d\ d=2*R;

c=2*3.14159*R;

printf(\"d=%d,c=%f\\n\}

4、参: #include void main() {

int h, f, x, y; /* x为鸡的数量,y为兔的数量 */

printf(\"请输入鸡兔的总头数h,总脚数 f:\");

scanf(\"%d%d\x=(4*h-f)/2; y=(f-2*h)/2;

printf(\"笼中有鸡%d 只,有兔%d只。\\n\x, y); }

第四章 习题答案 一、选择题 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\

if (x%5 0 && x%7 0) printf(\"yes\\n\"); else

printf(\"no\\n\"); }

2、参:

#include void main( )

{ int a, b, c, max ; printf (\"请输入三个整数:%%d%%d%%d\\n\");

scanf( \"%d%d%d\ if ( a>=b )

if ( a>=c ) max=a; else max=c; else

if ( b>=c ) max=b; else max=c; printf (\"\\n 最大数为:%d\\n\); }

3、参:

#include void main ( ) {

float x , y ;

printf( \"请输入x 的值:\" ); scanf( \"%f\ if (x<1) y=1; else if (x<10) y=2*x-1; else

y=3*x-11;

printf(\"y = %.2f\\n\ }

4、参:

#include

void main( ) {

int year;

float money,rate,total; /* money:本金 rate:月利率 total:本利合计 */

printf(\"Input money and year =?\"); scanf(\"%f%d\输入本金和存款年限 */ 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 = %.2f\\n\}

第五章 习题答案 一、选择题 1~5: ACCBA 6~10:ACDCB 二、填空题

1、(1) i<=9 或 i<10 (2) j%3!=0 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<10);

printf(\"2*4*6*8=%ld\\n\}

2、参:

#include void main( ) {int n=0; char c;

c=getchar(); while(c!='\\n' )

{ if((c>='a'&&c<='z')|| (c>='A'&&c<='Z')) n++; c=getchar(); }

printf(\"%d\\n\}

3、参:

#include void main() {int a,max; scanf(\"%d\max=a;

while(a!=0)

{scanf(\"%d\ if(maxprintf(\"%d\}

4、参:

#include void main() {

int day = 0, buy = 2; float sum = 0.0, ave; do {

sum += 0.8 * buy; day++; buy *= 2; }

while (buy <= 100); ave = sum / day; printf(“%f”, ave); }

5、参:

#include void main()

{ int f1,f2,f5,count=0; for(f5=0; f5<=20; f5++)

for(f2=0; f2<=(100-f5*5)/2;f2++) { f1=100-f5*5-f2*2;

if(f5*5+f2*2+f1 100)

printf(\"No.%2d >> 5: %4d 2: %4d 1: %4d\\n\}

printf(\"共有%d 种换法\}

6、参:

#include void main() { int i,j,n;

printf(\"\\nPlease Enter n:\"); scanf(\"%d\for(i=1;i<=n;i++) { for(j=1;j<=n-i;j++) printf(\" \");

for(j=1;j<=2*i-1;j++) printf(\"*\"); printf(\"\\n\"); } }

7、参:

#include void main() {

int i, j;

float g, sum, ave; for (i=1; i<=6; i++) {

sum = 0;

for (j=1; j<=5; j++) {

scanf(“%f”, &g); sum += g; }

ave = sum / 5; printf(“No.%d ave=%5.2f\\n”, i, ave);} }

8、参:

#include void main()

{int n,t,number=20; float a=2,b=1,s=0;

for(n=1;n<=number;n++) {s=s+a/b; t=a; a=a+b; b=t; }

printf(\"s=%9.6f\\n\}

第六章 习题答案 一、选择题

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;ivoid 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 < num2)

{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\}

第七章 习题答案 一、选择题

1~5:BDDCC 6~10:CDCAB 二、填空题 1、字符、1 2、2

3、c:\\win98\\cmd.exe 4、1,2,3,4,5,6,7,8,9,0 5、325678 6、1,0,7,0, 7、4332 8、(1)j=2 j>=i

三、编程题 1、参:

#include void main()

{ int i,a[20],s,count; s=count=0;

for ( i=0; i<20; i++) scanf(\"%d\ for ( i=0; i<20; i++) { if (a[i]<0) continue ; s+=a[i]; count++; }

printf(\"s=%d\ count=%d\\n\}

2、参: #include void main()

{ int a[3][4],i,j,max; for (i=0;i<3; i++)

for (j=0; j<4; j++) scanf(\"%d\[j]);

max=a[0][0];

for (i=0;i<3;i++)

for (j=0;j<4;j++) if

(a[i][j]>max) max=a[i][j]; printf(\"max=%d\\n\}

3、参:

#include void main() { int

a[11]={3,4,7,9,10,13,14,15,18,20}; int i,j,n;

scanf (\"%d\ i=0;

while (i<10) { if (nfor (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<11;i++) printf(\"%4d\}

第八章 习题答案 一、选择题

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? pStarttemp = *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<10? i++) {

scanf(\"%d\

&num[i])? /* 输入 10 个数*/ }

maxValue = FindMax(num, 10, &maxPos)? /* 找最大值及其所在下标位置 */

minValue = FindMin(num, 10, &minPos)? /* 找最小值及其所在下标位置 */

printf(\"Max=%d, Position=%d, Min=%d, Position=%d\\n\

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 < n? 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 < 10?i++) {

if (num[i] < min) {

min = num[i]? *pMinPos = i? } }

return min ? }

3. 将 5 个字符串从小到大排序后输出。 #include void main(void) { int i?

char *pcolor[5]={ \"red\ \"blue\\"green\

void fsort(char *color[ ], int n)?

fsort( pcolor, 5 )? for(i = 0? i < 5? i++) printf(\"%s \pcolor[i])? } void fsort(char *color[ ], int n) { int k, j? char *temp?

for(k = 1? k < n? k++) for(j = 0? j < n?k? 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? ifor (j=0? j*(*(at+j)+i) = *(*(a+i)+j)? } } }

void InputMatrix(int (*s)[COL], int row, int col) /*输入矩阵元素*/ {

int i, j?

for (i=0? ifor (j=0? jscanf(\"%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? ifor (j=0? jprintf(\"%d\\这里*(*(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<2?i++)

printf(\"%s,\%c,\%d,\%s,\%f\

tea[i].name,tea[i].sex,tea[i].age,tea[i].department,tea[i].salary)?

for(p=tea?pdepartment, 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? }

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\ 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\ printf(\"请输入新联系人的年龄:\")?

scanf(\"%d\

printf(\"请输入新联系人的联系电话:\")?

scanf(\"%s\ 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 < Count? i++) if(strcmp(name,friends[i].name) 0){ /* 找到联系人*/ flag=1? break? }

if(flag){

printf(\"姓名: %s\\friends[i].name)?

printf(\"年龄: %d\\friends[i].age)?

printf(\"电话: %s\\n\

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(“%d\%s\%f\\n”, 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?>no< p1?>no) { if (head p1) head=p0? else

{ p2?>next p0? p0?>next p1? } else

{ p1?>next p0?p0?>next=NULL?} n=n+1?

return(head)? }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- baomayou.com 版权所有 赣ICP备2024042794号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务