牛客C基础题型复习打卡(1)

在这里插入图片描述

乘风破浪会有时,直挂云帆济沧海。

前言

forever现在开始刷题打卡了,首先先复习打卡之前牛客上刷的题,之后再一步步向前走。给大家说说,作为一个代码人,必须=得有代码量,需要将你的知识和敲代码结合,从量变到质变,才能得到质的飞跃。

正文

题目一:牛牛的字符菱形

描述
牛牛尝试用键盘读入一个字符,然后在屏幕上显示一个用这个字符填充的对角线长5个字符,倾斜放置的菱形。

输入描述:
输入一个char类型字符

输出描述:
输出一个用这个字符填充的对角线长5个字符,倾斜放置的菱形
在这里插入图片描述

代码如下:

#include <stdio.h>

int main(void)
{
    char c = 0;
    scanf("%c",&c);
    for( int i = 1; i <= 3; i++)//这层for循环是先打印上面的正金字塔形状
    {
        for( int j = 3 - i; j > 0; j--)//空格要求打印
        {
            printf(" ");
        }
        for(int k = 1; k <= 2 * i - 1; k++)
        {
            printf("%c",c);
        }
        printf("\n");
    }
    for(int i = 2; i > 0; i--)//这一层for循环是打印下面倒金字塔的
    {
        for(int j = 1; j <= 3 - i; j++)
        {
            printf(" ");
        }
        for(int k = 1; k <= 2 * i - 1; k++)
        {
            printf("%c",c);
        }
        printf("\n");
    }
}

题目二:字符转ASCII码

描述
BoBo教KiKi字符常量或字符变量表示的字符在内存中以ASCII码形式存储。BoBo出了一个问题给KiKi,输入一个字符,输出该字符相应的ASCII码。

输入描述:
一行,一个字符。

输出描述:
一行,输出输入字符对应的ASCII码。
在这里插入图片描述

代码如下:


#include <stdio.h>

int main(void)
{
    char c = 0;
    scanf("%c",&c);
    printf("%d\n",c);
}

题目三:实现四舍五入

描述
将浮点数转换为整数类型,要求四舍五入。

输入描述:
随机输入的浮点数

输出描述:
四舍五入之后的整数
在这里插入图片描述

代码如下:

#include <stdio.h>

int main(void)
{
    float n = 0;
    float m = 0;
    scanf("%f",&n);
    int a = (int)(n);
    m = n - a;
    if(n > 0)//正数四舍五入
    {
        if(m >= 0.5)
            printf("%d\n",a+1);
        else
            printf("%d\n",a);
    }
    else//负数四舍五入
    {
        if(m <= -0.5)
            printf("%d\n",a-1);
        else
            printf("%d\n",a);
    }
}

总结:

注意:这道题需要注意正数和负数四舍五入的区分讨论。

题目四:按照格式输入并交换输出

描述
输入两个整数,范围-231~231-1,交换两个数并输出。

输入描述:
输入只有一行,按照格式输入两个整数,范围,中间用“,”分隔。

输出描述:
把两个整数按格式输出,中间用“,”分隔。

在这里插入图片描述
代码(一)如下:
不创建临时变量简单的代换计算

#include <stdio.h>

int main(void)
{
    int a = 0, b = 0;
    scanf("a=%d,b=%d",&a,&b);
    a = a + b;
    b = a - b;
    a = a - b;
    printf("a=%d,b=%d\n",a,b);
}

代码(二)如下:
利用按位异或进行运算

#include <stdio.h>

int main(void)
{
    int a = 0, b = 0;
    scanf("a=%d,b=%d",&a,&b);
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
    printf("a=%d,b=%d\n",a,b);
}

代码(三)如下:
利用函数及指针实现交换

#include <stdio.h>

void exchange(int* num1, int*num2)
{
    int temp = 0;
    temp = *num1;
    *num1 = *num2;
    *num2 = temp;
}
int main(void)
{
    int a = 0, b =0;
    scanf("a=%d,b=%d",&a,&b);
    exchange(&a,&b);
    printf("a=%d,b=%d\n",a,b);
}

总结:

这里使用函数交换的时候,注意千万不能只利用函数传过去的参数值然后在子函数里面对其值进行交换,因为出了子函数后,之前里面使用的地址便会销毁不会保存,所以再返回到主函数里面,仍然表现出没有交换。所以必须要将其地址利用指针传参,然后在子函数里面交换地址,使其真正内部值得到交换。

题目五:大小写转换

描述
实现字母的大小写转换。多组输入输出。

输入描述:
多组输入,每一行输入大写字母。

输出描述:
针对每组输入输出对应的小写字母。
在这里插入图片描述

代码如下:

#include <stdio.h>

int main(void)
{
    char ch = 0;
    while(scanf("%c",&ch) != EOF)//注意多组输入
    {
        getchar();
        if(ch >= 'a' && ch <= 'z')
        {
            printf("%c\n",ch-32);
        }
        if(ch >= 'A' && ch <= 'Z')
        {
            printf("%c\n",ch + 32);
        }
    }
}

