📄 练习.txt
字号:
8.1
#include <iostream.h>
int* findmax(int* array, int size, int* index);
void main()
{
int a[10]={33,91,54,67,82,37,85,63,19,68};
int* maxaddr;
int idx;
maxaddr=findmax(a,sizeof(a)/sizeof(*a),&idx);
cout<<"the index of maximum element is "<<idx<<endl
<<"the address of it is "<<maxaddr<<endl
<<"the value of it is "<<a[idx]<<endl;
}
int* findmax(int* array, int size, int* index)
{
int max=0;
int* addr=0;
cout<<"in function findmax"<<endl;
for(int n=0;n<size;n++)
{
if(max<array[n])
{
max=array[n];
addr=array+n;
*index=n;
}
}
cout<<"exiting..."<<endl;
return addr;
}
8.2
//****************************
//** Josephus.cpp **
//****************************
//sele-adjust version
#include <iostream.h>
#include <stdlib.h>
#include <memory.h>
void main()
{
//每次数interval个小孩,让其离开
int num,interval;
int *array;
cout<<"please input the number of childs:"<<endl;
cin>>num;
//申请数组
if((array=new int[num])==NULL) //注意new的用法,此处曾因为把[]写成(),而导致Debug时出错
{
cout<<"can't allocate more memory, terminating."<<endl;
exit(1);
}
//input the interval
cout<<"please input the interval:"<<endl
<<"(note: the value of interval must in the range of [1,"<<num<<"]."<<endl;
cin>>interval;
if(num<=1||(interval<=1||interval>num))
{
cout<<"there are some problems with the number of child or interval, program execute by default!"<<endl;
num=10;
interval=3;
delete []array;
array=new int[num];
}
//给小孩编号
for(int i=0;i<num;i++)
*(array+i)=i+1;
//output all the children
for(i=0;i<num;i++)
cout<<*(array+i)<<",";
cout<<endl;
int k=1;
i=-1;
//process the win boy
while(1)
{
for(int j=0;j<interval;)
{
i=(i+1)%num;
if(*(array+i)!=0)
j++;
}
if(k==num) break;
cout<<*(array+i)<<" , ";
*(array+i)=0;
k++;
}
cout<<endl<<"No."<<*(array+i)<<" boy've won."<<endl;
delete []array;
return;
}
8.3
(1)
#include <iostream.h>
#include <stdlib.h>
int compare(const void* a, const void* b);
int list[10]={12,32,42,51,8,16,51,21,19,9};
void main()
{
for(int i=0;i<10;i++) //origin
cout<<list[i]<<",";
cout<<endl;
qsort((void*)list,10,sizeof(list[0]),compare);
for(i=0;i<10;i++) //changed
cout<<list[i]<<",";
cout<<endl;
}
int compare(const void* a, const void* b)
{
int s1=0,s2=0;
cout<<"a:"<<*((int*)a)<<","
<<"b:"<<*((int*)b)<<endl;
s1=*((int*)a)/10 + *((int*)a)%10;
//cout<<"s1:"<<s1<<",";
s2=*((int*)b)/10 + *((int*)b)%10;
//cout<<"s2:"<<s2<<endl;
if(s1==s2)
return 0;
else
if(s1>s2)
return 1;
else
return -1;
}
(2)
#include <iostream.h>
#include <stdlib.h>
int compare(const void* a, const void* b);
float list[10]={32.1,456.87,332.67,442.0,98.12,451.79,340.12,54.55,99.87,72.5};
void main()
{
for(int i=0;i<10;i++) //origin
cout<<list[i]<<",";
cout<<endl;
qsort((void*)list,10,sizeof(list[0]),compare);
for(i=0;i<10;i++) //changed
cout<<list[i]<<",";
cout<<endl;
}
int compare(const void* a, const void* b)
{
float s1=*((float*)a),s2=*((float*)b);
cout<<"s1="<<s1<<","
<<"s2="<<s2<<endl;
if(s1==s2)
return 0;
else
if(s1>s2)
return 1;
else
return -1;
}
(3)
#include <iostream.h>
#include <stdlib.h>
#include <string.h>
int compare(const void* a, const void* b);
char* list[10]={"enter","number","size","begin","of","cat","case","program","certain","a"};
void main()
{
for(int i=0;i<10;i++) //origin
cout<<list[i]<<",";
cout<<endl;
qsort((void*)list,10,sizeof(list[0]),compare);
for(i=0;i<10;i++) //changed
cout<<list[i]<<",";
cout<<endl;
}
int compare(const void* a, const void* b)
{
char* a1=*(char**)a;
char* b1=*(char**)b;
int i1=0,i2=0;
int sum1=0,sum2=0;
while((*(a1+i1))!='\0')
{
sum1+=*(int*)a1;
i1++;
}
while((*(b1+i2))!='\0')
{
sum2+=*(int*)b1;
i2++;
}
if(i1==i2)
{
if(sum1==sum2)
return 0;
else
if(sum1>sum2)
return 1;
else
return -1;
}
else
if(i1>i2)
return 1;
else
return -1;
}
8.4
#include <iostream.h>
#include <string.h>
char* encrypt(char* a,int* num);
char* decrypt(char* b,int* num);
char s[]={"the resultof 3 and 2 is not 8"};
int num[]={4,9,6,2,8,7,3};
void main()
{
int i=0;
char* x=s;
int* number=num;
while(x[i]!='\0') //original content
{
cout<<x[i];
i++;
}
cout<<endl;
char* y=encrypt(x,number); //encrypted content
cout<<"Encrypted:"<<endl;
i=0;
while(*(y+i)!='\0')
{
cout<<(char)*(y+i);
i++;
}
cout<<endl;
char* z=decrypt(y,number);
cout<<"Decrypted:"<<endl;
i=0;
while(*(z+i)!='\0')
{
cout<<(char)*(z+i);
i++;
}
cout<<endl;
}
char* encrypt(char* a,int* num)
{
int i=0;
while(a[i]!='\0')
{
cout<<a[i]<<",";
a[i]=char(((int)a[i]+num[i%7]-32)%91+32);
i++;
}
cout<<endl;
return a;
}
char* decrypt(char* b,int* num)
{
int i=0;
while(b[i]!='\0')
{
b[i]=char((int)b[i]-num[i%7]-32);
if((int)b[i]<0)
b[i]=b[i]+91+32;
else
b[i]+=32;
i++;
}
return b;
}
8.5
#include <iostream.h>
int strcmp(const char* str1, char* str2);
char str1[]="hello, the linux world!";
char str2[]="hello, the embeded world!";
void main()
{
char* s1=str1;
char* s2=str2;
int r=0;
r=strcmp(s1,s2);
cout<<"the compare result is : "<<r<<endl;
}
int strcmp(const char* str1, char* str2)
{
int sum1=0,sum2=0,i=0;
while(*(str1+i)!='\0')
{
sum1++;
i++;
}
i=0;
while(*(str2+i)!='\0')
{
sum2++;
i++;
}
if(sum1==sum2)
return 0;
else
if(sum1>sum2)
return 1;
else
return -1;
}
8.6
#include <iostream.h>
char* strcpy(char* dest, const char* source);
char src[]="good!\nthis is the source content:)"; //note: \a means PC beep
const int size=sizeof(src);
char dst[size];
void main()
{
char* source=src;
char* dest=dst;
strcpy(dest,source);
int i=0;
while(*(dest+i)!='\0')
{
cout<<*(dest+i);
i++;
}
cout<<endl;
}
char* strcpy(char* dest, const char* source)
{
int i=0;
while(*(source+i)!='\0')
{
*(dest+i)=*(source+i);
i++;
}
return dest;
}
8.7
#include <iostream.h>
int strcmp(const char* str1, char* str2);
void main(int argc,char* argv[])
{
int r=0;
char* s1=argv[1];
char* s2=argv[2];
cout<<"argv[1]"<<argv[1]<<" "
<<"argv[2]"<<argv[2]<<endl;
r=strcmp(s1,s2);
cout<<"the compare result is : "<<r<<endl;
}
int strcmp(const char* str1, char* str2)
{
int sum1=0,sum2=0,i=0;
while(*(str1+i)!='\0')
{
sum1++;
i++;
}
i=0;
while(*(str2+i)!='\0')
{
sum2++;
i++;
}
if(sum1==sum2)
return 0;
else
if(sum1>sum2)
return 1;
else
return -1;
}
指针练习:
(1)
#include <iostream.h>
#include <iomanip.h>
void main()
{
static int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
int (*p);
p=a[0];
for(;p<a[0]+12;p++)
{
if((p-a[0])%4==0) cout<<endl;
cout<<setw(4)<<*p<<",";
}
cout<<endl;
}
(2)
#include <iostream.h>
#include <iomanip.h>
void main()
{
static int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
//int i,j;
int (*p)[4]=a;
cout<<"a[1][2]="<<*(*(p+1)+2)<<endl;
}
8.8
#include <iostream.h>
#include <stdlib.h>
#include <iomanip.h>
void transpose(int (*a)[5],int n);
void main()
{
int a[5][5];
//int** mat=&(&(a[0][0]));
cout<<"original matrix:"<<endl;
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
a[i][j]=rand();
cout<<setw(6)<<a[i][j]<<",";
}
cout<<endl;
}
cout<<endl;
//key process: the transposing
int (*p)[5]=a;
//int (*p2)[5];
//p2=transpose(p,5);
transpose(p,5);
cout<<endl<<"transpose matrix:"<<endl;
for(i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
//cout<<setw(6)<<*((*(p)+i)+j)<<",";
//the right using: *(*(P+i)+j); equal to p[i][j];
cout<<setw(6)<<p[i][j]<<",";
}
cout<<endl;
}
}
void transpose(int (*p)[5],int n)
{
int i,j,tmp=0;
cout<<"in transpose func..."<<endl;
for(i=0;i<n;i++)
{
for(j=0;j<i;j++)
{
if(j==i)
continue;
//the wrong using
//tmp=*((*p+i)+j);
//*((*p+i)+j)=*((*p+j)+i);
//*((*p+j)+i)=tmp;
//the right using
//tmp=*(*(p+i)+j);
//*(*(p+i)+j)=*(*(p+j)+i);
//*(*(p+j)+i)=tmp;
tmp=p[i][j];
p[i][j]=p[j][i];
p[j][i]=tmp;
//test code
//cout<<"i,j: "<<i<<","<<j<<endl
// <<"tmp:"<<tmp<<endl;
//cout<<p[i][j]<<","<<p[j][i]<<endl;
}
}
cout<<"exit func."<<endl;
}
8.9
#include <iostream.h>
#include <stdlib.h>
//#include <iomanip.h>
void main()
{
int count=0,arraysize=100;
long i=0;
int *array;
while((array=new int[100])!=NULL)
{
count++;
i++;
cout<<i<<endl;
}
cout<<"the heap size parameter: count="<<count<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -