第一章程序设计入门
- /输入三个平均数,输出他们的平均值,保留三位小数/
#include<stdio.h>
int main()
{
double a,b,c;
scanf("%lf%lf%lf",&a,&b,&c);
printf("%.3lf",(a+b+c)/3);
return 0;
}
- /输入华氏温度f,输出对应的摄氏温度从,保留三位小数。提示 c= 5(f-32)/9/
#include<stdio.h>
int main()
{
double c,f;
scanf("%lf",&f);
c = 5*(f-32)/9;
printf("%.3lf",c);
return 0;
}
3./输入正整数n,输出1+2+3+…n的值,提示:目标使解决问题,而不是练习编程*/
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
printf("%d", (n + 1) * n / 2);
return 0;
}
#include<stdio.h>
int main()
{
int sum,i,n;
scanf("%d",&n);
for(i=1;i<=n;i++)
sum = sum+i;
printf("%d\n",sum);
return 0;
}
- /输入正整数n(0~360),输出入n度的正弦函数值。提示使用数学函数/
#include<stdio.h>
#include<math.h>
#define pi acos(-1.0)
int main()
{
int x;
scanf("%d",&x);
printf("%.3lf\n",sin(1.0*pi*x/180));
printf("%.3lf\n",cos(1.0*pi*x/180));
return 0;
}
- 一件衣服95元,若消费满300元,可以打85折。输入购买的衣服的数量,,输出索要交付的的金额,保留两位小数
#include <stdio.h>
int main()
{
int n;
scanf("%d", &n);
printf("%.2lf", 95 * n >= 300 ? 95.0 * n * 0.85 : 95 * n);
return 0;
}
#include<stdio.h>
int main()
{
const double price = 95.00;
int n;
scanf("%d",&n);
if(price*n <300)
printf("%.2f",price*n);
else
printf("%.2lf",price*n*0.85);
return 0;
}
- 输入三角形3跳变的长度值(均为正整数),判断是否能为直角三角形的三条边长。如果可以则输出yes,如果不能就输出no。如果根本无法构成三角形,则输出not a triangle
#include<stdio.h>
int main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a<=0||b<=0||c<=0||a+b<=c||a+c<=b||b+c<=a)
printf("NOT A TRIANGLE!");
else if(a+b>c&&a+c>b&&b+c>a)
{
if(a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a)
printf("yes!");
else
printf("no!");
}
return 0;
}
- 输入年份,判断是否为闰年。如果是,则输出yes,否则输出no
提示简单的判断除以4的余数是不够的
#include<stdio.h>
int main()
{
int year;
scanf("%d",&year);
if(year%4!=0)
printf("no!\n");
else if(year%100==0 && year%400!=0)
printf("no!\n");
else
printf("yes!\n");
return 0;
}
#include <stdio.h>
int main()
{
int year;
scanf("%d", &year);
puts(year%400==0 || year%100!=0 && year%4==0 ? "yes!" : "no!");
return 0;
}
第二章 循环结构设计
1.水仙花数
输出100~999中的所有水仙花数。若3位数ABC满足ABC=A3 +B3 +C3 ,则称其为水仙花数。例如153=13 +53 +33 ,所以153是水仙花数。
#include<stdio.h>
int main(void)
{
for(int i = 100;i<=999;i++)
{
int a = i/100;
int c = i%10;
int b = (i-a*100-c)/10;
if(i==a*a*a+b*b*b+c*c*c)
printf("%d\n",i);
}
return 0;
}
2. 韩信点兵
相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了。输入包含多组数据,每组数据包含3个非负整数a,b,c,表示每种队形排尾的人数(a<3,b<5,c<7),输出总人数的最小值(或报告无解)。已知总人数不小于10,不超过100。输入到文件结束为止。
样例输入:
2 1 6
2 1 3
样例输出:
Case 1: 41
Case 2: No answer
#include<stdio.h>
int main(void)
{
int a,b,c,i;
//依次输入三人一排,五人,七人一排的排尾数
scanf("%d%d%d",&a,&b,&c);
for(i = 10;i<=100;i++)
{
if(i%3==a&&i%5==b&&i%7==c)
{
printf("Case 1:%d\n",i);
break;
}
}
if(i>100)
printf("Case 2: No answer");
return 0;
}
- 倒三角形(triangle)
输入正整数n≤20,输出一个n层的倒三角形。例如,n=5时输出如下:
#########
#######
#####
###
#
#include<stdio.h>
int main(void)
{
int i ;
scanf("%d",&i);
for(int j=0;j<i;j++)
{
//打印空格
for(int k=0;k<j;k++)
printf(" ");
for(int k=0;k<2*i-2*j-1;k++)
printf("#");
printf("\n");
}
return 0;
}
2.4 子序列的和(subsequence)
输入两个正整数n<m<10^6 ,输出 1/n^2 + 1/(n+1)^2 +1/m^2,保留5位小数。输入包含多组数据,结束标记为n=m=0。提示:本题有陷阱。
样例输入:
2 4
65536 655360
0 0
样例输出:
Case 1: 0.42361
Case 2: 0.0000
#include<stdio.h>
int main() {
int n, m;
while(scanf("%d%d",&n,&m) && n)
{
double sum = 0;
while(n <= m)
{
sum += 1.0/n/n;
++n;
}
printf("%.5lf\n", sum);
}
return 0;
}
5. 分数化小数(decimal)
输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位。a,b≤106 ,c≤100。输入包含多组数据,结束标记为a=b=c=0。
样例输入:
1 6 4
0 0 0
样例输出:
Case 1: 0.1667
#include<stdio.h>
int main(void)
{
int a,b,c,count=0;
while(scanf("%d%d%d",&a,&b,&c)&&(b!=0||c!=0||a!=0))
{
count++;
//.*f为占位符
printf("Case%d:%.*f\n",count,c,(double)a/b);
}
return 0;
}
6.排列(permutation)
用1,2,3,…,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3。按照“abc def ghi”的格式输出所有解,每行一个解。提示:不必太动脑筋。
**下面是一些思考题。
题目1。假设需要输出2,4,6,8,…,2n,每个一行,能不能通过对程序2-1进行小小的改动来实现呢?为了方便,现把程序复制如下:
**
1 #include<stdio.h>
2 int main()
3 {
4 int n;
5 scanf("%d", &n);
6 for(int i = 1; i <= n; i++)
7 printf("%d\n", i);
8 return 0;
9 }
**
任务1:修改第7行,不修改第6行。
for(int i = 2; i<=2*n;i=i+2)
任务2:修改第6行,不修改第7行。
printf("%d\n",i+i);
题目2。下面的程序运行结果是什么?“!=”运算符表示“不相等”。提示:请上机实
验,不要凭主观感觉回答。**
#include<stdio.h>
int main()
{
double i;
for(i = 0; i != 10; i += 0.1)
printf("%.1f\n", i);
return 0;
}
会永远持续打印下去,为什么?因为整数和浮点数的存储方式不一样,所以不会相同。