总结:

大写字母和小写字母之间的ASCⅡ值差32,小写字母的值大于大写字母的值。

题目六:时间转换

描述
给定秒数 seconds ,把秒转化成小时、分钟和秒。

数据范围: 0 < seconds < 100000000\ 0<seconds<100000000

输入描述:
一行,包括一个整数,即给定的秒数。

输出描述:
一行,包含三个整数,依次为输入整数对应的小时数、分钟数和秒数(可能为零),中间用一个空格隔开。

在这里插入图片描述
代码如下:


#include <stdio.h>

int main(void)
{
    int n =0;
    int h = 0, m = 0,s = 0;
    scanf("%d",&n);
    h = n / 3600;
    m = (n % 3600) / 60;
    s = (n % 3600) % 60;
    printf("%d %d %d\n",h,m,s);
}

题目七:2的n次方计算

描述
不使用累计乘法的基础上,通过移位运算(<<)实现2的n次方的计算。

数据范围:0 \le n \le 31 \ 0≤n≤31

输入描述:
一行输入整数n(0 <= n < 31)。

输出描述:
输出对应的2的n次方的结果。
在这里插入图片描述

代码如下:

#include <stdio.h>

int main(void)
{
    int n = 0;
    scanf("%d",&n);
    printf("%d\n",1<<n);//利用二进制变换通过左移进行计算2的n次方
}

题目八:统计成绩

描述
输入n科成绩(浮点数表示),统计其中的最高分,最低分以及平均分。

数据范围:1 \le n \le 100 \ 1≤n≤100 , 成绩使用百分制且不可能出现负数

输入描述:
两行,第1行,正整数n(1≤n≤100)第2行,n科成绩(范围0.0~100.0),用空格分隔。

输出描述:
输出一行,三个浮点数,分别表示,最高分,最低分以及平均分(小数点后保留2位),用空格分隔。
在这里插入图片描述

代码如下:

#include<stdio.h>
int main()
{
    int n=0;
    double max=0,min=100;
    double sum=0,aver=0;
    double arr[100]={0};
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%lf",&arr[i]);
    }
    for(int i=0;i<n;i++)
    {
        max = (max<arr[i])?arr[i]:max;
        min = (min>arr[i])?arr[i]:min;
    }
    for(int i=0;i<n;i++)
    {
        sum+=arr[i];
    }
    aver=1.0*sum/n;
    printf("%.2lf %.2lf %.2lf",max,min,aver);
    return 0;
}

题目九:计算三角形面积周长

描述
根据给出的三角形3条边a, b, c,计算三角形的周长和面积。

数据范围: 0 < a,b,c \le 100000 \ 0<a,b,c≤100000

输入描述:
一行,三角形3条边(能构成三角形),中间用一个空格隔开。

输出描述:
一行,三角形周长和面积(保留两位小数),中间用一个空格隔开,输出具体格式详见输出样例。
在这里插入图片描述

代码如下:

#include<stdio.h>
#include<math.h>

int main()
{
    float a=0,b=0,c=0;
    scanf("%f %f %f",&a,&b,&c);
    double s,area,p;
    s=a+b+c;
    p=s/2;
    area=sqrt(p*(p-a)*(p-b)*(p-c));//计算三角形通用公式
    printf("circumference=%.2lf area=%.2lf",s,area);
    return 0;
}

总结:

这里面存在一个计算三角形的通用公式:三边为a,b,c;周长用N表示;面积用S表示
面积S 等于 ( N/2 * (N/2-a) * (N/2-b) * (N/2-c))然后对其开根号

题目十:KiKi和酸奶

描述
BoBo买了一箱酸奶,里面有n盒未打开的酸奶,KiKi喜欢喝酸奶,第一时间发现了酸奶。KiKi每h分钟能喝光一盒酸奶,并且KiKi在喝光一盒酸奶之前不会喝另一个,那么经过m分钟后还有多少盒未打开的酸奶?

输入描述:
多组输入,每组输入仅一行,包括n,h和m(均为整数)。输入数据保证m <= n * h。

输出描述:
针对每组输入,输出也仅一行,剩下的未打开的酸奶盒数。

代码如下:

#include<stdio.h>
int main()
{
    int n,h,m;
    int x=0;
    while(scanf("%d %d %d",&n,&h,&m)!= EOF)//多组输入
    {
        
        int p=m%h;
        if(p==0)
        {
            x=n-m/h;
        }
        else
        {
            x=n-m/h-1;
        }
        printf("%d\n",x);
    }
}

总结:

在题目中一定要认真审题,注意很多时候存在多组输入情况。

结语

牛客复习题目打卡,代码人一定得多敲代码,从基础题型向后一步一步走,从质变到达量变,加油!
也希望大家能够从这些题目中寻找到一些灵感,如有不足之处或者有其他方法,请大家评论区打出来哈~ 互相学习,互相进步~
再见啦!
谢谢阅读!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

<vince>

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值