说实话,作为泥电的计算机学生,我实在很想吐槽码图:界面丑还可以忍,但是每次提交作业总是因为一些奇奇怪怪的原因给你扣分。一道简单的编程题都要花费大量的时间来匹配能拿满分的答案。不做的话,期末挂科等着你(平时分占比挺高的)。
明明可以不用花费那么多精力在这些无聊的细枝末节上,自己对编程的兴趣未过码图已然成灰。故留下答案,启示后人。。。。。
已经测试过了,可以拿满分。
😅
输出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)范围内有效!
😤
将回车和制表符转成可见(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++] = '\\';。
输出由星号组成的倒三角形
通过课程进入 | 题 号: | 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.