A题 输出第3个整数
题目链接: Hcode OnlineJudge
#include <stdio.h>
int main()
{
int a,b,c,d,e,f;
scanf("%d %d %d %d %d %d",&a,&b,&c,&d,&e,&f);
printf("%d",c);
return 0;
}
B题 基本数据类型的储存空间
题目链接: Hcode OnlineJudge
这题卡了不少人啊, 由于出题组和讲题组的配合不好, 没有讲如何获取数据类型的储存空间, 也没有讲bool类型导致很多人卡住了
其实获取变量类型的存储范围就是用sizeof函数
sizeof(a);//a为某类型变量
而bool类型是C++中只有true(值为1)和false(值为0)的数据类型, 一般在判断中使用
#include <iostream>
using namespace std;
int main()
{
long long a,b,c,d,e,f,g;
a=sizeof(int);
b=sizeof(short);
c=sizeof(long long);
d=sizeof(float);
e=sizeof(double);
f=sizeof(bool);
g=sizeof(char);
printf("%lld %lld %lld %lld %lld %lld %lld",a,b,c,d,e,f,g);
return 0;
}
C题 长门有希的忧郁
题目链接 Hcode OnlineJudge
这题的题目要求非常简单明了, 我相信没有学弟看不懂的, 问题就在于 数据范围, 题目中有提示
对于全部的测试点, 保证 10000000000000000 > a * b > 0
而int的最大值是2147483647, 根本装不下, 导致数据溢出wa掉
正确的方式是将变量都定义为long long, 并用%lld进行输入和输出
#include <stdio.h>
int main()
{
long long a,b;
scanf("%lld %lld",&a,&b);
printf("%lld %lld %lld %lld %lld",a+b,a-b,a*b,a/b,a%b);
return 0;
}
D题 浮点数保留小数位后?位
题目链接 Hcode OnlineJudge
考输出格式, %f输出单精度 %lf输出双精度, %后加.x表示保留后x位小数点
#include <stdio.h>
int main()
{
float a;
double b;
scanf("%f %lf",&a,&b);
printf("%.3f\n%.12lf",a,b);
return 0;
}
E题 输出浮点数
题目链接 Hcode OnlineJudge
同输出要求, 记得换行输出 \n 表示换行符
#include <stdio.h>
int main()
{
double a;
scanf("%lf",&a);
printf("%f\n%.5f\n%e\n%g\n",a,a,a,a);
return 0;
}
F题 对齐输出
题目链接 Hcode OnlineJudge
这题的要求上课讲过了, 有的同学在后面没听见, 我的建议是: 如果对自己的实力有把握就坐后面, 早点来做前面听学长细讲会好很多
对齐输出的输出格式就是%xd, 表示对齐8位输出int类型的变量
#include <stdio.h>
int main()
{
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
printf("%8d %8d %8d",a,b,c);
return 0;
}
G题 类型转换
题目链接 Hcode OnlineJudge
关于此题, 先给学弟们道个歉, 因为出题人不仔细的原因...答案顺序反了...
这是个选择题, 我们先看题面
a = 32768;
b = a;
printf("%d %d\n", a, b);
输出的结果是32768和-32768
没有给出a和b的数据类型, 让你从A. bool B. char C. short D. int E. float F. double中选择a和b的数据类型
我们先用排除法, 上面说过, A bool值只有0和1, 因此不可能是bool, 排除A
B char, char的取值范围是-128~127, 也是不可能输出32768和-32768的
C和D我们之后再说
E和F都是浮点类型, 如果用%d输出会导致出问题, 输出一些意想不到的值, 排除EF
那么只剩下了C和D, 关键是a是C还是b是C, int给a和b都是可以的
我们来看看short的范围 -32768~32767 讲到这里可能有的同学已经猜到b是short类型了, 但你知道为什么吗?
细纠程序 b被a赋值为32768, 但因为数据范围最大为32767, 无法成功赋值, 多出的1由于计算机的补码机制, 使最大值变成了最小值 -32768
关于补码机制, 计算机导论课会提, 想要了解的同学可以百度和认真听计导课
这道题非常值得深究, 可以深刻理解变量范围, 建议深入了解
所以正解是DC
#include <stdio.h>
int main()
{
printf("D C");
return 0;
}
H题 甲流疫情死亡率
题目链接: Hcode OnlineJudge
这题在于%的输出方式和保留小数的输出方式
%的输出方式已给出, %.xlf为输出double类型变量的后x位
#include<stdio.h>
int main()
{
double a,b;
scanf("%lf%lf",&a,&b);
double c;
c=b/a*100;
printf("%.3lf%%",c);
return 0;
}
I题 计算并联电阻的阻值
题目链接 Hcode OnlineJudge
#include <stdio.h>
int main()
{
double a,c;
scanf("%lf %lf",&a,&c);
printf("%.2lf",1/(1/a + 1/c));
return 0;
}
H题 《关于计科acm再次铺地板砖这件事》
题目链接 Hcode OnlineJudge
在写这题之前, 我们要知道计算机的除法机制, 如果是两个整型变量相除, 小数点后的数字就会被无条件省略, 表示为向下取整, 例如3/2=1
这题蛮好想, 地砖是2*1, 地板是n*m, 尽量把地板铺满, 地砖不能切块, 也不能超过地板的界限. 那么我们直接用地板的面积/地砖的面积, 多出的小数点(比如0.9个地砖)因为地砖无法分割, 不能装在地板上, 因此舍去, 咱们之前提到的整型变量除法机制会自动向下取整, 所以不需要额外处理, 直接输出
#include <stdio.h>
int main()
{
int m,n;
scanf("%d %d",&m,&n);
long long c = m*n;
printf("%d",c/2);
return 0;
}