C语言程序设计(第2版)-课后题答案.doc

上传人:wux****ua 文档编号:9144725 上传时间:2020-04-03 格式:DOC 页数:31 大小:144KB
返回 下载 相关 举报
C语言程序设计(第2版)-课后题答案.doc_第1页
第1页 / 共31页
C语言程序设计(第2版)-课后题答案.doc_第2页
第2页 / 共31页
C语言程序设计(第2版)-课后题答案.doc_第3页
第3页 / 共31页
点击查看更多>>
资源描述
31C语言程序设计能力教程(第二版)课后作业及实训题参考答案第1章 进入C语言程序世界二、1. I love China!printf(we are students.n) 2. 6项目实训题参考答案1编写一个C程序,输出以下信息:* * * * * * * * * * * * * * * * * * * * I am a student!* * * * * * * * * * * * * * * * * * * * main() printf(*n); printf( I am a student!n ); printf(*n); 2已知立方体的长、宽、高分别是10cm、20cm、15cm,编写程序,求立方体体积。解: main()int a,b,c,v; a=10; b=20; c=15; v=a*b*c; printf(v=%d,v);本程序运行结果为: v=3000 第2章 编制C程序的基础知识一 选择题 C B A B A C C 二 操作题1. 3,2,-8,2 3.000000,2.500000,-8.0000002. ABC DE FGH why is 21+35 equal 52 3. 314323124. aabbccabc AN 项目实训题1定义一个符号常量M为5和一个变量n值为2,把它们的乘积输出。#define M 5main() int n,c; n=2; c=M*n;printf(%dn,c); 2编程求下面算术表达式的值。(1)x+a%3*(int)(x+y)%2/4,设x=2.5,a=7,y=4.7;(2)(float)(a+b)/2+(int)x%(int)y,设a=2,b=3,x=3.5,y=2.5。(1)main() int a=7; float x=2.5,y=4.7;printf(%fn,x+a%3*(int)(x+y)%2/4); (2)main() int a=2,b=3;float x=3.5,y=2.5; printf(%fn,(float)(a+b)/2+(int)x%(int)y); 第三章 顺序结构程序设计一 选择题 A C D C C二 操作题 1. x=3,a=2,b=32. z=12.7000003. 1 2 1a 2 1 2 三编程题编程题1. 某工种按小时计算工资,每月劳动时间(小时)每小时工资=总工资,总工资中扣除10%公积金,剩余的为应发工资。编写一个程序从键盘输入劳动时间和每小时工资,打印出应发工资。解:#include main() float sj,gz,yfgz; printf(time,salary:); scanf(%f,%f,&sj,&gz); yfgz=sj*gz*0.9; printf(total salary:%fn,yfgz);本程序运行结果为: time,salary:4,3 total salary:10.8000002编写一个程序求出任意一个输入字符的ASCII码解:#include main() char c; printf(Input a string:); scanf(%c,&c); printf(%c ASCII is %dn,c,c);本程序运行结果为: Input a string:a a ASCII is 973、编写一个程序用于水果店售货员算帐:已知苹果每斤2.50元,鸭梨每斤1.80元,香蕉每斤2元,橘子每斤1.6元,要求输入各类水果的重量,打印出应付钱数,再输入顾客付款数,打印出应找的钱数。解:main() float p,y,x,j,ys,g,fk; printf(apple,pear,banana,orange(weight)=);scanf(%f,%f,%f,%f,&p,&y,&x,&j);ys=2.5*p+1.8*y+2*x+1.6*j;printf(fu kuan=);scanf(%f,&g);fk=g-ys;printf(result:n);printf(fukuan=%6.2fyuannshoukuan=%6.2fyuannzhaohui=%6.2fyuann,g,ys,fk);本程序运行结果为:apple,pear,banana,orange(weight)=1,2,3,4fu kuan=100result:fukuan=100.00yuanshoukuan= 18.50yuanzhaohui= 81.50yuan项目实训1假设银行定期存款的年利率rate为2.25%,并已知存款期为n年,存款本金为capital元,试编程计算n年后可得到本利之和deposit。#includemain() int n; float rate=0.0225,capital,deposit; scanf(%d,%f,&n,&capital); deposit=capital*pow(1+rate,n); printf(deposit=%fn,deposit); 2将一个三位数整数,正确分离出它的个位、十位和百位数字,并分别在屏幕上输出。main() int n,a,b,c; scanf(%3d,&n); a=n/100; b=n%100/10; c=n%100%10/1; printf(a=%d,b=%d,c=%dn,a,b,c); 第四章 选择结构程序设计一、略二、B B A B C B A三、1. 1 02. 2 3 2 23. 10 20 04. ch=A&ch=a&ch=0&ch=9 ch= 5. -1四、上机操作1. 从键盘输入一个英文字母,如果是大写字母,则将它变为小写字母输出;如果是小写字母,则将其变为大写字母输出。 #includemain()char ch;ch=getchar();if(ch=A&ch=a&ch-1) y = 3 (x=-1) 4+x (x-1) y=2*x; else if(x=1)y=3; else y=4+x; printf(y=%f,y);本程序运行结果为: -2 y=2.0000003编写程序,输入一个整数,判断它是奇数还是偶数,若是奇数,输出“Is Odd“;若是偶数,输出“Is Even“。main() int x; scanf(%d,&x); if(x%2=0) printf(Is Evenn); else printf(Is Oddn); 4设计应用程序,求二次方程ax2+bx+c=0的解。#includemain() float a,b,c,disc,x1,x2,p,q; scanf(%f,%f,%f,&a,&b,&c); if(fabs(a)=1e-6) printf( The equation is not a quadraticn); else disc=b*b-4*a*c; if(fabs(disc)1e-6) x1=(-b+sqrt(disc)/(2*a); x2=(-b-sqrt(disc)/(2*a); printf(x1=%8.4f,x2=%8.4fn,x1,x2); else p=-b/(2*a); q=sqrt(-disc/(2*a); printf(%8.4f+%x8.4fin,p,q); printf(%8.4f-%8.4fin,p,q); 5按托运规则,行李不超过50公斤时,运费为0.15元/公斤,如超过50公斤,超过部分的运费为0.22元/公斤,现有行李w公斤,编写一个程序计算运费。解: #include main() float w,f,x; printf(weight:); scanf(%f,&w); if(w=50) x=0.15*w; else x=0.15*50+0.22*(w-50); printf(money:%6.2f yuann,x);本程序运行结果为: weight:20 money:3.00 yuan weight:60 money:9.70 yuan6. 某商场给与顾客购物的折扣率如下: 购物金额购物金额=200元 9折1000元购物金额=500元 8折购物金额=1000元 7.5折输入一个购物金额,输出打折率、购物实际付款金额。 #includemain() float x,y,realx; scanf(%f,&x); if(x=0) printf(Error! You input a worry number!n); y=0; else if(x200) y=1.0; else if(x500) y=0.9; else if(x1000) y=0.8; else y=0.75; if(y!=0) realx=x*y; printf(y=%f, the realx=%5.2fn, y,realx); 项目实训 某托儿所收2岁到6岁的孩子,2岁、3岁孩子进小班(Lower class);4岁孩子进中班(Middle class);5岁、6岁孩子进大班(Higher class)。编写程序(用if语句和switch语句),输入孩子年龄,输出年龄及进入的班号。如:输入:3,输出:age:3,enter Lower class。 #includemain() int age; printf(Please input your babys age:); scanf(%d,&age); if(age6|age2) printf(Sorry,your baby cant enter!); else switch(age); case 2: case 3: printf(age:%d,enter Lower classn,age); break; case 4: printf(age:%d,enter Middle classn,age);break; case 5: case 6: printf(age:%d,enter Higher class,age);break; 第五章 循环结构程序设计一、选择题 C C A A D D三、操作题1求s=1+3+5+7+100的值。#include stdio.hmain() int i,sum=0; for(i=1;i0) n+; sum=sum+score; scanf(%f,&score); ave=sum/n; printf(nThe average score is%.2f,ave); 3输入一行字符以作结束标志,分别统计其中英文字母、空格、数字和其它字符的个数。#include stdio.hmain() char ch; int cha=0,space=0,digit=0,other=0; while(ch=getchar()!=) if (ch=a&ch=A&ch=0&ch=9) digit+; else other+; printf(ncha=%d,space=%d,digit=%d,other=%d,cha,space,digit,other); 4一张纸的厚度为0.1毫米,珠穆琅玛峰的高度为8848.13米,假如纸张有足够大,将纸对折多少次后可以超过珠峰的高度?main() float h=8848.13,h0=0.0001,h1; int m=0; h1=h0; while(h0=h) h0=2*h0; printf(n m=%d,high=%f,m,h0); m+; printf(n m=%dn,m-1);5、 编写一个程序求出满足下列条件的四位数,该数是一个完全平方数;第一、三位上数之和为10,第二、四位上数之积为12。 解: #include main() int i,j,a,b,c,d; for(i=32;i=99;i+) j=i*i; a=j/1000; b=j/100-a*10; c=j/10-a*100-b*10; d=j-a*1000-b*100-c*10; if(a+c=10&b*d=12) printf(%d ,j); 本程序运行结果为: 1296 92166、 一个正数与3的和是5的倍数,与3的差是6的倍数,编写一个程序求符合条件的最小数。 解: #include main() int n; n=1; while(1) n=n+1; if(n+3)%5=0&(n-3)%6=0)break; printf(n=%d,n);本程序运行结果为: n=277、 已知xyz+yzz=532,其中x、y、z都是数字,编写一个程序求出x、y、z分别是多少。解: #include main() int x,y,z,i; for(x=1;x=9;x+) for(y=1;y=9;y+) for(z=0;z=9;z+) i=100*x+10*y+z+100*y+10*z+z; if(i=532) printf(x=%d,y=%d,z=%dn,x,y,z); 本程序运行结果为: x=3,y=2,z=18、学校有近千名学生排队,5人一行余2人,7人一行余3人,3人一行余1人,求学生人数。 解: #include main() int n; for(n=1000;n=10;n-) if(n%5=2&n%7=3&n%3=1)break; printf(n=%dn,n);本程序运行结果为: n=9979验证歌德巴赫猜想:任意一个大于6的偶数均可表示为两个质数的和。#includemain() int i,x; int p,q,k1,k2; printf(Please input an odd data(=6):); scanf(%d,&x); for(p=3;p2) for(i=2;ip;i+) if(p%i=0) k1=0; for(i=2;iq;i+) if(q%i=0) k2=0; if(k1=1&k2=1) printf(%d=%d+%dn,x,p,q); 10一个数恰好等于它的平方数的右端,这个数称为同构数 。如 :5的平方是25,25的平方是625。找出11000之间的全部同构数 。#include math.hmain() int i,j,k=0; for (i=2;i1000;i+) if (i/10=0) j=1; /*因为i是整型,所以是整除*/ else if (i/100=0) j=2; else if (i/1000=0) j=3; if (long int)i*i%(int)pow(10,j)=i) /*同构数的定义*/ k+; /* 计数器*/ printf(%10d,i); if (k%5=0) printf(n); printf(nk=%d,k);项目实训1. 编写程序求1-1/2+1/3-1/4+1/99-1/100的值#include stdio.hmain() int i, s=-1; float sum=1.0; for(i=2;i=100;i+) sum=sum+1.0*s/i; printf(sum=%f,sum);2曾有一位印度国王要奖赏他的聪明能干的宰相达依尔。达依尔只要求在国际象棋的棋盘格上放置小麦粒,第一格放1粒,第二格放两粒,第三格放4粒,第四格放8粒,,最后能有多少小麦粒呢?main() float i ,s=1,t=1; for (i=1;i=63;i+) t*=2; s+=t; printf(s=%fn,s);3打印水仙花数,即一个三位数各位上的数字之和等于它本身,如:153=13+53+33 。main()int k1,k2,k3,i; for (k1=1;k1=9;k1+) for (k2=0;k2=9;k2+) for (k3=0;k3=9;k3+) i=k1*k1*k1+k2*k2*k2+k3*k3*k3;if (i=k1*100+k2*10+k3)printf(n%d=%d3+%d3+%d3,i,k1,k2,k3); 4编制电视歌手大奖赛评分程序,要求评委人数和每位评委的打分从键盘输入,去掉一个最高分,再去掉一个最低分,求评委给出的最后得分。main()/* TV大奖赛 */int n,i=1; float x,max,min,sum=0;printf(nPlease input the number of score:);scanf(%d,&n);printf(nInput score:);scanf(%f,&x);max=x;min=x;sum=x;while (in) i+; scanf(%f,&x); sum+=x; if (maxx) max=x ; else if (xmin) min=x;sum=(sum-max-min)/(n-2);printf(The last score is%8.2fn,sum);5打印下列图形。* * * * * * * * * * * * * * * * * * * * * * * * *main() int i,j; for (i=1;i=5;i+) for (j=1;j=5-i;j+) printf ( ); for (j=1;jave) printf(%f ,xi); 3、编写一个程序判定用户输入的正数是否为“回文数”,所谓回文数是指数正读反读都相同。#include main() int buffer10,i,k,b; long number,n; printf(input a positive number:); scanf(%ld,&number); k=0; n=number; do bufferk=n%10; k=k+1; n=n/10; while(n!=0); b=1; for(i=0;i=(k-1)/2;i+) if(bufferi!=bufferk-1-i) b=0; if(b) printf(%ld is huiwenshun,number);else printf(%ld is not huiwenshun,number); 4、求二维数组的周边元素之和#include main() int a33=3,-2,1,2,0,1,3,-2,3,1,0,4; int i,j,sum=0; for(i=0;i3;i+) for(j=0;j3;j+) for(i=0;i3;i+) if (i=0|j=0|j=2|i=2) sum=sum+aii; printf(%d,sum); 5、编写程序找出一个二维数组的鞍点。即该位置上的元素在该行最大,但是在该列最小。main() int i,j,k,max,maxi,maxj,flag1,flag2; int a23=1,2,3,4,5,6; flag2=0; for (i=0;i2;i+) max=ai0; for (j=0;jmax) max=aij; maxj=j; for (k=0,flag1=1;k2 & flag1;k+)if (akmaxjmax) flag1=0; if (flag1) printf(n %d is answer,locate:line %d colum %dn,max,i,maxj); flag2=1; if (!flag2) printf(n no answer!); 项目实训:1、评定奥运会某参赛选手的成绩。设某参赛选手的某项目有8位评委,要求去掉一个最高分和一个最低分,给出其最后得分。#include #define N 10 /*定义字符常量*/main() int xN,i,max,min,score=0; printf(Please input %d integers:n,N); /*输入N个数,存入数组中*/ for(i=0;iN;i+) scanf(%d,&xi); score+=xi; /*赋初值*/ max=min=x0; /*将第一个数默认为最大或最小值*/ for(i=1;iN;i+) if(maxxi) min=xi; /*求最小值*/ printf(The last score is : %dn,(score-max-min)/(N-2); 2、打印出以下杨辉三角形(要求打印出10行)。 11 11 2 11 3 3 11 4 6 4 1 #define N 11main() int i,j,aNN; for (i=1;iN;i+) aii=1;ai1=1; for (i=3;iN;i+) for (j=2;j=i-1;j+) aij=ai-1j-1+ai-1j; for (i=1;iN;i+) for (j=1;j=i;j+) printf(%6d,aij); printf(n); printf(n); #define N 11main() int i,j,aNN; for(i=1;iN;i+) aii=1; ai1=1; for(i=3;iN;i+) for(j=2;j=i-1;j+) aij=ai-1j-1+ai-1j; for(i=1;iN;i+) for(j=1;j=i;j+)printf(%6d,aij); printf(n); printf(n); 本程序的运行结果为:1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 11 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 13、一个程序,将字符数组s2中的全部字符拷贝到字符数组s1中。不用strcpy函数。拷贝时,0也要拷贝过去。0后面的字符不拷贝。解:#include stdio.hmain() char from80,to80; int i; printf(Input string:); scanf(%s,from); for(i=0;i=strlen(from);i+) toi=fromi; printf(the result: %sn,to);本程序的运行结果为:the result:Input string:student第七章 函数一、选择题 B D C B B D A A D三、编程题1、写一个判定偶数的函数,在主函数中输入一个整数,输出是否是偶数的信息。int even(x) int x ; if (x%2=0) return(1); else return(0); main() int x; scanf(%d,&x); if (even(x) printf(x is even.); else printf(x is not even.);2、统计 400499 这些数中 4 这个数字出现的次数,要求判断一个数有几位4这个数字用函数实现。 main() int i,k=0; for(i=400;i=499;i+) k=k+num(i); printf (number=%dn,k); num(x)int x; int y,k=0; while(x!=0) y=x%10; if(y= = 4) k+; x=x/10; return(k);3、找出1000之内的所有“完数”,要求判断一个数是否为完数用函数实现。main() int i; for (i=1;i1000;i+) if (wan(i) printf (%5d,i); printf (n); wan(x) int x; int i,k; k=0; for (i=1;i=x/2;i+) if (x%i= =0) k=k+i; if (k= =x) return (1); else return (0); 项目实训:1、已有变量定义和函数调用语句:int x=57;isprime (x);函数isprime ( )用来判断一个整型数a是否为素数,若是素数,函数返回1,否则返回0。请编写isprime 函数。isprime (int a) 解: main() int x=57; int isprime(int); if (isprime(x) printf(“%d is prime.”,x); else printf(“%d is not prime.”,x);isprime (int a)int i; for(i=2;isqrt(double)a);i+) if(a%i= =0) return 0;return 1;2、输入10个学生的成绩,分别用函数实现:(1)求平均成绩; (2)按分数高低进行排序并输出。解:main( ) float average(float b); void sort(float b); float a10,j,aver; printf(input 10:); for(j=0;j10;j+) scanf(%f,&aj); aver=average(a); printf(aver=%.2fn,aver); sort(a); for(j=0;j10;j+) printf(%10.2f,aj); float average(float b ) int j; float sum=0,aver; for(j=0;j10;j+) sum=sum+bj; aver=sum/10.0; return(aver); void sort(float b ) int i,j,max,k; for(i=0;i10;i+) max=bi; k=i;for(j=i+1;j10;j+)if(maxbj)max=bj; k=j; bk=bi; bi=max; 本程序运行结果为:input 10:45 12 86 85 79 84 85 96 45 89 (输入)aver=70.60 96.00 89.00 86.00 85.00 85.00 84.00 79.00 45.00 45.00 12.00第8章 指针一、选择题D A C C(D) D C D二、填空题1. m 2. 指针数组名 3. ABCDCD 4.49 5. 25 三、程序设计题(1)main() int a,b,c,*p1,*p2,*p3; scanf(%d,%d,%d,&a,&b,&c); p1=&a; p2=&b; p3=&c; if(*p1*p2) max=*p1 else max=*p2; if(*p3max) max=*p3;printf(nmax=%dn,max);程序结果:9,0,10max=10(2)#includemain()int a10,*p,i,t; p=a; for(i=0;i10;i+) scanf(%d,p+i); for(i=0;i5;i+) t=*(p+i);*(p+i)=*(p+9-i);*(p+9-i)=t; for(i=0;i10;i+) printf(%5d,*(p+i); printf(n);(3)#includemain() char str80,*p,i,len=0; p=str; gets(p); for(i=0;*(p+i)!=0;i+) len+; printf(len=%dn,len); 项目实训题目:#includechar *link(char *p1,int M,char *p2,int N) int i,j; for(i=0;iM;i+) if(*(p1+i)=0) break; for(j=0;j=3) days+=1; printf(n%dmonth %dday is %d day of %d.,date.month,date.day,days,date.year); 本程序运行结果为:Please input date:(year,month,day)2000,3,13month 1day is 61 day of 2000.2、有10名学生,每个学生包括学号、姓名、3科成绩,编程序求每个学生的平均成绩,并打印最高分学生的信息。 #define N 4main( )struct student int num; char name15; float c3; float ave; ; struct student stuN; struct student *pN,*t; int i,j,k; float x1,x2,x3; for(i=0;iN;i+) scanf(%d%s%f%f,&stui.num,stui.name,&x1,&x2,&x3); stui.c0=x1; stui.c1=x2; stui.c2=x3; k=0; for(j=0;j=2;j+) k=k+stui.cj; stui.ave=k/3.0; pi=&stui; /*排序-由大到小*/for(i=0;iN-1;i+) for(j=i+1;javeave) t=pj;pj=pi;pi=t;printf(“%5d%15s%3d%3d%6.1fn”, p0-num,pi-name,p0-c0, p0-c1,p0-c2);3、建立一个3名学生数据的单链表。解:#define NULL 0#define LEN sizeof(struct student)struct student int no; struct student *next; ;struct student *head;struct student *creat() struct student *p,*q; int n,i; printf(how many:); scanf(%d,&n); for(i=0;ino); if(i=0) head=p; else q-next=p; q=p; p-next=NULL; return(head); print (struct student * head ) struct student *p; p=head; while(p!=NULL) printf(%6d ,p-no); p=p-next; main() struct student * head; head= creat(); print(head); 本程序运行结果为:how many:5NO:12NO:78NO:98NO:45NO:75 (以上为输入)12 78 98 45 75 实训题(1)图书馆的图书检索上包括:书名、作者姓名、出版日期、登录号、书价等内容。试根据上述五项内容定义一个结构体类型,声明结构体变量book,再从键盘为变量book输入数据,并从屏幕输出数据。(2)构体数组(可以使用链表),将5名考生数据输入计算机,并列表从屏幕输出。编写函数,通过调用函数实现:a 找出成绩最高的考生的有关信息,并在屏幕上输出。b 按考生准考证号码由大到小排序。考生数据包括:准考证号码、姓名、性别、年龄、成绩。解:(1) struct char na
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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