日期时间输入输出I
题目描述
按 YYYY-MM-DD HH:MI:SS 的格式输入年、月、日、时、分、秒,然后输出它们。
注:
- 不要使用读入字符串然后分割子串的方式
输入描述
满足格式 YYYY-MM-DD HH:MI:SS 的字符串(时间范围为 1900-01-01≤DAY≤2199-12-31)。数据保证一定合法。
输出描述
分 6 行按整数形式分别输出年、月、日、时、分、秒。
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int yyyy, mm, dd, hh, mi, ss;
scanf("%d-%d-%d %d:%d:%d", &yyyy, &mm, &dd, &hh, &mi, &ss); //利用scanf进行指定格式化输入
cout << yyyy << endl;
cout << mm << endl;
cout << dd << endl;
cout << hh << endl;
cout << mi << endl;
cout << ss << endl;
return 0;
}
日期时间输入输出II
题目描述
按 YYYY-MM-DD HH:MI:SS 的格式输入年、月、日、时、分、秒,然后输出它们。
注:
- 不要使用读入字符串然后分割子串的方式
输入描述
满足格式 YYYY-MM-DD HH:MI:SS 的字符串(时间范围为 1900-01-01≤DAY≤2199-12-31)。数据保证一定合法。
输出描述
分 6 行按整数形式分别输出年、月、日、时、分、秒,要求高位不满对应位数时用 0 补齐。
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
string fillPrefixZero(int n)
{
if(n > 10)
return to_string(n);
else
return "0" + to_string(n);
}
int main()
{
int yyyy, mm, dd, hh, mi, ss;
scanf("%d-%d-%d %d:%d:%d", &yyyy, &mm, &dd, &hh, &mi, &ss);
cout << to_string(yyyy) << endl;
cout << fillPrefixZero(mm) << endl;
cout << fillPrefixZero(dd) << endl;
cout << fillPrefixZero(hh) << endl;
cout << fillPrefixZero(mi) << endl;
cout << fillPrefixZero(ss) << endl;
return 0;
}
/*
在上一问题基础上增加了前导零
不足10的要加前导0,足10的不用加前导0
to_string(int)将一个整型数字改成string型,以便后续补0操作
也就是说如果有需要,可以用int类型输入数据,然后转成string类型进行操作
*/
数学函数系列I
题目描述
输入一个浮点数,分别输出它的绝对值、向下取整、向上取整、四舍五入、五次方的结果。
输入描述
一个浮点数d(−10≤d≤10)。
输出描述
在一行输出d的绝对值(精确到小数点后2位)、向下取整、向上取整、四舍五入、五次方(精确到小数点后2位)的结果,用一个空格分隔。
#include <bits/stdc++.h>
using namespace std;
int main()
{
double d;
cin >> d;
printf("%.2lf %.0lf %.0lf %.0lf %.2lf", fabs(d), floor(d), ceil(d), round(d), pow(d, 5));
return 0;
}
数学函数系列II
题目描述
输入一个非负浮点数,分别输出它的开根号、以自然对数为底的对数的结果。
输入描述
一个浮点数d(0≤d≤10)。
输出描述
在一行输出d的开根号、以自然对数为底的对数的结果(全部精确到小数点后2位),用一个空格分隔。
#include <bits/stdc++.h>
using namespace std;
int main()
{
double d;
cin >> d;
printf("%.2lf %.2lf", sqrt(d), log(d));
return 0;
}
switch语句
题目描述
输入一个非负整数n(0≤n≤9),如果0≤n≤5,那么输出对应的英文单词:Zero、One、Two、Three、Four、Five,否则输出"Greater than 5"。
注:
- 使用switch语句实现效果
输入描述
一个非负整数n(0≤n≤9)。
输出描述
按题意输出结果。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
switch(n)
{
case 0:
cout << "Zero";
break;
case 1:
cout << "One";
break;
case 2:
cout << "Two";
break;
case 3:
cout << "Three";
break;
case 4:
cout << "Four";
break;
case 5:
cout << "Five";
break;
default:
cout << "Greater than 5";
}
return 0;
}
memset函数
题目描述
输入一个整数x,对一个整型数组A执行memset函数:memset(A, X, sizeof(A)),然后输出该数组的第一个元素。
输入描述
一个整数x(−2≤x≤2)。
输出描述
按题意输出一个整数。
#include <bits/stdc++.h>
using namespace std;
const int N = 5;
int a[N];
int main()
{
int x;
cin >> x;
memset(a, x, sizeof(a));
cout << a[0];
return 0;
}
//memset函数以字节为单位,对数组中每个元素进行赋值
字符串输入输出I
题目描述
输入一行字符串,然后直接输出这行字符串本身。
#include <bits/stdc++.h>
using namespace std;
const int N = 55;
char str[N];
int main()
{
cin.getline(str, N);
cout << str;
return 0;
}
// cin.getline(int a[], 长度):读入指定长度的字符到a数组中
字符串输入输出II
题目描述
输入n行字符串,然后直接输出这些字符串本身。
输入描述
第一行一个正整数n(1≤n≤5),表示字符串的行数;
接下来n行,每行均为由大小写字母或空格组成的字符串,每行至少一个字符,且不超过50个字符。
输出描述
共n行,原样输出每一行输入的字符串。
#include <bits/stdc++.h>
using namespace std;
const int N = 55;
int main()
{
int n;
cin >> n;
getchar(); //用getchar()吸掉一个回车
while(n--)
{
char a[N];
cin.getline(a, N);
cout << a << endl;
}
return 0;
}
字符串的长度
题目描述
输入一行字符串,输出它的长度。
输入描述
一行由大小写字母或空格组成的字符串,至少一个字符,不超过50个字符。
输出描述
输出一个整数,表示字符串的长度。
#include <bits/stdc++.h>
using namespace std;
const int N = 55;
int main()
{
char str[N];
cin.getline(str, N);
cout << strlen(str); //其他都和上面问题一样,只有最后使用了strlen()函数获得字符串长度
return 0;
}
字符串比较
题目描述
给定两个字符串,比较它们的字典序大小。
输入描述
两行仅由小写字母组成的字符串,至少一个字符,不超过50个字符。
输出描述
如果第一个串的字典序小于第二个串,输出"<";
如果第一个串的字典序等于第二个串,输出"=";
如果第一个串的字典序大于第二个串,输出">"。
#include <bits/stdc++.h>
using namespace std;
int main()
{
string str1, str2;
cin >> str1 >> str2;
if(str1 < str2) cout << '<';
else if(str1 == str2) cout << '=';
else cout << '>';
return 0;
}
//使用string类型字符串可以直接比较字符串的字典大小关系
字符串拼接
题目描述
给定两个字符串,输出将它们前后拼接后的字符串。
注:
- 请先将字符串拼接成一个串,然后再输出,而不要直接输出两个字符串
输入描述
两行仅由小写字母组成的字符串,至少一个字符,不超过50个字符。
输出描述
输出将两个字符串前后拼接后的字符串。
#include <bits/stdc++.h>
using namespace std;
int main()
{
string str1, str2;
cin >> str1 >> str2;
cout << str1 + str2;
return 0;
}
//使用string类型可以直接拼接字符串
sscanf函数
题目描述
给定一个字符串,它可能是以下三种格式中的一种:
- A is greater than B
- A is equal to B plus C
- No Information
其中前两种情况中的A、B、C均为正整数,而第三种情况中没有数字。请确认字符串代表的信息是否从算术上成立,如果成立,那么输出Yes;否则输出No;如果是第三种情况,那么输出三个问号(即???)。
注:
- 请将字符串整行读入后使用sscanf函数进行处理
输入描述
一行满足题意的字符串,其中A、B、C为不超过100的正整数。
输出描述
根据题意输出Yes、No或???。
#include <bits/stdc++.h>
using namespace std;
const int N = 110;
char str[N];
int main()
{
cin.getline(str, N); //正常读入字符串str
int a, b, c;
if(sscanf(str, "%d is greater than %d", &a, &b) == 2)
a > b ? cout << "Yes" : cout << "No";
else if(sscanf(str, "%d is equal to %d plus %d", &a, &b, &c) == 3)
a == b+c ? cout << "Yes" : cout << "No";
else
cout << "???";
return 0;
}
/*
`sscanf` 可以将字符数组按某个格式匹配提取出其中的某些部分,并将这些部分赋值到变量中。
使用的方式和 `scanf` 类似,我们可以把 `scanf(格式串, &变量)` 视为从程序输入中按格式字符串的格式提取出变量
返回值为成功读入的变量个数
*/
sprintf函数
题目描述
给定年、月、日、时、分、秒,生成 YYYY-MM-DD HH:MI:SS 格式的字符串并输出。
注:
- 请先使用sprintf函数生成字符串后再输出
输入描述
6个非负整数YYYY、MM、DD、HH、MI、SS(0≤YYYY≤9999, 1≤MM≤12, 1≤DD≤12, 0≤HH≤23, 0≤MI≤59, 0≤SS≤59)。
输出描述
按题意输出一行字符串。
#include <bits/stdc++.h>
using namespace std;
const int N = 55;
char str[N];
int main()
{
int yyyy, mm, dd, hh, mi, ss;
cin >> yyyy >> mm >> dd >> hh >> mi >> ss;
sprintf(str, "%04d-%02d-%02d %02d:%02d:%02d", yyyy, mm, dd, hh, mi, ss);
cout << str;
return 0;
}
//sprintf按照指定格式设计出一个字符串str,然后将str输出即可
//sprintf和sscanf是相反的过程,sprintf将变量塞进字符串;sscanf从字符串提取变量值
交换指针变量
题目描述
实现一个函数void swap(int* a, int* b),使交换*a和*b的值。
在main函数中输入两个正整数,调用swap函数交换两个变量地址中存储的值,然后输出交换后的两个值。
注:
- 请使用指针变量来完成功能,不要直接颠倒输出
输入描述
两个正整数a、b(1≤a,b≤100)。
输出描述
输出交换后的结果。
#include <bits/stdc++.h>
using namespace std;
void swap(int * a, int * b)
{
int t;
t = *a;
*a = *b;
*b = t;
}
int main()
{
int a, b;
cin >> a >> b;
swap(&a, &b);
cout << a << ' ' << b;
return 0;
}
引用
题目描述
实现一个函数void increase(int &x)(其中&表示引用),使x增加1。
在main函数中输入一个正整数n,调用increase函数让n增加1,然后输出n。
注:
- 请实现指定函数来完成功能
- 引用是
C++语言的特性,注意调整提交语言。
输入描述
一个正整数n(1≤n≤100)。
输出描述
输出调用increase函数后n的值。
#include <iostream>
using namespace std;
void increase(int &x)
{
x++;
}
int main()
{
int n;
cin >> n;
increase(n);
cout << n;
return 0;
}
//引用接受参数,只要在形参上加个&即可
结构体与构造函数I
定义如下的结构体:
struct Point {
int x, y;
}
为该结构体实现两个构造函数:
Point()Point(int _x, int _y)
在main函数中进行如下步骤:
- 定义一个Point类型的变量
Point point - 输入两个正整数x、y
- 通过
Point(x, y)的方式构造一个Point并赋值给前面已定义好的point变量 - 输出
point.x与point.y - 体会并理解上面的过程
注:
- 请实现结构体的构造函数来完成功能,不要直接输出输入的内容
- 以上为
C++的实现步骤,如果是C语言请在结构体外实现单独的函数 - 实现过程有问题可以参考题解中的解释
参考代码:
#include <cstdio>
struct Point {
int x, y;
Point() {}
Point(int _x, int _y) {
x = _x;
y = _y;
}
};
int main() {
Point point;
int x, y;
scanf("%d%d", &x, &y);
point = Point(x, y);
printf("%d %d", point.x, point.y);
return 0;
}
#include <iostream>
using namespace std;
struct Point{
int x, y;
Point(){}
Point(int _x, int _y)
{
x = _x;
y = _y;
}
};
int main()
{
int x;
int y;
Point point;
cin >> x >> y;
point = Point(x, y);
cout << point.x << ' ' << point.y;
return 0;
}
// 在结构体的定义中写构造函数,利用构造函数进行赋值操作
结构体与构造函数II
题目描述
定义如下的结构体:
struct Student {
int id;
char name[15];
}
为该结构体实现一个构造函数:
Student(int _id, char _name[])
在main函数中进行如下步骤:
- 定义一个Student类型的变量
Student student - 输入一个正整数id与一行字符串name
- 通过
Student student = Student(id, name)的方式构造一个Student类型的变量student - 输出
student.id与student.name - 体会并理解上面的过程
注:
- 请实现结构体的构造函数来完成功能,不要直接输出输入的内容
- 以上为
C++的实现步骤,如果是C语言请在结构体外实现单独的函数 - 实现过程有问题可以参考题解中的解释
参考代码:
#include <cstdio>
#include <cstring>
struct Student {
int id;
char name[15];
Student(int _id, char _name[]) {
id = _id;
strcpy(name, _name);
}
};
int main() {
int id;
char name[15];
scanf("%d%s", &id, name);
Student student = Student(id, name);
printf("%d\n%s", student.id, student.name);
return 0;
}
输入描述
第一行为学生的id(1≤id≤100),第二行为一个长度不超过10的只含有小写字母的字符串,表示学生的姓名。
输出描述
按题意分两行输出student.id与student.name。
#include <bits/stdc++.h>
using namespace std;
struct Student{
int id;
char name[15];
Student(){}
Student(int _id, char _name[])
{
id = _id;
strcpy(name, _name); //利用strcpy()完成字符串赋值
}
};
int main()
{
int id;
char name[20];
cin >> id >> name;
Student student = Student(id, name);
cout << student.id << endl << student.name;
return 0;
}
结构体与构造函数III
题目描述
定义如下的结构体:
struct Node {
int id;
Node* left;
Node* right;
}
为该结构体实现一个构造函数:
Node(int _id, Node* _left, Node* _right)
在main函数中进行如下步骤:
- 输入三个正整数id1、id2、id3
- 通过
Node node1 = Node(id1, NULL, NULL)和Node node2 = Node(id2, NULL, NULL)的方式构造两个变量node1和node2 - 通过
Node node3 = Node(id3, &node1, &node2)的方式构造变量node3,其中&是取地址符 - 最后输出
node3.left->id与node3.right->id - 体会并理解上面的过程
#include <bits/stdc++.h>
using namespace std;
struct Node{
int id;
Node * left;
Node * right;
Node(){}
Node(int _id, Node * _left, Node * _right)
{
id = _id;
left = _left;
right = _right;
}
};
int main()
{
int id1, id2, id3;
cin >> id1 >> id2 >> id3;
struct Node node1 = Node(id1, NULL, NULL);
struct Node node2 = Node(id2, NULL, NULL);
struct Node node3 = Node(id3, &node1, &node2);
cout << node3.left->id << ' ';
cout << node3.right->id;
return 0;
}