第八章:指針
3(1)
編寫一個程序,輸入一個整數,利用指針變量返回該數的絕對值。
#include<iostream>
using namespace std;
void f(int *p){
if(*p>0)
cout<<*p;
else
cout<<-*p;
}
int main(){
int n;
int *p=&n;
cin>>n;
f(p);
return 0;
}
3(2)
編寫一個函數,計算數組中的最大元素及其下標,數組以指針方式傳遞。
#include<iostream>
using namespace std;
void maxn(int *p,int n){
int maxnn=0,target;
for(int i=0;i<n;++i){
if(*(p+i)>maxnn){
maxnn=*(p+i);
target=i;
}
}
cout<<maxnn<<" "<<target<<endl;
}
int main(){
int a[10]={5,23,89,456,12,32,78,98,0,1};
maxn(a,10);
return 0;
}
實驗9+指針實驗
1.
#include<iostream>
using namespace std;
swap(int *p1,int *p2){
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
int main(){
int a=100,b=10;
int *p1=&a,*p2=&b;
cout<<a<<" "<<b<<endl;
swap(p1,p2);
cout<<a<<" "<<b<<endl;
return 0;
}
2.
#include<iostream>
using namespace std;
bool cmp(char *str1,char *str2){
for(int i=0;*(str1+i)||*(str2+i);++i){
if(*(str1+i)!='\0'&&*(str2+i)=='\0')
return false;
if(*(str1+i)=='\0'&&*(str2+i)!='\0')
return false;
if(*(str1+i)==*(str2+i)){
continue;
}else{
return false;
}
}
return true;
}
int main(){
char *str1="abcdefg",*str2="abcdefg",*str3="abcdefghijklmn";
cout<<"str1:"<<str1<<endl;
cout<<"str2:"<<str2<<endl;
cout<<"str3:"<<str3<<endl;
if(cmp(str1,str2)){
cout<<"str1 and str2 are same!"<<endl;
}else{
cout<<"str1 and str2 are not same!"<<endl;
}
if(cmp(str1,str3)){
cout<<"str1 and str3 are same!"<<endl;
}else{
cout<<"str1 and str3 are not same!"<<endl;
}
return 0;
}
3.
#include<iostream>
#include<cstring>
using namespace std;
void strsort(char *p[],int n){
char *temp;
int i,j,k;
for(i=0;i<n-1;++i){
k=i;
for(j=i+1;j<n;++j){
if(strcmp(p[k],p[j])>0){
k=j;
}
}
if(k!=i){
temp=p[i];
p[i]=p[k];
p[k]=temp;
}
}
}
int main(){
char *a[]={"include","define","main","if","else","for","while","switch","break","continue"};
strsort(a,10);
for(int i=0;i<10;++i){
cout<<a[i]<<endl;
}
return 0;
}
11.
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
void ssort(char (*p)[4]){
int i,j;
char temp[4];
char *t=temp;
for(i=0;i<9;++i){
for(j=0;j<9-i;++j){
if(strcmp(p[j],p[j+1])>0){
strcpy(t,p[j]);
strcpy(p[j],p[j+1]);
strcpy(p[j+1],t);
}
}
}
}
int main(){
char a[10][4];
char (*p)[4];
for(int i=0;i<10;++i){
cin>>a[i];
}
p=a;
ssort(p);
cout<<endl;
for(int i=0;i<10;++i){
cout<<a[i]<<endl;
}
return 0;
}
12.
#include<iostream>
#include<cstring>
using namespace std;
void ssort(char *s[]){
int i,j;
char *temp;
for(i=0;i<9;++i){
for(j=0;j<9-i;++j){
if(strcmp(*(s+j),*(s+j+1))>0){
temp=*(s+j);
*(s+j)=*(s+j+1);
*(s+j+1)=temp;
}
}
}
}
int main(){
char a[10][20];
char *p[10];
for(int i=0;i<10;++i){
p[i]=a[i];
cin>>p[i];
};
ssort(p);
cout<<endl;
for(int i=0;i<10;++i){
cout<<p[i]<<endl;
}
return 0;
}
15.
#include<iostream>
using namespace std;
struct Student{
int a,b,c,d,e;
};
double average_a(Student *stu){
double sum=0;
for(int i=0;i<4;++i)
sum+=(*(stu+i)).a;
return sum/4;
}
bool two_under(Student stu){
int num=0;
if(stu.a<60)
++num;
if(stu.b<60)
++num;
if(stu.c<60)
++num;
if(stu.d<60)
++num;
if(stu.e<60)
++num;
if(num>=2)
return true;
return false;
}
bool judge(Student stu){
double sum1=0;
int sum2=0;
sum1=stu.a+stu.b+stu.c+stu.d+stu.e;
if((sum1/5)>90)
return true;
if(stu.a>85&&stu.b>85&&stu.c>85&&stu.d>85&&stu.e>85)
return true;
return false;
}
int main(){
Student stu[4];
for(int i=0;i<4;++i){
cout<<"No."<<i+1<<":";
cin>>stu[i].a>>stu[i].b>>stu[i].c>>stu[i].d>>stu[i].e;
}
cout<<endl<<"The average of the first subject:"<<average_a(stu)<<endl<<endl;
cout<<"The ones are not qualified:"<<endl;
for(int i=0;i<4;++i){
if(two_under(stu[i])){
double sum=stu[i].a+stu[i].b+stu[i].c+stu[i].d+stu[i].e;
cout<<"No."<<i+1<<":"<<stu[i].a<<" "<<stu[i].b<<" "<<stu[i].c<<" "<<stu[i].d<<" "<<stu[i].e<<" "<<sum/5<<endl;
}
}
cout<<endl<<"The ones are qualified:"<<endl;
for(int i=0;i<4;++i){
if(judge(stu[i])){
double sum=stu[i].a+stu[i].b+stu[i].c+stu[i].d+stu[i].e;
cout<<"No."<<i+1<<":"<<stu[i].a<<" "<<stu[i].b<<" "<<stu[i].c<<" "<<stu[i].d<<" "<<stu[i].e<<" "<<sum/5<<endl;
}
}
return 0;
}
18.
#include<iostream>
using namespace std;
int main(){
char *month[13]={"error","January","February","March","April","May","June","July","August","September","October","November","December"};
int n;
cin>>n;
if(n<=0||n>=13){
cout<<"error"<<endl;
}else{
cout<<*(month+n);
}
return 0;
}