1-1 圆柱体的表面积
输入底面半径r和高h,输出圆柱体的表面积,保留3位小数,格式见样例。
样例输入:
3.5 9
样例输出:
Area = 274.889
【分析】
圆柱体的表面积由3部分组成:上底面积、下底面积和侧面积。
由于上下底面积相等, 完整的公式可以写成:表面积=底面积×2+侧面积。
根据几何知识,底面积=πr^2,侧面积 =2πrh。不难写出完整程序:
#include <stdio.h> //输入输出库
#include <math.h> //数学库
int main() //主函数
{
const double pi=acos(-1.0); //π的值
double r,h,s1,s2,s; //声明变量
scanf("%lf%lf",&r,&h); //输入半径和高
s1=2*pi*r*r; //上下底面的面积
s2=2*pi*r*h; //侧面的面积
s=s1+s2; //总面积
printf("Area=%.3f\n",s); //以三位小数输出面积
return 0; //返回值为0
}
1-2 三位数反转
输入一个三位数,分离出它的百位、十位和个位,反转后输出。
样例输入:
127
样例输出:
721
【分析】
首先将三位数读入变量n,然后进行分离。
百位等于n/100(注意这里取的是商的整数部 分),
十位等于n/10%10(这里的%是取余数操作),
个位等于n%10。程序如下:
#include <stdio.h>
int main()
{
int n,m;
scanf("%d",&n);
m=(n%10)*100+(n/10%10)*10+(n/100);
printf("%03d\n",m); //输出一个数值变量,不足3位在前面补0
return 0;
}
1-2-1 四位数反转
#include <stdio.h>
int main()
{
int n,m;
scanf("%d",&n);
m=(n%10)*1000+(n/100%10)*100+(n/10%10)*10+(n/1000);
printf("%04d\n",m);
return 0;
}
题1-3 交换变量
输入两个整数a和b,交换二者的值,然后输出。
样例输入:
824 16
样例输出:
16 824
【分析】
方法1:按照题目所说,先把输入存入变量a和b,然后交换。如何交换两个变量呢?最经典的方法是三变量法
#include <stdio.h>
int main()
{
int a,b,t; //定义临时变量t
scanf("%d%d",&a,&b);
t=a;
a=b;
b=t;
printf("%d %d\n",a,b);
return 0;
}
方法2:不借助任何变量,类似“倒酱油”
#include <stdio.h>
int main()
{
int a,b;
scanf("%d%d",&a,&b);
a=a+b;
b=a-b;
a=a-b;
printf("%d %d\n",a,b);
return 0;
}
1-4 鸡兔同笼
已知鸡和兔的总数量为n,总腿数为m。输入n和m,依次输出鸡的数目和兔的数目。如 果无解,则输出No answer。
样例输入:
14 32
样例输出:
12 2
样例输入:
10 16
样例输出:
No answer
【分析】
设鸡有a只,兔有b只,则a+b=n,2a+4b=m,联立解得a=(4n-m)/2,b=n-a。 在什么情况下此解“不算数”呢?首先,a和b都是整数;其次,a和b必须是非负的。可以通过 下面的程序判断:
#include <stdio.h>
#include <math.h>
int main()
{
int a,b,n,m;
scanf("%d%d",&n,&m);
a=(4*n-m)/2;
b=n-a;
if(m%2==1||a<0||b<0)
printf("No answer\n");
else
printf("%d %d\n",a,b);
return 0;
}
1-5 三整数排序
输入3个整数,从小到大排序后输出。
样例输入:
20 7 33
样例输出:
7 20 33
【分析】
#include <stdio.h>
#include <math.h>
int main()
{
int a,b,c,t;
scanf("%d%d%d",&a,&b,&c);
if(a > b) { t = a; a = b; b = t; } //执行完毕之后a≤b
if(a > c) { t = a; a = c; c = t; } //执行完毕之后a≤c,且a≤b依然成立
if(b > c) { t = b; b = c; c = t; }
printf("%d %d %d\n", a, b, c);
return 0;
}