OJ基础题解析——二


1、BC6-小飞机

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

输出描述:
image.png
代码:

//第一种方法
#include <stdio.h>
int main()
{
    printf("     **     \n");
    printf("     **     \n");
    printf("************\n");
    printf("************\n");
    printf("   *    *   \n");
    printf("   *    *   \n");
    return 0;
}
//第二种方法
#include <stdio.h>
int main()
{
    printf("     **     \n     **     \n************\n************\n   *    *   \n   *    *   \n");
    return 0;
}

解析
做此题时仔细数好*之前的空格即可。


2、BC8-十六进制转十进制

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

输出描述:

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

备注:

printf可以使用格式控制串“%md”输出域宽为m的十进制整数。

代码:

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

解析:
image.png
本题考查的就是%d的格式控制域宽l指定。


3、BC9-printf函数的返回值

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

输出描述:

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

代码:

//第一种方法
#include <stdio.h>
int main()
{
	int ret = printf("Hello world!");
	printf("\n");
	printf("%d\n", ret);
	return 0;
}
//第二种方法
#include <stdio.h>
int main()
{
	printf("\n%d\n", printf("Hello world!"));
	return 0;
}

解析:
image.png
image.png
本题的重点是要严格按照题目要求的格式,输出2行,先打印字符串,再打印字符串长度。这里就要控制好格式,写法比较多。


4、BC11-学生基本信息输入输出

题目描述:
依次输入一个学生的学号,以及3科(C语言,数学,英语)成绩,在屏幕上输出该学生的学号,3科成绩。

输入描述:

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

输出描述:

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

示例
输入:

17140216;80.845,90.55,100.00

输出:

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

代码:

#include <stdio.h>
int main()
{
	int id = 0;
	float c_score = 0.0;
	float math_score = 0.0;
	float eng_score = 0.0;
	//输入
	scanf("%d;%f,%f,%f", &id, &c_score, &math_score, &eng_score);
	//输出
	printf("The each subject score of No.%d is %.2f,%.2f,%.2f\n", id, c_score, math_score, eng_score);
	return 0;
}

解析:
这个题的最大坑,也是格式的指定,还有空格的控制,必须和题目要求的输出结果一致,比如:of的后边有2个空格。
我们可以利用 %.2f 输出,使浮点数精确到小数点后两位。


5、BC35-判断字母

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

输入描述:

多组输入,每行输入一个字符。

输出描述:

针对每行输入,输出该字符是字母(YES)或不是(NO)。

示例:
输入:

H
9

输出:

YES
NO

代码:

#include<stdio.h>
//第一种方法(字符判断法)
int main()
{
    int ch=0;
    while((ch=getchar()) !=EOF)
    {
        if((ch>='a'&&ch<='z')||(ch>='a'&&ch<='z'))
            printf("YES\n");
        else
            printf("NO\n");
        getchar();
    }
    return 0;
}

//第二种方法(调用库函数)
#include <stdio.h>
int main()
{
    int ch=0;
    while((ch=getchar()) !=EOF)
    {
        //使用库函数
        if(isalpha(ch))
            printf("YES\n");
        else
            printf("NO\n");
        getchar();
    }
    return 0;
}

解析:
1、本题是多组输入,一定要注意循环输入的问题。
2、本题可以自己写字符判断的方法完成,也可以借助于库函数,要熟悉库函数有哪些。
字符串相关函数的参考学习,请点我~


6、BC12-字符金字塔

题目描述:
输入一个字符,用它构造一个三角形金字塔。
输入描述:

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

输出描述:

该字符构成的三角形金字塔。

示例:
输入:

1

输出:
image.png
代码:

#include <stdio.h>
int main()
{
    char ch=0;
    scanf("%c",&ch);
    int i=0;
    for(i=0;i<5;i++)
    {
        //处理一行
        //空格
        int j=0;
        for(j=0;j<5-i-1;j++)
        {
            printf(" ");
        }
        //数字
        for(j=0;j<=i;j++)
        {
            printf("%c ",ch);
        }
        printf("\n");
    }
    return 0;
}

解析:
每一行的输出前面是空格,后边是1。
本题难点就是精确的控制空格的个数和1的个数。


7、BC13-ASCII码

题目描述:
BoBo教KiKi字符常量或字符变量表示的字符在内存中以ASCII码形式存储。BoBo出了一个问题给KiKi,转换以下ASCII码为对应字符并输出他们。
73,32,99,97,110,32,100,111,32,105,116,33

