以下为个人学习笔记和习题整理
课程:计算机程序设计(C++)- 西安交通大学 @ 中国大学 MOOC
https://www.icourse163.org/course/XJTU-46006

# 课堂笔记

# 计算机语言的分类

  • “翻译” 的两种方式:

    • 编译型语言
      一次将编写的整个程序 "翻译" 成机器语言的指令,保存成文件,以后执行不再 “翻译”,只要执行翻译过的文件就行了。
      如:Fortran、C、C++、Pascal 等。

    • 解释型语言
      翻译一句执行一句,直到执行完所有命令,或遇到错误。
      如:Basic、ASP、PHP、Python、Java 等。

  • 编译型语言编程的步骤:

graph LR
subgraph  1
A
E
end
subgraph  2
B
F
end
subgraph  3
C
G
end
A --> B
B --> C
E --> F
F --> G
G["可执行文件.exe"]
F["目标文件.obj"]
E["源文件.cpp"]
C["连接"]
B["编译"]
A["编辑"]

# C++ 程序的结构

#include<iostream> // 编译预处理 包含基本输入输出库头文件 
using namespace std; // 使用标准库名字空间
int main() /* 主函数 */
{
	cout<<"Hello World";
	cout<<"Hello C++"<<endl;
	return 0;
}

# 实例

# 输入输出字符串

  • 实例:生日贺卡
#include<iostream>
using namespace std;
int main()
{
	char name1[50],name2[50];
	cin.getline(name1,50);
	cin.getline(name2,50);
	cout<<"######################################"<<endl;
	cout<<name1<<endl;
	cout<<endl;
	cout<<"Happy birthday to you!"<<endl;
	cout<<endl;
	cout<<" sincerely yours "<<name2<<endl;
	cout<<"######################################"<<endl;
	return 0;
}

要点总结

  1. 显示字符串常量
cout<<"***************";
  1. 用符号表示字符串
char str[50];
//str 可以表示长度不超过 50 的一串字符

第 2 章,将知道 str 称为字符数组

  1. 输入字符串
cin>>str; // 输入一个词
cin.getline(str,50); // 输入一行
  1. 输出字符串
cout<<str;

# 变量声明和四则运算

  • 实例:加法计算器
    编写程序,计算两个整数的和。
#include<iostream>
using namespace std;
int main()
{
	int a,b,c; // 说明用分别 a
	//int a,b; //× 变量不能重复声明
	cin>>a>>b; // 输入 a,b 的值
	c=a+b; // 计算 a,b 的和
	cout<<c<<endl;// 显示结果 c 的值
	return 0;
}

要点总结

  1. 变量的声明
int a,b,c; // 声明整型变量
double da, db, dc; // 声明双精度变量
int d;
int e;

C++ 中一个符号只能说明一次,而且先声明,后使用。

  1. 输入 cin
cin>>a>>b;
cin>>a;
cin>>b;
  1. 运算
    加法 + ,减法 - , 乘法 * ,除法 / ,求余 %
c=128%10; // 百分号两边的数必须是整数

# 数学函数和 while 循环

  • 实例:计算存款本息
    编写程序,计算银行存款本息。
    用户输入存款金额 money , 存款期 years 和年利率 rate ,根据公式

sum=money(1+rate)yearssum=money(1+rate)^{years}

计算到期存款本息。

#include<iostream>
#include<cmath> // 数学函数包含在头文件 cmath 中
using namespace std;
int main() {
	double money,years,rate,sum;// 声明变量
	cout<< "请输入本金、存款年限和利息,用空格隔开 "<<endl;// 输入提示
	cin>>money>>years>>rate;// 输入
	while(money>0)
	{
		sum=money*pow((1+rate),years);// 计算
		cout<< "本息共 ";// 输出提示
		cout<<sum<<endl;// 显示
		cout<< "请输入本金、存款年限和利息,用空格隔开 "<<endl;// 再次输入提示
		cin>>money>>years>>rate;// 再次输入
	}
	return 0;
}

