第二周作业
- 使用关系表达式判断某一年是否是闰年?
c
year % 400 == 0 || year % 4 == 0 && year % 100 != 0- C语言学习 | 天数 知识点:运算符
c
#include <stdio.h>
int main(){
int year, month, t;
scanf("%d%d", &year, &month);
printf("%d-%d-", year, month);
//也可以使用switch
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
{
printf("31");
}
else if (month == 4 || month == 6 || month == 9 || month == 11)
{
printf("30");
}
else
{
if (year % 400 == 0 || year % 100 != 0 && year % 4 == 0)
{
printf("29");
}
else
{
printf("28");
}
}
printf("\n");
return 0;
}- C语言学习 | 带余除法 知识点:运算符
c
#include<stdio.h>
int main(){
int a,b;
scanf("%d%d",&a,&b);
printf("%d %d\n",a/b,a%b);
return 0;
}- C语言学习 | 计算利息 知识点:运算符
c
#include<stdio.h>
int main(){
int t;
float y,q,e,f,g;
scanf("%d",&t);
for(int i = 0; i < t; ++i)
{
scanf("%f%f%f%f%f",&y,&q,&e,&f,&g);
printf("%.1f\n%.1f\n",
y*(1+e/100*q/365)*(1+g/100),
y*(1+f/100*(q+365)/365));
}
return 0;
}- C语言学习 | 坑爹的黑店 知识点:运算符
c
#include<stdio.h>
int main(){
int t,n;
scanf("%d",&t);
for(int i = 0; i < t; ++i){
scanf("%d",&n);
if(n<150){
printf("%d\n",n);
}
else if(n<=200||n>=300){
printf("%d\n",n%50);
}
else{
printf("%d\n",n-200);
}
}
return 0;
}- C语言学习 | 计算分数的浮点数值 知识点:运算符
c
#include<stdio.h>
int main(){
int a,b;
scanf("%d%d",&a,&b);
double result = a*1.0/b;
printf("%.9lf\n", result);
return 0;
}- C语言学习 | 软件版本 知识点:运算符
c
#include <stdio.h>
int main(){
int t, i;
int a1, a2, a3;
int b1, b2, b3;
scanf("%d", &t);
for (int i = 0; i < t; ++i){
scanf("%d%d%d", &a1, &a2, &a3);
scanf("%d%d%d", &b1, &b2, &b3);
if (a1 > b1){
printf("First\n");
}
else if (a1 < b1){
printf("Second\n");
}
else{
if (a2 > b2){
printf("First\n");
}
else if (a2 < b2){
printf("Second\n");
}
else
{
if (a3 > b3){
printf("First\n");
}
else if (a3 < b3){
printf("Second\n");
}
else{
printf("Same\n");
}
}
}
}
return 0;
}- 使用加法和减法,在不涉及第三个变量的情况下交换两个变量。这种写法好吗?
c
#include <stdio.h>
int main(){
int a = 10, b = 5;
a = a + b; // a为10+5 b为5
b = a - b; // a为10+5 b为10
a = a - b; // a为5 b为10
printf("a = %d, b = %d\n");
//这种写法不好,一方面存在数据溢出风险,另一方面可读性很差
return 0;
}- 使用条件运算符找到3个数当中的最大值和最小值。
c
int max = (a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c);
int min = (a < b) ? ((a < c) ? a : c) : ((b < c) ? b : c);- 说明前置++和后置++的区别。
c
前置++ 先自增,后返回值。无临时对象性能好
后置++ 先返回值,后自增。需要临时对象性能差- C语言学习 | 检查一个数是否为质数 知识点:循环
c
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
int isPrime = 1;
for (int i = 2; i*i <= n; ++i) {
if (n % i == 0) {
isPrime = 0;
break;
}
}
if (isPrime == 1) {
printf("Y\n");
}
else {
printf("N\n");
}
return 0;
}- C语言学习 | ASCII码 知识点:数据类型
c
#include<stdio.h>
int main(){
int t;
scanf("%d", &t);
for(int i = 0; i < t; ++i){
int a;
scanf("%d", &a);
printf("%c",a);//字符的本质其实是整数,所以整数也可以被当中字符输出
}
printf("\n");
}- C语言学习 | 奇怪的信 知识点:循环
c
#include<stdio.h>
int main(){
int a;
while(scanf("%d", &a) != EOF){
int res = 0;
int temp = a; //用来记录a不断除以10过程的临时值
int digit = 0; //用来记录a的每一位数
while(temp > 0){
digit = temp % 10;
temp /= 10;
if(digit % 2 == 0){
res += digit;
}
}
printf("%d\n\n", res);
}
return 0;
}- C语言学习 | 手机话费 知识点:循环
c
#include<stdio.h>
int main(){
int m,k,d;
while(scanf("%d%d",&m,&k), m != 0 && k != 0){
d=0;
while(m > 0){
--m;//消耗1元
++d;//天数累加
if(d%k==0){
++m;
}
}
printf("%d\n",d);
}
return 0;
}- C语言学习 | 统计硬币 知识点:循环
c
#include<stdio.h>
int main(){
int t,n,m,c1,c2,c5,k;
scanf("%d",&t);
for(int i = 0; i < t; ++i){
scanf("%d%d",&n,&m);
k=0;
for(c5=0;5*c5<=m;c5++){ //数据量很少,直接枚举即可
for(c2=0;2*c2+5*c5<=m;c2++){
c1=m-5*c5-2*c2;
if(c1+c2+c5==n){
k++;
}
}
}
printf("%d\n",k);
}
return 0;
}16.C语言学习 | 挂盐水 知识点:循环
c
#include<stdio.h>
int main(){
int VUL,D;
while(scanf("%d%d",&VUL,&D)!=EOF){
int i=1,t=0,s=0,count=0;
// i 停下的次数
// s 已经滴下的体积
// count 已经滴下的滴数
while(1){
s += i * D; // 更新体积
count += i; // 更新滴数
//准备下一次滴水 最多连滴i+1次
if (s == VUL){ //正好滴完,最后不用停
t = count + i - 1;
break;
}
if ((s + (i + 1) * D) > VUL){ // 还没滴到i+1次就滴完了
int d;
d = (VUL - s) % D ? ((VUL - s) / D + 1) : (VUL - s) / D; //看看最后一滴是否整除
t = count + i + d;
break;
}
else{
i++;
}
}
printf("%d\n",t);
}
return 0;
}