题目描述
KiKi学会了printf在屏幕输出信息,他想输出一架小飞机。请帮他编写程序输出这架小飞机。
输入描述:
无
输出描述:
**
**
************
************
* *
* *
参考代码:
#include
int main()
{
printf(" ** \n");
printf(" ** \n");
printf("************\n");
printf("************\n");
printf(" * * \n");
printf(" * * \n");
return 0;
}
答案解析:
严格按照合适去打印就行了
注意*后边的空格可不可以不打印?(可以)
题目描述
BoBo写了一个十六进制整数ABCDEF,他问KiKi对应的十进制整数是多少。
输入描述:
无
输出描述:
十六进制整数ABCDEF对应的十进制整数,所占域宽为15。
备注:
printf可以使用使用格式控制串“%md”输出域宽为m的十进制整数。
参考代码:
#include
int main()
{
printf("%15d\n", 0XABCDEF);
return 0;
}
答案解析:
本题考查的就是%d的格式控制域宽指定。
题目描述
KiKi写了一个输出“Hello world!”的程序,BoBo老师告诉他printf函数有返回值,你能帮他写个程序输出printf(“Hello world!”)的返回值吗?
输入描述:
无
输出描述:
包括两行:
第一行为“Hello world!”
第二行为printf("Hello world!")调用后的返回值。
参考代码:
//代码1
#include
int main()
{
int ret = printf("Hello world!");
printf("\n");
printf("%d\n", ret);
return 0;
}
//代码2
#include
int main()
{
printf("\n%d\n", printf("Hello world!"));
return 0;
}
答案解析:
本题的重点是要严格按照题目要求的格式,输出2行,先打印字符串,再打印字符串长度。这里就要控制好格式,写法比较多。
题目描述
依次输入一个学生的学号,以及3科(C语言,数学,英语)成绩,在屏幕上输出该学生的学号,3科成绩(注:输出成绩时需进行四舍五入且保留2位小数)。
数据范围:学号满足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.
示例2
输入
123456;93.33,99.99,81.20
输出
The each subject score of No. 123456 is 93.33, 99.99, 81.20.
参考代码:
#include
int main()
{
int number = 0;
float score_c = 0.0;
float score_math = 0.0;
float score_eng = 0.0;
scanf("%d;%f,%f,%f", &number, &score_c, &score_math, &score_eng);
printf("The each subject score of No. %d is %.2f, %.2f, %.2f.\n", \
number, score_c, score_math, score_eng);
return 0;
}
答案解析:
小数在内存中有可能不精确保存,要考虑是选择double类型还是float类型。这个题的最大坑,也是格式的指定,还有空格的控制,必须和题目要求的输出结果一致。
浮点数打印要指定小数点后边的位数为2位。
题目描述
从键盘任意输入一个字符,编程判断是否是字母(包括大小写)。
输入描述:
多组输入,每行输入包括一个字符。
输出描述:
针对每行输入,输出该字符是字母(YES)或不是(NO)。
示例1
输入
H
输出
YES
示例2
输入
9
输出
NO
参考代码:
参考代码:
//代码1
#include
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();//处理\n
}
return 0;
}
//代码2
#include
#include
int main()
{
int ch = 0;
//多组输入
while ((ch = getchar()) != EOF)
{
//判断并输出
//使用库函数
if (isalpha(ch))
printf("YES\n");
else
printf("NO\n");
getchar();//处理\n
}
return 0;
}
答案解析:
本地是多组输入,一定要注意循环输入的问题
字符的判断可以自己写,也可以借助于库函数,要熟悉库函数都有哪些。
题目描述
输入一个字符,用它构造一个边长为5的三角形圣诞树。
数据范围:保证输入的字符是一个 char 类型的值
输入描述:
输入只有一行,一个字符。
输出描述:
该字符构成的三角形圣诞树。
示例1
输入
1
输出
1
1 1
1 1 1
1 1 1 1
1 1 1 1 1
参考代码:
#include
int main()
{
char ch = 0;
scanf("%c", &ch);
int i = 0;
//每循环一次,打印一行
//每一行由2部分组成,空格和字符
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的个数。
题目描述
BoBo教KiKi字符常量或字符变量表示的字符在内存中以ASCII码形式存储。BoBo出了一个问题给KiKi,转换以下ASCII码为对应字符并输出他们。
73, 32, 99, 97, 110, 32, 100, 111, 32, 105, 116 , 33
输入描述:
无
输出描述:
一行输出转换题目中给出的所有ASCII码对应的字符,无需以空格隔开。
参考代码:
#include
int main()
{
char arr[] = { 73, 32, 99, 97, 110, 32, 100, 111, 32, 105, 116 , 33 };
//arr是数组,数组是用下标来访问的!
int i = 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打印,打印的就是字符。
题目描述
输入一个人的出生日期(包括年月日),将该生日中的年、月、日分别输出。
数据范围:年份满足1990≤y≤2015 ,月份满足1≤m≤12,日满足1≤d≤30
输入描述:
输入只有一行,出生日期,包括年月日,年月日之间的数字没有分隔符。
输出描述:
三行,第一行为出生年份,第二行为出生月份,第三行为出生日期。输出时如果月份或天数为1位数,需要在1位数前面补0。
示例1
输入
20130225
输出
year=2013
month=02
date=25
备注:
通过scanf函数的%m格式控制可以指定输入域宽,输入数据域宽(列数),按此宽度截取所需数据;通过printf函数的%0格式控制符,输出数值时指定左面不使用的空位置自动填0。
参考代码:
#include
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;
}
答案解析:
本地的难点在于如何按照指定域宽读取数据,如何按照指定格式打印数据。
题目描述
不使用累计乘法的基础上,通过移位运算(<<)实现2的n次方的计算。
数据范围:0≤n≤31
输入描述:
多组输入,每一行输入整数n(0 <= n < 31)。
输出描述:
针对每组输入输出对应的2的n次方的结果。
示例1
输入
2
10
输出
4
1024
参考代码:
#include
int main()
{
int n = 0;
//多组输入——整型
while (scanf("%d", &n) != EOF)
{
//2的n次方计算
printf("%d\n", 1 << n);
}
return 0;
}
答案解析:
本题为多组输入,要使用循环输入
注意<<(左移操作符的使用,左移一位有乘2的效果)
题目描述
输入两个整数,范围-231 ~231-1,交换两个数并输出。
输入描述:
输入只有一行,按照格式输入两个整数,范围,中间用“,”分隔。
输出描述:
把两个整数按格式输出,中间用“,”分隔。
示例1
输入
a=1,b=2
输出
a=2,b=1
备注:
如果格式控制串中有非格式字符则输入时也要输入该非格式字符。
参考代码:
#include
int main()
{
int a = 0;
int b = 0;
scanf("a=%d,b=%d", &a, &b);
int c = a;
a = b;
b = c;
printf("a=%d,b=%d\n", a, b);
}
答案解析:
输入和输出格式的控制,如果格式控制串中有非格式字符则输入时也要输入该非格式字符。
题目描述
BoBo教KiKi字符常量或字符变量表示的字符在内存中以ASCII码形式存储。BoBo出了一个问题给KiKi,输入一个字符,输出该字符相应的ASCII码。
输入描述:
一行,一个字符。
输出描述:
一行,输出输入字符对应的ASCII码。
示例1
输入
c
输出
99
参考代码:
#include
int main()
{
char ch = 0;
scanf("%c", &ch);
printf("%d\n", ch);
return 0;
}
答案解析:
直接按照%d打印,就是字符对应的ASCII码值
题目描述
请计算表达式“(-8+22)×a-10+c÷2”,其中,a = 40,c = 212。
输入描述:
无
输出描述:
(-8+22)×a-10+c÷2计算之后的结果,为一个整数。
参考代码:
#include
int main()
{
int a = 40;
int c = 212;
int ret = (-8 + 22) * a - 10 + c / 2;
printf("%d\n", ret);
return 0;
}
答案解析:
按照操作符的优先级直接设计表达式,计算输出就行。
题目描述
给定两个整数a和b (0 < a,b < 10,000),计算a除以b的整数商和余数。
输入描述:
一行,包括两个整数a和b,依次为被除数和除数(不为零),中间用空格隔开。
输出描述:
一行,包含两个整数,依次为整数商和余数,中间用一个空格隔开。
示例1
输入
15 2
输出
7 1
参考代码:
#include
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);
return 0;
}
答案解析:
掌握%
和/
两个操作符的使用,按照格式输出就行。