要点总结

  1. 数学函数的使用
#include<cmath>

乘方: pow(x,y)
正弦: sin(x)
余弦: cos (x)
正切: tan (x) , 三角函数的角度单位 x 均为弧度
exe^x : exp(x)
logex\log_ex: log(x) e 为底
log10x\log_{10}x : log10(x) 10 为底
平方根: sqrt(x)
绝对值: fabs(x)

函数名字母均小写
自变量均为双精度实数, 结果也是双精度实数

  1. 循环,有条件地重复执行一段程序
while(<条件>)
{
	<循环体>
}
  1. 编程的好习惯:给用户提示

# C++ 程序的基本要素

# 标识符

  • 标识符:程序中变量、类型、函数和标号的名称。
    a,b,name,int, char,main,void 等
  • 关键字:系统已有的标识符
    常见关键字:
    • using, namespace, void, return
    • int, float, double, char, bool, signed, unsigned, long, short ,const , true, false, sizeof
    • if, else, for, do, while, switch, case, continue, break
    • class, struct, private, public, this, new, delete
  • 自定义标识符:自己给变量、函数等起的名字。
    命名规则:
    • 由字母、数字和下划线组成
    • 第 1 个符号不能是数字
    • 长度:不同编译器规定不同,但至少识别前 6 个
      字符,有的长度可达 32 个字符,甚至更长。
    • 区分大小写(大小写敏感)
int a,b,c;
int A,B,C;
double a1,b2,c3;
double table_width, table_height;
char _name[40], _address[100];
int 1a,2b,3c; //× 不合法的标识符

# 变量和常量

  • 变量:表示的数据可以改变的符号。
int a;
char name[40];
a=5;
cout<<a<<endl;
a=a+5;
cout<<a<<endl;
cin>>name;
cout<<name<<endl;
  • 常量:直接写出的数据,以及表示的数据不能改变的符号。
cout<<"Hello world"<<endl;
cout<<5+3<<endl;

# 运算符和表达式

  • 运算符:表示运算的符号
    • 算术运算符 + - * / %
    • 比较运算符 > < >= <=
  • 表达式:表示运算的式子
    • 可以是一个变量、一个常量 a b 5
    • 也可以是用运算符将变量、常量连接起来 3+5 a+b a>b
    • 还可以是用运算符将表达式连接起来的式子 (a+b)*(a-b)
    • 表达式中使用圆括号可以改变运算的优先级。括号中的运算比括号外的优先计算。

# 语句

  • 语句是一个表达完整的命令
  • C++ 中,语句的标志就是分号 ; ,而不是等号。一个式子后面写上分号,就是一条语句。
int a,b,c;// 这是一个说明语句,说明用 a,b 表示整数
a+b // 这是一个表达式,虽然能表达求和运算,但运算结果并没有说明如何处理
c=a+b; // 语句,计算 a 和 b 的和,将结果存入 c 中
a+b; // 在 C++ 中也是语句,但这个语句没什么作用
a; // 也是语句,也没什么作用
;;; // 这是 3 条语句,什么也没有,什么也不做,空语句
c=a+b // 虽然有等号,但没有分号,也不是语句
  • 等号也是运算符,等号连接起来的式子是表达式,如 c=a+b
  • 只有加上分号,才是语句 c=a+b;
  • 等号的左边必须是变量
    5=3 (a+b)=c+d ×
    a+(b=c+d) a+(b=c)+d

# 输入和输出

  • 输入 cin
cin>>v1>>V2>>V3>>V4;//cin 输入流对象 >> 提取运算符
int a,b,c;
cin>>a;
cin>>b;
cin>>c;
cin>>a>>b>>c;
  • 输出 cout
cout<<v1<<v2<<v3<<v4;//cout 输出流对象 << 插入运算符
cout<<a;
cout<<" "<<b<<" "<<c<<"<<" sum:"<<a+b+c<<endl;

# 函数

能完成一定功能的有名的程序序列,是组成 C++ 程序的基本单位。

  • main 函数
