《北理c语言上机答案全 .doc》由会员分享,可在线阅读,更多相关《北理c语言上机答案全 .doc(80页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1 Hello world让我们用C语言向世界问好。最早的程序基本是这个样子的:程序一:#include void main() printf(Hello world.n);程序二:#include int main() printf(Hello world.n); return 0;上面的程序你任意模仿一个,看看是否可以通过?如果你能通过这个简单的程序,那就让我们继续完成后面的习题吧。 输入:无输出:Hello world.程序实例1:#include void main() printf(Hello world.n); 结果:Hello world.程序实例2:#include int m
2、ain() printf(Hello world.n); return 0; 结果:Hello world.1. Welcome to Beijing.让我们来练习如何显示多行文字。输入:无输出:就是下面的那段文字。程序实例1:#includestdio.h int main() printf(Welcomen); printf(ton); printf(Beijing.n); return 0; 结果:WelcometoBeijing.程序实例2:#include void main() printf(WelcomentonBeijing.n); 结果:WelcometoBeijing.1
3、练习最简单的printf和scanfprintf函数和scanf函数是C语言中最常用的函数之一,下面让我们练习一下吧。输入:整型变量x的值。输出:输出整型变量x对应的十进制、八进制和十六进制形式。认真看看-1的八进制和十六进制输出,请想想是为什么。程序实例1:#includestdio.h main() int x; scanf(%d,&x); printf(x=%d,x=%o,x=%xn,x,x,x); 结果:输入:-1输出: x=-1,x=,x=ffffffff程序实例2:#include stdio.h void main() long x; scanf(%d,&x); printf(x
4、=%d,x=%o,x=%0xn,x,x,x); 结果:输入:292输出:x=292,x=444,x=1241 练习两个整数之间的运算背景:基本练习。输入:接受两个整数,每个整数之间使用空格分隔。例如输入格式为:123 444输出:分别输出进行+、-、*、/、*之后的运行结果。程序实例1:#include void main() int a,b,c,d,e,f,g; scanf(%d %d,&a,&b); printf(%d+%d=%dn,a,b,c=a+b); printf(%d-%d=%dn,a,b,d=a-b); printf(%d*%d=%dn,a,b,e=a*b); printf(%d
5、/%d=%dn,a,b,f=a/b); printf(%d%d=%dn,a,b,g=a%b); 结果:输入:103输出:10+3=1310-3=710*3=3010/3=310%3=1程序实例2:#include void main() int x1,x2,x3,x4,x5,a,b; scanf(%d %d,&a,&b); x1=a+b; x2=a-b; x3=a*b; x4=a/b; x5=a%b; printf(%d+%d=%dn%d-%d=%dn%d*%d=%dn%d/%d=%dn%d%d=%d,a,b,x1,a,b,x2,a,b,x3,a,b,x4,a,b,x5); 结果:输入:123
6、 444输出:123+444=567123-444=-321123*444=54612123/444=0123%444=1231 学习打印你的第一个图形背景:我们已经学习了printf函数,这里给出了一个小程序,它运行的结果是输出一个由星号(*)组成的4*4的正方形。程序如下:#include void main() printf(*n); printf(*n); printf(*n); printf(*n);要求:按照上面的程序范例,编写一个小程序,要求输出的是 4 行由*号组成的等腰三角形。输入:无。输出:指定图形。程序实例1:#include int main( void ) print
7、f( *n ); printf( *n ); printf( *n ); printf( *n ); return 0; 结果:输入:无输出:*程序实例2:#includestdio.h main() printf( *n); printf( *n); printf( *n); printf(*n); 结果:输入:无输出:*1 温度转换(06秋)背景: 经常出国旅行的驴友都知道,需要时时了解当地的气温状况,但不少国家采用了不同的温度计量单位:有些使用华氏温度标准(F),有些使用摄氏温度(C)。现在,请你根据温度转换公式设计一个温度转换程序,可以进行温度转换。如果输入摄氏温度,显示转换的华氏温度
8、;如果输入华氏温度,显示转换的摄氏温度。温度转换的公式为:F(C95)32 ;C(F32)59 ;式中F-华氏温度,C-摄氏温度。输入:第一个数据(1 或 2 )确定转换的类型:华氏转摄氏(1);摄氏转华氏(2); 第二个数据是相应需要转换的温度值。 输出:相应的转换后的温度值(保留小数点后 2 位)。程序实例1:#include void main() int a; float x,y; scanf(%d%f,&a,&x); if ( a=1 ) y=(x-32)*5.0/9.0; printf(The Centigrade is %.2fn,y); else if(a=2) y=(x*9.
9、0/5.0)+32; printf(The Fahrenheit is %.2fn,y); 结果:输入:1100输出:TheCentigradeis37.78输入:2-6.67输出:TheFahrenheitis19.99程序实例2:#include void main() float C;int a; scanf(%d %f,&a,&C); switch (a) case 1: printf(The Centigrade is %.2fn,(C-32)*5/9);break; case 2: printf(The Fahrenheit is %.2fn,(C*9/5)+32);break;
10、default: printf(errorn); 结果:输入:10输出:TheCentigradeis-17.78输入:288输出:TheFahrenheitis190.402 计算圆柱的侧面积及体积如果已知圆柱的底面半径 r ,以及高 h ,则可计算出圆柱的侧面积 s=2rh ,体积 v= r 2 h 。其中 =3. 输入:第一行输入圆柱的底面半径 r第二行输入圆柱的高 h 输出:s=,v= 要求 1. 所有变量都定义为双精度类型2. 结果精确到小数点后两位程序实例1:#include #include void main() double r,h,s,v,PAI=3.; scanf(%lf
11、n%lf,&r,&h); s=2*PAI*r*h; v=PAI*r*r*h; printf(s=%.2f,v=%.2fn,s,v); 结果:输入:28输出:s=100.53,v=100.53程序实例2:#includevoid main()double pi=3.; int r,h; scanf(%d,&r); scanf(%d,&h); printf(s=%5.2f,v=%5.2fn,2*pi*r*h,pi*r*r*h); 输入:510输出:s=314.16,v=785.403 计算时钟的夹角背景: 钟面上的时针和分针之间的夹角总是在 之间 ( 包括 和 ) 。举例来说,在十二点的时候两针之
12、间的夹角为 ,而在六点的时候夹角为 ,在三点的时候为 。本题要解决的是计算 12:00 到 11:59 之间任意一个时间的夹角。 输入:每组测试数据包含两个数字:第一个数字代表小时 ( 大于 0 小于等于 12) ,第二个数字代表分 ( 在区间 0, 59 上 ) 。 输出:对应每组测试数据,用常用格式显示时间以及这个时候时针和分针间的最小夹角,精确到小数点后一位。输出格式如下所示。程序实例1:#include void main() float x,y,z; scanf(%f %f,&x,&y); z=6*y-(30*x+y/2); if (z=-180) z+=360; else if(z
13、=180) z=360-z; else z=z; if (y10) printf(At %.0f:0%.0f the angle is %.1f degrees.,x,y,z); else printf(At %.0f:%.0f the angle is %.1f degrees.,x,y,z); 输入:120输出:At12:00theangleis0.0degrees.程序实例2:#include #include main() int x,y; float z; scanf(%d%d,&x,&y); z=fabs(30*x-(float)y*11/2); z=z180?360-z:z; i
14、f(y0。输入:三角型的3条边的长度(int型)。输出:等边三角形:equilateral triangle 等腰三角形:isoceles triangle 不构成三角形:non-triangle 一般三角形:triangle程序实例1:#include void main() int a,b,c; scanf(%d %d %d,&a,&b,&c); if(a+b=c|a+c=b|b+c=a) printf(non-triangle.); else if(a=b&b=c) printf(equilateral triangle.); else if(a=b&b!=c|a=c&c!=b|b=c&
15、c!=a) printf(isoceles triangle.) ; else printf(triangle.); 结果:输入:222输出:equilateraltriangle.程序实例2:#includevoid main() int a,b,c; scanf(%d%d%d,&a,&b,&c); if(a=b&b=c&c=a) printf(equilateral triangle.n); elseif(a+bc&a+cb&b+ca) (a=b|b=c|c=a)?printf(isocelestriangle.n):printf(triangle.n); else printf(non-
16、triangle.n); 结果:输入:131输出:non-triangle.5 求解一元二次方程初中的时候我们就会求解一元二次方程了,下面让我们来教计算机如何求解。输入 a,b,c ,就一元二次方程 ax+bx+c=0 的根。 输入:假设 a,b,c均int。输出:要求输出的根为 double 型,保留 6 位小数。程序实例1:#include stdio.h #include math.h void main() int a,b,c,a2; double x1=0,x2=0,q; scanf(%d%d%d,&a,&b,&c); q=b*b-4*a*c; a2=2*a; if(a=0) if(
17、b=0) printf(Input error!n); else printf(x=%.6fn,-c*1.0/b); else if(q0) printf(x1=%.6fnx2=%.6fn,(-b+sqrt(q)/a2,(-b-sqrt(q)/a2); else if(q=0) printf(x1=x2=%.6fn,-b*1.0/a2); else if(q0) if(b=0) printf(x1=%.6finx2=%.6fin,sqrt(-q)/a2,-sqrt(-q)/a2); else printf(x1=%.6f+%.6finx2=%.6f-%.6fi,-b*1.0/a2,sqrt(-
18、q)/a2,-1.0*b/a2,sqrt(-q)/a2); 结果:输入: 0 0 0输出:Inputerror!输入:2 2 2输出:x1=-0.500000+0.866025ix2=-0.500000-0.866025i程序实例2:#include#include void main() double a,b,c,d; scanf(%lf%lf%lf,&a,&b,&c); d=b*b-4*a*c; if(a=0&b=0) printf(Input error!n); else if(a=0) printf(x=%lfn,c=0?0:-c/b); else if(d=0) printf(x1=
19、x2=%.6lfn,b=0?0:-b/(2*a); else if(d0) printf(x1=%lfnx2=%lfn,(-b+sqrt(d)/(2*a),(-b-sqrt(d)/(2*a); else if(b=0) printf(x1=%lfinx2=-%lfin,sqrt(-d)/(2*a),sqrt(-d)/(2*a); else printf(x1=%lf+%lfinx2=%lf-%lfin,-b/(2*a),sqrt(-d)/(2*a),-b/(2*a),sqrt(-d)/(2*a); 结果: 输入:10 0 0输出:x1=x2=0.000000你会输出一行星号吗?(本题不记分噢)
20、我们才开始上机,现在需要我们用最简单得办法,在一行中输出N个星号。输入:N值输出:一行中N个星号。程序实例1:#includevoid main() int n,i;scanf(%d,&n); for(i=1;i=n;i+) printf(*);printf(n); 结果:输入:4输出:*输入:8输出: *6 计算SUM的值已知公式:SUM = 1 + 1/2 + 1/3 + 1/4 + . + 1/n输入:n 输出:表达式 sum 的值。结果保留 6 位小数。 程序实例1:#include void main() int n,k; double sum; scanf(%d,&n); sum=
21、1.0; for(k=2;k=n;k+) sum=sum+1.0/k; printf(sum=%.6lfn,sum); 结果:输入:1输出:sum=1.000000程序实例2:#includevoid main() double sum,i; int n; scanf(%d,&n); for(i=1,sum=0;i=n;i+) sum=sum+1/i; printf(sum=%.6lf,sum); 结果:输入: 3输出:sum=1.8333337 贪吃的猴子有一只猴子,第一天摘了若干个桃子,当即吃了一半,但还觉得不过瘾,就又多吃了一个。第2天早上又将剩下的桃子吃掉一半,还是觉得不过瘾,就又多吃
22、了两个。以后每天早上都吃了前一天剩下的一半加天数个(例如,第5天吃了前一天剩下的一般加5个)。到第n天早上再想吃的时候,就只剩下一个桃子了。输入:天数n输出:第一天的桃子个数程序实例1:#include void main() int n,i,y; scanf( %d,&n ); for( i=n-1, y=1 ; i=1; i-) y = 2*(i+y); if( y=1 )printf( The monkey got %d peach in first day.,y ); if( y!=1 )printf(The monkey got %d peachs in first day.,y);
23、 结果:输入:3输出:Themonkeygot14peachsinfirstday.8 求最后3位数值中学时我们就会求一个数的 n 次方了,但计算机不会,请你来编写一个程序吧。由于计算机比较“笨”,所以我们编写程序的功能不用太强,只要能算出 a 的 n 次方的最后 3 位数就可以了。 输入:和 n 的值。假设 a=150 。 输出:求 a 的 n 次方的最后 3 位数。程序实例1:#includevoid main() int i,x,y,m=1; scanf(%d %d,&x,&y); for(i=1;i=y;i+) m=m*x%1000; if(m=0)printf(The last 3
24、numbers is 000.n);elseprintf(The last 3 numbers is %d.n,m); 结果: 输入:100输出:Thelast3numbersis1.程序实例2:#includevoid main() int a,n,i,s; scanf(%d%d,&a,&n); i=1; s=1; while(i=n) s=s*a%1000; i+; if(n!=0) printf(The last 3 numbers is %0.3d.n,s); else printf(The last 3 numbers is %d.n,s); 结果:输入:10010输出:Thelas
25、t3numbersis000.9 分数的四则运算在小学时我们就学习了分数的四则运算,即对两个分数进行加、减、乘、除等运算,现在我们尝试下用C语言来实现。输入:分数1 操作符 分数2输出:计算结果要求:计算结果使用分数表示,并且为最简化。例如结果为2/6,则被简化为1/3程序实例1:#include int main() int a,b,c,d,e,f,x,y,z; char g; scanf(%d/%d %c %d/%d,&a,&b,&g,&c,&d); if(g=+) e=a*d+b*c;f=b*d; if(g=-) e=a*d-b*c;f=b*d; if(g=*) e=a*c;f=b*d;
26、 if(g=/) e=a*d;f=b*c; x=e; y=f; z=x%y; if(z!=0) while(z!=0) x=y;y=z;z=x%y; e=e/y; f=f/y; if(f0) printf(%d/%d %c %d/%d = %d/%d,a,b,g,c,d,e,f); if(f0) printf(%d/%d %c %d/%d = %d/%d,a,b,g,c,d,-e,-f); else printf(%d/%d %c %d/%d = %d,a,b,g,c,d,e/f); printf(n); return 0; 结果:输入:1/3+1/2输出:1/3+1/2=5/6程序实例2:#
27、includemath.h #include void main() int a,b,c,d,m,n,x,y,v;char z; scanf(%d/%d %c %d/%d,&a,&b,&z,&c,&d); switch (z) case(+):m=a*d+b*c;n=b*d;break; case(-):m=a*d-b*c;n=b*d;break; case(*):m=a*c;n=b*d;break; case(/):m=a*d;n=b*c;break; x=fabs(m);y=fabs(n);v=x%y; while(v!=0) x=y;y=v;v=x%y; if(m/y=0) printf
28、(%d/%d %c %d/%d = 0n,a,b,z,c,d); else if(n/y=1) printf(%d/%d %c %d/%d = %dn,a,b,z,c,d,m/y); else printf(%d/%d %c %d/%d = %d/%dn,a,b,z,c,d,m/y,n/y); 结果: 输入:1/2+2/6输出:1/2+2/6=5/610 黑色星期五在西方,星期五和数字13都代表着坏运气,两个不幸的个体最后结合成超级不幸的一天。所以,不管哪个月的十三日又恰逢星期五就叫“黑色星期五”。输入:年份输出:判断该年是否包含黑色星期五,如包含,给出具体日期程序实例1:#include s
29、tdio.h void main() int year,month,day,i,k=0,ruinian,n;int a12=6,2,2,5,0,3,5,1,4,6,2,4;int b12=6,2,3,6,1,4,6,2,5,0,3,5,c12=0; scanf (%d,&year); n=(year%400)*365+(year%400+3)/4-(year%400)/100+5)%7; ruinian=(year%4=0 & year%100!=0 | year%400=0); for (i=0;i12;i+) if (ruinian=1)?bi:ai)+n)%7=5) ci=1; k+;
30、printf (There %s %d Black %s in year %d.n%s:n,(k=1)?is:are,k,(k=1)?Friday:Fridays,year,(k=1)?It is:They are); for (i=0;i12;i+) if (ci=1) printf (%d/%d/13n,year,i+1); 结果:输入:2006输出:Thereare2BlackFridaysinyear2006.Theyare:2006/1/132006/10/13程序实例2:#includestdio.h void main() int m,y,k=0,i,w,a6; scanf(%d
31、,&y); for(m=1;m=2;m+) w=(13+2*(m+12)+3*(m+13)/5+y-1+(y-1)/4-(y-1)/100+(y-1)/400)%7; if(w=4) ak=m;k+; for(m=3;m13;m+) w=(13+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7; if(w=4) ak=m;k+; if(k=1) printf(There is 1 Black Friday in year %d.nIt is:n%d/%d/13n,y,y,a0); else printf(There are %d Black Fridays in year
32、%d.n,k,y); printf(They are:n); for(i=0;ik;i+) printf(%d/%d/13n,y,ai); 结果:输入:2007输出:There are 2 Black Fridays in year 2007They are:2007/4/132007/7/1311 百马百担有100匹马,驮100担货,其中大马驮3担,中马驮2担,两匹小马驮1担输入:无输出:大、中、小马的个数,用逗号分隔。例如:2,30,68说明:大、中、小马都必须有,结果中要列出所有的组合可能每个结果占一行 因为有多个结果,结果的排序按照大马的个数从少到多程序实例1:#include voi
33、d main() int bigHorse,middleHorse,smallHorse; bigHorse=0; while(bigHorse=33) middleHorse=1; while(middleHorse50) smallHorse=100-bigHorse-middleHorse; if(3*bigHorse+2*middleHorse+smallHorse/2=100&smallHorse%2=0) printf(%d,%d,%dn,bigHorse,middleHorse,smallHorse); middleHorse+; bigHorse+; 结果: 输入:无输出:2,
34、30,685,25,708,20,7211,15,7414,10,7617,5,78程序实例2#includevoid main() int a,b,c; for(a=0;a=33;a+) for(b=1;b50;b+) c=100-a-b; if(3*a+2*b+c/2=100&c%2=0) printf(%d,%d,%dn,a,b,c); 结果:输入:无输出:2,30,685,25,708,20,7211,15,7414,10,7617,5,7812 零钱换整钱小明去银行存钱,拿了一堆硬币。已知 1 角的硬币厚度为 1.8mm , 5 角的硬币厚 1.5mm , 1 元的硬币为 2.0mm 。小明将 1 角的硬币放成一摞,将 5 角的硬币硬币放成一摞,将 1 元的硬币放成一摞,发现 3 摞硬币一样高。银行正好把这些