system(“pause”)
这个东西会在程序运行结尾提示“Press any key to continue”,用以结束程序。
百度网友给出建议: 不要用system(“pause”)来暂停,可以改用std::cin.get或getchar() 为何不要用system(“pause”)? 有两个理由 A,不具可移植性 B, 这东西很贵
贵在那里?让我们来看看system(“pause”)的流程 1 : 暂停你的程式 2 : 在sub-process中启动OS 3 : 寻找要执行的命令并为之分配记忆体 4 : 等待输入 5 : 回收记忆体 6 : 结束OS 7 : 继续你的程式
算了,我还是继续用我比较顺手的getchar()吧!
? ? ? 如递归所有控件路径,函数将导致运行时堆栈溢出???
题目:输入一个整数,分解质因子:
个人初级版:
int check(
int i,
int k)
{
if(i % k ==
0)
{
if(i / k ==
1)
{
return k;
}
else{
printf(
"%d * ",k);
return check(i/k,k);
}
}
else{
return check(i,k+
1);
}
}
void main()
{
int i =
0,k =
2;
printf(
"请输入一个正整数:\n");
scanf(
"%d",&i);
getchar();
printf(
"%d = ",i);
printf(
"%d",check(i,k));
getchar();
}
当函数有返回值时,所有的路径都需要有返回。
网友版:
void breakUp_primeNub(
int number)
{
int i =
0,j =
0,k =
0;
for (i =
2; i <= number; i++)
{
if (number % i ==
0)
{
j = number / i;
if (j ==
1)
{
printf(
"%d",i);
return ;
}
else
{
printf(
"%d * ",i);
breakUp_primeNub(j);
break;
}
}
}
}
int main()
{
int i =
0;
printf(
"请任意输入一位正整数: ");
scanf(
"%d",&i);
breakUp_primeNub(i);
getchar();
}
非递归做法
int main()
{
int n,i;
printf(
"请输入整数:");
scanf(
"%d",&n);
getchar();
printf(
"%d=",n);
for(i=
2;i<=n;i++)
{
while(n
%i==
0)
{
printf(
"%d",i);
n/=i;
if(n!=
1)
printf(
"*");
}
}
getchar();
return 0;
}
个人究极版
#include<stdio.h>
int main()
{
int n,i =
2;
printf(
"请输入整数:");
scanf(
"%d",&n);
printf(
"%d=",n);
for(i=
2;i<=n;i++)
{
while(n%i==
0)
{
printf(
"%d*",i);
n/=i;
}
}
putchar(
'\b');
system(
"pause");
return 0;
}
真的是这样吗?
不知道为何在上常看见有人宣告”void main” 这东西不是C++的標準進入點 标准只支援两种宣告 第一种”int main” 第二种”int main(int argc, char *argv[])” 宣告”void main”可能会有非预期的结果 这点不只适用于C++,C也一样管用 这是教科书的错?或者是教授们的错?
两个数的最小公倍数 = 两数之积 /两数的最大公约数
如果一个三位数等于它的个十百位三个数的立方和,那么该数是水仙花数。
一个数如果恰好等于它的因子之和,这个数就称为”完数”。
回文数,即对称数,如:12321。
- - - - - - - - - 代码的魅力之一:差之毫厘,谬以千里。
题目找出1000以内的完数:
错误代码:
#include<stdio.h>
void main()
{
int i,j;
for(i=
2;i<=
1000;i++)
{
int sum =
1;
for(j=
2;j<i;j++)
{
if(i%j==
0)
sum += j;
}
if(i ==
sum) printf(
"%d ",i);
}
getchar();
}
正确代码:
#include<stdio.h>
void main()
{
int i,j,
sum =
1;
for(i=
2;i<=
1000;i++)
{
for(j=
2;j<i;j++)
{
if(i%j==
0)
sum += j;
}
if(i ==
sum) printf(
"%d ",i);
}
getchar();
}
区别于以往的累加动作,此题只有在进入第二层循环体时才需要进行累加,并且需要保证每次进入时的初值都一样。所以每进去第一层循环时sum都有一个复位的动作,所以必须在里面定义。
转载请注明原文地址: https://ju.6miu.com/read-1297132.html