计算机程序设计C++ MOOC
测试与作业C++基础练习100题
##第八周基本练习
本周为数组与指针的应用
- 使用指针输出数组元素
#include "iostream"
using namespace std;
int main()
{
int a[20], *pa,temp,n=0;
for (pa = a; pa < a + 20; pa++)
{
cin >> temp;
if (temp == 9999)break;
*pa = temp;
n++;
}
for (pa = a; pa < a + n-1;pa++)
{
cout << *pa << " ";
}
cout << *pa;
return 0;
}
- 通过指针输入输出数组元素的函数
#include "iostream"
using namespace std;
int input(int *p)
{
int temp, n = 0;
cin >> temp;
while (temp != 9999)
{
*p = temp;
p++;
n++;
cin >> temp;
}
return n;
}
void print(int *p, int n)
{
cout << *p;
p++;
n--;
while(n)
{
cout << " " << *p;
p++;
n--;
}
}
int main()
{
int a[100],n;
n = input(a);
print(a, n);
return 0;
}
- 指针实现字符串复制函数
#include "iostream"
using namespace std;
char *mystrcp(char *s1, char *s2)
{
int n = 0;
while (*s2 != '\0')
{
*s1 = *s2;
s1++;
s2++;
n++;
}
*s1 = *s2;
return s1-n;
}
int main()
{
char s1[100], s2[100];
cin >> s2;
cout << mystrcp(s1, s2) << endl;
return 0;
}
- 指针实现字符串比较
#include "iostream"
using namespace std;
char trans(char s)
{
if (s >= 'A'&&s <= 'Z') return s - ('A' - 'a');
else return s;
}
int mystrcmp(char *s1, char *s2)
{
while (1)
{
if (*s1 == '\0'&& *s2 == '\0') return 0;
else if (trans(*s1) > trans(*s2)) return 1;
else if (trans(*s1) < trans(*s2)) return -1;
else
{
s1++;s2++;
}
}
}
int main()
{
char s1[200], s2[200];
cin >> s1 >> s2;
cout << mystrcmp(s1, s2) << endl;
return 0;
}
- 通过指针访问结构体变量
#include "iostream"
using namespace std;
struct PERSON
{
char name[40], gender[10];
int age;
};
int main()
{
PERSON a, *pa;
pa = &a;
cin >> pa->name;
cin >> pa->gender;
cin >> pa->age;
cout << pa->name << " ";
cout << pa->gender << " ";
cout << pa->age;
return 0;
}
- 通过指针访问结构体数组
#include "iostream"
using namespace std;
struct PERSON
{
char name[40], gender[10];
int age;
};
int main()
{
PERSON class_A[50], *pa;
pa = class_A;
cin >> pa->name;
cin >> pa->gender;
cin >> pa->age;
while (pa->name!= "0" && pa->gender!= "0" && pa->age!=0)
{
pa++;
cin >> pa->name;
cin >> pa->gender;
cin >> pa->age;
}
pa = pa - 1;
while(pa >= class_A)
{
cout << pa->name << " ";
cout << pa->gender << " ";
cout << pa->age << endl;
pa--;
}
return 0;
}
- 动态申请变量
#include "iostream"
using namespace std;
int main()
{
int *a = new int;
int *b = new int;
int *c = new int;
cin >> *a >> *b >> *c;
cout << *a + *b + *c << endl;
delete a, b, c;
return 0;
}
- 动态申请数组
#include "iostream"
using namespace std;
int main()
{
int n;
cin >> n;
double *a = new double[n];
double *p = a;
cin >> *p;
while (*p!=9999)
{
p++;
cin >> *p;
}
p--;
while (p > a)
{
cout << *p << " ";
p--;
}
cout << *p;
delete[]a;
return 0;
}
- 动态申请结构体数组
#include "iostream"
using namespace std;
struct PERSON
{
char name[40], gender[10];
int age;
};
int main()
{
int n;
cin >> n;
PERSON *class_A=new PERSON[n];
PERSON *pa;
pa = class_A;
cin >> pa->name;
cin >> pa->gender;
cin >> pa->age;
while (pa->name != "0" && pa->gender != "0" && pa->age != 0)
{
pa++;
cin >> pa->name;
cin >> pa->gender;
cin >> pa->age;
}
pa = pa - 1;
while (pa >= class_A)
{
cout << pa->name << " ";
cout << pa->gender << " ";
cout << pa->age << endl;
pa--;
}
delete[]class_A;
return 0;
}
- 动态申请结构体数组空间和结构体数组复制
#include "iostream"
using namespace std;
struct PERSON
{
char name[40], gender[10];
int age;
};
int main()
{
int n,real=0;
cin >> n;
PERSON *class_A=new PERSON[n];
PERSON *pa,*pb;
pa = class_A;
cin >> pa->name;
cin >> pa->gender;
cin >> pa->age;
real++;
while (pa->name != "0" && pa->gender != "0" && pa->age != 0)
{
pa++;
real++;
cin >> pa->name;
cin >> pa->gender;
cin >> pa->age;
}
pa = pa - 1;
real = real - 1;
PERSON *class_B = new PERSON[real];
pb = class_B;
while (pa >= class_A)
{
*pb = *pa;
pa--;
pb++;
}
for (pb = class_B; pb < (class_B + real); pb++)
{
cout << pb->name << " " << pb->gender << " " << pb->age << endl;
}
delete[]class_A,class_B;
return 0;
}
以上为第八周的基础练习。