《北理乐学C语答案,最新(71页).doc》由会员分享,可在线阅读,更多相关《北理乐学C语答案,最新(71页).doc(71页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-北理乐学C语答案,最新-第 71 页7.入门 计算圆柱的侧面积及体积#includevoid main()double a,b;scanf(%lfn%lf,&a,&b);printf(s=%.2lf,v=%.2lfn,2*3.14*a*b,3.14*a*a*b);1. Hello world.输入:无输出:Hello world.程序:#includeint main()printf(Hello world.n);return 0;2. Welcome to Beijing.程序:#include int main()printf(Welcomen);printf(ton);printf(B
2、eijing.n);return 0;3. 求A+B输入:整数1 整数2输出:整数1+整数2=和程序: #includeint main()int a,b;scanf(%d,&a);scanf(%d,&b);printf(%d+%d=%dn,a,b,a+b);return 0;4. 求 x 的 3次方输入:一个整数。 输出:该整数的 3 次方值。程序: #includeint main() int x; scanf(%d,&x); printf(%dn,x*x*x); return 0;5. 学习打印你的第一个图形编写一个小程序,要求输出的是 4 行由*号组成的等腰三角形。程序: #inclu
3、de int main() printf( *n); printf( *n); printf( *n); printf(*n); return 0; 6. 一年级的算术题输入: 接受两个整数,每个整数之间使用空格分隔。例如输入格式为:123 444输出:分别输出按照整型数据进行 +、-、*、/、* 之后的运行结果。程序: #includeint main() int a,b; scanf(%d %d,&a,&b); printf(%d+%d=%dn,a,b,a+b); printf(%d-%d=%dn,a,b,a-b); printf(%d*%d=%dn,a,b,a*b); printf(%d
4、/%d=%dn,a,b,a/b); printf(%d%d=%dn,a,b,a%b); return 0;7. 求两个变量的最小值输入:两个整型数输出:两个整型值中的最小值程序: #includeint main() int a,b; scanf(%d%d,&a,&b); printf(min=%dn,ab?a:b); return 0;8. 判断三角形的形状 输入:三角型的3条边的长度(int型)。输出:等边三角形:equilateral triangle等腰三角形:isoceles triangle不构成三角形:non-triangle一般三角形:triangle程序: #includei
5、nt main() int a,b,c; scanf(%d%d%d,&a,&b,&c); if(a+bc&a+cb&b+ca) if (a=b&b=c&a=c) printf(equilateral triangle.n); else if(a=b|a=c|b=c) printf(isoceles triangle.n); else printf(triangle.n); else printf(non-triangle.n); return 0;9. 计算圆柱的侧面积及体积输入 :第一行输入圆柱的底面半径 r第二行输入圆柱的高 h 输出:s=,v= 要求 1. 所有变量都定义为双精度类型2.
6、 结果精确到小数点后两位程序: #includeint main() double r,h,s,v; scanf(%lf,&r); scanf(%lf,&h); s=2*PI*r*h; v=PI*r*r*h; printf(s=%.2f,v=%.2fn,s,v); return 0;10. 计算时钟的夹角背景: 钟面上的时针和分针之间的夹角总是在 0 180之间 ( 包括 0 和180 ) 。举例来说,在十二点的时候两针之间的夹角为 0 ,而在六点的时候夹角为180 ,在三点的时候为90 。本题要解决的是计算 12:00 到 11:59 之间任意一个时间的夹角。输入: 每组测试数据包含两个数字
7、:第一个数字代表小时 ( 大于 0 小于等于 12) ,第二个数字代表分 ( 在区间 0, 59 上 ) 。 输出: 对应每组测试数据,用常用格式显示时间以及这个时候时针和分针间的最小夹角,精确到小数点后一位。输出格式如下所示。程序: #include#includeint main() int h,m; float d1,d2,d; scanf(%d%d,&h,&m); d1=30*(h+m/60.0); d2=m*360/60.0; d=fabs(d1-d2); if(d180) d=360-d; printf(At %d:%d the angle is %.1f degrees.n,h,
8、m,d); return 0;11. 找出最大素数素数是指一个只能被1和它本身整除的数,在数论中占有重要的研究地位,在当代密码学中也被广泛应用。输入:取值范围输出:该范围内的最大素数程序: #include int main() int n,i,j; scanf(%d,&n); for(i=n;i=1;i-) for(j=2;ji;j+) if(i%j=0) break; if(j=i) printf(The max prime number is %d.n,i); break; 12. 求最后3位数值输入:a 和 n 的值。假设 a=150 。 输出:求 a 的 n 次方的最后 3 位数。程
9、序:#includeint main()long int s=1;int a,n,i=1,t=1;scanf(%d%d,&a,&n);if(n=0)printf(The last 3 numbers is 1.n);elsefor(i=1;i=0&t=10&t=100&t1000)printf(The last 3 numbers is %d.n,t);return 0;13. 贪吃的猴子有一只猴子,第一天摘了若干个桃子 ,当即吃了一半,但还觉得不过瘾 ,就又多吃了一个。第2天早上又将剩下的桃子吃掉一半,还是觉得不过瘾,就又多吃了两个。以后每天早上都吃了前一天剩下的一半加天数个(例如,第5天吃
10、了前一天剩下的一般加5个)。到第n天早上再想吃的时候,就只剩下一个桃子了。 输入:天数n输出:第一天的桃子个数程序: #includeint main()int i,n,amount=1;scanf(%d,&n);for(i=n-1;i=1;i-)amount=2*(amount+i);printf(The monkey got %d peachs in first day.n,amount);14. 黑色星期五在西方,星期五和数字13都代表着坏运气,两个不幸的个体最后结合成超级不幸的一天。所以,不管哪个月的十三日又恰逢星期五就叫“黑色星期五”。输入:年份输出:判断该年是否包含黑色星期五,如包
11、含,给出具体日期程序: #includeint main()int i,n=0,year,month12=0;int a13=0,13,44,73,104,134,165,195,226,257,287,318,348;int b13=0,13,44,72,103,133,164,194,225,256,286,317,347;scanf(%d,&year);for(i=1;i13;i+)if (year%4=0 & year%100!=0)|year%400=0)if(year-1+(year-1)/4)-(year-1)/100)+(year-1)/400)+ai)%7=5)n+;mont
12、hn=i;elseif(year-1+(year-1)/4)-(year-1)/100)+(year-1)/400)+bi)%7=5)n+;monthn=i;if(n=1)printf(There is %d Black Friday in year %d.n,n,year);printf(It is:n);printf(%d/%d/13n,year,month1);elseprintf(There are %d Black Fridays in year %d.n,n,year);printf(They are:n);for (i=1;i=n;i+)printf(%d/%d/13n,year
13、,monthi);return 0;15.你会输出一行星号?我们才开始上机,现在需要我们用最简单得办法,在一行中输出N个星号。输入:N值输出:一行中N个星号。程序: #includeint main()int i,n;scanf(%d,&n); for(i=1;i=n;i+) printf(*); printf(n);16. 计算SUM的值已知公式:SUM = 1 + 1/2 + 1/3 + 1/4 + . + 1/n 输入: n 输出: 表达式 sum 的值。结果保留 6 位小数。程序: #includeint main()int i,n;double sum=0;scanf(%d,&n);
14、for (i=1;i=n;i+)sum+=1.0/i;printf(sum=%.6lfn,sum);return 0;17. 寻找特殊整数请编写一个程序寻找一种特殊整数:一个 n 位的正整数等于其各位数字的n次方之和。例如:407=444+000+777。所以407就是一个特殊数。输入:正整数的位数n(n=6)。输出: 所有此n位特殊数。每个数占一行。若不存在符合条件的特殊数,则输出提示:“No output.”;若存在,则从小到大进行输出。说明:假设输入为4,在4位整数中,有3个4位的特殊数,则输出格式为(输出中的1111、2222和9999并不是4位特殊数,只是格式样例):11112222
15、9999程序: #include#include int main() int n,i,j,num,t,s=0,t1,flag=0; scanf(%d,&n); t=pow(10,n-1); for (i=t;i= 0)。输出:打印相应的空心倒三角形。图样参见测试用例。程序:#include #include int main() int i,j,h; scanf(%d,&h); for (i=1;i=h;i+) for(j=1;ji;j+) printf( ); if(i=1|i=h) for(j=1;j=2*(h-i)+1;j+) printf(*); printf(n); else pr
16、intf(*); for(j=1;j=2*(h-i)-1;j+) printf( ); printf(*n); return 0; 19. 空心字符菱形输入:菱型起始字母和菱形的高度。输出:参看测试用例,打印空心的由字符组成的菱形。程序:#include#include int main()int i,j,h;char ch;scanf(%c%d,&ch,&h);for (i=1;i=h;i+)for(j=1;j=h-i;j+)printf( );printf(%c,ch+i-1);for(j=1;j=2*i-3;j+)printf( );if(i=1) printf(n);continue;
17、printf(%cn,ch+i-1);for (i=h+1;i=2*h-1;i+)for(j=1;j=i-h;j+)printf( );printf(%c,ch+(2*h-1)-i);for(j=1;j=(2*h-1-i)*2-1;j+)printf( );if(i=2*h-1)printf(n);continue;printf(%cn,ch+(2*h-1)-i);return 0;20. 空心梯形输入行数 n 和首数字字符,在屏幕上输出由数字围起的高和下底宽度均 n 的空心梯形。 要求:输出的数字是循环的,即输出数字 9 后再输出的数字是 0。输入:行数n 和首字符输出:空心梯形程序: #i
18、nclude#include int main()int i,j,n,f,t=0;scanf(%d%d,&n,&f);t=f;for(j=1;j=3*n-2;j+)if(j=3*n-2)printf(%d,t);elseprintf(%d ,t);if(j(3*n-1)/2)if(t=9) t=0;elset+;else if(j=(3*n-1)/2&n%2=0) continue;elseif(t=0) t=9;else t-;printf(n);t=f;for (i=2;i=n;i+)for (j=1;j=2*(i-1);j+)printf( );if(i=n)for (j=1;j=(n+
19、1)/2;j+)if(t=9) t=0;printf(%d ,t);elseprintf(%d ,+t);for (j=1;j=n/2;j+)if(t=0&n%2!=0) t=9;else if(j=1&n%2=0)if(j=n/2) printf(%dn,t);elseprintf(%d ,t); continue; else t-;if(j=n/2)printf(%dn,t);elseprintf(%d ,t);elseif(t=9) printf(0);for(j=1;j=6*n-4*i-3;j+)printf( );printf(0n);t=0;elset+;printf(%d,t);
20、for(j=1;j=6*n-4*i-3;j+)printf( );printf(%dn,t);return 0;H1:计算通用产品代码(UPC)的校验位(选作)下面是一种计算校验位的方法:首先把第一位、第三位、第五位、第七位、第九位和第十一位数字相加。然后把第二位、第四位、第六位、第八位和第十位数字相加。接着把第一次加法结果乘以3后再加上第二次加法的结果。随后,再把上述结果减去1。减法后的结果除以10取余数。最后,用9减去上一步骤中得到的余数。现在以Morton碘盐为例,第一组数字的加法是0+4+0+0+0+3=7,而第二组数字的加法是2+6+0+1+0=9。把第一组加法值乘以3后再加上第二组
21、加法值得到的结果是30。再减去1,结果变为29。再把这个值除以10取余数为9。9在减去余数结果9,最终值为0。输入:每次输入三行数据,第一行是UPC的第一位数字,第二行是UPC的第一组五位数字,第三行是UPC的第二组五位数字。输出:UPC的校验位程序: #include#includeint main()int i,j,s1=0,s2=0,t;int a11;char b6,c6;scanf(%d,&a0);scanf(%s,b);scanf(%s,c);for (i=0,j=1;i5;i+,j+)aj=bi-48;for (i=0,j=6;i5;i+,j+)aj=ci-48;for (i=0
22、;i11;i+)if(i%2=0)s1+=ai;elses2+=ai;t=9-(s1*3+s2-1)%10;printf(%dn,t);return 0;H2:数制转换(选作)这个题目会给你两个不同的数字,它们不属于同一进制,要求你计算出当它们分别处于何种进制之中时,两个数字相等。譬如 12 和 5 ,在十进制下它们是不等的,但若 12 使用 3 进制而 5 使用六进制或十进制时,它们的值就是相等的。因此只要选择合适的进制, 12 和 5 就可以是相等的。 程序的输入是两个数字 M 和 N( 其十进制的值不超过 1000000000) ,它们的进制在 236 之间。对于十以下的数字,用 09
23、表示,而十以上的数字,则使用大写的 AZ 表示。 求出分别在 236 哪种进制下 M 和 N 相等。若相等则输出相应的进制,若不等则输出错误信息。当然了,对于多种可能成立的情况,找出符合要求的进制最小的一组就行了。信息的格式见测试用例。程序: #includeint main() long int pm=0,pn=0,s=0,t=0,w=1,e=1,p=0,q=0;int a30,b30;char m30,n30;int i,j,g,k,max1=0,max2=0,flag=0;scanf(%s%s,m,n);for(i=0;mi!=0;i+)if(mi=A&mi=0&mi=9)ai=mi-4
24、8;max1=max1(ai+1)?(ai+1):max1;max1=max1=A&nj=0&nj=9)bj=nj-48;max2=max2(bj+1)?(bj+1):max2;max2=max22?2:max2;pn=j;for(i=max1,j=max2;i=36&j=0;g-)p+=ag*w;w=w*i;for(k=pn-1;k=0;k-)q+=bk*e;e=e*j;if(pq) j+; else flag=1; printf(%s (base %d) = %s (base %d)n,m,i,n,j); break;if(flag=0) printf(%s is not equal to
25、 %s in any base 2.36n,m,n);return 0;21. 零钱换整钱 小明手中有一堆硬币,小红手中有若干张10元的整钱。已知 1 角的硬币厚度为 1.8mm,5 角的硬币厚 1.5mm, 1 元的硬币为 2.0mm 。小明和小红一起玩游戏,小红拿出若干张10元的纸币,小明要将 1 角的硬币放成一摞,将 5 角的硬币硬币放成一摞,将 1 元的硬币放成一摞,如果 3 摞硬币一样高,并且金额能够正好小红要求的面值,则双方可以进行交换,否则没有办法交换。输入:小红希望交换几张10元的纸币输出:1 角的数量,5 角的数量,1元的数量程序:三种硬币厚度公倍数:18mm(1角10个共1
26、元,5角12个共6元,1元9个共9元,要想3摞硬币一样高总钱数必须是16元(1+6+9)的公倍数)#include int main() int n,t,x,y,z;scanf(%d,&n);t=n*10;if(t%16!=0)printf(No change.n);else t=t/16; x=t*10; y=t*12; z=t*9; printf(%d,%d,%dn,x,y,z);return 0;22. 买东西.某商品有A、B、C三种品牌,各品牌的价格各不相同,其中A品牌的价格为每个5元, B品牌为每个3元,而C品牌为每3个1元。如果要用 M 元钱买 N 个该商品,要求每个商品至少买一个
27、,编程求各种品牌各能买多少个。输入:先后输入M(钱数)及N(商品个数)的实际数值输出:所有可能情况下可以购买的3种商品的个数,按A、B、C品牌的顺序输出,用逗号分隔。例如:2,30,68;表示A品牌商品2个、B品牌商品30个、C品牌商品68个。 要求:因为有多个结果,结果的排序按照A品牌的个数从少到多的顺序输出。程序:#include int main() int i,j,k;float m,n;scanf(%f%f,&m,&n);for(i=1;in-1;i+)for(j=1;j=n-1-i;j+)for(k=1;k=n-i-j;k+)if(i*5+j*3+k*1.0/3)=m&i+j+k=
28、n)printf(%d,%d,%dn,i,j,k);return 0;23. 谁能出线电视台举办“超级学生”才艺大赛,由于报名人数狂多,所以要先进行分组预赛。按规定,每10名学生为一个预赛小组,评委打出分数(0100分),各小组第一名可以进入下一轮;如果有多名学生得分相同都是第一名,则可同时进入下一轮。输入:按顺序给出一个小组10个人的最后得分(int)。输出:能够出线的学生序号(09)。程序: #include int main() int i,s10=0,max=0; for(i=0;i10;i+) scanf(%d,&si); if(maxsi) max=si;for(i=0;i10;i
29、+)if(si=max)printf(%dn,i);return 0;24. 寻找特殊偶数有一种特殊偶数,它每一位上的数字都两两不相同。我们现在需要找出四位数中某一区间内的这类偶数。输入所要寻找的四位偶数的范围。每组输入有两个数字:第一个数字是最小范围;第二个数字是最大范围。如果输入遇到0,输入结束。输出列出此范围内的所有特殊偶数,并且列出此范围内特殊偶数的个数。程序:#include#includemain()int i,j,k,a,b,c,d,m=0,e;for(e=0;e=0;e+)scanf(%d%d,&i,&j);if(i=0)|(j=0) break;else if(i9999|i
30、9999|j1000) printf(Errorn);else for(k=i;k=j;k+)if (k%2=1) continue;a=k/1000;b=(k%1000)/100;c=(k%100)/10;d=k%10;if(a=b)|(b=c)|(c=d) |(d=a)|(a=c)|(d=b) continue;printf(%d ,k);m+=1;printf(ncounter=%dn,m); m=0;输入N*N图形正方形的边长N,图形左上角的字母,输出由字母围成的空心正方形。输出的字母是顺时针连续的,且是循环的,即输出字母Z后输出字母A。注意在两个字母之间有一个空格。程序: #incl
31、ude int main() int n,i,j,t; char m; scanf(%d %c,&n,&m); for(i=0;in;i+) if(i=0) for(j=0;jn;j+) t=m+j;if(m90)|(m96&t122)t=t-26; if(j=n-1) printf(%cn,t); else printf(%c ,t); else if(i=n-1) for(j=0;jn;j+)t=m+3*n-3-j; if(m90)|(m96&t122) t=t-26; if(j=n-1) printf(%cn,t); else printf(%c ,t); else for(j=0;j2
32、*n-1;j+) if(j=0) t=m+4*n-4-i; if(m90)|(m96&t122) t=t-26; printf(%c,t); else if(j=2*n-2) t=m+n-1+i; if(m90)|(m96&t122) t=t-26; printf(%cn,t); else printf( );return 0;H3:猜数字(选作)有如下一组数字,其中每个数字都在 1 63 之间, 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 632 3 6 7 1
33、0 11 14 15 18 19 22 23 26 27 30 31 34 35 38 39 42 43 46 47 50 51 54 55 58 59 62 634 5 6 7 12 13 14 15 20 21 22 23 28 29 30 31 36 37 38 39 44 45 46 47 52 53 54 55 60 61 62 638 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 40 41 42 43 44 45 46 47 56 57 58 59 60 61 62 6316 17 18 19 20 21 22 23 24 25 26 2
34、7 28 29 30 31 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 6332 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 现在需要编写一个程序,当从键盘输入某数字在且仅在哪几行出现了,该程序可以“猜”出这个数字是几。输入:程序的输入是一串以空白符分开的数字,当输入 0 时表示输入结束。输出:输出猜到的数字。程序:#include int main() int a7,m,n=0,i,p=0; for (i=0;i7;i+) scanf(%d,&ai); n+; if (ai=0) break; scanf( ); for (m=1;m64;m+) p=0; for (i=0;i31&m48|m16) p=1;break; if (ai=6) if (m32) p=1;break; if (p=0)printf(%dn,m);break; return 0; H4:小蜜蜂(选作)一只小蜜蜂在如下图所示的蜂窝