C++ 教程 在线

1964cpp-switch

C++ Linux 下字符串简单显示颜色的示例,使用switch语句:

#include <iostream>
#include <string>
 
using namespace std;
void printcolor(string color, string str)
{
  int clr;
  string head;
  string tail;
  string display;
  if(color=="red") clr=1;
  if(color=="green") clr=2;
  switch(clr){
    case 1:{
      head="\033[31m";
      tail="\033[0m";
      display=head+str+tail;
      break;
    }
    case 2:{
      head="\033[32m";
      tail="\033[0m";
      display=head+str+tail;
      break;
    }
    default:{
      display=str;
      break;
    }
  }
  cout << display << endl;
}
 
int main ()
{
   printcolor("red", "helloworld!");
   printcolor("green", "helloworld!");
   return 0;
}

1963cpp-nested-loops

根据质数的倍数一定不是质数,利用线性筛法,可以让时间复杂度达到O(n),代码献上:

//求2~n之间的素数 
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
#define MAXN_N 1000001
int v[MAXN_N],primes[MAXN_N];//primes用来存储素数
int main()
{
    int n,m=0;//m 是素数的数目 
    cout << "输入 n 的值:" << endl;
    scanf("%d",&n);
    memset(v,0,sizeof(v));
    for(int i=2;i<=n;i++)
    {
        if(v[i]==0)//i是素数 
        {
            v[i]=i;
            primes[++m]=i;
        }
        for(int j=1;j<=m;j++)
        {
            if(primes[j]>v[i]||primes[j]>n/i)break;//i有比primes[j]更小的质因子,或者超出范围
            v[i*primes[j]]=primes[j];//primes[j]是合数i*primes[j]的最小质因子 
        }
    }
    for(int i=1;i<=m;i++) cout<<primes[i]<<" ";
    return 0;
} 

1962cpp-nested-loops

筛选法代码查找 2 到 100 中的质数:

#include <iostream>
#include<math.h>
using namespace std;
int main()
{
    int i,j;
    for(i=2;i<100;i++)
    {
        for(j=2;j<=(double)sqrt((double)i);j++)
        {
            if(!(i%j))
                break;//不是质数
        }
        if(j>(double)sqrt((double)i))
            cout<<i<<"是质数\n";
    }
        return 0;
}

1961cpp-for-loop

for语句的基本格式

for (表达式1;表达式2;表达式3) {
    // 循环体语句
}

for 语句中的三个表达式可部分或全部省略,但两个分号不能省略。

常见的是:将表达式1放在了 for 语句之前,或表达式3放在了循环体中,在 for 语句中就可相应地省略表达式1或表达式3。

如:

for(i=1,s=0; i<=100; i++) {
    sum += i;
}

可写成如下形式:

i=1; 
sum=0;
for ( ;i<=100; ) {
    sum+=i;  
    i++;
}      
// 等效于while循环

表达式2也可省略,写成:

for (; ;) {…}

此时,系统约定表达式2的值为 1,即恒为真,则等同于:

for (; 1;) {…}

1960cpp-comma-operator

下面的程序中,j 最初的值为 10,然后自增到 11,接着再加上 100 并将结果赋值给 j,最后 j 再加上 999,得出结果 1110。

#include <iostream>
using namespace std;
int main()
{
   int i, j;
   j = 10;
   i = (j++,j+=100,  999+j);   // i = 10+1+100+999
   cout << i;
   return 0;
}