且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

[百战成神1]C语言之凡人暴刷小牛【超详细解析,掌握每道题】

更新时间:2022-10-02 08:51:25

文章目录

前言

BC1 实践出真知

描述

输入描述:

输出描述:

解析:

BC2 我是大V

描述

输入描述:

输出描述:

解析:

BC3 有容乃大

描述

输入描述:

输出描述:

解析:

BC6 小飞机

描述

输入描述:

输出描述:

解析:

这题按照图片上的内容输出结果就好,注意空格与换行,代码如下:

BC7 缩短二进制

描述

输入描述:

输出描述:

解析:

BC19 反向输出一个四位数

描述

输入描述:

输出描述:

示例1

解析:

BC28 大小写转换

描述

输入描述:

输出描述:

示例1

解析:

ASCII表:出处网络

 BC8 十六进制转十进制

描述

输入描述:

输出描述:

解析:

 BC9 printf的返回值

描述

输入描述:

输出描述:

解析:

BC11 学生基本信息输入输出

描述

输入描述:

输出描述:

示例1

解析:

BC35 判断字母

描述

输入描述:

输出描述:

示例                        

解析:

BC12 字符圣诞树

描述

输入描述:

输出描述:

示例1

解析:

        总结


前言

对于学习编程的新手来说,刷题是必不可少的,下面是来自牛客网的一些对于新手很友好的编程题,题目难度是层层递进的,我把链接给大家放在了这里,大家也可以去看看,练习练习,消除对编程题的恐惧,让它变的简单,注意,顺序是打乱的,望理解!


提示:以下是本篇文章正文内容,下面案例可供参考



BC1 实践出真知

描述

于老师经常告诉我们“学习编程***的办法就是上机实践,因为你要对计算机下指令,想让计算机帮你干活,就得多和计算机‘交流’,实践才能出真知。”

输入描述:

本题没有输入

输出描述:

Practice makes perfect!

解析:

看题嘛 并没有输入要求,只需要准确输出结果就OK,代码如下:


#include <stdio.h>
int main()
{
    printf("Practice makes perfect!");
    return 0; 
}


BC2 我是大V

描述

每个人都想成为大V (VIP:Very Important Person),但要一点一点积累才行,先从小v做起。要求输出由小写字母v组成的大V。

输入描述:

输出描述:

v   v

 v v

  v

解析:

这道题没有输入要求,所以按照输出的,按照要求输出就好了,需要注意空格的间隔和一个\n换行转义字符,代码如下:

#include<stdio.h>
int main()
{
    printf("v   v\n");
    printf(" v v\n");
    printf("  v");
    return 0;
}


BC3 有容乃大

描述

确定不同整型数据类型在内存中占多大(字节),输出不同整型数据类型在内存中占多大(字节)。 

输入描述:

输出描述:

不同整型数据类型在内存中占多大(字节),具体格式详见输出样例,输出样例中的?为不同整型数据类型在内存中占的字节数。输出样例如下:

The size of short is ? bytes.

The size of int is ? bytes.

The size of long is ? bytes.

The size of long long is ? bytes.

解析:

这道题是要输出不同数据类型的大小,而我们知道sizeof 是C语言的一个单目操作符,用来计算不同类型数据所占内存空间的大小,单位是字节。代码如下:

#include<stdio.h>
int main()
{
    printf("The size of short is %d bytes.\n",sizeof(short));
    printf("The size of int is %d bytes.\n",sizeof(int));
    printf("The size of long is %d bytes.\n",sizeof(long));
    printf("The size of long long is %d bytes.\n",sizeof(long long));
    return 0;
}


BC6 小飞机

描述

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

输入描述:

输出描述:

[百战成神1]C语言之凡人暴刷小牛【超详细解析,掌握每道题】

解析:

这题按照图片上的内容输出结果就好,注意空格与换行,代码如下:

#include<stdio.h>
int main()
{
    printf("     **     \n");
    printf("     **     \n");
    printf("************\n");
    printf("************\n");
    printf("    *  *    \n");
    printf("    *  *    \n");
    return 0;
}


BC7 缩短二进制

描述

我们处理的整数通常用十进制表示,在计算机内存中是以二进制补码形式存储,但通常二进制表示的整数比较长,为了便于在程序设计过程中理解和处理数据,通常采用八进制和十六进制,缩短了二进制补码表示的整数,但保持了二进制数的表达特点。请输出十进制整数1234对应的八进制和十六进制。

