栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Nowcoder《C语言刷题笔记》BC1-BC15

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Nowcoder《C语言刷题笔记》BC1-BC15

Nowcoder 《C语言刷题笔记》 BC1-BC15

文章目录
  • Nowcoder 《C语言刷题笔记》 BC1-BC15
    • 0x00 写在前面
    • 0x01 简单输出
      • BC1 Nowcoder
      • BC2 小飞机
    • 0x02 基本类型
      • BC3 整数
      • BC4 浮点数
      • BC5 字符
      • BC6 第二个整数
      • BC7 字符矩形
      • BC8 字符菱形
      • BC9 字符转ASCII码
      • BC10 实现四舍五入输出
      • BC11 成绩输入输出
      • BC12 学生基本信息输入输出
      • BC13 出生日期输入输出
      • BC14 按照格式输入并交换输出
      • BC15 大小写转换

0x00 写在前面

为了夯实基础,除了要学习C语言的知识点,刷题也是必不可少的。

在这里分享一下我的牛客网刷题笔记,希望能够给你带来帮助!传送门

0x01 简单输出 BC1 Nowcoder

输出"Hello Nowcoder!",开始你的编程之旅吧。

输入:
输出:hello Nowcoder!

#include
int main()
{
    printf("Hello Nowcoder!");
    return 0;
}

和第一个C语言程序hello world一样,这是一个简单的程序,使用库函数printf()在屏幕上将hello Nowcoder!输出即可实现,最后我们看一下效果!

程序执行结果如下:


BC2 小飞机

KiKi学会了printf在屏幕输出信息,他想输出一架小飞机。请帮他编写程序输出这架小飞机。

输入:

输出:小飞机图形

#include
int main()
{
    printf("     **n");
    printf("     **n"); 
    printf("************n");
    printf("************n");
    printf("    *  *n");
    printf("    *  *n"); 
    return 0;
}

这个程序也比较简单,只需要按照题目要求将星号*组成小飞机的图案再输出即可。

程序执行结果如下:


0x02 基本类型 BC3 整数

牛牛刚刚出生,嗷嗷待哺,一开始他只能学说简单的数字,你跟他说一个整数,他立刻就能学会。

输入一个整数,输出这个整数。

输入:输入一个整数,范围在32位有符号整数范围内

输出:输出这个整数

#include
int main()
{
    int a=0;
    scanf("%d",&a);   
    printf("%d",a);
    return 0;
}

根据输入输出描述,我们使用int定义一个整形变量a用来接收输入,并以%d的形式打印输出即可!

程序执行结果如下:


备注:程序运行在Lightly环境下。


BC4 浮点数

会说整数之后,牛牛开始尝试浮点数(小数)

输入:输入一个浮点数

输出:输出一个浮点数,保留三位小数

#include
int main()
{
    float f;
    scanf("%f",&f);
    printf("%.3f",f);
    return 0;
}

根据输入输出描述,我们使用float定义一个浮点型变量f用来接收输入,并以%f的形式打印输出即可!当然也可以用double,结果以%lf的形式来接收并打印输出。

  • 需要注意的一点是如果要保留三位小数,要以%.3f的形式打印输出。

程序执行结果如下:


BC5 字符

会说浮点数之后,牛牛开始尝试字符

输入:输入一个字符,范围在ascii范围内

输出:输出这个字符

#include
int main()
{
    char c;
    scanf("%c",&c);
    printf("%c",c);
    return 0;
}

根据输入输出描述,我们使用char定义一个字符型变量c用来接收输入,并以%c的形式打印输出即可!

程序执行结果如下:


BC6 第二个整数

牛牛从键盘上输入三个整数,并尝试在屏幕上显示第二个整数。

输入:一行输入 3 个整数,用空格隔开。

输出:请输出第二个整数的值。

#include
int main()
{
    int a,b,c;
    scanf("%d %d %d",&a,&b,&c);
    printf("%d",b);
    return 0;
}

我们定义三个整形变量分别接收三个输入后,打印输出接收到第二个整形变量。

用空格隔开,在scanf里我们每接收一个整形给一个空格即可。