int main()
{
	int a,b;
	cin>>a>>b; cout<<a+b<<endl; return 0;
}
  • 系统函数
    sin(x) , cos(x) , exp(x) , sqrt(x)

  • 自定义函数

# 课堂讨论

  1. 自然语言和计算机语言有哪些相似和不同之处?

机器语言与自然语言一样,都具有一定的语法,文法,逻辑规则等。
不同点有:

  • 自然语言是人与人交流的工具,它具有多义性,模糊性,依托人的常识。
  • 机器语言是计算机能理解的语言,它使计算机按一定的模式工作,依托处理器所支持的指令。
    比起自然语言,计算机要求更加精准的语法与逻辑规则。
    错误的输入,如笔误或缺失或多出某些字是不可行的,或者会使得计算机执行的结果错误。
  1. 编译型语言执行效率高还是解释型语言执行效率高?

编译型语言的源代码编译成的机器语言会被保存下来,下次执行时就不需要再编译一次,而是直接执行保存的机器语言,执行效率更高。
解释型语言则翻译一句执行一句,直到命令全部执行完或出现错误,不具有高效性,但是利于人理解。

  1. 为什么 C++ 的 main 函数要唯一?

main 函数是主函数,是程序执行的起点。作为程序的执行入口,如果不唯一,那么程序就找不到执行的入口来运行程序,多入口程序不仅会导致程序混乱,而且还会增加内存负担。

  1. 为什么使用 cin.getline() 输入的时候每输入一个数据要回车?而使用 cin>> 输入可以一行数据多个数据?

cin.getline() ,可以理解为按行输入,以回车为输入的分界符,当输入完一个数据时需要回车。
cin>> ,可以理解为按词输入,以空格、回车或 tab 键作为分界符,输入完一个数据以空格分开就行,可以输入在一行。

# 随堂测验

  1. C++ 是一种 计算机语言。

    • 面向过程的
    • 面向对象的
    • 数据库编程
    • 网络编程
  2. 编写 C++ 程序的一般步骤依次是

    • 编辑、调试、编译、运行
    • 编辑、编译、连接、运行
    • 编译、调试、编辑、运行
    • 编译、编辑、连接、运行
  3. 下列哪行程序的作用是在屏幕上显示 “Hello world” 这句话。

    • #include<iostream>
    • using namespace std;
    • cout<<" Hello world ";
    • return 0;
  4. C++ 中的 main () 函数有且只能有一个。

  5. main 函数的书写中,main 后面紧跟一对圆括号,里面可以什么都不写,再后面是一对大括号,其中写程序。

  6. 设在程序中用 address 表示通信地址,说明为 char address[100]; 若想输入象 "No.28, Xian Ning Xi Road" 这样(单词间有空格)的地址,应该使用下列哪个语句?

    • cin>>address;
    • cin>>address(s,100);
    • cin.getline(s,100);
    • cin.getline(address,100);
  7. 若想用 width 和 height 表示屏幕的宽度和高度(单位:像素,整数),在 C++ 中使用下列哪个语句来声明?

    • int width, height;
    • double width, height;
    • char width, height;
    • char width[40], height[40];
  8. C++ 中使用数学函数,需要包含的头文件是

    • iostream
    • cmath
    • namespace
    • main
  9. C++ 中的每一条语句后面都必须写分号。

  10. C++ 中使用变量,必须先声明,后使用。

