c语言程序设计案例教程答案(C语言程序设计教程(第二版) 周宇 课后答案) | 您所在的位置:网站首页 › 用vb语言编写一个程序求一个数的绝对值 › c语言程序设计案例教程答案(C语言程序设计教程(第二版) 周宇 课后答案) |
本文目录C语言程序设计教程(第二版) 周宇 课后答案c语言程序设计编程题目:请 :编写完成对学生相关信息的要求:1.定义一个结构体类型student,其中包括三个成c语言程序设计(何钦铭 颜晖 第三版)课后习题答案C语言问题程序设计题例题 4-8 穷举算法 这一题 那两句for是什么意思 求详细的解答谢谢c语言程序设计教程吴国栋版答案在哪里找c语言程序设计教程 第四版 课后答案 (李丽娟).pdf急需《C语言程序设计教程》第三版(谭浩强\张基温)编著,高等教育出版社出版,课后习题答案!C语言程序设计教程答案~有追加悬赏100分!谭浩强C语言程序设计教程(第三版)》的课后习题答案急需《C语言程序设计教程》第三版(谭浩强\张基温)编著,高等教育出版社出版,课后习题答案!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“); } 2222....已知立方体的长、宽、高分别是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 二 操作题 2 21. 3,2,-8,2 3.000000,2.500000,-8.000000 2. ABC DE FGH why is 21+35 equal 52 3. 3 1 4 3 2 3 1 2 4. aa bb cc abc A N 项目实训题 1.定义一个符号常量M为5和一个变量n值为2,把它们的乘积输出。 #define M 5 main() { int n,c; n=2; c=M*n; printf(“%d\n“,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(“%f\n“,x+a%3*(int)(x+y)%2/4); } (2)main() { int a=2,b=3; float x=3.5,y=2.5; printf(“%f\n“,(float)(a+b)/2+(int)x%(int)y); 第三章第三章第三章第三章 顺序结构程序设计顺序结构程序设计顺序结构程序设计顺序结构程序设计 一 选择题 A C D C C 二 操作题 1. x=3,a=2,b=3 2. z=12.700000 3. 1 2 1 a 2 1 2 三三三三....编程题 编程题编程题编程题编程题 1. 某工种按小时计算工资,每月劳动时间(小时)×每小时工资=总工资,总工资中扣除10%公积金,剩余的为应发工资。编写一个程序从键盘输入劳动时间和每小时工资,打印出应发工资。 解: #include 《stdio.h》 main() { float sj,gz,yfgz; printf(“time,salary:“); scanf(“%f,%f“,&sj,&gz); yfgz=sj*gz*0.9; printf(“total salary:%f\n“,yfgz); } 本程序运行结果为: time,salary:4,3《CR》 total salary:10.800000 2.编写一个程序求出任意一个输入字符的ASCII码 解: #include 《stdio.h》 main() { char c; printf(“Input a string:“); scanf(“%c“,&c); printf(“%c ASCII is %d\n“,c,c); } 本程序运行结果为: Input a string:a《CR》 a ASCII is 97 3、编写一个程序用于水果店售货员算帐:已知苹果每斤2.50元,鸭梨每斤1.80元,香蕉每斤2元,橘子每斤1.6元,要求输入各类水果的重量,打印出应付第四章第四章第四章第四章 选择结构程序设计选择结构程序设计选择结构程序设计选择结构程序设计 一、略 二、B B A B C B A 三、1. 1 0 2. 2 3 2 2 3. 10 20 0 4. ch》=’A’&&ch《=’Z’||ch》=’a’&&ch《=’z’ ch》=’0’&&ch《=’9’ ch==’ ’ 5. -1 四、上机操作 1. 从键盘输入一个英文字母,如果是大写字母,则将它变为小写字母输出;如果是小写字母,则将其变为大写字母输出。 #include《stdio.h》 main() {char ch; ch=getchar(); if(ch》=’A’&&ch《=’Z’) ch+=32; else if(ch》=’a’&&ch《=’z’) ch-=32; putchar(ch); putchar(’\n’); } 2. 根据输入的x值依据下列表达式,计算y的值。 2x (x》-1) y = 3 (x=-1) 4+x (x《-1) 解: main() { float x,y; scanf(“%f“,&x); if(x》-1) y=2*x; else if(x==1) y=3; else y=4+x; printf(“y=%f“,y); } 本程序运行结果为: -2《CR》 y=2.000000 3.编写程序,输入一个整数,判断它是奇数还是偶数,若是奇数,输出“Is Odd“;若是偶数,输出“Is Even“。 main() { int x; scanf(“%d“,&x); if(x%2==0) printf(“Is Even\n“); else printf(“Is Odd\n“); } 4.设计应用程序,求二次方程ax2+bx+c=0的解。 #include《math.h》 main() { 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 quadratic\n“); else { disc=b*b-4*a*c; if(fabs(disc)《 1e-6) printf(“x1=x2=%8.4f\n“,-b/(2*a)); else if(disc》1e-6) {x1=(-b+sqrt(disc)/(2*a)); x2=(-b-sqrt(disc)/(2*a)); printf(“x1=%8.4f,x2=%8.4f\n“,x1,x2); } else { p=-b/(2*a); q=sqrt(-disc/(2*a)); printf(“%8.4f+%x8.4fi\n“,p,q); printf(“%8.4f-%8.4fi\n“,p,q);} } } 5555....按托运规则,行李不超过50公斤时,运费为0.15元/公斤,如超过50公斤,超过部分的运费为0.22元/公斤,现有行李w公斤,编写一个程序计算运费。 解: #include 《stdio.h》 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 yuan\n“,x); } 本程序运行结果为: weight:20《CR》 money:3.00 yuan weight:60《CR》 money:9.70 yuan 6. 某商场给与顾客购物的折扣率如下: 购物金额《200元 不打折 500元》购物金额》=200元 9折 1000元》购物金额》=500元 8折 购物金额》=1000元 7.5折 输入一个购物金额,输出打折率、购物实际付款金额。 #include《stdio.h》 main() { float x,y,realx; scanf(“%f“,&x); if(x《=0) { printf(“Error! You input a worry number!\n“); y=0;} else { if(x《200) y=1.0; else if(x《500) y=0.9; else if(x《1000) y=0.8; else y=0.75;} if(y!=0) {realx=x*y; printf(“y=%f, the realx=%5.2f\n“, y,realx);} } 第五章第五章第五章第五章 循环结构程序设计循环结构程序设计循环结构程序设计循环结构程序设计 一、选择题 C C A A D D第六章第六章第六章第六章 数组数组数组数组 、选择题 D A D A A C C A D 二、程序阅读题 13 13 13 13 13 13第七章第七章第七章第七章 函数函数函数函数 一、选择题 B D C B B D A A D第第第第8888章章章章 指针指针指针指针 一、选择题 D A C C(D) D C D 二、填空题 1. m 2. 指针数组名 3. ABCDCD 4.49 5. 25 c语言程序设计编程题目:请 :编写完成对学生相关信息的要求:1.定义一个结构体类型student,其中包括三个成#include 《stdio.h》#include 《stdlib.h》#define STU_NUM 10 /*宏定义学生的数量*/struct student /*定义一个结构体用来存放学生学号、三门课成绩、总分及平均成绩*/{char stu_id; /*学生学号;*/float score; /*三门课成绩;*/float total; /*总成绩;*/float aver; /*平均成绩;*/};/*排序用一个函数来实现*/void SortScore(student *stu,int n){student stud;for(int i = 0; i 《 n-1; i++)for(int j = i+1 ; j 《 n; j++){if(stu.total){stud = stu;stu;stu = stud;}}}int main( ){student stu; /*创建结构体数组中有10个元素,分别用来保存这10个人的相关信息。*//*输入这十个学生的相关信息*/for(int i = 0; i《STU_NUM; i++){printf(“请输入第%d个学生的学号:“,i+1);scanf(“%s“,&stu.stu_id);printf(“输入第%d个学生的数学成绩:“,i+1);scanf(“%f“,&stu);printf(“输入第%d个学生的英语成绩:“,i+1);scanf(“%f“,&stu);printf(“输入第%d个学生的计算机成绩:“,i+1);scanf(“%f“,&stu);stu;stu.total/3;}printf(“\n“);SortScore(stu,STU_NUM);/*调用排序函数*//*输出排序后的各学生的成绩*/for(i = 0 ; i 《 STU_NUM; i++){printf(“序号: %d\t“,i);printf(“学号:%s\t“,stu.stu_id);printf(“数学:%f\t“,stu);printf(“英语:%f\t“,stu);printf(“计算机:%f\t“,stu);printf(“平均成绩:%f\t“,stu.aver);printf(“总分:%f\t“,stu.total);printf(“\n\n“);}return 0;}注:(源程序中主要标识符含义说明)#define STU_NUM 10 /*宏定义学生的数量*/struct student /*定义一个结构体用来存放学生学号、三门课成绩、总分及平均成绩*/{char stu_id; /*学生学号;*/float score; /*三门课成绩;*/float total; /*总成绩;*/float aver; /*平均成绩;*/} c语言程序设计(何钦铭 颜晖 第三版)课后习题答案习 题 1 1.1 填空题 1.函数 2.主函数main();主函数main() 3.主函数main() 4.函数首部;函数体 5.{;} 6.顺序结构;选择结构;循环结构 7..c;.obj;.exe 1.2 思考题 1.答:结构化程序设计是指,为使程序具有一个合理的结构以保证程序正确性而规定的一套如何进行程序设计的原则。顺序结构,选择结构,循环结构 2.答:算法是对具体问题求解步骤的一 种描述。计算机算法的表达工具通常采用以下几种方法:①用自然语言表示算法;②用流程图表示算法;③用伪代码表示算法;④用程序设计语言表示算法。 3.略 4.略 5.略 1.3 编程题 1.答: #include “stdio.h“ main() { float a=10, b=20, h=5, s; s=(a+b)*h/2; printf(“s=%f “ , s ); } C语言问题程序设计题例题 4-8 穷举算法 这一题 那两句for是什么意思 求详细的解答谢谢一、代码解释: for(m=0 ;m《=9 ;m++) 解释:m(根据题意代表男人人数),m从0遍历到9 for(w=0 ;w《=12 ;w++) 解释:w(根据题意代表女人人数),w从0遍历到12 printf里的“\t”表示Tab键的大空格(显示得好看一些) 二、程序思路 很简单暴力枚举,因为男+女+小孩=36,那么男人可能是0~9个(4*9=36,所以最多9个男人),同理女人可能是0~12个(12*3=36)。 用两个for循环嵌套来表示:男0~9人,和女0~12人的任意组合状态,用36-男-女即为小孩人数,然后计算总的搬砖数量,看看符不符合36块砖,符合则显示结果,注意该方程的解可能不止一个哦!所以显示了结果还继续算下去,直到遍历完所有组合。 c语言程序设计教程吴国栋版答案在哪里找c语言程序设计教程吴国栋版答案在书本后面的二维码扫码可以找到。C语言是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括一些类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。 c语言程序设计教程 第四版 课后答案 (李丽娟).pdf您要c语言程序设计教程第四版课答案(李丽娟).pdf我已发送请按照步骤进行操作采纳我前进力记评采纳互相帮助c语言程序设计教程第四版课后答案(李丽娟).pdf 急需《C语言程序设计教程》第三版(谭浩强\张基温)编著,高等教育出版社出版,课后习题答案!C程序设计(第三版)课后题答案!!!(2009-06-04 19:57:53)标签:教育 分类:学习 1.5请参照本章例题,编写一个C程序,输出以下信息: ************************** Very Good! ************************** 解: mian() {printf(“**************************”); printf(“\n”); printf(“Very Good!\n”); printf(“\n”); printf(“**************************”); } 1.6 编写一个程序,输入a、b、c三个值,输出其中最大值。 解: mian() {int a,b,c,max; printf(“请输入三个数a,b,c:\n”); scanf(“%d,%d,%d”,&a,&b,&c); max=a; if(max《b) max=b; if(max《c) max=c; printf(“最大数为:“%d”,max); } 第三章 3.6写出以下程序运行的结果。 main() {char c1=’a’,c2=’b’,c3=’c’,c4=’\101’,c5=’\116’; printf(“a%cb%c\tc%c\tabc\n”,c1,c2,c3); printf(“\t\b%c %c”,c4,c5); } 解: aaㄩbbㄩㄩㄩccㄩㄩㄩㄩㄩㄩabc AㄩN 3.7 要将“China“译成密码,译码规律是:用原来字母后面的第4个字母代替原来的字母.例如,字母“A“后面第4个字母是“E“.“E“代替“A“。因此,“China“应译为“Glmre“。请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为,’C’、’h’、’i’、’n’、’a’,经过运算,使c1、c2、c3、c4、c5分别变为’G’、’l’、’m’、’r’、’e’,并输出。 解: #include 《stdio.h》 main() { char c1=’C’,c2=’h’,c3=’i’,c4=’n’,c5=’a’; c1+=4; c2+=4; c3+=4; c4+=4; c5+=4; printf(“密码是%c%c%c%c%c\n“,c1,c2,c3,c4,c5); } 运行结果: 密码是Glmre 3.9求下面算术表达式的值。 (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)2.5 (2)3.5 3.10写出程序运行的结果。 main() {int i,j,m,n; i=8; j=10; m=++i; n=j++; printf(“%d,%d,%d,%d”,i,j,m,n); } 解: 9,11,9,10 3.12 写出下面表达式运算后a的值,设原来a=12。设a和n都已定义为整型变量。 (1)a+=a (2) a-=2 (3) a*=2+3 (4)a/=a+a (5) a%=(n%=2),n的值等于5 (6)a+=a-=a*=a 解: (1) 24 (2) 10 (3) 60 (4) 0 (5) 0 (6) 0 第四章 4.4若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1=’a’,c2=’b’。想得到以下输出格式和结果,请写出程序(包括定义变量类型和设计输出)。 a=_3_ _b=_4_ _c=_5 x=1.200000,y=2.400000,z=-3.600000 x+y=_3.600_ _y+z=-1.20_ _z+x=-2.40 c1=ˊaˊ_or_97(ASCII) c2=ˊbˊ_or_98(ASCII) main() {int a=3,b=4,c=5; long int u=51274,n=128765; float x=1.2,y=2.4,z=3.6; char c1=’a’,c2=’b’; printf(“a=%2d b=%2d c=%2d\n“,a,b,c); printf(“x=%f,y=%f,z=%f\n“,x,y,z); printf(“x+y=%5.2f y+z=%5.2f z+x=%5.2f\n“,x+y,y+z,z+x); printf(“u=%6ld n=%9ld\n“,u,n); printf(“%s %s %d%s\n“,“c1=’a’“,“or“,c1,“(ASCII)“); printf(“%s %s %d%s\n“,“c2=’a’“,“or“,c2,“(ASCII)“); } 4.7用scanf下面的函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=ˊAˊ,c2=ˊaˊ,问在键盘上如何输入? main() { int a,b;float x,y;char c1c2; scanf(“a=%d_b=%d“,&a,&b); scanf(“_x=%f_y=%e“,&x,&y); scanf(“_c1=%c_c2=%c“,&c1,&c2); } a=3_b=7 _x=8.5_y=71.82 _c1=A_c2=a 4.8设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。请编程序。 main() {float r,h,C1,Sa,Sb,Va,Vb; scanf(“%f,%f“,&r,&h); C1=2*3.14*r; Sa=3.14*r*r; Sb=4*Sa; Va=4*3.14*r*r*r/3; Vb=Sa*h; printf(“C1=%.2f\n“,C1); printf(“Sa=%.2f\nSb=%.2f\nVa=%.2f\nVb=%.2f\n“,Sa,Sb,Va,Vb); } 4.9输入一个华氏温度,要求输出摄氏温度。公式为 c=5(F-32)/9 输出要求有文字说明,取位2小数。 main() {float F,c; scanf(“%f“,&F); c=5*(F-32)/9; printf(“c=%.2f“,c); } 4.10编程序,用getchar函数读入两个字符给c1、c2,然后分别用函数和函数输出这两个字符。并思考以下问题:(1)变量c1、c2应定义为字符型或整形?抑二者皆可?(2)要求输出c1和c2值的ASCII码,应如何处理?用putchar函数还是printf函数?(3)整形变量与字符变量是否在任何情况下都可以互相代替?如: char c1,c2; 与 int c1,c2; 是否无条件的等价? #include“stdio.h“ main() {char c1,c2; c1=getchar();c2=getchar(); putchar(c1);putchar(’\n’);putchar(c2);putchar(’\n’); } #include“stdio.h“ main() {char c1,c2; c1=getchar();c2=getchar(); printf(“c1=%d c2=%d\n“,c1,c2); printf(“c1=%c c2=%c\n“,c1,c2); } 第五章 5.1 什么是算术运算?什么是关系运算?什么是逻辑运算? 解:略。 5.2 C语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”? 解:设有一个逻辑表达式,若其结果为“真”,则以1表示;若其结果为“假”,则以0表示。但是判断一个逻辑量的值时,以0代表“真”,以非0代表“假”。例如3&&5的值为“真”,系统给出3&&5的值为1。 5.3 写出下面各逻辑表达式的值。设a=3,b=4,c=5。 (1) a+b》c&&b==c (2) a||b+c&&b-c (3) !(a》b)&&!c||1 (4) !(x=a)&&(y=b)&&0 (5) !(a+b)+c-1&&b+c/2 解: (1) 0 (2) 1 (3) 1 (4) 0 (5) 1 5.4 有3个整数a、b、c,由键盘输入,输出其中最大的数。 解: 方法一 #include 《stdio.h》 main() { int a,b,c; printf(“请输入3个整数:“); scanf(“%d,%d,%d“,&a,&b,&c); if(a《b) if(b《c) printf(“max=%d\n“,c); else printf(“max=%d\n“,b); else if(a《c) printf(“max=%d\n“,c); else printf(“max=%d\n“,a); } 方法二:使用条件表达式,可以使程序更加简明、清晰。 程序如下: #include 《stdio.h》 main() { int a,b,c,temp,max; printf(“请输入3个整数:“); scanf(“%d,%d,%d“,&a,&b,&c); temp=(a》b)?a:b; max=(temp》c)?temp:c; printf(“3个整数的最大数是%d\n”,max); } 5.5 有一函数: 写一程序,输入x值,输出y值。 解: #include 《stdio.h》 main() {int x,y; printf(“输入x:“); scanf(“%d“,&x); if(x《1) { y=x; printf(“x=%3d, y=x=%d\n“,x,y); } else if (x《10) { y=2*x-1; printf(“x=%3d, y=2*x-1=%d\n“,x,y); } else { y=3*x-11; printf(“x=%3d, y=3*x-11=%d\n“,x,y); } } 5.6 给一个百分制成绩,要求输出等级’A’、’B’、’C’、’D’、’E’。90分以上为’A’,80~90分为’B’,70~79分为’C’,60分以下为’D’。 解: 程序如下: #include 《stdio.h》 main() { float score; char grade; case 2: printf(“请输入学生成绩:“); scanf(“%f“,&score); while(score》100||(score《0) { printf(“\n输入有误,请重新输入:“); scanf(“%f“,&score); } switch((int)(score/10)) { case 10: case 9: grade=’A’;break; case 8: grade=’B’;break; case 7: grade=’C’;break; case 6: grade=’D’;break; case 5: case 4: case 3: case 1: case 0: grade=’E’; } printf(“成绩是%5.1f,相应的等级是%c。\n“,score,grade); } 说明:对输入的数据进行检查,如小于0或大于100,要求重新输入。(int)(score/10)的作用是将 (score/10) 的值进行强制类型转换,得到一个整型值。 5.7 给定一个不多于5位的正整数,要求:① 求它是几位数;② 分别打印出每一位数字;③ 按逆序打印出各位数字。例如原数为321,应输出123。 解: #include 《stdio.h》 main() { long int num; int indiv,ten,hundred,thousand,ten_thousand,place; printf(“请输入一个整数(0~99999):“); scanf(“%ld“,#); if (num》9999) place=5; else if(num》999) place=4; else if(num》99) place=3; else if(num》9) place=2; else place=1; printf(“place =%d\n“, place); ten_thousand=num/10000; thousand=num/1000%10; hundred=num/100%10; ten=num%100/10; indiv=num%10; switch(place) { case 5: printf(“%d,%d,%d,%d,%d“,ten_thousand,thousand,hundred,ten,indiv); printf(“\n反序数字为;“); printf(“%d%d%d%d%d\n“,indiv,ten,hundred,thousand,ten_thousand); break; case 4: printf(“%d,%d,%d,%d“,thousand,hundred,ten,indiv); printf(“\n反序数字为:“); printf(“%d%d%d%d\n“,indiv,ten,hundred,thousand); break; case 3: printf(“%d,%d,%d“,hundred,ten,indiv); printf(“\n反序数字为:“); printf(“%d%d%d\n“,indiv,ten,hundred); break; case 2: printf(“%d,%d“,ten,indiv); printf(“\n反序数字为:“); printf(“%d%d\n“,indiv,ten); break; case 1: printf(“%d“,indiv); printf(“\n反序数字为:“); printf(“%d\n“,indiv); break; } } 5.8 企业发放的奖金根据利润提成。利润I低于或等于10万元时,奖金可提成10% ;利润高于10万元,低于20万元(100000《I≤200000)时,其中10万元按10%提成,高于10万元的部分,可提成7.5% ;200000《I≤400000时,其中20万元仍按上述办法提成(下同),高于20万元的部分按5%提成;400000《I≤600000时,高于40万元的部分按3%提成;600000〈I≤1000000时,高于60万的部分按1.5%提成;I》1000000时,超过100万元的部分按1%提成。从键盘输入当月利润I,求应发放奖金总数。要求:(1)用if语句编程序;(2)用switch语句编程序。 解:计算利润时,要特别注意不同利润的不同提成比例。例如,利润为15万元,其中有10万元按10%的比例提成,另外5万元则按7.5%提成。 (1) 用if语句编程序。 #include 《stdio.h》 main() { long i; float bonus,bon1,bon2,bon4,bon6,bon10; bon1=100000*0.1; bon2=bon1+100000*0.075; bon4=bon2+200000*0.05; bon6=bon4+200000*0.03; bon10=bon6+400000*0.015; printf(“请输入利润i:“); scanf(“%ld“,&i); if(i《=100000) bonus=i*0.1; else if(i《=200000) bonus=bon1+(i-100000)*0.075; else if(i《=400000) bonus=bon2+(i-200000)*0.05; else if(i《=600000) bonus=bon4+(i-400000)*0.03; else if(i《=1000000) bonus=bon6+(i-600000)*0.015; else bonus=bon10+(i-1000000)*0.01; printf(”奖金是%10.2f\n“,bonus); } 此题的关键在于正确写出每一区间的奖金计算公式。例如利润在10万元至20万时,奖金应由两部分组成:①利润为10万元时应得的奖金。即100000ⅹ0.1;②10万元以上部分应得的奖金。即(num-100000)ⅹ0.075。同理,20万~40万这个区间的奖金也应由两部分组成:①利润为20万元时应得的奖金,即100000ⅹ0.1ⅹ10万ⅹ0.075;②20万元以上部分应得的奖金,即(num-200000)ⅹ0.05。程序中先把10万、20万、40万、60万、100万各关键点的奖金计算出来,即bon1、bon2、bon4、bon6、hon10;然后再加上各区间附加部分的奖金。 (2) 用switch语句编程序。 输入利润i,确定相应的提成等级branch 根据branch确定奖金值 0 奖金=i*0.1 1 奖金=bon1+(i-105)*0.075 2 奖金=bon2+(i-2*105)*0.05 3 4 奖金=bon4+(i-4*105)*0.03 5 6 奖金=bon6+(i-6*105)*0.015 7 8 9 10 奖金=bon10+(i-106)*0.01 输出奖金 #include 《stdio.h》 main() { long i; float bonus, bon1, bon2, bon4, bon6, bon10; int c; bon1=100000*0.1; bon2=bon1+100000*0.075; bon4=bon2+200000*0.05; bon6=bon4+200000*0.03; bon10=bon6+400000*0.015; printf(“请输入利润i:“); scanf(“%ld“,&i); c=i/100000; if(c》10) c=10; switch(c) { case 0: bonus=1*0.1;break; case 1: bonus=bon1+(i-100000)*0.075;break; case 2 : case 3: bonus=bon2+(i-200000)*0.05; break; case 4: case 5: bonus=bon4+(i-400000)*0.03;break; case 6: case 7: case 8: case 9: bonus=bon6+(i-600000)*0.015;break; case 10: bonus=bon10+(i-1000000)*0.01; } printf(“奖金是%10.2f“,bonus); } 5.9 输入4个整数,要求按由大到小的顺序输出。 解:此题采用依次比较的方法排出其大小顺序。在学习了循环和数组以后,可以有更多的排序方法。 #include 《stdio.h》 main() { int t,a,b,c,d; printf(“请输入4个整数:“); scanf(“%d,%d,%d,%d“,&a,&b,&c,&d); printf(“\n a=%d,b=%d,c=%d,d=%d\n“,a,b,c,d); if(a》b) {t=a; a=b; b=t;} if(a》c) {t=a; a=c; c=t;} if(a》d) {t=a; a=d; d=t;} if(b》c) {t=a; b=c; c=t;} if(b》d) {t=b; b=d; d=t;} if(c》d) {t=c; c=d; d=t;} printf(“排序结果如下:\n“); printf(“%d, %d, %d, %d\n“,a,b,c,d); } 5.10 有4个圆塔,圆心分别为(2,2)、(-2,2)、(2,-2)、(-2,-2),圆半径为1。这4个塔的高度分别为10m。塔以外无建筑物。今输入任一点的坐标,求该点的建筑高度(塔外的高度为零)。 程序如下: #include 《stdio.h》 main() { int h=10; float x1=2,y1=2,x2=-2,y2=2,x3=-2,y3=-2,x4=-2,y4=-2,x,y,d1,d2,d3,d4; printf(“请输入一个点(x,y):“); scanf(“%f,%f“,&x,&y); d1=(x-x1)*(x-x1)+(y-y1)*(y-y1); d2=(x-x2)*(x-x2)+(y+y2)*(y+y2); d3=(x+x3)*(x+x3)+(y-y3)*(y-y3); d4=(x+x4)*(x-x4)*(y+y4)*(y+y4); if(d1》1&&d2》1&&d3》1&&d4》1) h=0; printf(“该点高度为%d\n“,h); } 第六章 第六章 循环控制 6.1输入两个正整数m和n,求其最大公约数和最小公倍数。 main() {long m,n,i=1,j,s; scanf(“%ld,%ld“,&m,&n); for(;i《=m&&i《=n;i++) {if(m%i==0&&n%i==0) s=i;} if(m》=n) j=m; else j=n; for(;!(j%m==0&&j%n==0);j++); printf(“s=%ld,j=%ld\n“,s,j); } 6.2输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。 #include“stdio.h“ main() {char c;int i=0,j=0,k=0,l=0; while((c=getchar())!=’\n’) {if(c》=65&&c《=90||c》=97&&c《=122) i++; else if(c》=48&&c《=57) j++; else if(c==32) k++; else l++;} printf(“i=%d,j=%d,k=%d,l=%d\n“,i,j,k,l); } 6.3求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字。例如:2+22+222+2222+22222(n=5),n由键盘输入。 #include“math.h“ main() {int n,sum=0,i=1,s=2; scanf(“%d“,&n); while(i《=n) {sum=sum+s;s=s+2*pow(10,i); i++;} printf(“sum=%d\n“,sum); } 6.4 求 ,(即求1!+2!+3!+4!+5!+…+20!) main() {int n,i=1;long sum=0,s=1; scanf(“%d“,&n); while(i《=n) {s=s*i;sum=sum+s;i++;} printf(“sum=%ld\n“,sum); } 6.5 求 main() {double i=1,j=1,k=1,s1=0,s2=0,s3=0,sum; for(;i《=100;i++) s1=s1+i; for(;j《=50;j++) s2=s2+j*j; for(;k《=10;k++) s3=s3+1/k; sum=s1+s2+s3; printf(“sum=%f\n“,sum); } 6.6打印出所有“水仙花数“,所谓“水仙花数“是指一个三位数,其各位数字立方和等于该本身。例如:153是一个水仙花数,因为153=1^3+5^3+3^3。 #include“math.h“ main() {int x=100,a,b,c; while(x》=100&&x《1000) {a=0.01*x;b=10*(0.01*x-a);c=x-100*a-10*b; if(x==(pow(a,3)+pow(b,3)+pow(c,3))) printf(“%5d“,x);x++;} } 6.7一个数如果恰好等于它的因子之和,这个数就称为“完数“。例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数“。编程序找出1000之内的所有完数,并按下面格式输出其因子: 6 its factors are 1、2、3 main() {int m,i,j,s; for(m=6;m《10000;m++) {s=1; for(i=2;i《m;i++) if(m%i==0) s=s+i; if(m-s==0) {printf(“%5d its fastors are 1 “,m);for(j=2;j《m;j++) if(m%j==0) printf(“%d “,j);printf(“\n“);} } } 或 main() {int m,i,j,s; for(m=6;m《1000;m++) {s=m-1; for(i=2;i《m;i++) if(m%i==0) s=s-i; if(s==0) {printf(“%5d its fastors are 1 “,m);for(j=2;j《m;j++) if(m%j==0) printf(“%d “,j);printf(“\n“);} } } 6.8有一分数序列: 求出这个数列的前20项之和。 main() {int i=1,n;double t,x=1,y=2,s,sum=0; scanf(“%ld“,&n); while(i《=n) {s=y/x;sum=sum+s;t=y;y=y+x;x=t;i++;} printf(“%f\n“,sum); } 6.9一球从100米高度自由下落,每次落地后返回原高度的一半,再落下。求它在第10次落地时共经过多少米?第10次反弹多高? main() {int i,n;double h=100,s=100; scanf(“%d“,&n); for(i=1;i《=n;i++) {h*=0.5;if(i==1) continue;s=2*h+s;} printf(“h=%f,s=%f\n“,h,s); } 6.10猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。 main() {int i=1,sum=0; for(;i《=10;sum=2*sum+1,i++); printf(“sum=%d\n“,sum); } 6.11用迭代法求 。求平方根的迭代公式为: 要求前后两次求出的得差的绝对值少于0.00001。 #include“math.h“ main() {float x0,x1,a; scanf(“%f“,&a); x1=a/2; do {x0=x1;x1=(x0+a/x0)/2;} while(fabs(x0-x1)》=0.00001); printf(“%.3f\n“,x1); } 6.12 用牛顿迭代法求方程在1.5附近的根。 main() {double x,y;x=1.5; do{y=2*x*x*x-4*x*x+3*x-6; x=x-y/(6*x*x-8*x+3);} while(y!=0); printf(“x=%.3f\n“,x); } 6.13用二分法求方程在(-10,10)之间的根 main() {double x1,x2,y1,y2;x1=-10;x2=10; do{y1=2*x1*x1*x1-4*x1*x1+3*x1-6; x1=x1-y1/(6*x1*x1-8*x1+3);} while(y1!=0); do {y2=2*x2*x2*x2-4*x2*x2+3*x2-6; x2=x2-y2/(6*x2*x2-8*x2+3);} while(y2!=0); printf(“x1=%.3f,x2=%.3f\n“,x1,x2); } 6.14打印以下图案 * * * * * * * * * * * * * * * * * * * * * * * * * #include“math.h“ main() {int i,j,k; for(i=0;i《=3;i++) {for(j=0;j《=2-i;j++) printf(“ “); for(k=0;k《=2*i;k++) printf(“*“); printf(“\n“); } for(i=0;i《=2;i++) {for(j=0;j《=i;j++) printf(“ “); for(k=0;k《=4-2*i;k++) printf(“*“); printf(“\n“); } } 第七章 第七章 数组 7.1 用筛法求之内的素数。 main() { int i,j,a; for(i=2;i《100;i++) { a=i; for(j=2;j《=i;j++) {if(j《i) if(a%j==0) break; if(a-j==0) printf(“%5d“,a); } } printf(“\n“); } 或 #include“math.h“ main() {static int i,j,k,a; for(i=2;i《100;i++) {a=i;k=sqrt(i); for(j=2;j《=a;j++) if(j《k) if(a%j==0) break; if(j》=k+1) printf(“%5d“,a); } printf(“\n“); } 7.2用选择法对10个整数从小到大排序。 main() { int i,j,a,t; for(i=0;i《10;i++) scanf(“%d“,&a); for(j=1;j《10;j++) for(i=0;i《=9-j;i++) if(a) {t=a=t;} for(i=0;i《10;i++) printf(“%5d“,a); } 或 main() {static int a,i,j,k,t; for(i=1;i《11;i++) scanf(“%d“,&a); for(j=1;j《10;j++) for(i=1;i《=10-j;j++) if (a) {t=a=t;} for(i=1;i《11;i++) printf(“%d“,a); printf(“\n“); } 7.3求一个3×3矩阵对角线元素之和。 main() {int i=0,j=0,a,s1,s2; for(i=0;i《3;i++) for(j=0;j《3;j++) scanf(“%d“,&a); s1=a; s2=a; printf(“s1=%d,s2=%d\n“,s1,s2); } 或 main() { static int i,j,s1,s2,a; for(i=1;i《=3;i++) for(j=1;j《=3;j++) scanf(“%d“,&a); s1=a; s2=a; printf(“%d,%d\n“,s1,s2); } 7.4已有一个已排好的数组今输入一个数要求按原来排序的规律将它插入数组中。 main() { static int a={1,7,8,17,23,24,59,62,101};int i,j,t; scanf(“%d“,&a); for(i=9;i》0;i--) if(a) {t=a=t;} for(i=0;i《10;i++) printf(“%5d“,a);printf(“\n“); } 或 main() { static int a={1,4,5,6,7}; int i,t,b; scanf(“%d“,&b); for(i=0;i《5;i++) {if(b《=a) {t=a=b;b=t;} printf(“%d “,a);} printf(“%d“,b); } 7.5将一个数组的值按逆序重新存放,例如,原来顺序为:8,6,5,4,1。要求改为:1,4,5,6,8。 main() { int i,b; for(i=0;i《10;i++) scanf(“%d“,&b); for(i=9;i》-1;i--) printf(“%5d“,b); printf(“\n“);} 7.6打印出以下杨辉三角形(要求打印出10行)。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 ∶ ∶ main() { static int m,n,k,b; b=1; for(m=1;m《15;m++) {for(n=1;n《=m;n++) { b; printf(“%-5d“,b);}printf(“\n“); } } } 或 main() { int i,j,n,k,a; static a={{1},{1},{1},{1},{1},{1},{1},{1},{1},{1}}; a=1; for(k=2,k《11;k++) for(i=2;i《=k;i++) for(j=2;j《=i;j++) a; for(k=1;k《11;k++) for(i=1;i《=k;i++) for(j=1;j《=i;j++) printf(“%d“,a); } 7.7 打印“魔方阵”,所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。例如,三阶魔方阵为 8 1 6 3 5 7 4 9 2 要求打印出由1~n2的自然数构成的魔方阵。 解: #include 《stdio.h》 main() { int a,i,i,k,p,m,n; p=1; while(p==1) { printf(“Enter n(n=1~15):“); scanf(“%d“,&n); if((n!=0)&&(n《=15)&&(n%2!=0)) p=0; } for(i=1;i《=n;i++) for(j=1;j《=n;j++) a=0 C语言程序设计教程答案~有追加悬赏100分!1 【C语言】《C语言程序设计教程(第二版)》习题答案 说 明 1. 本文所指的《C语言程序设计教程(第二版)》是李凤霞主编、北京理 工大学出版社出版的,绿皮。2 第1章 程序设计基础知识 一、单项选择题(第23页) 1-4.CBBC 5-8.DACA二、填空题(第24页) 1.判断条件 2.面向过程编程 3.结构化 4.程序 5.面向对象的程序设计语言 7.有穷性 8.直到型循环 9.算法 10.可读性 11.模块化 12.对问题的分析和模块的划分三、应用题(第24页) 2.源程序: main() {int i,j,k; /* i:公鸡数,j:母鸡数,k:小鸡数的1/3 */ printf(“cock hen chick\n“); for(i=1;i《=20;i++) for(j=1;j《=33;j++) for(k=1;k《=33;k++) if (i+j+k*3==100&&i*5+j*3+k==100) printf(“ %d %d %d\n“,i,j,k*3);} 执行结果: cock hen chick 4 18 78 8 11 81 12 4 84 3.现计算斐波那契数列的前20项。 递推法 源程序: main() {long a,b;int i; a=b=1; for(i=1;i《=10;i++) /*要计算前30项,把10改为15。*/ {printf(“%8ld%8ld“,a,b); a=a+b;b=b+a;}} 递归法 源程序: main() {int i; for(i=0;i《=19;i++) printf(“%8d“,fib(i));} fib(int i) {return(i《=1?1:fib(i-1)+fib(i-2));} 执行结果: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 4.源程序: #include “math.h“; main() {double x,x0,deltax; x=1.5; do {x0=pow(x+1,1./3); deltax=fabs(x0-x); x=x0; }while(deltax》1e-12); printf(“%.10f\n“,x);} 执行结果: 1.3247179572 5.源程序略。(分子、分母均构成斐波那契数列) 结果是32.66026079864 6.源程序: main() {int a,b,c,m; printf(“Please input a,b and c:“); scanf(“%d %d %d“,&a,&b,&c); if(a《b){m=a;a=b;b=m;} if(a《c){m=a;a=c;c=m;} if(b《c){m=b;b=c;c=m;} printf(“%d %d %d\n“,a,b,c);} 执行结果: Please input a,b and c:123 456 789 789 456 123 7.源程序: main() {int a; scanf(“%d“,&a); printf(a%21==0?“Yes“:“No“);} 执行结果: 42 Yes 3 第2章 C语言概述 一、单项选择题(第34页) 1-4.BDCB 5-8.AABC二、填空题(第35页) 1.主 2.C编译系统 3.函数 函数 4.输入输出 5.头 6. .OBJ 7.库函数 8.文本三、应用题(第36页) 5.sizeof是关键字,stru、_aoto、file、m_i_n、hello、ABC、SIN90、x1234、until、cos2x、s_3是标识符。 8.源程序: main() {int a,b,c; scanf(“%d %d“,&a,&b); c=a;a=b;b=c; printf(“%d %d“,a,b);} 执行结果: 12 34 34 12 4 第3章 数据类型与运算规则 一、单项选择题(第75页) 1-5.DBACC 6-10.DBDBC 11-15.ADCCC 16-20.CBCCD 21-25.ADDBC 26-27.AB二、填空题(第77页) 1.补码 2.±(10^-308~10^308) 3.int(整数) 4.单目 自右相左 5.函数调用 6.a或b 7.1 8.65,89三、应用题(第78页) 1.10 9 2.执行结果: 11 0 0 12 1 5 第4章 顺序结构程序设计 一、单项选择题(第90页) 1-5.DCDAD 6-10.BACBB二、填空题(第91页) 1.一 ;2. 5.169000 3.(1)-2002500 (2)I=-200,j=2500 (3)i=-200 j=2500 4.a=98,b=765.000000,c=4321.000000 5.略 6.0,0,3 7.3 8.scanf(“%lf%lf%lf“,&a,&b,&c); 9. 13 13.000000,13.000000 10.a=a^c;c=c^a;a=a^c;(这种算法不破坏b的值,也不用定义中间变量。)三、编程题(第92页) 1.仿照教材第27页例2-1。 2.源程序: main() {int h,m; scanf(“%d:%d“,&h,&m); printf(“%d\n“,h*60+m);} 执行结果: 9:23 563 3.源程序: main() {int a={-10,0,15,34},i; for(i=0;i《=3;i++) printf(“%d\370C=%g\370F\t“,a*1.8+32);} 执行结果: -10℃=14°F 0℃=32°F 15℃=59°F 34℃=93.2°F 4.源程序: main() {double pi=3.14159265358979,r=5; printf(“r=%lg A=%.10lf S=%.10lf\n“,r,2*pi*r,pi*pi*r);} 执行结果: r=5 A=31.4159265359 S=49.3480220054 5.源程序: #include “math.h“; main() {double a,b,c; scanf(“%lf%lf%lf“,&a,&b,&c); if (a+b》c&&a+c》b&&b+c》a) {double s=(a+b+c)/2; printf(“SS=%.10lf\n“,sqrt(s*(s-a)*(s-b)*(s-c)));} else printf(“Data error!“);} 执行结果: 4 5 6 SS=9.9215674165 6.源程序: main() {int a=3,b=4,c=5;float d=1.2,e=2.23,f=-43.56; printf(“a=%3d,b=%-4d,c=**%d\nd=%g\ne=%6.2f\nf=%-10.4f**\n“,a,b,c,d,e,f);} 7.源程序: main() {int a,b,c,m; scanf(“%d %d %d“,&a,&b,&c); m=a;a=b;b=c;c=m; printf(“%d %d %d\n“,a,b,c);} 执行结果: 5 6 7 6 7 5 8.源程序: main() {int a,b,c; scanf(“%d %d %d“,&a,&b,&c); printf(“average of %d,%d and %d is %.2f\n“,a,b,c,(a+b+c)/3.); 执行结果: 6 7 9 average of 6,7 and 9 is 7.33 9.不能。修改后的源程序如下: main() {int a,b,c,x,y; scanf(“%d %d %d“,&a,&b,&c); x=a*b;y=x*c; printf(“a=%d,b=%d,c=%d\n“,a,b,c); printf(“x=%d,y=%d\n“,x,y);} 6 第5章 选择结构程序设计 一、单项选择题(第113页) 1-4.DCBB 5-8.DABD二、填空题(第115页) 1.非0 0 2.k==0 3.if (abs(x)》4) printf(“%d“,x);else printf(“error!“); 4.if((x》=1&&x《=10||x》=200&&x《=210)&&x&1)printf(“%d“,x); 5.k=1 (原题最后一行漏了个d,如果认为原题正确,则输出k=%。) 6. 8! Right!11 7.$$$a=0 8.a=2,b=1三、编程题(第116页) 1.有错。正确的程序如下: main() {int a,b,c; scanf(“%d,%d,%d“,&a,&b,&c); printf(“min=%d\n“,a》b?b》c?c:b:a》c?c:a);} 2.源程序: main() {unsigned long a; scanf(“%ld“,&a); for(;a;printf(“%d“,a%10),a/=10);} 执行结果: 12345 54321 3.(1)源程序: main() {int x,y; scanf(“%d“,&x); if (x》-5&&x《0)y=x; if (x》=0&&x《5)y=x-1; if (x》=5&&x《10)y=x+1; printf(“%d\n“,y);} (2)源程序: main() {int x,y; scanf(“%d“,&x); if(x《10) if(x》-5) if(x》=0) if(x》=5)y=x+1; else y=x-1; else y=x; printf(“%d\n“,y);} (3)源程序: main() {int x,y; scanf(“%d“,&x); if(x《10) if(x》=5)y=x+1; else if(x》=0)y=x-1; else if(x》-5)y=x; printf(“%d\n“,y);} (4)源程序: main() {int x,y; scanf(“%d“,&x); switch(x/5) {case -1:if(x!=-5)y=x;break; case 0:y=x-1;break; case 1:y=x+1;} printf(“%d\n“,y);} 4.本题为了避免考虑每月的天数及闰年等问题,故采用面向对象的程序设计。 现给出Delphi源程序和C++ Builder源程序。 Delphi源程序: procedure TForm1.Button1Click(Sender: TObject); begin edit3.Text:=format(’%.0f天’,); end; procedure TForm1.FormCreate(Sender: TObject); begin Edit2.Text:=datetostr(now); button1click(form1) end; C++ Builder源程序: void __fastcall TForm1::Button1Click(TObject *Sender) { Edit3-》Text=IntToStr(StrToDate(Edit2-》Text)-StrToDate(Edit1-》Text))+“天“; } void __fastcall TForm1::FormCreate(TObject *Sender) { Edit2-》Text=Da) 我不是说叫你有问题另发帖子吗? 14 第9章 指 针 一、单项选择题(第276页) 1-5.DCDAC 6-10.CCABC 11-16.AABBB 16-20.DCDBD二、填空题(第278页) 1.①int * ②*z 2.*p++ 3.①’\0’ ②++ 4.①q=p+1 ②q《p+10 ③*q》max ④*q《min三、编程题(第280页) 7.源程序: main() {int i=0;char c; do{scanf(“%s“,&c);i++;} while(strcmp(c,“stop“)); printf(“%d\n“,i);} 执行结果: This car ran form Nanyang to Luoyang without a stop 10 9.源程序: main() {char s={0};int i; gets(s); for(i=0;s++); for(i=0;i《255;i++) if(c);} 执行结果: abcedabcdcd a=2 b=2 c=3 d=3 e=1 谭浩强C语言程序设计教程(第三版)》的课后习题答案编写一个程序,输入a、b、c三个值,输出其中最大值。 解: mian() {int a,b,c,max; printf(“请输入三个数a,b,c:\n”); scanf(“%d,%d,%d”,&a,&b,&c); max=a; if(max《b) max=b; if(max《c) max=c; printf(“最大数为:“%d”,max); } 急需《C语言程序设计教程》第三版(谭浩强\张基温)编著,高等教育出版社出版,课后习题答案!C程序设计(第三版)课后题答案!!!(2009-06-04 19:57:53)标签:教育 分类:学习 1.5请参照本章例题,编写一个C程序,输出以下信息: ************************** Very Good! ************************** 解: mian() {printf(“**************************”); printf(“\n”); printf(“Very Good!\n”); printf(“\n”); printf(“**************************”); } 1.6 编写一个程序,输入a、b、c三个值,输出其中最大值。 解: mian() {int a,b,c,max; printf(“请输入三个数a,b,c:\n”); scanf(“%d,%d,%d”,&a,&b,&c); max=a; if(max《b) max=b; if(max《c) max=c; printf(“最大数为:“%d”,max); } 第三章 3.6写出以下程序运行的结果。 main() {char c1=’a’,c2=’b’,c3=’c’,c4=’\101’,c5=’\116’; printf(“a%cb%c\tc%c\tabc\n”,c1,c2,c3); printf(“\t\b%c %c”,c4,c5); } 解: aaㄩbbㄩㄩㄩccㄩㄩㄩㄩㄩㄩabc AㄩN 3.7 要将“China“译成密码,译码规律是:用原来字母后面的第4个字母代替原来的字母.例如,字母“A“后面第4个字母是“E“.“E“代替“A“。因此,“China“应译为“Glmre“。请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为,’C’、’h’、’i’、’n’、’a’,经过运算,使c1、c2、c3、c4、c5分别变为’G’、’l’、’m’、’r’、’e’,并输出。 解: #include 《stdio.h》 main() { char c1=’C’,c2=’h’,c3=’i’,c4=’n’,c5=’a’; c1+=4; c2+=4; c3+=4; c4+=4; c5+=4; printf(“密码是%c%c%c%c%c\n“,c1,c2,c3,c4,c5); } 运行结果: 密码是Glmre 3.9求下面算术表达式的值。 (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)2.5 (2)3.5 3.10写出程序运行的结果。 main() {int i,j,m,n; i=8; j=10; m=++i; n=j++; printf(“%d,%d,%d,%d”,i,j,m,n); } 解: 9,11,9,10 3.12 写出下面表达式运算后a的值,设原来a=12。设a和n都已定义为整型变量。 (1)a+=a (2) a-=2 (3) a*=2+3 (4)a/=a+a (5) a%=(n%=2),n的值等于5 (6)a+=a-=a*=a 解: (1) 24 (2) 10 (3) 60 (4) 0 (5) 0 (6) 0 第四章 4.4若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1=’a’,c2=’b’。想得到以下输出格式和结果,请写出程序(包括定义变量类型和设计输出)。 a=_3_ _b=_4_ _c=_5 x=1.200000,y=2.400000,z=-3.600000 x+y=_3.600_ _y+z=-1.20_ _z+x=-2.40 c1=ˊaˊ_or_97(ASCII) c2=ˊbˊ_or_98(ASCII) main() {int a=3,b=4,c=5; long int u=51274,n=128765; float x=1.2,y=2.4,z=3.6; char c1=’a’,c2=’b’; printf(“a=%2d b=%2d c=%2d\n“,a,b,c); printf(“x=%f,y=%f,z=%f\n“,x,y,z); printf(“x+y=%5.2f y+z=%5.2f z+x=%5.2f\n“,x+y,y+z,z+x); printf(“u=%6ld n=%9ld\n“,u,n); printf(“%s %s %d%s\n“,“c1=’a’“,“or“,c1,“(ASCII)“); printf(“%s %s %d%s\n“,“c2=’a’“,“or“,c2,“(ASCII)“); } 4.7用scanf下面的函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=ˊAˊ,c2=ˊaˊ,问在键盘上如何输入? main() { int a,b;float x,y;char c1c2; scanf(“a=%d_b=%d“,&a,&b); scanf(“_x=%f_y=%e“,&x,&y); scanf(“_c1=%c_c2=%c“,&c1,&c2); } a=3_b=7 _x=8.5_y=71.82 _c1=A_c2=a 4.8设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。请编程序。 main() {float r,h,C1,Sa,Sb,Va,Vb; scanf(“%f,%f“,&r,&h); C1=2*3.14*r; Sa=3.14*r*r; Sb=4*Sa; Va=4*3.14*r*r*r/3; Vb=Sa*h; printf(“C1=%.2f\n“,C1); printf(“Sa=%.2f\nSb=%.2f\nVa=%.2f\nVb=%.2f\n“,Sa,Sb,Va,Vb); } 4.9输入一个华氏温度,要求输出摄氏温度。公式为 c=5(F-32)/9 输出要求有文字说明,取位2小数。 main() {float F,c; scanf(“%f“,&F); c=5*(F-32)/9; printf(“c=%.2f“,c); } 4.10编程序,用getchar函数读入两个字符给c1、c2,然后分别用函数和函数输出这两个字符。并思考以下问题:(1)变量c1、c2应定义为字符型或整形?抑二者皆可?(2)要求输出c1和c2值的ASCII码,应如何处理?用putchar函数还是printf函数?(3)整形变量与字符变量是否在任何情况下都可以互相代替?如: char c1,c2; 与 int c1,c2; 是否无条件的等价? #include“stdio.h“ main() {char c1,c2; c1=getchar();c2=getchar(); putchar(c1);putchar(’\n’);putchar(c2);putchar(’\n’); } #include“stdio.h“ main() {char c1,c2; c1=getchar();c2=getchar(); printf(“c1=%d c2=%d\n“,c1,c2); printf(“c1=%c c2=%c\n“,c1,c2); } 第五章 5.1 什么是算术运算?什么是关系运算?什么是逻辑运算? 解:略。 5.2 C语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”? 解:设有一个逻辑表达式,若其结果为“真”,则以1表示;若其结果为“假”,则以0表示。但是判断一个逻辑量的值时,以0代表“真”,以非0代表“假”。例如3&&5的值为“真”,系统给出3&&5的值为1。 5.3 写出下面各逻辑表达式的值。设a=3,b=4,c=5。 (1) a+b》c&&b==c (2) a||b+c&&b-c (3) !(a》b)&&!c||1 (4) !(x=a)&&(y=b)&&0 (5) !(a+b)+c-1&&b+c/2 解: (1) 0 (2) 1 (3) 1 (4) 0 (5) 1 5.4 有3个整数a、b、c,由键盘输入,输出其中最大的数。 解: 方法一 #include 《stdio.h》 main() { int a,b,c; printf(“请输入3个整数:“); scanf(“%d,%d,%d“,&a,&b,&c); if(a《b) if(b《c) printf(“max=%d\n“,c); else printf(“max=%d\n“,b); else if(a《c) printf(“max=%d\n“,c); else printf(“max=%d\n“,a); } 方法二:使用条件表达式,可以使程序更加简明、清晰。 程序如下: #include 《stdio.h》 main() { int a,b,c,temp,max; printf(“请输入3个整数:“); scanf(“%d,%d,%d“,&a,&b,&c); temp=(a》b)?a:b; max=(temp》c)?temp:c; printf(“3个整数的最大数是%d\n”,max); } 5.5 有一函数: 写一程序,输入x值,输出y值。 解: #include 《stdio.h》 main() {int x,y; printf(“输入x:“); scanf(“%d“,&x); if(x《1) { y=x; printf(“x=%3d, y=x=%d\n“,x,y); } else if (x《10) { y=2*x-1; printf(“x=%3d, y=2*x-1=%d\n“,x,y); } else { y=3*x-11; printf(“x=%3d, y=3*x-11=%d\n“,x,y); } } 5.6 给一个百分制成绩,要求输出等级’A’、’B’、’C’、’D’、’E’。90分以上为’A’,80~90分为’B’,70~79分为’C’,60分以下为’D’。 解: 程序如下: #include 《stdio.h》 main() { float score; char grade; case 2: printf(“请输入学生成绩:“); scanf(“%f“,&score); while(score》100||(score《0) { printf(“\n输入有误,请重新输入:“); scanf(“%f“,&score); } switch((int)(score/10)) { case 10: case 9: grade=’A’;break; case 8: grade=’B’;break; case 7: grade=’C’;break; case 6: grade=’D’;break; case 5: case 4: case 3: case 1: case 0: grade=’E’; } printf(“成绩是%5.1f,相应的等级是%c。\n“,score,grade); } 说明:对输入的数据进行检查,如小于0或大于100,要求重新输入。(int)(score/10)的作用是将 (score/10) 的值进行强制类型转换,得到一个整型值。 5.7 给定一个不多于5位的正整数,要求:① 求它是几位数;② 分别打印出每一位数字;③ 按逆序打印出各位数字。例如原数为321,应输出123。 解: #include 《stdio.h》 main() { long int num; int indiv,ten,hundred,thousand,ten_thousand,place; printf(“请输入一个整数(0~99999):“); scanf(“%ld“,#); if (num》9999) place=5; else if(num》999) place=4; else if(num》99) place=3; else if(num》9) place=2; else place=1; printf(“place =%d\n“, place); ten_thousand=num/10000; thousand=num/1000%10; hundred=num/100%10; ten=num%100/10; indiv=num%10; switch(place) { case 5: printf(“%d,%d,%d,%d,%d“,ten_thousand,thousand,hundred,ten,indiv); printf(“\n反序数字为;“); printf(“%d%d%d%d%d\n“,indiv,ten,hundred,thousand,ten_thousand); break; case 4: printf(“%d,%d,%d,%d“,thousand,hundred,ten,indiv); printf(“\n反序数字为:“); printf(“%d%d%d%d\n“,indiv,ten,hundred,thousand); break; case 3: printf(“%d,%d,%d“,hundred,ten,indiv); printf(“\n反序数字为:“); printf(“%d%d%d\n“,indiv,ten,hundred); break; case 2: printf(“%d,%d“,ten,indiv); printf(“\n反序数字为:“); printf(“%d%d\n“,indiv,ten); break; case 1: printf(“%d“,indiv); printf(“\n反序数字为:“); printf(“%d\n“,indiv); break; } } 5.8 企业发放的奖金根据利润提成。利润I低于或等于10万元时,奖金可提成10% ;利润高于10万元,低于20万元(100000《I≤200000)时,其中10万元按10%提成,高于10万元的部分,可提成7.5% ;200000《I≤400000时,其中20万元仍按上述办法提成(下同),高于20万元的部分按5%提成;400000《I≤600000时,高于40万元的部分按3%提成;600000〈I≤1000000时,高于60万的部分按1.5%提成;I》1000000时,超过100万元的部分按1%提成。从键盘输入当月利润I,求应发放奖金总数。要求:(1)用if语句编程序;(2)用switch语句编程序。 解:计算利润时,要特别注意不同利润的不同提成比例。例如,利润为15万元,其中有10万元按10%的比例提成,另外5万元则按7.5%提成。 (1) 用if语句编程序。 #include 《stdio.h》 main() { long i; float bonus,bon1,bon2,bon4,bon6,bon10; bon1=100000*0.1; bon2=bon1+100000*0.075; bon4=bon2+200000*0.05; bon6=bon4+200000*0.03; bon10=bon6+400000*0.015; printf(“请输入利润i:“); scanf(“%ld“,&i); if(i《=100000) bonus=i*0.1; else if(i《=200000) bonus=bon1+(i-100000)*0.075; else if(i《=400000) bonus=bon2+(i-200000)*0.05; else if(i《=600000) bonus=bon4+(i-400000)*0.03; else if(i《=1000000) bonus=bon6+(i-600000)*0.015; else bonus=bon10+(i-1000000)*0.01; printf(”奖金是%10.2f\n“,bonus); } 此题的关键在于正确写出每一区间的奖金计算公式。例如利润在10万元至20万时,奖金应由两部分组成:①利润为10万元时应得的奖金。即100000ⅹ0.1;②10万元以上部分应得的奖金。即(num-100000)ⅹ0.075。同理,20万~40万这个区间的奖金也应由两部分组成:①利润为20万元时应得的奖金,即100000ⅹ0.1ⅹ10万ⅹ0.075;②20万元以上部分应得的奖金,即(num-200000)ⅹ0.05。程序中先把10万、20万、40万、60万、100万各关键点的奖金计算出来,即bon1、bon2、bon4、bon6、hon10;然后再加上各区间附加部分的奖金。 (2) 用switch语句编程序。 输入利润i,确定相应的提成等级branch 根据branch确定奖金值 0 奖金=i*0.1 1 奖金=bon1+(i-105)*0.075 2 奖金=bon2+(i-2*105)*0.05 3 4 奖金=bon4+(i-4*105)*0.03 5 6 奖金=bon6+(i-6*105)*0.015 7 8 9 10 奖金=bon10+(i-106)*0.01 输出奖金 #include 《stdio.h》 main() { long i; float bonus, bon1, bon2, bon4, bon6, bon10; int c; bon1=100000*0.1; bon2=bon1+100000*0.075; bon4=bon2+200000*0.05; bon6=bon4+200000*0.03; bon10=bon6+400000*0.015; printf(“请输入利润i:“); scanf(“%ld“,&i); c=i/100000; if(c》10) c=10; switch(c) { case 0: bonus=1*0.1;break; case 1: bonus=bon1+(i-100000)*0.075;break; case 2 : case 3: bonus=bon2+(i-200000)*0.05; break; case 4: case 5: bonus=bon4+(i-400000)*0.03;break; case 6: case 7: case 8: case 9: bonus=bon6+(i-600000)*0.015;break; case 10: bonus=bon10+(i-1000000)*0.01; } printf(“奖金是%10.2f“,bonus); } 5.9 输入4个整数,要求按由大到小的顺序输出。 解:此题采用依次比较的方法排出其大小顺序。在学习了循环和数组以后,可以有更多的排序方法。 #include 《stdio.h》 main() { int t,a,b,c,d; printf(“请输入4个整数:“); scanf(“%d,%d,%d,%d“,&a,&b,&c,&d); printf(“\n a=%d,b=%d,c=%d,d=%d\n“,a,b,c,d); if(a》b) {t=a; a=b; b=t;} if(a》c) {t=a; a=c; c=t;} if(a》d) {t=a; a=d; d=t;} if(b》c) {t=a; b=c; c=t;} if(b》d) {t=b; b=d; d=t;} if(c》d) {t=c; c=d; d=t;} printf(“排序结果如下:\n“); printf(“%d, %d, %d, %d\n“,a,b,c,d); } 5.10 有4个圆塔,圆心分别为(2,2)、(-2,2)、(2,-2)、(-2,-2),圆半径为1。这4个塔的高度分别为10m。塔以外无建筑物。今输入任一点的坐标,求该点的建筑高度(塔外的高度为零)。 程序如下: #include 《stdio.h》 main() { int h=10; float x1=2,y1=2,x2=-2,y2=2,x3=-2,y3=-2,x4=-2,y4=-2,x,y,d1,d2,d3,d4; printf(“请输入一个点(x,y):“); scanf(“%f,%f“,&x,&y); d1=(x-x1)*(x-x1)+(y-y1)*(y-y1); d2=(x-x2)*(x-x2)+(y+y2)*(y+y2); d3=(x+x3)*(x+x3)+(y-y3)*(y-y3); d4=(x+x4)*(x-x4)*(y+y4)*(y+y4); if(d1》1&&d2》1&&d3》1&&d4》1) h=0; printf(“该点高度为%d\n“,h); } 第六章 第六章 循环控制 6.1输入两个正整数m和n,求其最大公约数和最小公倍数。 main() {long m,n,i=1,j,s; scanf(“%ld,%ld“,&m,&n); for(;i《=m&&i《=n;i++) {if(m%i==0&&n%i==0) s=i;} if(m》=n) j=m; else j=n; for(;!(j%m==0&&j%n==0);j++); printf(“s=%ld,j=%ld\n“,s,j); } 6.2输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。 #include“stdio.h“ main() {char c;int i=0,j=0,k=0,l=0; while((c=getchar())!=’\n’) {if(c》=65&&c《=90||c》=97&&c《=122) i++; else if(c》=48&&c《=57) j++; else if(c==32) k++; else l++;} printf(“i=%d,j=%d,k=%d,l=%d\n“,i,j,k,l); } 6.3求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字。例如:2+22+222+2222+22222(n=5),n由键盘输入。 #include“math.h“ main() {int n,sum=0,i=1,s=2; scanf(“%d“,&n); while(i《=n) {sum=sum+s;s=s+2*pow(10,i); i++;} printf(“sum=%d\n“,sum); } 6.4 求 ,(即求1!+2!+3!+4!+5!+…+20!) main() {int n,i=1;long sum=0,s=1; scanf(“%d“,&n); while(i《=n) {s=s*i;sum=sum+s;i++;} printf(“sum=%ld\n“,sum); } 6.5 求 main() {double i=1,j=1,k=1,s1=0,s2=0,s3=0,sum; for(;i《=100;i++) s1=s1+i; for(;j《=50;j++) s2=s2+j*j; for(;k《=10;k++) s3=s3+1/k; sum=s1+s2+s3; printf(“sum=%f\n“,sum); } 6.6打印出所有“水仙花数“,所谓“水仙花数“是指一个三位数,其各位数字立方和等于该本身。例如:153是一个水仙花数,因为153=1^3+5^3+3^3。 #include“math.h“ main() {int x=100,a,b,c; while(x》=100&&x《1000) {a=0.01*x;b=10*(0.01*x-a);c=x-100*a-10*b; if(x==(pow(a,3)+pow(b,3)+pow(c,3))) printf(“%5d“,x);x++;} } 6.7一个数如果恰好等于它的因子之和,这个数就称为“完数“。例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数“。编程序找出1000之内的所有完数,并按下面格式输出其因子: 6 its factors are 1、2、3 main() {int m,i,j,s; for(m=6;m《10000;m++) {s=1; for(i=2;i《m;i++) if(m%i==0) s=s+i; if(m-s==0) {printf(“%5d its fastors are 1 “,m);for(j=2;j《m;j++) if(m%j==0) printf(“%d “,j);printf(“\n“);} } } 或 main() {int m,i,j,s; for(m=6;m《1000;m++) {s=m-1; for(i=2;i《m;i++) if(m%i==0) s=s-i; if(s==0) {printf(“%5d its fastors are 1 “,m);for(j=2;j《m;j++) if(m%j==0) printf(“%d “,j);printf(“\n“);} } } 6.8有一分数序列: 求出这个数列的前20项之和。 main() {int i=1,n;double t,x=1,y=2,s,sum=0; scanf(“%ld“,&n); while(i《=n) {s=y/x;sum=sum+s;t=y;y=y+x;x=t;i++;} printf(“%f\n“,sum); } 6.9一球从100米高度自由下落,每次落地后返回原高度的一半,再落下。求它在第10次落地时共经过多少米?第10次反弹多高? main() {int i,n;double h=100,s=100; scanf(“%d“,&n); for(i=1;i《=n;i++) {h*=0.5;if(i==1) continue;s=2*h+s;} printf(“h=%f,s=%f\n“,h,s); } 6.10猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。 main() {int i=1,sum=0; for(;i《=10;sum=2*sum+1,i++); printf(“sum=%d\n“,sum); } 6.11用迭代法求 。求平方根的迭代公式为: 要求前后两次求出的得差的绝对值少于0.00001。 #include“math.h“ main() {float x0,x1,a; scanf(“%f“,&a); x1=a/2; do {x0=x1;x1=(x0+a/x0)/2;} while(fabs(x0-x1)》=0.00001); printf(“%.3f\n“,x1); } 6.12 用牛顿迭代法求方程在1.5附近的根。 main() {double x,y;x=1.5; do{y=2*x*x*x-4*x*x+3*x-6; x=x-y/(6*x*x-8*x+3);} while(y!=0); printf(“x=%.3f\n“,x); } 6.13用二分法求方程在(-10,10)之间的根 main() {double x1,x2,y1,y2;x1=-10;x2=10; do{y1=2*x1*x1*x1-4*x1*x1+3*x1-6; x1=x1-y1/(6*x1*x1-8*x1+3);} while(y1!=0); do {y2=2*x2*x2*x2-4*x2*x2+3*x2-6; x2=x2-y2/(6*x2*x2-8*x2+3);} while(y2!=0); printf(“x1=%.3f,x2=%.3f\n“,x1,x2); } 6.14打印以下图案 * * * * * * * * * * * * * * * * * * * * * * * * * #include“math.h“ main() {int i,j,k; for(i=0;i《=3;i++) {for(j=0;j《=2-i;j++) printf(“ “); for(k=0;k《=2*i;k++) printf(“*“); printf(“\n“); } for(i=0;i《=2;i++) {for(j=0;j《=i;j++) printf(“ “); for(k=0;k《=4-2*i;k++) printf(“*“); printf(“\n“); } } 第七章 第七章 数组 7.1 用筛法求之内的素数。 main() { int i,j,a; for(i=2;i《100;i++) { a=i; for(j=2;j《=i;j++) {if(j《i) if(a%j==0) break; if(a-j==0) printf(“%5d“,a); } } printf(“\n“); } 或 #include“math.h“ main() {static int i,j,k,a; for(i=2;i《100;i++) {a=i;k=sqrt(i); for(j=2;j《=a;j++) if(j《k) if(a%j==0) break; if(j》=k+1) printf(“%5d“,a); } printf(“\n“); } 7.2用选择法对10个整数从小到大排序。 main() { int i,j,a,t; for(i=0;i《10;i++) scanf(“%d“,&a); for(j=1;j《10;j++) for(i=0;i《=9-j;i++) if(a) {t=a=t;} for(i=0;i《10;i++) printf(“%5d“,a); } 或 main() {static int a,i,j,k,t; for(i=1;i《11;i++) scanf(“%d“,&a); for(j=1;j《10;j++) for(i=1;i《=10-j;j++) if (a) {t=a=t;} for(i=1;i《11;i++) printf(“%d“,a); printf(“\n“); } 7.3求一个3×3矩阵对角线元素之和。 main() {int i=0,j=0,a,s1,s2; for(i=0;i《3;i++) for(j=0;j《3;j++) scanf(“%d“,&a); s1=a; s2=a; printf(“s1=%d,s2=%d\n“,s1,s2); } 或 main() { static int i,j,s1,s2,a; for(i=1;i《=3;i++) for(j=1;j《=3;j++) scanf(“%d“,&a); s1=a; s2=a; printf(“%d,%d\n“,s1,s2); } 7.4已有一个已排好的数组今输入一个数要求按原来排序的规律将它插入数组中。 main() { static int a={1,7,8,17,23,24,59,62,101};int i,j,t; scanf(“%d“,&a); for(i=9;i》0;i--) if(a) {t=a=t;} for(i=0;i《10;i++) printf(“%5d“,a);printf(“\n“); } 或 main() { static int a={1,4,5,6,7}; int i,t,b; scanf(“%d“,&b); for(i=0;i《5;i++) {if(b《=a) {t=a=b;b=t;} printf(“%d “,a);} printf(“%d“,b); } 7.5将一个数组的值按逆序重新存放,例如,原来顺序为:8,6,5,4,1。要求改为:1,4,5,6,8。 main() { int i,b; for(i=0;i《10;i++) scanf(“%d“,&b); for(i=9;i》-1;i--) printf(“%5d“,b); printf(“\n“);} 7.6打印出以下杨辉三角形(要求打印出10行)。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 ∶ ∶ main() { static int m,n,k,b; b=1; for(m=1;m《15;m++) {for(n=1;n《=m;n++) { b; printf(“%-5d“,b);}printf(“\n“); } } } 或 main() { int i,j,n,k,a; static a={{1},{1},{1},{1},{1},{1},{1},{1},{1},{1}}; a=1; for(k=2,k《11;k++) for(i=2;i《=k;i++) for(j=2;j《=i;j++) a; for(k=1;k《11;k++) for(i=1;i《=k;i++) for(j=1;j《=i;j++) printf(“%d“,a); } 7.7 打印“魔方阵”,所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。例如,三阶魔方阵为 8 1 6 3 5 7 4 9 2 要求打印出由1~n2的自然数构成的魔方阵。 解: #include 《stdio.h》 main() { int a,i,i,k,p,m,n; p=1; while(p==1) { printf(“Enter n(n=1~15):“); scanf(“%d“,&n); if((n!=0)&&(n《=15)&&(n%2!=0)) p=0; } for(i=1;i《=n;i++) for(j=1;j《=n;j++) a=0 |
CopyRight 2018-2019 实验室设备网 版权所有 |