程序执行结果如下:


BC7 字符矩形

牛牛尝试用键盘读入一个字符,然后在屏幕上显示用这个字符组成的 3*3 的矩形。

输入:一行读入一个 char 类型的字符。

输出:输出这个字符组成的 3*3 矩形。

#include 
int main()
{
    char c;
    scanf("%c", &c);
    int i;
    for(i=0;i<3;i++)
    {
        printf("%c%c%cn", c, c, c);
    }
    return 0;
}

先接收,再使用一个简单的for循环打印输出三行即可!

程序执行结果如下:


BC8 字符菱形

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

输出:输出一个用这个字符填充的对角线长5个字符,倾斜放置的菱形

1、笨方法
先说一个笨方法,题目要求对角线长5个字符,我们可以直接手动打出。

int main()
{
    char c;
    scanf("%c",&c);
    printf("  %c  n",c);
    printf(" %c%c%c n",c,c,c);
    printf("%c%c%c%c%cn",c,c,c,c,c);
    printf(" %c%c%c n",c,c,c);
    printf("  %c  n",c);
    return 0;
}

2、思维拓展

如果说要打印出对角线长99个字符的菱形呢,我们可以再卖卖力气敲出来,但是没必要这么辛苦,既然我们懂一点点C语言,就可以用编程的思维来解决问题。

观察一下上面的图形,我们可以把它分为上下两个部分——上面的3行,和下面的2行,对应到对角线的长度就是up=5/2+1,down=5/2,/是C语言中的除号,计算结果会保留商而舍去余数。

因为是菱形,所以每次打印的符号都是奇数行,我们先定义一个全局变量表示对角线字符长度,这样就方便我们推而广之。

  • 第一步
#define LEN 5//定义一个全局变量表示对角线字符长度
#include
int main()
{
    char c;
    scanf("%c",&c);
    int up=LEN/2+1;//上半部分行数
    int down=LEN/2;//下半部分行数
    //打印上半部分
    
    //打印下半部分
    
    return 0;
}

上面的代码实现了接收字符,接下来我们先打印上半部分。为了减少代码量,可以使用循环语句,每次循环打印一行。

行号空格个数符号个数
1⬜⬜#
2###
3#####

我们定义一个从0开始的循环变量i来控制输出的行数,再定义一个从0开始的循环变量j来控制每一行输出的内容。

那么空格个数和循环变量i的内在联系是up-1-i,打印完一行后,i会自增,下一行就会少打一个空格;

符号个数和i的内在联系就是2*i+1,打印完一行后,i会自增,下一行就会多打两个符号。

  • 第二步
int i,j;
for(i=0;i
    //打印空格,按照2、1、0递减
    for(j=0;j
        printf(" ");
    }
    //打印符号
    for(j=0;j<2*i+1;j++)
    {
        printf("%c",c);
    }
    printf("n");//打印完之后换行
}

我们再打印下半部分

行号空格个数符号个数
1###
2⬜⬜#

我们将循环变量初始化为0;

空格个数和循环变量i的关系就是i+1,打印完一行,下一行多打印一个空格;

符号个数和i的内在联系就是2*(down-i)-1,打印完一行后,下一行就会少打两个符号。

  • 第三步
for (i = 0; i < down; i++)
{
	//打印空格,按照1、2递增
	for (j = 0; j 
		printf(" ");
	}
	//打印符号
	for (j = 0; j < 2*(down-i)-1; j++)
	{
		printf("%c", c);
	}
	printf("n");//打印完之后换行    
}

最后我们将上面的代码合在一起:

#define LEN 5//定义一个全局变量表示对角线字符长度
#include
int main()
{
    char c;
    scanf("%c",&c);
    int up=LEN/2+1;//上半部分行数
    int down=LEN/2;//下半部分行数
    int i,j;
    //打印上半部分
    for(i=0;i
        //打印空格,按照2、1、0递减
        for(j=0;j
            printf(" ");
        }
        //打印符号
        for(j=0;j<2*i+1;j++)
        {
            printf("%c",c);
        }
        printf("n");//打印完之后换行
	}
    //打印下半部分
    for (i = 0; i < down; i++)
	{
        //打印空格,按照1、2递增
        for (j = 0; j <+1;j++)
        {
            printf(" ");
        }
        //打印符号
        for (j = 0; j < 2*(down-i)-1; j++)
        {
            printf("%c", c);
        }
        printf("n");//打印完之后换行    
	}
    return 0;
}