输出描述:
转换输出题目中给出的所有ASCII值到对应的字符。

代码:

#include <stdio.h>
int main()
{
    char arr[]={73,32,99,97,110,32,100,111,32,105,116,33};
    inti=0;
    //计算数组的元素个数
    int sz=sizeof(arr)/sizeof(arr[0]);
    //循环遍历输出每一个元素
    for(i=0;i<sz;i++)
    {
        //%c 控制打印字符
        printf("%c",arr[i]);//每个字符不要隔开
    }
    return 0}

解析:
做本题时,要了解清楚ASCII编码值,如果采用ASCII编码,每个字符都有一个对应的数字,这个数字被称为这个字符的ASCII码,如果把这个数字按照%c打印,出来就是字符。
ASCII表.jpg


8、BC14-出生日期输入输出

题目描述:
输入一个人的出生日期(包括年月日),将该生日中的年、月、日分别输出
输入描述

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

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

示例:
输入:
20130225

输出:
year=2013
month=02
date=25

备注:

通过scanf函数的%m格式控制可以指定输入域宽,输入数据域宽(列数),按此宽度截取所需数据;通过 printf函数的%0格式控制符,输出数值时指定左面不使用的空位置自动填0。

#include <stdio.h>
int main()
{
    int year=0;
    int month=0;
    int date=0;
    scanf("%4d%2d%2d",&year,&month,&date);//%4d就是读取4位整数
    printf("year=%d\n",year);
    printf("month=%02d\n",month);//输出不够2位时,左边拿0填充
    printf("date=%02d\n",date);
    return 0;
}

解析:
本题需要注意:1、如何按照指定域宽读取数据;2、如何按照指定格式打印数据。


9、BC29-2的n次方计算

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

多组输入,每一行输入整数n(0<=n<31)。

输出描述:

针对每组输入输出对应的2的n次方的结果。

示例:
输入:

2
10

输出:

4
1024

代码:

#include <stdio.h>
int main()
{
    int n=0;
    while(scanf("%d",&n) !=EOF)
    {
        printf("%d\n",1<<n);
    }
    return 0;
}

解析:
本题是多组输入,要使用循环输入
注意<<(左移操作符的使用,左移一位有乘2的效果)


10、BC15-按照格式输入并交换输出

题目描述:
输入两个整数,范围-231~231,交换两个数并输出

输入描述:

输入只有一行,按照格式输入两个整数,中间用 逗号 分隔。

输出描述:

把两个整数按格式输出,中间用 逗号 分隔。

示例:
输入:

a=1,b=2

输出:

a=2,b=1

备注:
如果格式控制串中有非格式字符则输入时也要输入该字符。

代码:

#include <stdio.h>
int main()
{
    int a=0;
    int b=0;
    scanf("%d,%d",&a,&b);
    int c=a;
    a=b;
    b=c;
    printf("%d,%d\n",a,b);
    return 0;
}

11、BC16-字符转ASCII码

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

一行,一个字符。

输出描述:

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

代码:

#include <stdio.h>
int main()
{
    char ch=0;
    scanf("%c",&ch);
    printf("%d\n",ch);
    return 0;
}

解析:
直接按照%d打印,就是字符对应的ASCII码值。


12、BC17-计算机表达式的值

题目描述:
请计算表达式“(-8+22)×a-10+c÷2”,其中,a = 40,c = 212。
输出描述:

(-8+22)×a-10+c÷2计算之后的结果,为一个整数。

代码:

#include <stdio.h>
int main()
{
    int a=40;
    int c=212;
    int ret=(-8+22)*a-10+c/2;
    printf("%d\n",ret);
    return 0;
}

13、BC18-计算带余除法

题目描述:
给定两个整数a和b (-10,000 < a,b < 10,000),计算a除以b的整数商和余数。
输入描述:

一行,包括两个整数a和b,依次为被除数和除数(不为零),中间用空格隔开。

输出描述:

一行,包含两个整数,依次为整数商和余数,中间用一个空格隔开。

代码:

#include <stdio.h>
int main()
{
    int a=0;
    int b=0;
    scanf("%d %d",&a,&b);
    int m=a/b;
    int n=a%b;
    printf("%d %d\n",m,n);
}

解析:
掌握 % / 两个操作符的使用,按照格式输出就行。

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值