C++程序设计函数小结笔记

C++程序设计函数小结

/*
C++程序设计第六章函数小结笔记
1.函数
	定义:函数名,参数,返回值类型和主体
	函数必须在main函数之前
	调用栈保存函数各参量的活动记录
	可以用return来在非法值时调用函数终结
	不正常的情况下可以使用exit(int),在头文件<cstdlib>里
2.以传值方式传递参数
3.模块化代码
4.函数的重载:
	使用相同的名称,但是不同的参数
	注意模糊调用的问题
5.函数原型:
	就是一个没有函数实现(函数体)的的单纯的函数声明;在函数原型中可以不必些参数名称,只写参数类型就可
6.缺省参数:
	类似于void printArea(double radis = 1),给参数赋予默认值
7.内联函数:
	在函数最前面加上inline,可以避免函数调用的开销,对于短函数建议使用,对于多次调用的长函数不建议使用;同时编译器可能会忽略inline关键字
8.局部,全局和静态局部变量:
	局部:函数内,无缺省值
	全局:函数外,缺省值为0
	符合就近原则
	应避免使用全局变量
	避免在嵌套的for循环里生命相同的变量
	局部变量在函数调用后会被销毁
	静态局部变量会一直驻留在内存中,声明关键字为static
9.以引用方式传递参数
	值传递有一些局限性,参数的值是不会改变的
	引用变量:可以被作用函数参数中来引用原变量;变量名前或是数据类型后加(&)
10.常量引用参数
	参数在函数中不能被改变,就可以使用这个:参数形式为 const type& name
11.函数抽象和逐步取精:
	图表和分治;
	自顶向下设计或自底向上实现
	实例;对给定年月输出日历
*/
//#pragma comment(lib,"winsock.lib")
#include <iostream>
#include <string>
#include <iomanip>
#include <windows.h>
using namespace std;

void printMonth(int year,int month);
void printMonthTitle(int month,int year);
void printMonthBody(int year, int month);
int getStartDay(int totalDay);
int getTotalDay(int year, int month);
int getMonthDay(int year, int month);
bool isLeapYear(int year);

//设定一个初始值,可以判断1800年以后的日历
const int STARTDAY1800 = 3;

int main() {

	cout << "请输入你想的到日历的年" << endl;
	int year;
	cin >> year;
	cout << "请输入你想的到日历的月" << endl;
	int month;
	cin >> month;
	cout << "你所想要查看的日历是:\n" << endl;
	printMonth(year,month);
	cout << endl;
	int ex;
	cout << "如果退出,请输入0" << endl;
	cin >> ex;
	if (ex == 0) {
		return 0;
	}
	else
	{
		cout << "你还想看什么?没有了,知道不" << endl;
		system("pause");
		cout << "                         88888888          88888888" << endl;
		cout << "                       8888    8888      8888    8888" << endl;
		cout << "                     8888        8888  8888        8888" << endl;
		cout << "                   8888             8888             8888" << endl;
		cout << "                 8888                                  8888" << endl;
		cout << "               8888             I am with you            8888" << endl;
		cout << "                 8888                                  8888" << endl;
		cout << "                   8888                              8888" << endl;
		cout << "                     8888                          8888" << endl;
		cout << "                       8888                      8888" << endl;
		cout << "                         8888                  8888" << endl;
		cout << "                           8888              8888" << endl;
		cout << "                             8888          8888" << endl;
		cout << "                               8888      8888	" << endl;
		cout << "                                 8888  8888" << endl;
		cout << "                                    8888" << endl;

		Sleep(3000);
		/*

		
		*/							

	}
	

}

//打印日历表
void printMonth(int year, int month) {
	printMonthTitle(month,year);
	cout << "- - - - - - - - - - - - - - - - -" << endl;
	printMonthBody(year,month);
}

//打印日历头元素
void printMonthTitle(int month,int year) {
		
	string mon;
	//输出月份英语
	switch (month)
	{
	case 1:
		mon = "January";
		break;
	case 2:
		mon = "February";
		break;
	case 3:
		mon = "March";
		break;
	case 4:
		mon = "April";
		break;
	case 5:
		mon = "May";
		break;
	case 6:
		mon = "June";
		break;
	case 7:
		mon = "July";
		break;
	case 8:
		mon = "August";
		break;
	case 9:
		mon = "September";
		break;
	case 10:
		mon = "October";
		break;
	case 11:
		mon = "November";
		break;
	case 12:
		mon = "December";
		break;
	default:
		break;
	}

	cout << setw(16) << mon << " " << year << endl;
}

//打印日历体
void printMonthBody(int year, int month) {
	cout << "Sun  Mon  Tue  Wed  Thu  Fri  Sat" << endl;
	int startDay = getStartDay(getTotalDay(year,month));
	//循环输出空元素
	for (int i = 0; i < startDay; i++) {
		cout << "     ";
	}
	//循环打印日期
	for (int i = 1; i <= getMonthDay(year,month); i++,startDay++) {
		//判断是否到了每周的末尾,如果末尾则换行
		if (startDay % 7 == 6) {
			cout << setw(3) << i << endl;
		}
		else
		{
			cout << setw(3) << i << "  ";
		}
	}
 }

//获得该年该月第一天的星期几
int getStartDay(int totalDay){
	return (totalDay + STARTDAY1800) % 7;
}

//获得从1800年到输入日期的总年分
int getTotalDay(int year,int month){
	int sum = 0;
	
	//循环加入每一年的天数
	for (int i = 1800; i < year; i++)
	{
		if (isLeapYear(i)) sum += 366;
		else sum += 365;
	}

	//循环加入月份的天数
	for (int i = 1; i < month; i++) {
		sum += getMonthDay(year, i);
	}
	return sum;
}

//获得某年某月的天数
int getMonthDay(int year,int month) {
	int mon;
	switch (month)
	{
	case 2:
		if (isLeapYear(year)) mon = 29;
		else mon = 28;
		break;
	case 4:
	case 6:
	case 9:
	case 11:
		mon = 30;
		break;
	default:
		mon = 31;
		break;
	}
	return mon;
}

//判断该年是否为闰年
bool isLeapYear(int year){
	if ( (year % 400) == 0 || (year % 4 == 0 && (year % 100) != 0)
		) return true;
	else return false;
	
}

写了一个实例,包含一点小小的彩蛋,也没什么技术含量,希望大牛看到,不要感觉污了眼

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值