21C++数组(2)——教学

一、字符数组的输入与输出

  (第65课 采访报道) 教学视频
  大惊小怪报和小惊大怪报是两家全球性的报社,发表的文章全用英文。因风之巅小学的信息学社团开展得很出色,于是两家报社都派记者前来采访,大惊小怪报采访尼克,小惊大怪报采访格莱尔。他俩写好采访稿后,想用一个字符个数统计程序比一比谁的字符数多,于是向狐狸老师求助。
编程:输入一段英文,统计字符个数(包含空格)和'.'出现的次数,再输出这段英文(字符数量不超过 2000 个)。一段英文其类型为字符串,但我们也可以用一个字符数组来存放一个字符串中的字符。
  为了测定字符数组中字符串的实际长度, C++规定了以字符'\0'代表一个“字符串结束”,一个字符串常量,系统会自动在所有的字符后面加一个'\0'作为结束符,然后再把它存储在字符数组中。在程序中往往依靠检测'\0'的位置来判定字符串是否结束,而不是根据数组的长度来决定字符串长度。流程图如图所示:

#include <iostream>
#include <cstdio> //调用gets()和puts()函数 
using namespace std; 
int main()
{
   char str[2000]; 
   int i,num,numa;
   num=numa=0;
   gets(str);
   for(i=0;str[i]!='\0';i++)
   {  
    .......

   }
   puts(str);
   cout<<"字符个数 :"<<num<<endl;
   cout<<".的个数:"<<numa<<endl;  
   return 0;
}

运行结果:
Glair is an expert programmer.(回车)(格莱尔是个编程高手。)
Glair is an expert programmer.
字符个数:30
.的个数:1
  使用cin语句输入字符中时,遇到空格就结束,也就是说只能输入一个单词,而不能输入整行或包含空格的字符中,而用字符数组输入函数gets()输入字符串时可以包含空格。用cout语句可以输出包含空格的字符串,但字符数组输出函数puts()输出时会自动加上换行符,而cout语句不会。

小提示:需要注意的是,使用gets(str)和puts(str)时,不能把str定义为字符串string型,只能定义为字符数组,否则编译时会出错。
  C++允许一种特殊的字符常量,就是以一个“\”开头的字符序列,如'\0'代表字符串结束标志。这是一种“控制字符”,是不能在屏幕上显示的,在程序中无法用一个一般形式的字符表示,只能采用特殊形式来表示。以''开头的特殊字符,称为转义符。部分转义符如表所示:

注:
gets [gets]get string的缩写 字符数组输入(字符串输入)
puts [puts]put string的缩写 字符数组输出(字符串输出)

二、字符串的输入与输出

  (第66课 恺撒加密术)教学视频

  加密术最早应用于古代战争。古罗马时期,恺撒大帝曾经使用密码来传息,它是一种替代密码,对于信件中的每个字母。会用它后面第i个字母代。
试编一程序,将输入的一段英文字符加密后输出,只加密字母,加密的规则是用原来字母后面的第1个字母代原来的字母,即用'b'代替'a',用'c'代替'b',······,用'a'代替'z',如图所示。

  当把字符直接定义为string型时,可以用getlinet()函数来读取字符串,如“getline(cin,strl)”,其中cin指的是输入流,strl是从输入流中读入的字符串存放的变量。加密时只要依次读取字符中每个字符进行加密即可,流程图如下两图所示。

#include <iostream>
#include <string>
using namespace std;  
int  main()
{
  char s;
  string str1,str2;
  getline(cin,str1);
  int i;
  str2="";                       //空串也是字符串
  for(i=0;i<str1.size();i++)    //str1.szie()返回str1中字符个数
  {    
    s=str1[i];
    if((s>='a'&&s<='z')||(s>='A'&&s<='Z')) 
    { 
     ........
    }
    str2+=s; 
  }
  cout<<str2;
  return  0;
}

运行结果:
Nike is excellent!(尼克是个非优秀的孩子!)
Ojlf jt fydfmmfoul!

  恺撒加密术看起来非常巧妙,但随着计算机的诞生现已基本失效,因为它根本抵挡不住计算的枚举分析。当前计算机中使用比较广泛的加密算法有:RSA算法(公钥加密算法)、DES算法(又称“美国数据加密标准”,是一种对称加密算法)、IDEA算法(国际数据加密算法)。
英汉小词典
getline['getlain]从输人流中读人一行(字符串)

三、筛选法

  (第67课 快速求素数)教学视频
  筛选法是古希著名数学家埃托色尼提里的一种求素数的方法。如求100以内的素数,他采取的方法是,先在一张纸上按顺序写出1~100的全部整数,然后按下列步操作:先把1删除(1既不是素数也不是合数);读取当前剩下数中最小的数2,然后把2后面的是2的倍数的数删去;读取当前剩下数中最小的数3,然后把3后面的是3的倍数的数删去;该取当前剩下数中最小的数5、然后把5后面的是5的倍数的数删去······。以此类推,直到所有的数均删除或读攻。剩下未删除的数就是素数。
试编一程序,用选选法输出100以内所有的素数,并统计个数。
流程图如下图:

#include <iostream> 
#include <iomanip>
using namespace std;
int main()
{
  int a[101];
  int i,j,num;
  for(i=2;i<=100;i++)
    a[i]=true;
  a[0]=a[1]=false; 
  i=1; 
  do
  {
    ....

    }
  }while(i<100); 
  num=0;
  for(i=1;i<=100;i++)
  {  
    if(a[i])
    {
      cout<<setw(6)<<i; 
      ......

    } 
  }
  cout<<endl;
  cout<<"100以内素数个数:"<<num<<endl;
  return 0;
}
posted @ 2025-04-21 21:20  gdyyx  阅读(42)  评论(0)    收藏  举报