以下为个人学习笔记和习题整理
课程:计算机程序设计(C++)-西安交通大学 @ 中国大学MOOC
https://www.icourse163.org/course/XJTU-46006
“翻译”的两种方式:
编译型语言:
一次将编写的整个程序"翻译"成机器语言的指令,保存成文件,以后执行不再“翻译”,只要执行翻译过的文件就行了。
如:Fortran、C、C++、Pascal等。
解释型语言:
翻译一句执行一句,直到执行完所有命令,或遇到错误。
如:Basic、ASP、PHP、Python、Java等。
编译型语言编程的步骤:
#include // 编译预处理 包含基本输入输出库头文件
using namespace std; // 使用标准库名字空间
int main() /*主函数*/
{
cout<<"Hello World";
cout<<"Hello C++"<<endl;
return 0;
}
#include
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;
}
要点总结
cout<<"***************";
char str[50];
// str可以表示长度不超过50的一串字符
第2章,将知道 str称为字符数组
cin>>str; // 输入一个词
cin.getline(str,50); // 输入一行
cout<<str;
#include
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;
}
要点总结
int a,b,c; // 声明整型变量
double da, db, dc; // 声明双精度变量
int d;
int e;
C++中一个符号只能说明一次,而且先声明,后使用。
cin>>a>>b;
cin>>a;
cin>>b;
+
,减法 -
, 乘法 *
,除法 /
,求余 %
c=128%10; // 百分号两边的数必须是整数
money
,存款期years
和年利率rate
,根据公式 s u m = m o n e y ( 1 + r a t e ) y e a r s sum=money(1+rate)^{years} sum=money(1+rate)years 计算到期存款本息。#include
#include // 数学函数包含在头文件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;
}
要点总结
#include
乘方: pow(x,y)
正弦: sin(x)
余弦: cos (x)
正切: tan (x)
, 三角函数的角度单位x均为弧度
e x e^x ex : exp(x)
log e x \log_ex logex: log(x)
e为底
log 10 x \log_{10}x log10x : log10(x)
10为底
平方根: sqrt(x)
绝对值: fabs(x)
函数名字母均小写
自变量均为双精度实数, 结果也是双精度实数
while(<条件>)
{
<循环体>
}
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)
;
,而不是等号。一个式子后面写上分号,就是一条语句。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++程序的基本单位。
int main()
{
int a,b;
cin>>a>>b; cout<<a+b<<endl; return 0;
}
系统函数
sin(x)
, cos(x)
, exp(x)
, sqrt(x)
自定义函数
机器语言与自然语言一样,都具有一定的语法,文法,逻辑规则等。
不同点有:
- 自然语言是人与人交流的工具,它具有多义性,模糊性,依托人的常识。
- 机器语言是计算机能理解的语言,它使计算机按一定的模式工作,依托处理器所支持的指令。
比起自然语言,计算机要求更加精准的语法与逻辑规则。
错误的输入,如笔误或缺失或多出某些字是不可行的,或者会使得计算机执行的结果错误。
编译型语言的源代码编译成的机器语言会被保存下来,下次执行时就不需要再编译一次,而是直接执行保存的机器语言,执行效率更高。
解释型语言则翻译一句执行一句,直到命令全部执行完或出现错误,不具有高效性,但是利于人理解。
main函数是主函数,是程序执行的起点。作为程序的执行入口,如果不唯一,那么程序就找不到执行的入口来运行程序,多入口程序不仅会导致程序混乱,而且还会增加内存负担。
cin.getline()
输入的时候每输入一个数据要回车?而使用cin>>
输入可以一行数据多个数据?
cin.getline()
,可以理解为按行输入,以回车为输入的分界符,当输入完一个数据时需要回车。
cin>>
,可以理解为按词输入,以空格、回车或tab键作为分界符,输入完一个数据以空格分开就行,可以输入在一行。
C++是一种( )计算机语言。
A. 面向过程的
B. 面向对象的
C. 数据库编程
D. 网络编程
B
编写C++程序的一般步骤依次是( )。
A. 编辑、调试、编译、运行
B. 编辑、编译、连接、运行
C. 编译、调试、编辑、运行
D. 编译、编辑、连接、运行
B
下列哪行程序的作用是在屏幕上显示“Hello world”这句话。
A. #include
B. using namespace std;
C. cout<<" Hello world ";
D. return 0;
C
C++中的main()函数有且只能有一个。
√
main函数的书写中,main后面紧跟一对圆括号,里面可以什么都不写,再后面是一对大括号,其中写程序。
√
设在程序中用address表示通信地址,说明为char address[100];
若想输入象"No.28, Xian Ning Xi Road"这样(单词间有空格)的地址,应该使用下列哪个语句?
A. cin>>address;
B. cin>>address(s,100);
C. cin.getline(s,100);
D. cin.getline(address,100);
D
若想用width和height表示屏幕的宽度和高度(单位:像素,整数),在C++中使用下列哪个语句来声明?
A. int width, height;
B. double width, height;
C. char width, height;
D. char width[40], height[40];
A
C++中使用数学函数,需要包含的头文件是( )。
A. iostream
B. cmath
C. namespace
D. main
B
C++中的每一条语句后面都必须写分号。
√
C++中使用变量,必须先声明,后使用。
√
下列哪项不是C++的语句?
A. a+b;
B. a;
C. c=a+b
D. c=a+b;
C
语句末尾必须有分号。常量、变量、表达式末尾加分号也是语句。
直接一个分号也是语句——空语句。空语句可以增加程序的可读性,可以作为待写的函数体、循环体、语句块。
设整型变量a,b,c已经声明,下列哪项语句的顺序是正确的?
A.
c=a+b;
cout<<c;
cin>>a>>b;
B.
cin>>a>>b;
c=a+b;
cout<<c;
C.
c=a+b;
cin>>a>>b;
cout<<c;
D.
cout<<c;
c=a+b;
cin>>a>>b;
B
一般计算的顺序是输入、计算、输出。
下列哪个符号不是C++的关键字?
A. distance
B. int
C. using
D. return
A
语言已经规定其意义的符号,一般是关键字。其他的都见过,有特殊意义了。
下列哪个不是C++合法的标识符?
A. int_stu
B. zhao@xjtu
C. _2015
D. _height
B
表示符必须以字母或下划线开始,由字母、数字和下划线组成。
C++程序中cout<
B. 表示程序结束。
C. 表示语句结束。
D. 表示换行(输出换行符)。
D
实际是用符号表示数据,是换行符。
英文单词terminating的含义是( )。
A. 结束、终止
B. 模仿
C. 学期
D. 换行
A
虽不是英语课,编程不免遇到英文,遇到不会的词及时查一查,一学英语,二解问题,以后遇到,不再困惑。
C++中变量的名字只能用一个字母表示。
√
数学中的变量习惯上是一个字母,而程序中的变量可是一串字符,只要符合标识符的命名规则。就是用符号代替数据,是一个代号,不限一个,甚至可以比较长,如6-32个等。
一行程序中,如果连续写了两个分号,编译时会出错。
×
连续写两个分号,第2个分号就是一条空语句,空语句实际是什么也不做,语法是正确的,编译不会出错。
空语句可以增加程序的可读性,可以作为待写的函数体、循环体、语句块。所以,空语句是可以有用的。
C++中使用变量,必须先声明。
√
这是语法规定
C++中的输入可以使用cin,一个cin可以输入多项数据,每项前面加两个大于号。
√
cin>>a>>b;
就是一例。
题目内容
在屏幕上显示下列两句话
Hello C++.
I like programming.
提示:本题与helloworld类似,只是显示多行信息。
输入格式
无
输出格式
两行,单词间一个空格,行末标点为英文句点,每行末尾均有句点,前面没有空格,大小写严格按给出的写,均为英文符号。
输入样例
输出样例
Hello C++.
I like programming.
#include
using namespace std;
int main()
{
cout<<"Hello C++."<<endl;
cout<<"I like programming."<<endl;
return 0;
}
题目内容
编写程序,输入一个人的名字,系统显示Hello ***.。
人名中间可能会有空格。
程序运行结果如下:
Zhang Wei
Hello Zhang Wei.
提示:输入带空格的字符串,用cin.getline()
。
输入格式
一个字符串,中间可能有空格。
输出格式
Hello ***.
注意:单词间一个空格,行末紧跟一个英文句点。
输入样例
Zhang Wei
输出样例
Hello Zhang Wei.
#include
using namespace std;
int main()
{
char name[50];
cin.getline(name,50);
cout<<"Hello "<<name<<"."<<endl;
return 0;
}
题目内容
编写一个乘法计算器程序。用户输入两个数,计算它们的乘积并显示。
程序运行结果如下:
3.4 72
244.8
提示:声明三个double类型的变量,乘法用*号。
输入格式
两个实数,中间用空格隔开。
输出格式
计算结果,实数。
输入样例
3.4 72
输出样例
244.8
#include
using namespace std;
int main()
{
double a, b;
cin>>a>>b;
cout<<a*b<<endl;
return 0;
}
题目内容
编写一个程序,将英寸换算为厘米。输入英寸,输出厘米。
换算关系:1inch=2.54cm
程序运行结果如下:
14
14inch=35.56cm
提示:显示:输入的数、“inch=”、换算结果和"cm"。
输入格式
一个实数。
输出格式
换算式,单位为小写英文字母,等号为英文等号,单位和数字之间没有空格,如:
14inch=35.56cm
输入样例
14
输出样例
14inch=35.56cm
#include
using namespace std;
int main()
{
int inch;
cin>>inch;
cout<<inch<<"inch="<<inch*2.54<<"cm"<<endl;
return 0;
}
题目内容
编写程序,计算一个正数的平方根。用户输入一个正数(可能为实数),输出它的平方根。
程序运行结果如下:
2
1.41421
提示:开平方使用函数sqrt(x)
,x是双精度型,需要包含头文件cmath
。
输入格式
一个正数
输出格式
平方根
输入样例
2
输出样例
1.41421
#include
#include
using namespace std;
int main()
{
double num;
cin>>num;
cout<<sqrt(num)<<endl;
return 0;
}
太简单了,再见
题目内容
输入x、a,计算以a为底 x+sqrt(x*x+1))
的对数 (a>0,a不等于1)的函数值。
提示:C++中没有以任意数a为底的对数函数,但可以使用换底公式(请自己查)
输入格式
实数x,a,之间用空格分隔
输出格式
计算出的结果
输入样例
3 10
输出样例
0.789741
换底公式 log a b = log c b log c a \log_ab=\frac{\log_cb}{\log_ca} logab=logcalogcb
#include
#include
using namespace std;
int main()
{
double x, a;
cin>>x>>a;
cout<<log(x+sqrt(x*x+1))/log(a)<<endl;
return 0;
}
y=(1+1/n)^n
其中^
表示乘方。#include
#include
using namespace std;
int main()
{
int n;
cin>>n;
cout<<pow((1+1.0/n),n)<<endl; // 1.0而不是1/n的目的是强制double
return 0;
}
#include
#include
using namespace std;
int main()
{
double x;
cin>>x;
cout<<sin(x)-log(x)+sqrt(x)-5<<endl;
return 0;
}
题目内容
输入x,计算 y = x x 2 − 3 x + 2 y=\frac{x}{\sqrt{x^2-3x+2}} y=x2−3x+2x的函数值。
提示:x的平方通过xx来计算,3x写成表达式时不能省略乘法运算符。
输入格式
实数x(x>2,或者x<1)
输出格式
计算出的y
输入样例
5
输出样例
1.44338
#include
#include
using namespace std;
int main()
{
double x;
cin>>x;
cout<<x/sqrt(x*x-3*x+2)<<endl;
return 0;
}