前言
做题可以更好地巩固所学知识,并加深对于知识点的理解。下面题目均来自牛客网入门编程练习题。
第一题: BC8 十六进制转十进制
描述:
BoBo写了一个十六进制整数ABCDEF,他问KiKi对应的十进制整数是多少。
输入描述:
无
输出描述:
十六进制整数ABCDEF对应的十进制整数,所占域宽为15
本题知识点:
1、进制输出格式的占位符(%d为输出十进制整数、%o为输出八进制整数、%x为输出十六进制整数)。
2、域宽是用来控制输入输出的格式的,语法格式为:“%md”,这里的m为任意整数。
代码部分
#include <stdio.h>
int main()
{
int a = 0XABCDEF;
printf("%15d",a);
}
补充:当进行十进制转换成16进制输出时,可以使用 '#'来控制标准的输出格式:即"%#x"。
第二题: BC9 printf的返回值
描述
KiKi写了一个输出“Hello world!”的程序,BoBo老师告诉他printf函数有返回值,你能帮他写个程序输出printf(“Hello world!”)的返回值吗?
输入描述:
无
输出描述:
包括两行:
第一行为“Hello world!”
第二行为printf(“Hello world!”)调用后的返回值。
本题知识点:
1、printf()函数的返回值类型为int。
2、 printf()函数会返回输出在屏幕上字符的个数。所以,本题需要注意 ’ \n '的使用。
//方法一
#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;
}
printf(“\n%d\n”,printf(Hello world!"),这段代码现代用了’,'表达式左边的printf,因为左边的printf调用了,右边printf()的返回值。所以屏幕上先输出Hello world!后,换行输出 , 右边printf函数的返回值
本题的写法有多种,这里我就简单的举两个例子。
第三题: BC11 学生基本信息输入输出
描述
依次输入一个学生的学号,以及3科(C语言,数学,英语)成绩,在屏幕上输出该学生的学号,3科成绩(注:输出成绩时需进行四舍五入且保留2位小数)。
数据范围:学号满足 1 <= 20000000 <= 20000000 ,各科成绩使用百分制,且不可能出现负数
输入描述:
学号以及3科成绩,学号和成绩之间用英文分号隔开,成绩之间用英文逗号隔开。
输出描述:
学号,3科成绩,输出格式详见输出样例。
示例一:
输入:17140216;80.845,90.55,100.00
输出:The each subject score of No. 17140216 is 80.85, 90.55, 100.00.
示例二:
输入:123456;93.33,99.99,81.20
输出:The each subject score of No. 123456 is 93.33, 99.99, 81.20.
本题知识点:
1、注意输入格式中的符号。
2、浮点数输出格式为输出小数点后2位,即"%.2f"。浮点数控制输出位数的语法为:“%.mf” 或
“%.mlf”,m为任意整数。
#include <stdio.h>
int main()
{
int ID = 0;
float score1= 0.0f;
float score2= 0.0f;
float score3= 0.0f;
scanf("%d;%f,%f,%f",&ID, &score1,&score2,&score3);
printf("The each subject score of No. %d is %.2f, %.2f, %.2f.\n",
ID,score1,score2,score3);
return 0;
}
第四题: BC19 反向输出一个四位数
描述:
将一个四位数,反向输出。
输入描述:
一行,输入一个整数n(1000 <= n <= 9999)。
输出描述:
针对每组输入,反向输出对应四位数。
示例一:
输入:1234
输出:4321
本题知识点:
通过循环,运用% 和 /取出每一位的值。
本题代码:
int main()
{
int n = 0;
scanf("%d", &n);
while(n > 0)
{
printf("%d",n % 10);
n /= 10;
}
printf("\n");
return 0;
}
第五题: BC28 大小写转换
描述
实现字母的大小写转换。多组输入输出。
输入描述:
多组输入,每一行输入大写字母。
输出描述:
针对每组输入输出对应的小写字母。
示例一
输入:A
输出:a
本题知识点:
1、根据题目要求,需要多组输入。
2、需要知道char类型的变量本质是ASCII码值
3、因为 'A’的ASCII码值为65,小写 'a’的ASCII码值为97,所以大小写的ASCII码值的差是32。
4、需要注意的是清空缓存区的回车字符
#include <stdio.h>
int main()
{
char ch =0;
while ((ch = getchar()) != EOF)//多组输入
{
getchar();//清空缓存区的回车字符
if(ch >= 'A' && ch <='Z')
printf("%c\n",ch+32);
else if(ch >= 'a' && ch <= 'z')
printf("%c\n",ch -32);
else
printf("请输入字母\n");
}
return 0;
}
第六题: BC29 2的n次方计算
描述
不使用累计乘法的基础上,通过移位运算(<<)实现2的n次方的计算。
数据范围:(0 <= n < 31)
输入描述:
一行输入整数n(0 <= n < 31)。
输出描述:
输出对应的2的n次方的结果。
本题知识点:
1、本题考察的是左移位操作符的使用,左移操作指的是移动内存中的补码,左移一位最高位的的值被丢弃,然后在右边补0。
2、考察了对二进制位的理解
本题代码
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
printf("%d\n",1 << n);
return 0;
}