The C++ Programming Language 第五章 作业


//The C++ programming language 作业 5.9.1

//写出声明:到字符的指针,包含10个整数的数组,包含10个整数数组的引
//用,到字符串数组的指针,到字符的指针的指针,常量整数,常量整数的
//指针,到整数的常量指针。

#include

void main()
{
 char* a="i love bb!!";
 cout< int b[10]={1,2,3,4,5,6,7,8,9,10};
 for(int i=0;i<10;i++)cout< cout< int *c=b;
 for(i=0;i<10;i++)cout<<*c++<<" ";
 cout< char d[]="i love bb!!";
 char *e=d;
 for(i=0;*e!=0;i++)cout<<*e++;
 cout< char** f=&a;    //和int**有点不一样
 cout<<*f< char*** g=&f;
 cout<<**g< const int h=321;
 cout< int const* j=&h;
 cout<<*j< j=&i;
 cout<<*j< int *const k=&i;
 cout<<*k< *k=13;
 cout<<*k<}




//The C++ Programming Language 作业 5.9.3

//用typedef定义:
 //unsigned char,const unsigned char
 //到整数的指针
 //到字符的指针的指针
 //到字符的数组的指针
 //7个整数的指针的数组
 //到包含7个整数的指针的数组的指针
 //包含8个数组的数组,其中每个数组包含7个到整数的指针

#include
void main()
{
 //typedef unsigned char or const unsigned char
 typedef unsigned char uc;
 typedef const unsigned char cuc;
 uc a;
 a='g';
 cout< cuc b=a;    //必须初始化
 cout< //b='f';    //错误,const型

 //到整数的指针
 int* c=new int(123);
 cout<<*c< 
 //到字符的指针的指针
 char *d="hahaha";
 char **e=&d;
 cout< cout<<*e< 
 //到字符的数组的指针
 char f[10]="aaabbbccc";
 char *f1=f;
 cout< cout<

 //7个到整数的指针的数组
 int* g[7];
 for(int i=0;i<7;i++)
  g[i]=new int(i*100);  //申请7个整数,并把地址送给g[i]
 for(i=0;i<7;i++)
  cout< for(i=0;i<7;i++)
  cout<<*g[i]<

 //到包含7个整数的指针的数组的指针
 int** h=g;
 for(i=0;i<7;i++)
  cout<<*h++<         //也可以用cout< h-=7;       //还原指针地址
 for(i=0;i<7;i++)
  cout<<**h++<

 //包含8个数组的数组,每个数组包含7个到整数的指针
 int **j[8]={g,g,g,g,g,g,g,g};
 int k=0;
 for(i=0;i<8;i++)
 {
  cout<<"j["<  for(k=0;k<7;k++)
   cout<<*j[i][k]<<" ";
  cout< }
 //如果一个数组的元素是数组,也就是说这个数组的元素是另一数组的首地址,
 //是一个指针,那么这个数组也是一个指针,本例的j就是一个指向8个数组的
 //指针的指针。
}




//The C++ Programming Language 作业 5.9.4

//写一个函数,它交换两个整数(交换它们的值)。用int*作形参。再写
//另一个交换函数,用int&作形参。


#include
void swap1(int* a,int* b)
{
 int t=*a;
 *a=*b;
 *b=t;
}
void swap2(int& a,int& b)
{
 int t=a;
 a=b;
 b=t;
}
void main()
{
 int a=11,b=22;
 swap1(&a,&b);   //指针必传地址
 cout<<"a:"< swap2(a,b);    //引用直接传变量就可以了
 cout<<"a:"<}


//The C++ Programming Language 作业 5.9.6

//定义函数f(char),g(char&),h(const char&)之后,用参数'c',49,3300,c,uc,sc
//作为参数调用它们,其中c是char,uc是unsigned char,sc是signed char。哪些调
//用是合法的?哪些调用将导致编译器引起临时变量

