7.小飞机
题目描述:
KiKi学会了printf在屏幕输出信息,他想输出一架小飞机。请帮他编写程序输出这架小飞机。
输入描述:
无
输出描述:
** ** ************ ************ * * * *
解析:
本题只需要严格按照合适的去打印就行了,注意后面的*后边的空格可以不用打印。
代码:
#include<stdio.h> int main() { printf(" **\n"); printf(" **\n"); printf("************\n"); printf("************\n"); printf(" * *\n"); printf(" * *\n"); return 0; }
8.十六进制转十进制
题目描述:
Alan Walker写了一个十六进制整数ABCDEF,他问Tom对应的十进制整数是多少
输入描述:
无
输出描述:
十六进制整数ABCDEF对应的十进制整数,所占域宽为15 备注:printf可以使用格式控制串"%md"输出域宽为m的十进制整数
解析:
本题考查的就是%d的格式控制域宽指定。
代码:
#include<stdio.h> int main() { /* 数值仍然是该数值,只是表示方式不同 例如: 15 - 十进制 二级制表示 :1111 八进制表示 :017 十六进制表示:0XF */ printf("%15d", 0XABCDEF);// 11259375 return 0; }
9.printf函数的返回值
题目描述:
Tom写了一个输出"hello world!"的程序,BoBo老师告诉他printf函数有返回值,你能帮他写个程序输出printf("hello world!")的返回值吗?
输入描述:
无
输出描述:
包括两行: 第一行为"hello world!". 第二行为printf("hello world!")调用后的返回值.
解析:
由上面的图我们可以看到printf函数的返回值类型是int类型,而且返回的是打印在屏幕上的字符的个数。本题的重点就是要严格要求按照题目要求的格式,输出2行,先打印字符串,在打印字符串的长度。
代码:
#include<stdio.h> int main() { int ret = printf("hello world!");//不可在hello world!加'\n',因为\ //写法一 这样'\n'字符会使总字符个数增加 //printf("\n"); //printf("%d\n", ret);//12 //写法二 //printf("\n%d\n", ret); //写法三 //本写法执行%d时候先要执行printf("hello world!"); printf("\n%d\n", printf("hello world!")); return 0; } 扩展 - 试试下面的代码的运行结果 #include<stdio.h> int main() { printf("%d", printf("%d", printf("%d", 43))); return 0; } 结果是:4321
10.学生基本信息的输入输出
题目描述:
依次输入一个学生的学号,以及3科(C语言,数据库,数据结构)成绩,在屏幕上输出该学生的学号,3科成绩。
输入描述:
学号以及3科成绩,学号和成绩之间用英文分号隔开,成绩之间用英文逗号隔开. 示例输入:20230001;80.845,90.55,100.00
输出描述:
学号,3科成绩,输出格式见示例. 输出示例:The each subject score of NO.20230001 is 80.85,90.55,100.00.
解析:
这个题目有个大坑也就是格式的指定,还有空格的控制,必须和题目要求的输出结果一致,比如of后面有2个空格。浮点数打印指定小数点的后面的2位数应用'.2f'表示。
代码:
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() { int id = 0; float cScore = 0.0; float databaseScore = 0.0; float dataStructureScore = 0.0; //输入 scanf("%d;%f,%f,%f", &id, &cScore, &databaseScore, &dataStructureScore); //输出 - .2 保留两位小数 printf("The each subject score of NO.%d is %.2f,%.2f,%.2f.", id, cScore, databaseScore, dataStructureScore); return 0; }
11.判断字母
题目描述:
从键盘任意输入一个字符,编程判断是否是字母(包括大小写)
输入描述:
多组输入,每行输入包括一个字符. 示例输入: H 9
输出描述:
针对每行的输入,输出该字母是字母(YES)和(NO). 示例输出: YES NO
解析:
1.本题是多组输入,一定要注意循环输入的问题
2.字母的判断可以自己写,也可以
代码:
#include<stdio.h> #include<ctype.h> int main() { int ch = 0; while ((ch = getchar()) != EOF) { //判断并输出 if (('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z')) //也可写成 if (isalpha(ch)) - - 专门用来判断一个字符是不是字母 //- 是 - 返回非0 //-不是 - 返回0 { printf("YES\n"); } else { printf("NO\n"); } getchar();//接受'\n' } return 0; }
12.字符金字塔
题目描述:
输入一个字符,用它构造一个三角形金字塔。
输入描述:
输入只有一行,一个字符 示例输入: *
输出描述:
该字符构成的三角形金字塔。 示例输出: * * * * * * * * * * * * * * *
解析:
1.c语言规定变量必须定义在当前代码块的最前面。
2.每一行的输出是前面空格,后边1。
代码:
#include<stdio.h> int main() { //输入一个字符 char ch = 0; ch = getchar(); //输出金字塔 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+1; j++) { printf("%c ", ch); } printf("\n"); } return 0; }
13.ASCII码值
题目描述:
字符常量或者字符变量表示的字符在内存中以ASCII码的形式存储。转换一下的ASCII码为对应的字符并输入他们。
73,32,99,97,110,32,100,111,32,105,116,33
输入描述:
无
输出描述:
转换输出题目中给出的所有ASCII对应的字符.
解析:
这里我们需要了解清楚ASCII编码,如果采用ASCII编码,每个字符都有一个对应的数字,这个数字被称为这个字符的ASCII码,如果把这个数字按照%c打印,打印的就是字符。
代码:
#include<stdio.h> int main() { char arr[] = { 73, 32, 99, 97, 110, 32, 100, 111, 32, 105, 116, 33 }; //arr是数组,数组是用下标访问,下标从0开始 int i = 0; for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) { printf("%c",arr[i]); //打印结果是:I can do it! } return 0; }
13.出生日期输入输出
题目描述:
输入一个人的出生日期(包括年月日),将该生日中的年、月、日分别输出。
输入描述:
输入只有一行,出生日期,包括年月日,年月日之间的数字没有分隔符。 示例输入:20230403 备注:通过scanf函数的%m格式控制可以指定输入域宽,输入数据域宽(列数), 按此宽度截取所需数据;通过printf函数的%0格式控制符,输出数值时指 定左面不使用的空位置自动填0.
输出描述:
三行,第一行为出生年份,第二行为出生月份,第三行为出生日期。 输出时,如果月份或者天数为1位数,需要在1位数前面补0. 输出示例: year=2023 month=04 day=03
解析:
本题的难点在于如何按照指定的域宽读取数据,如何按照指定格式打印数据。
代码:
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() { int year = 0; int month = 0; int day = 0; //按照格式输入 scanf("%4d%2d%2d", &year, &month, &day); //输出 printf("year=%4d\n", year); printf("month=%02d\n", month); printf("day=%02d\n", day); return 0; }
13.2的n次方计算
题目描述:
不使用累计乘法的基础上,通过移位运算符(<<)实现2的n次方计算。
输入描述:
多组输入,每一行输入整数n(0<=n<31) 示例输入:2 10
输出描述:
针对每组输入输出对应的2的n次方的结果 示例输出:4 1024
解析:
本题为多组输入,要使用循环输出。注意<<(左移操作符的使用,左移一位有乘2的效果)
代码:
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() { int n = 0; //多组输入 - 整型 while (scanf("%d", &n) != EOF) { //2的n次方计算 printf("%d", 1 << n); printf("\n"); } return 0; }
14.按照格式输入并交换输出
题目描述:
将两个整数,范围-231~231-1,交换两个数并交换。
输入描述:
输入只有一行,按照格式输入两个整数,范围-231~231-1,中间用","分隔. 示例输入:1,2
输出描述:
把两个整数按格式输出,中间用","分隔. 示例输出:a=2,b=1
解析:
输入和输出格式的控制,如果格式控制串中有非格式字符则输入时也要输入该非格式字符。
代码:
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() { int a = 0; int b = 0; int temp = 0; scanf("%d,%d", &a, &b); //交换 temp = a; a = b; b = temp; printf("a=%d, b=%d", a, b); return 0; }
15.字符转ASCII码值
题目描述:
输入一个字符,输出该字符相应的ASCII码。
输入描述:
一行,一个字符 示例输入:c
输出描述:
一行,输出输入字符对应的ASCII码 示例输出:99
解析:
直接按照%d打印,就是字符对应的ASCII码值。
代码:
#include<stdio.h> int main() { char ch = 0; //输入 ch = getchar(); printf("%d\n", ch); return 0; }
16.计算机表达式的值
题目描述:
计算表达式"(-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; printf("%d", (-8 + 22) * a - 10 + c / 2);//结果为656 return 0; }
17.计算带余除法
题目描述:
给定两个整数a和b(-10,000<a,b<10,000),计算a除以b的整数商和余数。
输入描述:
一行,包括两个整数a和b,依次为被除数和除数(不为0),中间用空格隔开。 示例输入:15 2
输出描述:
一行,包括两个整数,依次为整数商和余数,中间用一个空格隔开。 示例输出:7 1
解析:
代码:
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() { int a = 0; int b = 0; scanf("%d %d", &a, &b); // / - 除法操作符 - 商 // % - 取模(取余)操作符 - 余数 printf("%d %d", a / b, a % b); return 0; }