(1)下列程序用来计算某年某月某日与同年的某月某日之间的天数。
注:若月、日数均相同,则计为1天。
#include <iostream>
using namespace std;
int main()
{
int y, m1, d1, m2, d2;
int i, d;
scanf("%d,%d,%d,%d,%d", &y, &m1, &d1, &m2, &d2);
y = (y % 4 == 0 && y % 100 != 0 || y % 400 == 0) ? 1 : 0;
d = 0 - d1;
for (i = m1; i < m2; i++)
switch (i)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
d += 31;
break;
case 2:
d = d + 28 + y;
break;
case 4:
case 6:
case 9:
case 11:
d += 30;
}
printf("%d", d + d2 + 1);
}
(2)
#include "stdio.h"
int main()
{
int a, b, c, d = 241;
a = d / 100 % 9;//241/100=2;2%9=2
b = (-1) && (-1);//正确=1
printf("%d,%d", a, b);
a = b = c = 1;
++a || ++b && ++c;//a=2;正确后不执行
printf(",%d,%d", a, b);
return 0;
}
(3)
#include "stdio.h"
int main()
{
int a = 5, b = 0, c = 0, m = 5;
if (a == b + c)
printf("***\n");
else
printf("$$$\n");
if (m++ > 5)
printf("%d\n", m);
else
printf("%d\n", m--);
printf("%d\n", m);
return 0;
}
(4)将输入的小写字母后移5个位置输出,如‘a’→’f’。
#include "stdio.h"
int main()
{
char c;
c = getchar();
if (c >= 'a' && c <= 'u')
printf("%c", c + 5);
else if (c >= 'v' && c <= 'z')
printf("%c", c - 21);
return 0;
}
(5)计算x,y,z三个数中值最小的并输出。
#include "stdio.h"
int main()
{
int x = 4, y = 5, z = 8;
int u, v;
u = x < y ? x : y;
v = u < z ? u : z;
printf("%d", v);
return 0;
}
(6)要求输入整数a和b,若a2+b2 >100,输出a2+b2百位以上的数字,否则输出两数之和。
#include <iostream>
using namespace std;
int main()
{
int a, b, c, d = 0, bw;
int arr[11];
cin >> a >> b;
if (a * a + b * b > 100)
{
c = (a * a + b * b) / 100;
while (c != 0)
{
bw = c % 10;
c = c / 10;
arr[d] = bw;
d++;
}
for (d = d - 1; d >= 0; d--)
cout << arr[d] << " ";
}
else
cout << a + b;
}
(7)字母金字塔
#include <iostream>
using namespace std;
int main()
{
int n, i, j;
cin >> n;
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n - i; j++)
cout << " ";
for (char a = 'A'; a < 'A' + i; a++)
cout << a << " ";
for (char b = 'A' + i - 2; b >= 'A'; b--)
cout << b << " ";
cout << endl;
}
return 0;
}
(8)编写程序用公式计算e的近似值。直到最后一项小于给定精度。
分析:这是一个累加求和的问题,仔细分析各项,可以发现从第二项开始,各项的值为前一项除以序号n:
#include <iostream>
using namespace std;
int main()
{
double e = 1.0, x = 1.0, y, z;
int n = 1;
cout << "input 精度:";
cin >> z;
y = 1 / x;//x1=1/x
while (y >= z)
{
x *= n;
y = 1 / x;//x2=x1/n=1/nx
e += y;//e=x1+x2+...
++n;
}
cout << e << endl;
return 0;
}
(9)编写程序打印如图2所示蝶形图形。
分析:此图形为上下对称结构,用-3~3的整数标识行号i,则每行字符“B”的个数可表示为6*|i|+3。每行字符“B”前空格的个数随着|i|的增大而减少,空格的个数要大于0。
#include <iostream>
using namespace std;
int main()
{
int i, j, k, d;
for (i = -3; i <= 3; i++)
{
cout << endl;
d = i;
if (i < 0)
d = -i;
for (j = 1; j <= 10 - 3 * d; j++)
cout << " ";
for (k = 1; k <= 6 * d + 3; k++)
cout << "B";
}
cout << endl;
return 0;
}
(10)从键盘输入任意多个整数(-999为结束标志),计算其中正数之和。
分析:采用转向语句break和continue实现。break在循环体中用于退出本层循环;continue用于结束本次循环。
#include <iostream>
using namespace std;
int main()
{
int x, s = 0;
while (1)
{
cin >> x;
if (x == -999)
break; //A
if (x < 0)
continue; //B
s = s + x;
}
cout << "s=" << s << endl;
return 0;
}