1、 《北理工 C语言答案》
1 Hello world
让我们用C语言向世界问好。
最早的程序基本是这个样子的:
程序一:
#include
2、完成后面的习题吧。
输入:无
输出:Hello world.
程序实例1:
#include
3、显示多行文字。
输入:无
输出:就是下面的那段文字。
程序实例1:
#include"stdio.h"
int main()
{
printf("Welcome\n");
printf("to\n");
printf("Beijing.\n");
return 0;
}
结果:
Welcome
to
Beijing.
程序实例2:
#include
4、} 结果: Welcome to Beijing. 1 练习最简单的printf和scanf printf函数和scanf函数是C语言中最常用的函数之一,下面让我们练习一下吧。 输入:整型变量x的值。 输出:输出整型变量x对应的十进制、八进制和十六进制形式。 认真看看-1的八进制和十六进制输出,请想想是为什么。 程序实例1: #include"stdio.h" main() {int x; scanf("%d",&x); printf("x=%d,x=%o,x=%x\n",x,x,x); } 结果: 输入:-1 输出:
5、 x=-1,x=37777777777,x=ffffffff 程序实例2: #include "stdio.h" void main() { long x; scanf("%d",&x); printf("x=%d,x=%o,x=%0x\n",x,x,x); } 结果: 输入:292 输出:x=292,x=444,x=124 1 练习两个整数之间的运算 背景:基本练习。 输入:接受两个整数,每个整数之间使用空格分隔。例如输入格式为:123 444 输出:分别输出进行+、-、*、/、*之后的运行结果。
6、
程序实例1:
#include
7、
10+3=13
10-3=7
10*3=30
10/3=3
10%3=1
程序实例2:
#include
8、x5);
}
结果:
输入:123 444
输出:
123+444=567
123-444=-321
123*444=54612
123/444=0
123%444=123
1 学习打印你的第一个图形
背景:
我们已经学习了printf函数,这里给出了一个小程序,它运行的结果是输出一个由星号(*)组成的4*4的正方形。
程序如下:
#include
9、 printf("****\n");
}
要求:
按照上面的程序范例,编写一个小程序,要求输出的是 4 行由*号组成的等腰三角形。
输入:无。
输出:指定图形。
程序实例1:
#include
10、 ******* 程序实例2: #include"stdio.h" main() { printf(" *\n"); printf(" ***\n"); printf(" *****\n"); printf("*******\n"); } 结果: 输入:无 输出: * *** ***** ******* 1 温度转换(06秋) 背景: 经常出国旅行的驴友都知道,需要时时了解当地的气温状况,但不少国家采用了不同的温度计量单位:有些使用华氏温度标准(F),有些使用摄氏温度(C)。现在,请你
11、根据温度转换公式设计一个温度转换程序,可以进行温度转换。如果输入摄氏温度,显示转换的华氏温度;如果输入华氏温度,显示转换的摄氏温度。
温度转换的公式为:F=(C×9/5)+32 ;C=(F-32)×5/9 ;式中F--华氏温度,C--摄氏温度。
输入:第一个数据(1 或 2 )确定转换的类型:华氏转摄氏(1);摄氏转华氏(2);
第二个数据是相应需要转换的温度值。
输出:相应的转换后的温度值(保留小数点后 2 位)。
程序实例1:
#include
12、t x,y; scanf("%d%f",&a,&x); if ( a==1 ) { y=(x-32)*5.0/9.0; printf("The Centigrade is %.2f\n",y); } else if(a==2) { y=(x*9.0/5.0)+32; printf("The Fahrenheit is %.2f\n",y); } } 结果:
13、输入:1 100
输出:The Centigrade is 37.78
输入:2 -6.67
输出:The Fahrenheit is 19.99
程序实例2:
#include
14、2f\n",(C*9/5)+32);break; default: printf("error\n");} } 结果: 输入:1 0 输出:The Centigrade is -17.78 输入:2 88 输出:The Fahrenheit is 190.40 2 计算圆柱的侧面积及体积 如果已知圆柱的底面半径 r ,以及高 h ,则可计算出圆柱的侧面积 s=2πrh ,体积 v=π r 2 h 。其中 π=3.1415926 输入:第一行输入圆柱的底面半径 r 第二行输入圆柱的高 h 输出:s=< 圆柱的侧面积 >,v=< 圆柱的体积 >
15、要求
1. 所有变量都定义为双精度类型
2. 结果精确到小数点后两位
程序实例1:
#include
16、lude
17、六点的时候夹角为 ,在三点的时候为 。本题要解决的是计算 12:00 到 11:59 之间任意一个时间的夹角。
输入:每组测试数据包含两个数字:第一个数字代表小时 ( 大于 0 小于等于 12) ,第二个数字代表分 ( 在区间 [0, 59] 上 ) 。
输出:对应每组测试数据,用常用格式显示时间以及这个时候时针和分针间的最小夹角,精确到小数点后一位。输出格式如下所示。
程序实例1:
#include
18、 z=6*y-(30*x+y/2); {if (z<=-180) z+=360; else if(z<0) z=-z; else if (z>=180) z=360-z; else z=z;} if (y<10) printf("At %.0f:0%.0f the angle is %.1f degrees.",x,y,z); else printf("At %.0f:%.0f the angle is %.1f
19、 degrees.",x,y,z);
}
输入:12 0
输出:At 12:00 the angle is 0.0 degrees.
程序实例2:
#include
20、10) printf("At %d:0%d the angle is %.1f degrees.\n",x,y,z); else printf("At %d:%d the angle is %.1f degrees.\n",x,y,z); } 结果: 输入:12 30 输出:At 12:30 the angle is 165.0 degrees. 4 判断三角形的形状 要求: 输入三角型的三条边,判断三角形的形状。假设输入的三边边长均>0。 输入:三角型的3条边的长度(int型)。 输出:等边三角形:equilateral triangl
21、e
等腰三角形:isoceles triangle
不构成三角形:non-triangle
一般三角形:triangle
程序实例1:
#include
22、teral triangle.");
else if(a==b&&b!=c||a==c&&c!=b||b==c&&c!=a)
printf("isoceles triangle.") ;
else printf("triangle.");
}
结果:
输入:2 2 2
输出:equilateral triangle.
程序实例2:
#include
23、c); if(a==b&&b==c&&c==a) printf("equilateral triangle.\n"); elseif(a+b>c&&a+c>b&&b+c>a) (a==b||b==c||c==a)?printf("isocelestriangle.\n"):printf("triangle.\n"); else printf("non-triangle.\n"); } 结果: 输入:1 3 1 输出:non-triangle. 5 求解一元二次方程 初中的时候我们就会求
24、解一元二次方程了,下面让我们来教计算机如何求解。输入 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
25、a; if(a==0) { if(b==0) printf("Input error!\n"); else printf("x=%.6f\n",-c*1.0/b); } else if(q>0) printf("x1=%.6f\nx2=%.6f\n",(-b+sqrt(q))/a2,(-b-sqrt(q))/a2); else if(q==0) printf("x1=x2=%.
26、6f\n",-b*1.0/a2); else if(q<0) { if(b==0) printf("x1=%.6fi\nx2=%.6fi\n",sqrt(-q)/a2,-sqrt(-q)/a2); else printf("x1=%.6f+%.6fi\nx2=%.6f-%.6fi",-b*1.0/a2,sqrt(-q)/a2,-1.0*b/a2,sqrt(-q)/a2); } } 结果: 输入: 0 0 0 输出:Input error! 输入:2 2 2 输出: x1=-0.5000
27、00+0.866025i
x2=-0.500000-0.866025i
程序实例2:
#include
28、c/b); else if(d==0) printf("x1=x2=%.6lf\n",b==0?0:-b/(2*a)); else if(d>0) printf("x1=%lf\nx2=%lf\n",(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)); else if(b==0) printf("x1=%lfi\nx2=-%lfi\n",sqrt(-d)/(2*a),sqrt(-d)/(2*a)); else printf("x1=%lf+%lfi\n
29、x2=%lf-%lfi\n",-b/(2*a),sqrt(-d)/(2*a),-b/(2*a),sqrt(-d)/(2*a));
}
结果:
输入:10 0 0
输出:x1=x2=0.000000
你会输出一行星号吗?(本题不记分噢)
我们才开始上机,现在需要我们用最简单得办法,在一行中输出N个星号。
输入:N值
输出:一行中N个星号。
程序实例1:
#include
30、
printf("\n");
}
结果:
输入:4
输出:****
输入:8
输出: ********
6 计算SUM的值
已知公式:SUM = 1 + 1/2 + 1/3 + 1/4 + ... + 1/n
输入:n
输出:表达式 sum 的值。结果保留 6 位小数。
程序实例1:
#include
31、 sum=sum+1.0/k;
printf("sum=%.6lf\n",sum);
}
结果:
输入:1
输出:sum=1.000000
程序实例2:
#include
32、
结果:
输入: 3
输出:sum=1.833333
7 贪吃的猴子
有一只猴子,第一天摘了若干个桃子 ,当即吃了一半,但还觉得不过瘾 ,就又多吃了一个。第2天早上又将剩下的桃子吃掉一半,还是觉得不过瘾,就又多吃了两个。以后每天早上都吃了前一天剩下的一半加天数个(例如,第5天吃了前一天剩下的一般加5个)。到第n天早上再想吃的时候,就只剩下一个桃子了。
输入:天数n
输出:第一天的桃子个数
程序实例1:
#include
33、 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); } 结果: 输入:3 输出:The monkey got 14 peachs in first day. 8 求最后3位数值 中学时我们就会求一个数的 n 次方了,但计算机不会,请你来编写一个程序
34、吧。由于计算机比较“笨”,所以我们编写程序的功能不用太强,只要能算出 a 的 n 次方的最后 3 位数就可以了。
输入:和 n 的值。假设 a<=150 。
输出:求 a 的 n 次方的最后 3 位数。
程序实例1:
#include
35、t 3 numbers is 000.\n");
else
printf("The last 3 numbers is %d.\n",m);
}
结果:
输入:10 0
输出:The last 3 numbers is 1.
程序实例2:
#include
36、 if(n!=0) {printf("The last 3 numbers is %0.3d.\n",s); } else {printf("The last 3 numbers is %d.\n",s); } } 结果: 输入:100 10 输出:The last 3 numbers is 000. 9 分数的四则运算 在小学时我们就学习了分数的四则运算,即对两个分数进行加、减、乘、除等运算,现在我们尝试下用C语言来实现。 输入:分数1 操作符 分数2 输出:计算结果 要求: 计算结果使用分数表示,并且为最简化
37、例如结果为2/6,则被简化为1/3
程序实例1:
#include
38、 { 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(f>0) printf("%d/%d %c %d/%d = %d/%d",a,b,g,c,d,e,f); if(f<0) printf("%d/%d %c %d/%d = %d/%d",a,b,g,c,d,-e,-f);
39、
}
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:
#include"math.h"
#include
40、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("%d/%d %
41、c %d/%d = 0\n",a,b,z,c,d); else if(n/y==1) printf("%d/%d %c %d/%d = %d\n",a,b,z,c,d,m/y); else printf("%d/%d %c %d/%d = %d/%d\n",a,b,z,c,d,m/y,n/y); } 结果: 输入:1/2+2/6 输出:1/2+2/6=5/6 10 黑色星期五 在西方,星期五和数字13都代表着坏运气,两个不幸的个体最后结合成超级不幸的一天。所以,不管哪个月的十三日又恰逢星期五就叫“黑色星期五”。 输入
42、年份 输出:判断该年是否包含黑色星期五,如包含,给出具体日期 程序实例1: #include "stdio.h" void main() { int year,month,day,i,k=0,ruinian,n; int a[12]={6,2,2,5,0,3,5,1,4,6,2,4}; int b[12]={6,2,3,6,1,4,6,2,5,0,3,5},c[12]={0}; scanf ("%d",&year); n=((year%400)*365+(year%400+3)/4-(year%400)/100+5)%7; ruin
43、ian=(year%4==0 && year%100!=0 || year%400==0); for (i=0;i<12;i++) if ((((ruinian==1)?b[i]:a[i])+n)%7==5) { c[i]=1; k++; } 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
44、 (i=0;i<12;i++) if (c[i]==1) printf ("%d/%d/13\n",year,i+1); } 结果: 输入:2006 输出: There are 2 Black Fridays in year 2006. They are: 2006/1/13 2006/10/13 程序实例2: #include"stdio.h" void main() { int m,y,k=0,i,w,a[6]; scanf("%d",&y); for(m=1;m<=2;m++)
45、 { w=(13+2*(m+12)+3*(m+13)/5+y-1+(y-1)/4-(y-1)/100+(y-1)/400)%7; if(w==4) { a[k]=m;k++;} } for(m=3;m<13;m++) { w=(13+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7; if(w==4) {a[k]=m;k++;} } if(k==1) { printf("There is 1 Black Frida
46、y in year %d.\nIt is:\n%d/%d/13\n",y,y,a[0]);}
else {printf("There are %d Black Fridays in year %d.\n",k,y);
printf("They are:\n");
for(i=0;i 47、7/4/13
2007/7/13
11 百马百担
有100匹马,驮100担货,其中大马驮3担,中马驮2担,两匹小马驮1担
输入:无
输出:大、中、小马的个数,用逗号分隔。例如:2,30,68
说明:大、中、小马都必须有,结果中要列出所有的组合可能每个结果占一行
因为有多个结果,结果的排序按照大马的个数从少到多
程序实例1:
#include 48、gHorse<=33)
{
middleHorse=1;
while(middleHorse<50)
{
smallHorse=100-bigHorse-middleHorse;
if(3*bigHorse+2*middleHorse+smallHorse/2==100&&smallHorse%2==0)
printf("%d,%d,%d\n",bigHorse,middleHorse,smallHors 49、e);
middleHorse++;
}
bigHorse++;
}
}
结果:
输入:无
输出:
2,30,68
5,25,70
8,20,72
11,15,74
14,10,76
17,5,78
程序实例2
#include 50、 {
c=100-a-b;
if(3*a+2*b+c/2==100&&c%2==0)
printf("%d,%d,%d\n",a,b,c);
}
}
}
结果:
输入:无
输出:
2,30,68
5,25,70
8,20,72
11,15,74
14,10,76
17,5,78
12 零钱换整钱
小明去银行存钱,拿了一堆硬币。已知 1 角的硬币厚度为 1.8mm , 5 角的硬币厚 1.5mm , 1 元






