1. 表达式和表达式语句的区别:
主要参考自:https://segmentfault.com/q/1010000005850429/a-1020000005856050
表达式+分号=表达式语句,一般用表达式语句时只关心它的作用,而不关心它的值,如put("hello"),只关心该语句的作用是输出hello,而不关心put的返回值。
2. 输入圆的半径和高,求圆的周长、面积、球的表面积、体积、圆柱体积,保留两位小数
//输入圆的半径和高,求圆的周长、面积、球的表面积、体积、圆柱体积
#include
#include
#include
using namespace std;
#define pi 3.1415926
int main()
{
float r,h,c,a,s,v1,v2;
cout << "please input r and h:";
cin >> r >> h;
if(r <= 0 || h <= 0) cout << "Please enter a number greater than zero";
else
{
//圆周长
c = 2 * r * pi;
cout << "The circumference of the circle is "<
此题注意几点:
(1)C++中pi的定义:
直接定义:double const PI=3.14159265;
定义宏:#define PI 3.14159265 (末尾没有分号)
通过反三角函数求的: double const PI = acos(double(-1)); //这里得到的是3.14159
(2)C++中次方函数:
头文件加上#include
(3)C++中保留固定的小数位数:
头文件加上#include
setiosflags(ios::fixed)表示设置浮点数以固定的小数位数显示;
setprecision(n)设置浮点数的精度为n,在以一般十进制小数形式输出时,n指有效数字位数,在fixed(固定小数位数)形式及scientific(指数)形式显示时,n为小数,这也就是本题中为啥加上述setioslflags的原因,否则输出会一共两位。
(4)分数的表达:
如果想要结果是浮点数,一定写成浮点数形式,否则就会求出整数。
3. 华氏温度转换为摄氏温度,公式c = 5/9(F-32),保留两位小数。
//华氏温度转换为摄氏温度,公式c = 5/9(F-32)
#include
#include
using namespace std;
int main()
{
float c,F;
cout << "Please enter Fahrenheit: ";
cin >> F;
c = 5.0/9.0 * (F-32);
cout << "The Celsius temperature corresponding to the Fahrenheit temperature is "
<
4. getchar()读入两个字符,分别用putchar()和cout输出
//getchar()读入两个字符,分别用putchar()和cout输出
#include
using namespace std;
int main()
{
char c1,c2;
int a1,a2;
c1 = getchar();
c2 = getchar();
//putchar输出
putchar(c1);
putchar(c2);
putchar('\n');
//cout输出
cout << c1;
cout << c2;
putchar('\n');
//ASCII码
a1 = c1;
a2 = c2;
cout << a1;
cout << a2;
return 0;
}
此时注意:
(1)getchar和putchar每次都只能输入输出一个字符,所以连续两个字符输入时中间不应该有空格,否则会把空格当做字符传给putchar();
(2)要ASCII码时,把字符型赋给整型,用cout输出即可
5. char和int型任何时候都可以互相代替吗?
不可以:
char的范围是有符号-128 ~ 127无符号0 ~ 255;
int的范围是-32768 ~ 32767;
所以只有当你表示的数据的值在它们的公共范围之内是可以替换的,如果不在公共范围之内就不可以替换。
解释可见:https://blog.csdn.net/zhjqxy/article/details/52975140
6. C++中的算数运算、关系运算以及逻辑运算:
详见:https://blog.csdn.net/zl3090/article/details/84303183
7. C++中如何表示“真”和“假”?系统如何判定一个量的“真”和“假?
C++编译系统在表示逻辑运算结果时,以数值1代表“真”,以0代表“假”,比如:a、b的值分别是0、4,则a||b的值为1,a&&b的值为0。但在判断一个量是否为“真”时,以0代表“假”,以非0代表“真”,比如:a=4,因为a的值为非0,被认作“真”,所以对它进行“非”运算!a=0。
参考自:https://zhidao.baidu.com/question/193053972.html
9. 输出a,b,c三个整数中最大的数
#include
using namespace std;
int main()
{
int a, b, c, max;
cin >> a >> b >> c;
max = (a > b) ? a : b;
max = (c > max) ? c : max;
cout << max;
return 0;
}
在c++中max和min都不是关键词,所以可以作为变量名,关于c++中max和min的用法可以详见:
https://blog.csdn.net/wings_zhang/article/details/79053861
https://blog.csdn.net/a_ran/article/details/74911031
//分段函数求值
#include
using namespace std;
int main()
{
int x,y;
cin >>x;
if (x<1) y = x;
else if (x<10) y = 2*x - 1;
else y = 3 * x - 11;
cout << y;
return 0;
}
11. 给定分数输出等级:
//给定分数输出等级
#include
using namespace std;
int main()
{
int score,grade;
cin >> score;
if (score>=90) cout << 'A';
else if (score >= 80) cout << 'B';
else if (score >= 70) cout << 'C';
else if (score >= 60) cout << 'D';
else cout << 'F';
return 0;
}
此题需要注意:不用switch的原因是,case后边要的是常量表达式,score是变量而不是常量所以在case后加score>90之类的表达式,除非把score全都枚举出来可以用case。
12. 打印一个不多于5位的正整数,要求:
(1)输出位数;
(2)打印每一位数字;
(3)逆序打印每一位数字
#include
using namespace std;
int main()
{
int x;
int flag;
int temp;
int i,j,k;
int num[5];
cin >> x;
flag = 0;
temp = x;
i = 0;
j = 0;
k = 0;
//求位数
while(temp > 0)
{
num[i] = temp % 10;
cout << num[i];
i ++;
temp = temp / 10;
flag ++;
}
cout <<"位数:"<< flag <<'\n';
cout <<"顺序打印每一位"<<'\n';
for (j = flag-1; j >= 0; j--)
{
cout << num[j]<<'\t';
}
cout <<'\n';
cout <<"逆序打印每一位"<<'\n';
for (k = 0; k < flag; k++)
{
cout << num[k]<<'\t';
}
}
此处要注意的是边界问题,
while中的条件,如果设置为>10,则会落下第一位,>0可以保证所有的位都被单独求出;
顺序打印时,j从后往前取,要注意数组是0开头的,所以实际最后一位的索引是它位数值减去1;
逆序打印时,从前往后取,第一位的索引为0,停止条件仍然是取到了最后一位,还是索引值减一。
更多思路详见:https://blog.csdn.net/qq_15029743/article/details/79634725
13.阶梯奖金问题:分别用if和switch编程
(1)if的代码:
//阶梯奖金问题
#include
using namespace std;
int main()
{
float i,y;
cin >> i;
i = i/100000;
if (i<=1) y = i*0.1;
else if (1
(2)switch的代码:
#include
using namespace std;
int main()
{
float i,y;
int c;
y = 0;
cin >> i;
if (i>1000000) c = 11;
else c = i/100000;
i = i/100000;
switch(c)
{
case 0:
case 1: y = i*0.1;break;
case 2: y = 1*0.1+(i-1)*0.075;break;
case 3:
case 4: y = 1*0.1+1*0.075+(i-2)*0.05;break;
case 5:
case 6: y = 1*0.1+1*0.075+2*0.05+(i-4)*0.03;break;
case 7:
case 8:
case 9:
case 10: y = 1*0.1+1*0.075+2*0.05+4*0.03 +(i-6)*0.015;break;
case 11: y = 1*0.1+1*0.075+2*0.05+4*0.03 +4*0.015 + (i-10)*0.01;break;
}
y = y*100000;
cout << y;
}
14.输入4个整数,由小到大输出
此处用了冒泡排序
//4个整数排序
#include
using namespace std;
int main()
{
int a,b,c,d;
cin >> a >> b >> c >> d;
int num[4]={a,b,c,d};
int i = 0,j = 0,t = 0,k =0;
for (i=0;i<=3;i++)
{
for (j=i+1;j<=3;j++)
{
if (num[i]>num[j])
{
t = num[i];
num[i] = num[j];
num[j] = t;
}
}
}
cout <<"由小到大输出:"<<'\n';
for (k=0;k<=3;k++)
{
cout<
15. 求两个数的最大公约数和最小公倍数
可以用辗转相除法求最大公约数,然后用两数乘积除以最大公约数则可得到最小公倍数,
方法详解见:https://blog.csdn.net/passandpass/article/details/53039923
//最大公约数和最小公倍数
#include
using namespace std;
int main()
{
int m,n,a,b,c;
cin >> m >> n;
if (m > 0 && n > 0)
{
a = m;
b = n;
do{
c = a % b;
a = b;
b = c;
}while(c);
cout << "最大公约数为:"<< a <<'\n';
cout <<"最小公倍数为:" << n*m/a <<'\n';
}
else
cout <<"请重新输入数字"<<'\n';
}
16. 输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
//统计字符串中英文字母、空格及其他的个数
#include
using namespace std;
int main ()
{
char c;
int letters=0,spaces=0,digits=0,others=0;
while((c=getchar())!='\n')
{
if (c>='a'&& c <= 'z'||c>='A'&&c<='Z')
letters ++;
else if (c == ' ')
spaces ++;
else if (c>=0&&c<=9)
digits ++;
else
others ++;
}
cout << "字母共有:"<
此题巧用了while,一边输入一边判断,避免了字符串逐个读出的过程。
17. 求Sn = a+aa+aaa+...+aaa...aaa(n个a)的值,a代表1-9的某个数字
//求Sn=a+aa+aaa+...
#include
#include
using namespace std;
int main()
{
int a,n,Sn,i,s;
cin >> a >> n;
Sn = 0;
s = 0;
for (i = 0; i
18. 求,即1!+2!+...+n!
//求阶乘的和
#include
using namespace std;
int main()
{
int n,s,Sn,i;
cin >> n;
s = 1;
Sn =0;
for (i =1; i<=n; i++)
{
s = s * i;
Sn = Sn + s;
}
cout << "阶乘之和为:" << Sn;
}
19. 输出所有三位的水仙花数,水仙花数是每个数字的立方和等于该数,如153 = 1^3+5^3+3^3
//水仙花数
#include
using namespace std;
int main()
{
int n,a,b,c;
for (n=100;n<=999;n++)
{
a = n % 10;//个位
b = n % 100/10;//十位
c = n/100;//百位
if (a*a*a + b*b*b +c*c*c == n)
cout <<"水仙花数有:"<< n <<'\n';
}
}
20. 输出1000之内所有的完数,完数是指该数等于其所有因子的和,如6=1+2+3
//完数
#include
using namespace std;
int main()
{
int m,s,i;
for (m = 2; m <= 1000; m++)
{
s = 0;
for (i = 1; i < m; i++)
{
if ((m%i)==0)
s = s + i; //因子和
}
if (s == m)
{
cout<
此题注意,跳出固定思维,先找因子,再找完数,直接在第一次需要因子时直接求和就好。
21. 序列求和:
//数列求和
#include
using namespace std;
int main()
{
int n,i,t;
float a,b,s;
a = 1;
b = 2;
s = 0;
cin >> n;
for (i = 1; i<=n; i++)
{
s = s + b / a;
t = b;
b = a + b;
a = t;
}
cout << s <<'\n';
}
此题要注意的是t为int型,而a,b,s均为浮点型
22. 猴子吃桃问题:猴子第1天摘了若干个桃子,当即吃了一半零一个;第2剩下的吃了一半零一个,一次循环。到第十天时想吃就剩下一个桃子。求第一天摘了几个桃子?
//猴子吃桃
#include
using namespace std;
int main()
{
int a,i;
a = 1;
for (i = 9; i >= 1; i --)
{
a = 2 * a + 2;
}
cout << a;
}
此题采用逆向思维比较顺:
假设第n天剩下的桃子数为an,总桃子数为s;
据题意:a1 = s - (s/2+1) = s/2-1
a2 = a1 - (a1/2+1) = a1/2-1
an = a(n-1)/2-1
已知a10 = 1,由此可以逆推a9,以此类推,直到a1,再由a1逆推出s
逆推公式为:a(n-1) = 2*an +2,因此得到上述代码。
23. 用迭代法求 x=,求平方根的迭代公式为 Xn+1=(1/2)(Xn+a/Xn),要求前后两次求出的X的差的绝对值小于10-5。
//迭代法求根号a
#include
#include
using namespace std;
int main()
{float a,x0,x1;
cout<<"enter a positive number:";
cin>>a; // 输入a的值
x0=a/2;
x1=(x0+a/x0)/2;
do
{x0=x1;
x1=(x0+a/x0)/2;
}
while(fabs(x0-x1)>=1e-5);
cout<<"The square root of "<
24. 输出以下图形
//输出星号图案
#include
using namespace std;
int main()
{
int i,k;
//上半部分
for (i = 0; i < 4; i++)
{
for (k = 0; k < 2*i+1; k++)
{
cout <<'*';
}
cout <<'\n';
}
//下半部分
for (i = 0; i <= 2; i++)
{
for(k = 0; k <= 4-2*i; k++)
{
cout << '*';
}
cout <<'\n';
}
}
此题依然需要注意边界问题
25. 两个乒乓球队进行比赛,各出三人。甲队为A、B、C 3人,乙队为X、Y、Z 3人。已抽签决定比赛名单。有人向队员打听比赛的名单,A说他不和X比,C说他不和X、Y比,请编程序找出3三队选手的对阵名单。
//乒乓球赛
#include
using namespace std;
int main()
{
char i,j,k; //i是a的对手;j是b的对手;k是c的对手
for (i='X';i<='Z';i++)
for (j='X';j<='Z';j++)
if (i!=j)//排除相同的人和自己比
for (k='X';k<='Z';k++)
if (i!=k && j!=k)//排除相同的人和自己比
if (i!='X' && k!='X' && k!='Z') //题目中限制的三个条件同时满足
cout<<"A--"<
此题用了三重循环,即把X,Y,Z分别枚举自己后边跟着谁,排除自己后按照题中的限写出即可。