输入描述:

输出描述:

十进制整数1234对应的八进制和十六进制(字母大写),用空格分开,并且要求,在八进制前显示前导0,在十六进制数前显示前导0X

解析:

这道题要用八进制和十六进制输出十进制的1234,八进制是用o来输出,十六进制用X来输出,因为题目要求大写,前导可以使用0来显示,也可以用#来显示,大家可以扩展一下各个数据的格式控制,下面代码说明:

#include<stdio.h>
int main()
{
    //printf("%#o %#X",1234,1234);
    printf("0%o 0X%X",1234,1234);
    return 0;
}


BC19 反向输出一个四位数

描述

将一个四位数,反向输出。

输入描述:

一行,输入一个整数n(1000 <= n <= 9999)。

输出描述:

针对每组输入,反向输出对应四位数。

示例1

输入:1234          输出:4321

解析:

这道题是输入一个四位数,反向输出四位数,仔细看,有了输入,而输入要输入的是地址,所以要知道,第一个是scanf输入,第二个就是&符号,接下来有了输入,然后再来分析一下如何来实现反向输出,比如1234这个四位数,反向先拿到4这个数字  那么1234 对10取模,然后就是4  然后1234 除以10 就是 123   然后123对10取模  就是 3   除以10 就是 12  12对10取模就是2  然后除以10 就是 1  1取模就是 1 然后除以10 就是0 这个是一个循环 用while来实现 而当n等于0的时候 循环停止,就全部输出了,下面代码说明:

#include<stdio.h>
int main()
{
    int n = 0;
    //输入
    scanf("%d",&n);
    //输出
    while(n)
    {
        printf("%d",n%10); 
        n = n/10;
    }
    return 0;
    
}


BC28 大小写转换

描述

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

输入描述:

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

输出描述:

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

示例1

输入:                                输出:

A                        a

B                        b

解析:

这道题看起来有点麻烦,是让大写字母转换成小写字母,而且是多组输入输出,那么首先创建一个变量ch  如果是多组的话,那么就用到循环了  那么大家就要认识一个函数 getchar 是用来专门接收字符的  还有个知识点需要知道  ASCII表 中 因为在键盘上的字符 而创建的表,下面表中可以看到 大写A 与小写a十进制数字差距32  那么是不是可以理解为 加上32可以转换小写呢  答案就是这样的 ,那么接下来整理思路:

1,创建变量ch

2,写出循环,注意,需要有结束的条件,而EOF 是 end of file 是结束标志

3,打印,注意的一点是,需要换行,按照题目中的要求来,最重要的一点是 记住回车也是字符,需要再次引用一个getchar来接收掉回车 代码如下:

#include<stdio.h>
int main()
{
    char ch = 0;
    while((ch = getchar()) != EOF)
    {
        printf("%c\n",ch+32);
        getchar();
    }
    return 0;
}


ASCII表:出处网络

[百战成神1]C语言之凡人暴刷小牛【超详细解析,掌握每道题】


BC8 十六进制转十进制

描述

BoBo写了一个十六进制整数ABCDEF,他问KiKi对应的十进制整数是多少。

输入描述:

输出描述:

十六进制整数ABCDEF对应的十进制整数,所占域宽为15

解析:

十六进制是0x开头,md是控制整数域宽的,15个就是15d,代码如下:

#include<stdio.h>
int main()
{
    printf("%15d", 0xABCDEF);
    return 0;
}

BC9 printf的返回值

描述

KiKi写了一个输出“Hello world!”的程序,BoBo老师告诉他printf函数有返回值,你能帮他写个程序输出printf(“Hello world!”)的返回值吗?

输入描述:

输出描述:

包括两行:

第一行为“Hello world!”

第二行为printf(“Hello world!”)调用后的返回值。

解析:

这道题考察了printf的返回值 ,printf的返回值是字符个数,注意,不能在第一行后面加上一个\n,因为这个也属于字符,所以代码如下:三种方法

#include<stdio.h>
int main()
{   //1
    int ret = printf("Hello world!");
    printf("\n");
    printf("%d",ret);
    return 0;
}
 
int main()
{
    //2
    int ret = printf("Hello world!");
    printf("\n%d",ret);
    return 0;
}
 
