这一周一切慢慢好起来了!
1.函数的参数个数和类型都相同,只是返回值不同,这不是重载函数。 (T)
2.两个以上的函数,具有相同的函数名,且形参的个数或形参的类型不同,或返回的数据类型不同,则称之为函数的重载。 (F)
3.下列说法中正确的是( ) (A)
A.在函数参数定义中可以使用const说明符,其值在函数体内不可改变
B.在函数参数定义中可以使用const说明符,但必须指定缺省值
C.在函数参数定义中可以使用const说明符,但只能有一个参数使用const
D.在函数参数定义中不可以使用const说明符
4.const char * pc与char const * pc的作用完全相同 (T)
5.对定义重载函数的下列要求中,( )是错误的。 (C)
A.要求参数的个数不同
B.要求参数中至少有一个类型不同
C.要求函数的返回值不同
D.要求参数个数相同时,参数类型不同
6.一个函数为void f(int x, char y = ‘a’),另一个函数为void f(int),则它们____。 (B)
A.不能在同一程序块中定义
B.可以在同一个程序块中定义并可重载
C.可以在同一个程序块中定义,但不可以重载
D.以上说法均不正确
7.使用内联函数的目是提高程序运行速度。 (T,空间换时间)
8.(记住那些规则哦)
int const x = 3;
auto y { x };
auto& z { x };
则y和z的类型分别是
A.const int 和 int
B.int 和 int
C.int 和 const int
D.int 和 int&
9.代码实例1:auto与重载:
设计一个重载函数add,该函数有两个参数,可以实现两个类型相同的参数相加的操作,函数返回相加的结果。两个参数可以是整数、实数和字符串,但必须保证两个参数类型相同。
我的代码:(其实可以return Pa+Pb;)
auto add(int pa,int pb)
{ int t;
t=pa+pb;
return t;
}
auto add(double pa,double pb)
{ double t;
t=pa+pb;
return t;
}
auto add(string pa,string pb)
{ string t;
t=pa+pb;
return t;
}
10.代码实例2:有代表性与过渡性的年月日编辑题
void init(Date& date, int year, int month, int day);
init函数用于设置日期结构体变量date的年、月、日的信息。在设置数据值时,对参数给出的日期数据做有效性检查,检查顺序为如果年的数据小于1900年或者大于2120年,则视为非法数据,输出字符串“year is invalid”,,程序结束;如果月的数据小于1或者大于12,则视为非法数据,输出字符串“month is invalid”,程序结束;如果日的数据不在当前年和月份的有效数据范围内(注意2月的天数闰年和非闰年的区别),则视为非法数据输出字符串“day is invalid”,程序结束。程序结束。
void addDay(Date& date, int n);
addDay函数用于根据给定的整型参数值n(28>n>0),用于设定当前date的n天后的日期;
void show(Date date, char spor);
show函数用于根据参数spor给出的分隔符输出日期date的年月日信息。
提示:exit() 函数可以强行退出程序,该函数在头文件<cstdlib>
当日期年、月、日不符合逻辑时,仅输出规定的字符串,不要输出任何多余信息;(实际我们后面用的时候返回exit(0))
输入格式:
三个由空格分隔的整数,分别代表日期的年、月、日。
输出格式:
如果输入年数据非法,输出字符串“year is invalid”,程序结束
如果输入月数据非法,输出字符串“month is invalid”,程序结束
如果输入日数据非法,输出字符串“day is invalid”,程序结束
如果输入日期数据均合法,以"年-月-日"的格式输出该日期,换行,接着输出2021/3/18,换行,接着以"年-月-日"的格式输出该日期十天后的日期。
标准代码:(这里直接标准代码,因为它体现了我的所有,还做到了我没注意的,比如%,if与else的顺序安排,使得整个代码量更小)
int area(int a,int b)
{
return a * b;
}
int area(int a,int b,int c)
{
return 2 * (a * b + a * c + b * c);
}
6-2
int add(int a, int b)
{
return a + b;
}
double add(double a, double b)
{
return a + b;
}
string add(string a, string b)
{
return a + b;
}
6-3
#include<iostream>
using std::cout;
using std::cin;
using std::endl;
struct Date{
int year;
int month;
int day;
int maxDay[2][13] = {{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};
};
void init(Date& date, int year, int month, int day);
void addDay(Date& date, int n);
void show(Date date, char spor);
int main()
{
int year, month, day;
cin >> year >> month >> day;
Date myBirth;
init(myBirth, year, month, day);
Date startTime;
init(startTime, 2021, 3, 18);
show(myBirth, '-');
show(startTime, '/');
addDay(myBirth, 10);
show(myBirth, '-');
return 0;
}
void init(Date& date, int year, int month, int day)
{
if(year >= 1900 && year <= 2120)
if(month >= 1 && month <= 12)
if(day >= 1 && day <= date.maxDay[(year % 4 == 0 && year % 100 != 0) || year % 400 == 0][month])
{
date.year = year;
date.month = month;
date.day = day;
}else{
cout << "day is invalid" << endl;
exit(0);
}
else{
cout << "month is invalid" << endl;
exit(0);
}
else {
cout << "year is invalid" << endl;
exit(0);
}
}
void addDay(Date& date, int n)
{
date.day += n;
if(date.day > date.maxDay[(date.year % 4 == 0 && date.year % 100 != 0) || date.year % 400 == 0][date.month]){
date.day %= date.maxDay[(date.year % 4 == 0 && date.year % 100 != 0) || date.year % 400 == 0][date.month];
date.month ++;
if(date.month > 12){
date.year ++;
date.month %= 12;
}
}
}
void show(Date date, char spor)
{
cout << date.year << spor << date.month << spor << date.day << endl;
}
11.代码实例3:合法c->cpp:
本题要求从键盘上输入一行不带空格的字符串,如果该字符串为合法的c程序源文件名,则将重命名为c++源文件名(文件名后缀为.cpp),否则,输出invalid。合法的c程序源文件名为文件名的后缀必须为.c,且“.”不能出现在首位。
- 在主函数中定义一个string类型的变量接收键盘输入的不带空格的字符串;
- 获取字符'.'的位置;
- 获取输入文件的后缀名;
- 判断文件名是否为c程序源文件的合法文件名(合法的c程序源文件名为文件名的后缀必须为.c,且“.”不能出现在首位。),如果是,将文件名的后缀.c替换为.cpp,否则输出invalid。
- 不得使用C语言中的输入输出函数
输入输出例
如new.c---new.cpp
.c、new.v--- invalid
直接看代码吧,又学到自己哉写时不知道的几个函数:
#include<iostream>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main()
{
string file_name;
cin >> file_name;
int last_index =file_name.find_last_of(".");
int first_index = file_name.find_first_of(".");
string prefix =file_name.substr(last_index+1);
//很秀,substr函数在s.substr(x)时,返回s字符串从第x位置开始之后的所有字符串
if (last_index!=string::npos && first_index != 0 && prefix=="c")
{
file_name.replace(last_index+1, 3, "cpp");
//replace函数在s.replace(a,b,"...")时,将s字符串从a位置,将之后的b个字符换成"..."
cout << file_name;
}
else cout << "invalid";
return 0;
}
加油加油加C加加!!!