C++期末复习代码总结(笔记一)

(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;
}
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在下_诸葛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值