# 单元测试

  1. 下列哪项不是 C++ 的语句?

    • a+b;
    • a;
    • c=a+b
    • c=a+b;

    语句末尾必须有分号。常量、变量、表达式末尾加分号也是语句。
    直接一个分号也是语句 —— 空语句。空语句可以增加程序的可读性,可以作为待写的函数体、循环体、语句块。

  2. 设整型变量 a,b,c 已经声明,下列哪项语句的顺序是正确的?

    • c=a+b;
      cout<<c;
      cin>>a>>b;
    • cin>>a>>b;
      c=a+b;
      cout<<c;
    • c=a+b;
      cin>>a>>b;
      cout<<c;
    • cout<<c;
      c=a+b;
      cin>>a>>b;

    一般计算的顺序是输入、计算、输出。

  3. 下列哪个符号不是 C++ 的关键字?

    • distance
    • int
    • using
    • return

    语言已经规定其意义的符号,一般是关键字。其他的都见过,有特殊意义了。

  4. 下列哪个不是 C++ 合法的标识符?

    • int_stu
    • zhao@xjtu
    • _2015
    • _height

    表示符必须以字母或下划线开始,由字母、数字和下划线组成。

  5. C++ 程序中 cout<<endl; 的作用是

    • 表示输出结束。
    • 表示程序结束。
    • 表示语句结束。
    • 表示换行(输出换行符)。

    实际是用符号表示数据,是换行符。

  6. 英文单词 terminating 的含义是

    • 结束、终止
    • 模仿
    • 学期
    • 换行

    虽不是英语课,编程不免遇到英文,遇到不会的词及时查一查,一学英语,二解问题,以后遇到,不再困惑。

  7. C++ 中变量的名字只能用一个字母表示。

    数学中的变量习惯上是一个字母,而程序中的变量可是一串字符,只要符合标识符的命名规则。就是用符号代替数据,是一个代号,不限一个,甚至可以比较长,如 6-32 个等。

  8. 一行程序中,如果连续写了两个分号,编译时会出错。

    连续写两个分号,第 2 个分号就是一条空语句,空语句实际是什么也不做,语法是正确的,编译不会出错。
    空语句可以增加程序的可读性,可以作为待写的函数体、循环体、语句块。所以,空语句是可以有用的。

  9. C++ 中使用变量,必须先声明。

    这是语法规定

  10. C++ 中的输入可以使用 cin,一个 cin 可以输入多项数据,每项前面加两个大于号。

    cin>>a>>b; 就是一例。

# 编程作业

# 题目 1. 我爱 C++(20 分)

  • 题目内容
    在屏幕上显示下列两句话

    Hello C++.
    I like programming.

    提示:本题与 helloworld 类似,只是显示多行信息。

  • 输入格式

  • 输出格式
    两行,单词间一个空格,行末标点为英文句点,每行末尾均有句点,前面没有空格,大小写严格按给出的写,均为英文符号。

  • 输入样例

  • 输出样例
    Hello C++.
    I like programming.

# 解题代码

#include<iostream>
using namespace std;
int main()
{
	cout<<"Hello C++."<<endl;
	cout<<"I like programming."<<endl;
	return 0;
}

# 题目 2. 来自系统的问候(20 分)

  • 题目内容
    编写程序,输入一个人的名字,系统显示 Hello ***.
    人名中间可能会有空格。

    程序运行结果如下:

    Zhang Wei
    Hello Zhang Wei.

    提示:输入带空格的字符串,用 cin.getline()

  • 输入格式
    一个字符串,中间可能有空格。

  • 输出格式
    Hello ***.
    注意:单词间一个空格,行末紧跟一个英文句点。

  • 输入样例
    Zhang Wei

  • 输出样例
    Hello Zhang Wei.

# 解题代码

#include<iostream>
using namespace std;
int main()
{
	char name[50];
	cin.getline(name,50);
	cout<<"Hello "<<name<<"."<<endl;
	return 0;
}

# 题目 3. 乘法计算器(20 分)

  • 题目内容
    编写一个乘法计算器程序。用户输入两个数,计算它们的乘积并显示。

    程序运行结果如下:

    3.4 72
    244.8

    提示:声明三个 double 类型的变量,乘法用 * 号。

  • 输入格式
    两个实数,中间用空格隔开。

  • 输出格式
    计算结果,实数。

  • 输入样例
    3.4 72

  • 输出样例
    244.8

# 解题代码

#include<iostream>
using namespace std;
int main()
{
	double a, b;
	cin>>a>>b;
	cout<<a*b<<endl;
	return 0;
}

