Skip to content

第二周作业

  1. 使用关系表达式判断某一年是否是闰年?
c
year % 400 == 0 || year % 4 == 0 && year % 100 != 0
  1. 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;
}
  1. 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;
}
  1. 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;
}
  1. 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;
}
  1. 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;
}
  1. 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;
}
  1. 使用加法和减法,在不涉及第三个变量的情况下交换两个变量。这种写法好吗?
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;
}
  1. 使用条件运算符找到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);
  1. 说明前置++和后置++的区别。
c
前置++ 先自增,后返回值。无临时对象性能好
后置++ 先返回值,后自增。需要临时对象性能差
  1. 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;
}
  1. 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");
}
  1. 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;
}
  1. 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;
}
  1. 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;
}