C语言课后习题答案.doc

上传人:wux****ua 文档编号:9104893 上传时间:2020-04-03 格式:DOC 页数:20 大小:188.80KB
返回 下载 相关 举报
C语言课后习题答案.doc_第1页
第1页 / 共20页
C语言课后习题答案.doc_第2页
第2页 / 共20页
C语言课后习题答案.doc_第3页
第3页 / 共20页
点击查看更多>>
资源描述
C语言课后习题答案第一章 习题答案 一、选择题 15:BDCDA 610:DABBB 1112:CC 二、填空题 1、main() 2、函数首部 ,函数体 3、函数 4、编辑、编译、连接、运行 5、.cpp、.obj、 .exe 6、; 或 分号 三、编程题 #include /* 包含标准库的信息 */ void main() /* 定义名为main 的函数,它不接受参数值 */ /* main函数的语句都被括在花括号中 */ printf(hello, worldn); /* main 函数调用库函数printf 以显示字符序列,其中n代表换行符 */ 第二章 习题答案 一、选择题 15:CBABB 610:CDCDD 1115:CADBC 1620: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 第三章 习题答案 一、选择题 15:CBBBC 610: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 is %6.2fn,a,b,c,t); 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); 第四章 习题答案 一、选择题 CDDDD CDBBC 二、填空题 1、&, | , !, ! , | | 2、(y%2 0) 3、1 4、(a+bc&a+cb&b+ca) 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 (x1) y=1; else if (x10) 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); 第五章 习题答案 一、选择题 15: ACCBA 610:ACDCB 二、填空题 1、(1) i=9 或 i10 (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 (i10); 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=Z) n+; c=getchar(); printf(%dn,n); 3、参考答案: #include void main() int a,max; scanf(%d,&a); max=a; while(a!=0) scanf(%d,&a); if(maxa) max=a; 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 = 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 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=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.2fn”, 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.6fn,s); 第六章 习题答案 一、选择题 15:CBABD 610: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;ia-1; 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 =i 三、编程题 1、参考答案: #include void main() int i,a20,s,count; s=count=0; for ( i=0; i20; i+) scanf(%d, &ai); for ( i=0; i20; i+) if (ai0) continue ; s+=ai; count+; printf(s=%dt count=%dn,s,count); 2、参考答案: #include void main() int a34,i,j,max; for (i=0;i3; i+) for (j=0; j4; j+) scanf(%d,&aij); max=a00; for (i=0;i3;i+) for (j=0;jmax) max=aij; printf(max=%dn,max); 3、参考答案: #include void main() int a11=3,4,7,9,10,13,14,15,18,20; int i,j,n; scanf (%d,&n); i=0; while (i10) if (ni; j-) aj=aj-1; ai=n; break; i+; if (i=10) a10=n; for (i=0;i*s 5. *(+p) 三、编程题 1. 编程实现从键盘输入一个字符串, 将其字符顺序颠倒后重新存放, 并输出这个字符串。 #include #include void Inverse(char *pStr)? main() char str80? 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? pStartpEnd? pStart+,pEnd?) 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 num10, maxValue, maxPos, minValue, minPos, i? printf(Input 10 numbers:n )? for (i=0? i10? i+) scanf(%d, &numi)? /* 输入 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 = num0? /*假设 num0为最大*/ *pMaxPos = 0? /*假设最大值在数组中的下标位置为 0 */ for (i = 1? i max) max = numi? *pMaxPos = i? return max ? /*函数功能: 求 n个数中的最小值及其所在下标位置 函数入口参数: 整型数组 num,存储 n个整数,整型变量 n,表示数组元素个数 函数出口参数: 整型指针变量 pMinPos,指向的地址单元存储最小值在数组中的下标位置 函数返回值: 最小值*/ int FindMin(int num, int n, int *pMinPos) int i, min? min = num0? /*假设 num0为最小*/ *pMinPos = 0? /*假设最小值在数组中的下标位置为 0 */ for (i = 1?i 10?i+) if (numi min) min = numi? *pMinPos = i? return min ? 3. 将 5 个字符串从小到大排序后输出。 #include void main(void) int i? char *pcolor5= red, blue, yellow, green, purple ? void fsort(char *color , int n)? fsort( pcolor, 5 )? for(i = 0? i 5? i+) printf(%s , pcolori)? void fsort(char *color , int n) int k, j? char *temp? for(k = 1? k n? k+) for(j = 0? j 0) temp = colorj? colorj = colorj+1? colorj+1 temp? 4. 编写一个能对任意mn阶矩阵进行转置运算的函数 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 sROWCOL? /*s 代表原矩阵*/ int stCOLROW? /*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? irow? i+) for (j=0? jcol? j+) *(*(at+j)+i) = *(*(a+i)+j)? void InputMatrix(int (*s)COL, int row, int col) /*输入矩阵元素*/ int i, j? for (i=0? irow? i+) for (j=0? jcol? j+) scanf(%d, *(s+i)+j)? /*这里*(s+i)+j 等价于&sij*/ void PrintMatrix(int (*s)ROW, int row, int col) /*输入矩阵元素*/ int i, j? for (i=0? irow? i+) for (j=0? jcol? j+) printf(%dt, *(*(s+i)+j)? /*这里*(*(s+i)+j)等价于 sij*/ 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. personi.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 name8? char sex? int age? char department20? float salary? ? struct teacher tea2= Mary , W,40, Computer , 1234 , Andy , M,55, English , 1834 ? main() int i? struct teacher *p? for( i=0?i2?i+) printf(%s,t%c,t%d,t%s,t%f, teai.name,teai.sex,teai.age,teai.department,teai.salary)? for(p=tea?pname, p?sex, p?age, 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? 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 name10? /* 姓名 */ int age? /* 年龄 */ char telephone13? /* 联系电话 */ ? 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 name10? struct friends_list friends50? /* 包含 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)? friendsCount = 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,friendsi.name) 0) /* 找到联系人*/ flag=1? break? if(flag) printf(姓名: %st, friendsi.name)? printf(年龄: %dt, friendsi.age)? printf(电话: %sn, friendsi.telephone)? else printf(无此联系人!)? 4. 建立一个教师链表,每个结点包括学号(no),姓名(name8),工资(wage),写出动态创建 函数 creat 和输出函数 print。 #include #include #define NULL 0 #define LEN sizeof(struct teacher) struct teacher int no? char name8? 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?nop1?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)?
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 考试试卷


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!