现在我们将LEN定义改为13,在Lightly里编译运行一下,戳我了解该编译器

程序执行结果如下:


BC9 字符转ASCII码

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

输入:一行,一个字符。

输出:一行,输出输入字符对应的ASCII码。

#include
int main()
{
    char c;
    scanf("%c",&c);
    printf("%d",c);
    return 0;
}

根据输入输出描述,我们使用char定义一个字符型变量c用来接收输入,并以%d的形式打印即可输出对应的ASCII码值!戳我了解ASCII码表,不包含扩展。

程序执行结果如下:


BC10 实现四舍五入输出

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

输入:随机输入的浮点数

输出:四舍五入之后的整数

1、直接输出

C语言中浮点数会自动四舍五入,那我们接收输入以后以%0.f输出就可以了,即保留0位小数,上代码:

#include 
int main()
{
    float n;
    scanf("%f",&n);
    printf("%.0f",n);
}

这里我们用while循环让程序不断的接收输入,测试一下。

分别输入:-2.5、-1.5、-0.5、0.3、1.5、2.5、3.5

我们发现这组输入中有几个数没有四舍五入,因此这种方法并不可靠,如果想要输出四舍五入后的整数,必须另行处理。

2、±0.5法

这个方法的依据就是在C语言中,数据类型int会自动舍去一个数的小数部分,向下取整。反映在坐标轴上就是向原点方向靠近。如float f=8.8;int i=f;printf("%d",i);,将f的值换成8.1,输出还是8。

题目要求是四舍五入输出整数,那我们只需要考虑对第一位小数上进行特殊处理即可,因为是向下取整,我们要分正负讨论:

➕如果是正数,+0.5后向下取整,比如3.3+0.5=3.8,向下取整后是3,6.6+0.5=7.1,向下取整后是7;

➖如果是负数,-0.5后向下取整,比如-1.1-0.5=-1.6,向下取整后是-1,-8.8-0.5=9.3,向下取整后是-9;

✅满足四舍五入

#include
int main()
{
	float f;
    scanf("%f",&f);
    if(f>=0)
    {
        int i=f+0.5;
        printf("%dn",i);
    }
    else
    {
        int i=f-0.5;
        printf("%dn",i);
    }
    return 0;
}

程序执行结果这里就不再展示,感兴趣的小伙伴可以自行尝试。

3、最笨的办法

因为只保留整数位,可以先*10再%10取出第一位小数,比较它和5的大小再进行四舍五入。

如果保留一位小数,可以*100再%10取出第二位小数与5进行比较,以此类推……

#include
int main()
{
	float f;
    scanf("%f",&f);
	int x=f;
    int y=((int)(f*10))%10;//因为取模的操作数必须是整数,所以强制转换一下
    //判断正数进位
    if(f>=0&&y>=5)
    {
		printf("%d",x+1);
    }
    //判断负数进位
    else if(f<0&&y<=-5)
    {
        printf("%d",x-1);
    }
    //其余情况舍去
    else
    {
        printf("%d",x);
    }
    return 0;
}

程序执行结果这里就不再展示,感兴趣的小伙伴可以自行尝试。


BC11 成绩输入输出

输入3科成绩,然后把三科成绩输出,成绩为整数形式。数据范围: 0 ≤ n ≤ 100 0≤n≤100 0≤n≤100

输入:一行,3科成绩,用空格分隔,范围(0~100)。

输出:一行,把3科成绩显示出来,输出格式详见输出样例。


比较简单,上代码:

#include
int main()
{
    int score1=0,score2=0,score3=0;
    scanf("%d %d %d",&score1,&score2,&score3);
    printf("score1=%d,score2=%d,score3=%d",score1,score2,score3);
    return 0;
}

