2022.3.8—3.10算法第一章程序设计入门学习

目录

例题1-1 输入底面半径r和高h,输出圆柱体的表面积,保留3位小数

例题1-2 输入一个三位数,分离出它的百位、十位和个位,反转后输出。 样例输入: 127  样例输出: 721。

 例题1-3 输入两个整数a和b,交换二者的值,然后输出。 样例输入: 824 16 样例输出: 16 824

 例题1-4 已知鸡和兔的总数量为n,总腿数为m。输入n和m,依次输出鸡的数目和兔的数目。如 果无解,则输出No answer。

 例题1-5  输入3个整数,从小到大排序后输出。 样例输入: 20 7 33 样例输出: 7 20 33

 1.5 注解与习题

习题一:输入3个整数,输出它们的平均值,保留3位小数。

 习题二:输入华氏温度f,输出对应的摄氏温度c,保留3位小数。提示:c=5(f-32)/9。

 例题三:输入正整数n,输出1+2+…+n的值。提示:目标是解决问题,而不是练习编程。

 例题四:输入正整数n(n<360),输出n度的正弦、余弦函数值。提示:使用数学函数。

 例题五:一件衣服95元,若消费满300元,可打八五折。输入购买衣服件数,输出需要支付的金 额(单位:元),保留两位小数。

 例题六:输入三角形3条边的长度值(均为正整数),判断是否能为直角三角形的3个边长。如果 可以,则输出yes,如果不能,则输出no。如果根本无法构成三角形,则输出not a triangle。

例题七:输入年份,判断是否为闰年。如果是,则输出yes,否则输出no 。

 问题:


算法竞赛的程序应当只做3件事情:读入数据、计算结果、打印输出。不要打印提示信息,不要在打印输出后“暂停程序”,更不要尝试画图、访问网络等与算法无关的任务。 

复习:整数值用%d输出,实数用%f输出;整数/整数=整数,浮点数/浮点数=浮点数。

           赋值是个动作,先计算右边的值,再赋给左边的变量,覆盖它原来的值。

例题1-1 输入底面半径r和高h,输出圆柱体的表面积,保留3位小数

提示:1.在算法竞赛中,输入前不要打印提示信息。输出完毕后应立即终止程序,不要等待用户按键,因为输入输出过程都是自动的,没有人工干预。

2.在算法竞赛中不要使用头文件conio.h,包括getch()、clrscr()等函数。

 3.注意输出格式,输出格式是非常严格的,多一个或 者少一个字符都是不可以的。在算法竞赛中,每行输出均应以回车符结束,包括最后一行。除非特别说明,每行的行首不应有空格,但行末通常可以有多余空格。另外,输出的每两个数或者字符 串之间应以单个空格隔开。

4.尽量用const关键字声明常数,const关键字表明它的值是不可以改变的。

#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 = pi*r*r;
s2 = 2*pi*r*h;
s = s1*2.0 + s2;
printf("Area = %.3f\n", s)
return 0;
}

例题1-2 输入一个三位数,分离出它的百位、十位和个位,反转后输出。 样例输入: 127  样例输出: 721。

如果 在比赛中发现题目有漏洞,应向相关人员询问,尽量不要自己随意假定。 根据不同情况执行不同指令。

#include<stdio.h>
int main()
{
int n;
scanf("%d", &n);
printf("%d%d%d\n", n%10, n/10%10, n/100);
return 0;
}
#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);
return 0;
}

 例题1-3 输入两个整数a和b,交换二者的值,然后输出。 样例输入: 824 16 样例输出: 16 824

经典方法:三种变量 

 

 使用范围狭窄:

#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;
}

 最合适:

#include<stdio.h>
int main()
{
int a, b;
scanf("%d%d", &a, &b);
printf("%d %d\n", b, a);
return 0;
}

 目标是解决问题,不是展示编程技巧,越简单越好。

 例题1-4 已知鸡和兔的总数量为n,总腿数为m。输入n和m,依次输出鸡的数目和兔的数目。如 果无解,则输出No answer。

#include<stdio.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>
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;
}

 编译器:C99中,double的输出必须用%f,而输入需要用%lf

 1.5 注解与习题

 

 

习题一:输入3个整数,输出它们的平均值,保留3位小数。

 习题二:输入华氏温度f,输出对应的摄氏温度c,保留3位小数。提示:c=5(f-32)/9。

 例题三:输入正整数n,输出1+2+…+n的值。提示:目标是解决问题,而不是练习编程。

 例题四:输入正整数n(n<360),输出n度的正弦、余弦函数值。提示:使用数学函数。

 例题五:一件衣服95元,若消费满300元,可打八五折。输入购买衣服件数,输出需要支付的金 额(单位:元),保留两位小数。

 例题六:输入三角形3条边的长度值(均为正整数),判断是否能为直角三角形的3个边长。如果 可以,则输出yes,如果不能,则输出no。如果根本无法构成三角形,则输出not a triangle。

例题七:输入年份,判断是否为闰年。如果是,则输出yes,否则输出no 。

 问题:

 问题一:

C语言的limits.h文件: 

    #ifndef MY_LIMITS_H
    #define MY_LIMITS_H
    #ifndef MY_YVALS_H
    #include "my_yvals.h"
    #endif
    /**char properties*/
    #define CHAR_BIT
    #if _CSIGN
        #define CHAR_MAX    127
        #define CHAR_MIN    (-127 - _C2) /**由my_yvals.h可知_C2为1*/
    #else
        #define CHAR_MAX    255
        #define CHAR_MIN    0
    #endif // _CSIGN
    #if _ILONG
        #define INT_MAX     2147483647
        #define INT_MIN     (-2147483647 - _C2)
        #define UINT_MAX    4294967295
    #else
        #define INT_MAX     32767
        #define INT_MIN     (-32767 - _C2)
        #define UINT_MAX    65535
    #endif // _ILONG
    #define LONG_MAX        2147483647
    #define LONG_MIN        (-2147483647 - _C2)
    #define MB_LEN_MAX      _MBMAX
    #define SCHAR_MAX       127
    #define SCHAR_MIN       (-127 - _C2)
    #define SHRT_MAX        32767
    #define SHRT_MIN        (-32767 - _C2)
    #define UCHAR_MAX       255
    #define ULONG_MAX       4294967295
    #define USHRT_MAX       65535
#endif

 问题二:16位

问题三:double型浮点数最大正数值和最小正数值-2^1024 ~ +2^1024。

问题四:逻辑运算符的优先级 ||(or)<&&(and)<!(not)。

问题五:if(a)if(b)x++;else y++  

              如果 a 为真且 b 也为真 ,x ++ ;如果b为假,y++ 。else和最近的if匹配。办法:写上大括号{ } 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值