【码图】C++程序设计(2023)第7章 作业1

说实话,作为泥电的计算机学生,我实在很想吐槽码图:界面丑还可以忍,但是每次提交作业总是因为一些奇奇怪怪的原因给你扣分。一道简单的编程题都要花费大量的时间来匹配能拿满分的答案。不做的话,期末挂科等着你(平时分占比挺高的)。

明明可以不用花费那么多精力在这些无聊的细枝末节上,自己对编程的兴趣未过码图已然成灰。故留下答案,启示后人。。。。。

已经测试过了,可以拿满分。

😅

  1. 输出n!(C++)

通过课程进入

题 号:

126

输出n!(C++)

语言要求:

C++

求n!(n由键盘输入),当结果将要超出表示范围时退出(以32位机器为例),显示溢出前的n以及n!结果。

输入输出示例:

输入:

5

输出:

5!=120

#include<iostream>
using namespace std;

int factorial(int n);
 
int main()
{
    int n,x;
    cin >> n;
    x = factorial(n);
    if (n < 0)
        cout << "error";
    if(n>12)
//当结果将要超出表示范围时退出(以32位机器为例),显示溢出前的n以及n!结果。
        cout << 12 << "!=" << x;
    if (n >= 0 && n <= 12)
        cout << n << "!=" << x;
    return 0;
}
int factorial(int n)
{
    if (n > 12)
        return factorial(12);
    if ((n == 1) || (n == 0))
        return 1;
    if ((n != 1)&& (n != 0))
        return n * factorial(n - 1);
};

注意:

计算 n! 的结果需要使用一个容纳至少 n 个数字的数据类型,比如 int、long 或 long long,等等。由于计算机内部表示数字的方式是二进制,所以在有限内存空间下,能够储存的最大数值也是有限的。

当输入的 n 越来越大时,其阶乘的结果就会超出这些数据类型能够表达的范围,导致上溢(overflow)。

以32位的int为例,它的范围是-2^31到2^31-1,也就是-2147483648 到 2147483647 之间。当n比较小时,可以使用int型存储阶乘结果,但是当n>12时就有可能超过该范围,因此需要使用更大的数据类型(如long long)。

故只有if (n >= 0 && n <= 12)范围内有效!

😤

  1. 将回车和制表符转成可见(C++)

通过课程进入

题 号:

130

将回车和制表符转成可见(C++)

语言要求:

C++

函数expand(char *s ,char *t) 在将字符串s复制到字符串t时,将其中的换行符

和制表符转换为可见的转义字符,即用"\n"表示换行符,用"\t"表示制表符。请填空。

void expand (char *s ,char *t)

{

for(int i =0, j=0;s[i] !='\0';i++)

switch(s[i]){

case'\n';t[___①___] =____②___;

t[j++] ='n';

___③___;

case'\t';t[___④___] =____⑤___;

t[j++] ='t';

break;

default: t[____⑥___] = s[i];

break;

}

t[j] =___⑦____;

}

完整代码:

void expand(char* s, char* t)
{
    int i = 0, j = 0;
    for (i = 0, j = 0; s[i] != '\0'; i++)
        switch (s[i]) {
        case'\n':
                 t[j++] = '\\';
                 t[j++] = 'n';
                break;
        case'\t': 
                    t[j++] = '\\';
                    t[j++] = 't';
                    break;
                default: t[j++] = s[i];
                    break;
        }
    t[j] = '\0';
}

Q.为什么是 t[j++] = '\\';而不是 t[j++] = '\';

A.这是因为在代码中需要用反斜杠(\)来表示转义字符,例如\n就表示换行符。而反斜杠本身也是一个转义字符,如果要在字符串中表示反斜杠本身,需要使用两个反斜杠(\\)。所以,在将换行符和制表符转换为可见的转义字符时,需要用双反斜杠来表示单个反斜杠。因此,正确的写法是t[j++] = '\\';。

  1. 输出由星号组成的倒三角形

通过课程进入

题 号:

144

输出由星号组成的倒三角形

语言要求:

C++

输出由*组成的倒三角形。本程序需指定顶边长度。自顶边起,每往下一行,长度都会减少2。倒数第二排输出***,倒数第一排输出*。每行中间需对齐,每行的最后一个*后输出回车。

程序的输入为顶边长度,该长度有以下要求:范围为1-80;必须为奇数(因为每往下一行,*的数量都会减少两个,而最后一行长度为1)。

如果输入错误的边长,输出error。

例如,

输入1,输出*(行尾回车)

输入2,输出error

输入3,输出如下

***(行尾回车)

*(行尾回车)

输入5.输出如下

*****(行尾回车)

***(行尾回车)

*(行尾回车)

#include <iostream>
using namespace std;

int main(){
    int n;
    cin>>n;
    if(n%2==0||n<1||n>80) 
            printf("error");
    else{
        for(int i=0;i<=(n-1)/2;i++){
            //i表示行
            for(int j=0;j<=(n-i);j++){
            //j表示列
                if(j<i) cout<<" ";
                else if(j==n-i) cout<<"\n";
                else cout<<"*";
            }
        }
    }
    return 0;
}

that‘s all,thanks.

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值