# 题目 4. 单位换算(20 分)

  • 题目内容
    编写一个程序,将英寸换算为厘米。输入英寸,输出厘米。
    换算关系: 1inch=2.54cm

    程序运行结果如下:

    14
    14inch=35.56cm

    提示:显示:输入的数、"inch="、换算结果和 "cm"。

  • 输入格式
    一个实数。

  • 输出格式
    换算式,单位为小写英文字母,等号为英文等号,单位和数字之间没有空格,如:
    14inch=35.56cm

  • 输入样例
    14

  • 输出样例
    14inch=35.56cm

# 解题代码

#include<iostream>
using namespace std;
int main()
{
	int inch;
	cin>>inch;
	cout<<inch<<"inch="<<inch*2.54<<"cm"<<endl;
	return 0;
}

# 题目 5. 平方根计算器(20 分)

  • 题目内容
    编写程序,计算一个正数的平方根。用户输入一个正数(可能为实数),输出它的平方根。

    程序运行结果如下:

    2
    1.41421

    提示:开平方使用函数 sqrt(x) ,x 是双精度型,需要包含头文件 cmath

  • 输入格式
    一个正数

  • 输出格式
    平方根

  • 输入样例
    2

  • 输出样例
    1.41421

# 解题代码

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
	double num;
	cin>>num;
	cout<<sqrt(num)<<endl;
	return 0;
}

# 基础练习

太简单了,再见

# 中级练习

# 题目 1. 计算公式的值 (对数)(10 分)

  • 题目内容
    输入 x、a,计算以 a 为底 x+sqrt(x*x+1)) 的对数 (a>0,a 不等于 1)的函数值。

    提示:C++ 中没有以任意数 a 为底的对数函数,但可以使用换底公式(请自己查)

  • 输入格式
    实数 x,a,之间用空格分隔

  • 输出格式
    计算出的结果

  • 输入样例
    3 10

  • 输出样例
    0.789741

# 解题代码

换底公式

logab=logcblogca\log_ab=\frac{\log_cb}{\log_ca}

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
	double x, a;
	cin>>x>>a;
	cout<<log(x+sqrt(x*x+1))/log(a)<<endl;
	return 0;
}

# 题目 2. e 的近似值(10 分)

  • 题目内容
    输入 n,计算 y=(1+1/n)^n 其中 ^ 表示乘方。
  • 输入格式
    输入整数 n
  • 输出格式
    输出 y 的值
  • 输入样例
    100
  • 输出样例
    2.70481

# 解题代码

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
	int n;
	cin>>n;
	cout<<pow((1+1.0/n),n)<<endl; // 1.0 而不是 1/n 的目的是强制 double
	return 0;
}

# 题目 3. 计算公式的值(三角等)(10 分)

  • 题目内容
    输入大于 0 的数 x (double),计算

    y=sin(x)ln(x)+x25y=\sin(x)-\ln(x)+\sqrt[2]{x}-5

    的函数值。
  • 输入格式
    大于 0 的数 x
  • 输出格式
    计算出来的 y
  • 输入样例
    1
  • 输出样例
    - 3.15853

# 解题代码

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
	double x;
	cin>>x;
	cout<<sin(x)-log(x)+sqrt(x)-5<<endl;
	return 0;
}

# 题目 4. 计算公式的值(开方)(10 分)

  • 题目内容
    输入 x,计算

    y=xx23x+2y=\frac{x}{\sqrt{x^2-3x+2}}

    的函数值。

    提示:x 的平方通过 xx 来计算,3x 写成表达式时不能省略乘法运算符

  • 输入格式
    实数 x (x>2, 或者 x<1)

  • 输出格式
    计算出的 y

  • 输入样例
    5

  • 输出样例
    1.44338

# 解题代码

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
	double x;
	cin>>x;
	cout<<x/sqrt(x*x-3*x+2)<<endl;
	return 0;
}
阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Ruri Shimotsuki 微信支付

微信支付

Ruri Shimotsuki 支付宝

支付宝

Ruri Shimotsuki 贝宝

贝宝