#知识点1
对于一个类来说,如果在主函数中声明了多个对象,写函数的时候可以用指针来写参数,如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <iostream>
#include <vector>
#include <new>
#include<algorithm>
#include <cmath>
#include <cstdlib>
#define PI 3.14
using namespace std;
class person{
public:
friend void result(person *p);
person(int a,char b[],int c):age(a),number(c){
strcpy(name,b);
}
private:
int age;
char name[20];
int number;
};
void result(person *p){//如果用到了类的指针,他就只能用->来指向每一个成员,如果在类之外声明的,就无法直接调用private类,除非时友元函数
cout<<p->age+p->number<<endl;
}
int main()
{
person student(1,"jill",1),teacher(2,"erin",2);
result(&student);//因为是指针,所以用&
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <iostream>
#include <vector>
#include <new>
#include<algorithm>
#include <cmath>
#include <cstdlib>
#define PI 3.14
using namespace std;
struct student{
int age;
int a;
int b;
};
void hi(student *a){
cout<<a->a;
}
int main()
{
int n;
cin>>n;
student stu[n];
for(int i=0;i<n;i++){
cin>>stu[i].a>>stu[i].age>>stu[i].b;
}
hi(&stu[0]);
return 0;
}
对于struct来说,他和class的区别就是其中所有的成员都是public的,不需要声明友元函数来访问私有元素。
#知识点二
如何找到一个数有多少个因数(不是质数,质数的因数只有一和他本身)
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int num;
int count = 0;
cout << "请输入一个数: ";
cin >> num;
for (int i = 1; i * i <= num; ++i) { // 只遍历到平方根
if (num % i == 0) { // 如果该数能被 i 整除
if (i * i == num) { // 如果 i 是 num 的平方根,有两个一样的因数,就只算一个
count++; // 只加 1
} else {
count += 2; // 否则加 2,因为 i 和 num/i 都是因数
}
}
}
cout << num << " 的因数个数为: " << count << endl;
return 0;
}
如果是质数,则如下:
#include <iostream>
#include <cmath>
using namespace std;
bool isPrime(int num) {
if (num <= 1) { // 小于等于 1 的数不是质数
return false;
}
if (num == 2) { // 2 是质数
return true;
}
if (num % 2 == 0) { // 偶数(除 2 外)不是质数
return false;
}
int sqrtNum = sqrt(num); // 计算 num 的平方根
for (int i = 3; i <= sqrtNum; i += 2) { // 从 3 开始,只检查奇数,直到 sqrtNum
if (num % i == 0) { // 如果能被整除,不是质数
return false;
}
}
return true; // 否则是质数
}
int main() {
int num;
cout << "请输入一个数: ";
cin >> num;
if (isPrime(num)) { // 调用 isPrime 函数判断是否为质数
cout << num << " 是一个质数。" << endl;
} else {
cout << num << " 不是一个质数。" << endl;
}
return 0;
}
#结构体链表(用于删除数据)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <iostream>
using namespace std;
struct student{
int id;
char name[101];
int result;
struct student *next;//结构体指针,用于作为中间变量
};
typedef struct student stu;//用stu代替struct student的作用
int main(){
stu *head,*tail,*p;
p=(stu*)malloc(sizeof(stu));//声明一个struct student 类型的动态指针,大小是struct student
head=p;
tail=p;
head->next=NULL;
cin>>p->id;
while(p->id!=0){
cin>>p->name;
cin>>p->result;
p=(stu*)malloc(sizeof(stu));
tail->next=p;
tail=p;
tail->next=NULL;
cin>>p->id;
}
p=head;
while(p!=NULL){
if(p->id!=0)cout<<p->id<<" "<<p->name<<" "<<p->result<<endl;
p=p->next;
}
return 0;
}