int main()
{
    //3
    printf("\n%d",printf("Hello world!"));
    return 0;
}


BC11 学生基本信息输入输出

描述

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

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

输入描述:

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

输出描述:

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

示例1

输入:

17140216;80.845,90.55,100.00

输出:

The each subject score of No. 17140216 is 80.85, 90.55, 100.00.

解析:

有输入与输出,创建变量,分别问学号和成绩,注意的是,double与float的精度问题,这道题要四舍五入,而double的精度更高,所以这里采用float,输入,注意输入的是地址,要加上&,输出的时候注意按照格式来输出,控制小数点后几位用.几来控制,如.2f是控制小数点2位,所以代码如下:

#include<stdio.h>
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;
}


BC35 判断字母

描述

从键盘任意输入一个字符,编程判断是否是字母(包括大小写)。

输入描述:

输入包括一个字符。

输出描述:

输出该字符是字母(YES)或不是(NO)。

示例                        

输入:

H                        9

输出:

YES                      NO

解析:

判断是否是字母,需要getchar接受字符,因为是多组输入,所以用while循环,设定结束条件,要判断就需要用到if 语句 是字母的话就输出YES 不是就输出NO,那么字母包括大写小写,这个时候需要认识  && 与 || 这两个符号 分别是并且和或者的意思   小写字母要大于a并且小于z 或者大写字母要大于A 并且小于 Z ,注意换行,并且换行也属于字符,要getchar处理掉换行

那么有没有一种库函数专门判断是不是字母呢?答案是有的 isalpha()是C语言中专门判断是不是字母的,如果是字母,则返回非0,如果不是字母则返回0

所以代码如下:两种方法

#include<stdio.h>
#include<ctype.h>
int main()
{//1
    int ch = 0;
    //多组输入
    while((ch=getchar()) != EOF)
    {
        //判断条件并输出
        if((ch >='a' && ch <='z') || (ch >= 'A' && ch <='Z'))
        {
            printf("YES\n");
        }
        else
        {
            printf("NO\n");
        }
        getchar();//处理\n
    }
    return 0;
}
int main()
{ //2
    int ch = 0;
    //多组输入
    while((ch=getchar()) != EOF)
    {
        //判断条件并输出
        if(isalpha(ch))
        {
            printf("YES\n");
        }
        else
        {
            printf("NO\n");
        }
        getchar();//处理\n
    }
    return 0;
}


BC12 字符圣诞树

描述

输入一个字符,用它构造一个边长为5的三角形圣诞树。

数据范围:保证输入的字符是一个 char 类型的值

输入描述:

输入只有一行,一个字符。

输出描述:

该字符构成的三角形圣诞树。

示例1

输入:

1

输出:

    1

   1 1

  1 1 1

 1 1 1 1

1 1 1 1 1

解析:

构造一个五行的字符三角形圣诞树,而且字符是char类型,用for循环来实现

1,输出一个字符,getchar接收字符

2,要打印三角形,因为是边长为5,所以定义一个i 小于5,然后能够自增

3,注意看,打印字符三角形,不仅要打印字符,还需要打印空格,这时候就要分开来打印

4,先打印一行的空格,定义j 从0开始,小于4-i个,因为第一个是4个 ,当i是0的时候 4-0=0,当i自增 =1 4-1=3 ,刚好控制空格的范围

5,接下来打印字符,从0开始,小于等于i ,当i=0,j=0,打印一个字符

6,注意打印完一行换行

那么代码如下:

#include<stdio.h>
int main()
{
    //输出一个字符
    char ch = 0;
    ch = getchar();
    int i = 0;
    //构造边长为5的三角形圣诞树 五行
    for(i=0;i<5;i++)
    {
        int j = 0;
        //分别要打印空格和数字
            //空格
        for(j=0;j<4-i;j++)  //4-i个控制每行输出几个空格
        {
            printf(" ");
        }
            //字符
        for(j=0;j<=i;j++)
        {
            printf("%c ",ch);
        }
        printf("\n"); //打印一行的然后换行
    }
    return 0;
    
}


总结

以上是牛客网上的10道题,链接都在上面,还有详解,有写错的,或者哪里不明白的,可以在评论区问我,我来解答,这个是新手练题的,大佬就不用看啦,毕竟本人也是个二吊子,大佬可以指点一二,凡人在这里感谢大家的观看,希望三连,凡人谢谢大家!