我们定义三个整形变量分别接收3科成绩,接收时用空格分隔即可。

程序执行结果如下:


BC12 学生基本信息输入输出

依次输入一个学生的学号,以及3科(C语言,数学,英语)成绩,在屏幕上输出该学生的学号,3科成绩(注:输出成绩时需进行四舍五入且保留2位小数)。

数据范围:学号满足 0 ≤ n ≤ 20000000 0≤n≤20000000 0≤n≤20000000,各科成绩使用百分制,且不可能出现负数

输入:学号以及3科成绩,学号和成绩之间用英文分号隔开,成绩之间用英文逗号隔开。

输出:学号,3科成绩,输出格式详见输出样例。

也很简单,上代码:

#include
int main()
{
    int id=0;
    float c=0.0;
    float math=0.0;
    float english=0.0;
    scanf("%d;%f,%f,%f",&id,&c,&math,&english);
    printf("The each subject score of No. %d is %.2f, %.2f, %.2f.",id,c,math,english);
    return 0;
}

根据输入输出描述,按接收需求定义变量即可。

程序执行结果如下:


BC13 出生日期输入输出

输入一个人的出生日期(包括年月日),将该生日中的年、月、日分别输出。

数据范围:年份满足 1990 ≤ y ≤ 2015 1990≤y≤2015 1990≤y≤2015,月份满足 1 ≤ m ≤ 12 1≤m≤12 1≤m≤12,日满足 1 ≤ d ≤ 30 1≤d≤30 1≤d≤30

输入:输入只有一行,出生日期,包括年月日,年月日之间的数字没有分隔符。

输出:三行,第一行为出生年份,第二行为出生月份,第三行为出生日期。输出时如果月份或天数为1位数,需要在1位数前面补0。


备注:

  • 通过scanf函数的 %m格式控制 可以指定输入域宽,输入数据域宽(列数),按此宽度截取所需数据;
  • 通过printf函数的 %0格式控制符 ,输出数值时指定左面不使用的空位置自动填0。
#include
int main()
{
    int year,month,date;
    scanf("%4d%2d%2d",&year,&month,&date);
    printf("year=%dn",year);
    printf("month=%02dn",month);
    printf("date=%02dn",date);
    return 0;
}

程序执行结果如下:


BC14 按照格式输入并交换输出

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

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

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

#include
int main()
{
    int a,b,tmp;
    scanf("a=%d,b=%d",&a,&b);
    tmp=a;
    a=b;
    b=tmp;
    printf("a=%d,b=%d",a,b);
}

我们多定义一个变量用来交换接收的两个值再输出即可。

程序执行结果如下:


BC15 大小写转换

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

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

输出:针对每组输入输出对应的小写字母。

根据输入输出描述,我们可以用函数getchar()从标准输入(键盘)中获取一个字符,戳我了解该函数详情


为了满足多组输入的情况,可以使用while循环,不断接收,根据ASCII码表,大写字母的码值比其对应的小写字母码值小32,因此将大写字母转换为小写字母可以在原有输入的基础上+32再输出即可。

int c;
while(1)
{
    c=getchar();
    printf("%cn",c+32);
}

但是上面的代码停不下来,我们需要添加限制条件,当接收到EOF(end of file)文件结束标志时停止。

int c;
while((c=getchar())!=EOF)
{
    printf("%cn",c+32);
}

该代码执行结果如下:

我们发现在输出对应的小写字母之后,又多了一个星号*。因此我们需要想办法将星号消除,在这之前先了解一下getchar()函数的执行过程。

我们在原有代码的基础上,多给上一个getchar(),将n提前拿走,再接收键盘的输入即可。

#include 
int main()
{
	int c = 0;
	while ((c = getchar()) != EOF)
	{
        printf("%cn", c+32);
		getchar();//读取n
	}
	return 0;
}

程序执行结果如下:


本文完,如有错漏,敬请指正。✅最后悄悄告诉你,点个赞,私信找我领取本文电子版哦!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1004954.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号