#include
void f(char a)
{cout<void g(char &a)
{cout<void h(const char &a)
{cout<void main()
{
 char c='d';
 unsigned char uc='e';
 signed char sc='f';
 int i=77;
 f(i); 
 f('c');     
 f(49);
 f(127);
 f(3300);    //引起警告,将const int赋值给char,无意义
 f(c);
 f(uc);
 f(sc); 
 cout< //g('c');    //错,不能将const char转为char&
 //g(49);    //错,不能将const int转为char&
 //g(3300);    //错,不能将const int转为char&
 g(c);     //OK,可以将char转为char&
 //g(i);     //错,不能将int转为char&
 //g(uc);    //错,不能将unsigned char 转为char&
 //g(sc);    //错,不能将signed char 转为char&
 cout< h('c'); 
 h(49);
 h(3300);    //引起警告,将const int赋值给char,无意义
 h(c);
 h(uc);
 h(sc); 
 char p=0;
 cout< cout< //实参为'c',49,3300时,调用函数均会使编译器引进临时变量。
}

//结论:

//char的范围是-128至127,超出界限则进行隐式转换,编译器会警告,如3300。

//1,以char作为函数形参:
  //可以接受char,int,const int,signed char,unsigned char等类型
  //是因为传入实参只在函数体中使用,不会影响函数外的实际变量,所以接受。
//2,以char&作为函数形参:
  //只能接受char类型。
  //是因为传入实参是引用外部变量,会间接修改外部值,存在一些不安全
  //的隐式转换,所以除char外的类型都不接受。
//3,以const char&作函数形参:
  //可以接受char,int,const int,signed char,unsigned char等类型
  //主要是因为是const,所以在函数体中不会修改实参,所以接受。




//The C++ Programming Language 作业 5.9.10

//定义一个字符串的数组,其中的字符串保存的是月份的名字。打印出这些字符串
//将这些字符串传递给一个函数并打印出来。


#include
void printm(char** a)
{
  for(int i=0;i<12;i++)
  cout<}
void printm1(char* a)
{cout<void main()
{
 char* month[12];
 month[0]="一月";
 month[1]="二月";
 month[2]="三月";
 month[3]="四月";
 month[4]="五月";
 month[5]="六月";
 month[6]="七月";
 month[7]="八月";
 month[8]="九月";
 month[9]="十月";
 month[10]="十一月";
 month[11]="十二月";
 
 for(int i=0;i<12;i++)
  cout<

 cout< printm(month);
 cout< printm1(month[0]);
}

//传递存有字符串的数组,类型应为指针char指针的指针




//The C++ Programming Language 作业 5.9.11:

//从输入读一系列的单词,使用Quit作为输入的结束单词。按照读入的顺序打印出这些单词,
//但同一个词不要打印两次,打印前对单词排序。

//用char做的,一个字,烦.....

#include
bool hehe(char* a,char *b)
{
 while(*a!=0)
  if(*a++!=*b++)return 0;
 if(*b!=0)
  return 0;
 else
  return 1;
}
bool findchar(char *s[],char *d,int n)
{
 for(int i=0;i  if(hehe(s[i],d))return 1;
 return 0;
}
char *nchar(char* a)
{
 char *b=new char;
 char *t=b;
 while(*a!=0)
  *t++=*a++;
  *t='/0';
 return b;
}
void main()
{
 char* cxbb[100];
 int i=0;
 cxbb[99]=new char;
 while(++i)
 {
  if(i>99)break;
  cin>>cxbb[99];
  if(hehe(cxbb[99],"quit"))break;
  cxbb[i-1]=nchar(cxbb[99]);
 }
 i-=1;
 cout<<"共输入了"< 
 //新建数组,并去除重复
 char* czbb[100];
 for(int j=0,o=0;j {
  if(j==0)czbb[o++]=cxbb[j];
   else
   if(!findchar(cxbb,cxbb[j],j))
    czbb[o++]=cxbb[j];
 }
 cout<<"去除重复后单词个数为:"< for(i=0;i 
 //输出去除重复后之新单词数组,以首字符排序输出
 //这里只考虑了大小写英文字符
 cout<<"排序后输出:"< int x=0,y=0,z=0,p=0;
 for(i=0;i<26;i++)
 {
  x=65+i;y=97+i;
  for(j=0;j  {
   z=int(*czbb[j]);
   if(z==x||z==y)
    {cout<  }
  if(p==o)break;
 }
}


//用string做的,精简了很多....

#include
#include
using namespace std;
void main()
{
 string cxbb[100],temp;
 int n=100,len=0;
 while(n--)
 {
  cin>>temp;
  if(temp=="quit")break;
  cxbb[len++]=temp;  
 }
 //去除重复生成新数组
 string czbb[100];
 czbb[0]=cxbb[0];
 int k=1,i=1,j=0;
 for(i=0;i  for(j=0;j  {
   if(cxbb[i]==czbb[j])
    break;
   else
    if(j==k-1)
     czbb[k++]=cxbb[i];
  }

 //排序输出
 int key=0;
 for(j=0;j<26;j++)
  for(i=0;i  {
   key=int(czbb[i][0]);
   if(key==65+j||key==97+j)cout<  }
}

//The C++ Programming Language 作业 5.9.12

//统计一对字母在一字符串中出现的次数
//用char实现

#include
int charlen(char *a)
{
 int i=0;
 while(*a++!=0)i++;
 return i;
}
bool hehe(char *s,char *d)
{
 int l=charlen(d);
 while(l--)
 if(*s++!=*d++)
  return 0;
 return 1; 
}
int haha(char *s,char *d)
{
 int l=charlen(s);
 int j=0;
 for(int i=0;i  if(hehe(&s[i],d))j++;
 return j;
}
void main()
{
 char *c="kdksllkdkwockdjkd d dkdsd d";
 cout<<"jsabd在"<}



//The C++ Programming Language 作业 5.9.13

//定义一个struct Date以保存日期的轨迹。提供一些函数,从输入读Date,向
//输出写Date,以及用一个日期去初始化Date;

#include
struct Date
{
 int year;
 int month;
 int day;
 void init(int y=1900,int m=1,int d=1)
 {
  year=y,month=m,day=d;
 }
 void input()
 {
  cout<<"请输入年份:";
  cin>>year;
  cout<<"请输入月份:";
  cin>>month;
  cout<<"请输入天:";
  cin>>day;
 }
 void show()
 {
  cout<<"日期是:"< }
};
void main()
{
Date cxbb;
cxbb.init(1978,11,9);
cxbb.show();
cxbb.input();
cxbb.show(); 
}

你可能感兴趣的:(学习笔记,c++,作业,date,编译器,string,struct)