int getPri(int num) { int i,j; for(i=num;i>1;i--){ //2 for(j=2;j<i;j++){ if(i%j==0){ break; } } if(j==i){ return i; } } return -1; }解法
时间: 2023-07-14 21:55:24 浏览: 39
这是一个求一个整数的质数的函数。函数名为 `getPri`,输入参数为 `num`,输出为 `int` 类型。函数内部使用了两个循环嵌套,第一个循环从输入参数 `num` 开始循环,一直到 2,表示从大到小依次检查每一个整数是否为质数。第二个循环从 2 开始循环到当前正在检查的整数的前一个数,然后对正在检查的整数进行取模操作,如果余数为 0,表示这个整数不是质数,直接退出循环。如果内层循环正常结束,表示这个整数是质数,直接返回这个质数。如果第一个循环结束,还没有找到质数,那么返回 -1。
相关问题
int main() { int tmp; srand((unsigned)time(NULL)); int array[N]={0}; for(int i=0;i<N;i++){ array[i]=rand()%Limit; } for(int i=1;i<=N-1;i++){ for(int j=0;j<=N-1-i;j++){ if(array[j]>array[j+1]){ tmp=array[j]; array[j]=array[j+1]; array[j+1]=tmp; } } } for(int i=0;i<=N-1;i++){ printf("%d\t",array[i]); } printf("\n"); D* head,*p1,*p2; head=p2=p1=(D*)malloc(sizeof(D)); p1->num=array[0]; for(int i=1;i<=N-1;i++){ p1=(D*)malloc(sizeof(D)); p1->num=array[i]; p1->next=NULL; p2->next=p1; p2=p1; } p1=head; while(p1){ printf("%d %d\n",p1->num,p1->next); p1=p1->next; } p1=head; p2=p1->next; while(p2){ if(p1->num==p2->num){ p1->next=p2->next; p2=p2->next; } else { p1=p2; p2=p2->next; } } p1=head; while(p1){ printf("%d %d\n",p1->num,p1->next); p1=p1->next; } return 0; }为上述代码添加详细注释
以下是对代码的详细注释:
```c++
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 10 // 定义数组大小为10
#define Limit 100 // 定义随机数的取值范围
// 定义一个结构体,用于存储链表的每一个节点
typedef struct node{
int num; // 存储数据
struct node *next; // 存储下一个节点的地址
}D;
int main() {
int tmp; // 用于交换数据的临时变量
srand((unsigned)time(NULL)); // 用于生成随机数的种子
// 创建数组并初始化为0
int array[N]={0};
// 生成随机数并存储到数组中
for(int i=0;i<N;i++){
array[i]=rand()%Limit;
}
// 使用冒泡排序对数组进行排序(从小到大)
for(int i=1;i<=N-1;i++){
for(int j=0;j<=N-1-i;j++){
if(array[j]>array[j+1]){
tmp=array[j];
array[j]=array[j+1];
array[j+1]=tmp;
}
}
}
// 创建链表并将数组中的数据存储到链表中
D* head,*p1,*p2; // 定义头指针和两个辅助指针
head=p2=p1=(D*)malloc(sizeof(D)); // 分配内存并将三个指针都指向该节点
p1->num=array[0]; // 将数组中的第一个数存储到链表中
for(int i=1;i<=N-1;i++){
p1=(D*)malloc(sizeof(D)); // 分配内存
p1->num=array[i]; // 将数组中的数据存储到链表节点中
p1->next=NULL; // 将下一个节点的指针设置为NULL
p2->next=p1; // 将上一个节点的next指针指向当前节点
p2=p1; // p2指针指向当前节点
}
// 输出链表中的所有节点
p1=head; // 将p1指针指向头指针
while(p1){ // 遍历链表
printf("%d %d\n",p1->num,p1->next); // 输出当前节点的数据和下一个节点的地址
p1=p1->next; // p1指针指向下一个节点
}
// 删除链表中的重复数据
p1=head; // 将p1指针重新指向头指针
p2=p1->next; // 将p2指针指向第二个节点
while(p2){ // 遍历链表
if(p1->num==p2->num){ // 如果当前节点和下一个节点的数据相同
p1->next=p2->next; // 将当前节点的next指针指向下一个节点的下一个节点
p2=p2->next; // 将p2指针指向下一个节点的下一个节点
}
else{ // 如果当前节点和下一个节点的数据不同
p1=p2; // 将p1指针指向下一个节点
p2=p2->next; // 将p2指针指向下一个节点的下一个节点
}
}
// 输出删除重复数据后的链表中的所有节点
p1=head; // 将p1指针重新指向头指针
while(p1){ // 遍历链表
printf("%d %d\n",p1->num,p1->next); // 输出当前节点的数据和下一个节点的地址
p1=p1->next; // p1指针指向下一个节点
}
return 0;
}
```
查找错误并举出、修改#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> typedef struct num { float a; //系数 int b; //指数 struct num *next; }*num; struct LinkList // 链表类型 { num head;// 分别指向线性链表中的头结点和最后一个结点 感觉不需要tail int len; // 指示线性链表中数据元素的个数 }; struct LinkList *init(struct LinkList *list)//创建空链表 { list = (struct LinkList *)malloc(sizeof(struct LinkList)); list->len = 0; list->head = (struct num*)malloc(sizeof(struct num));//list->tail = list->head->next = NULL;//list->tail->next = return list; }; void compare(struct LinkList *list, float a, int b)//比较指数 { int i = 0; struct num*p = list->head; for (i; i <= list->len; i++) { if (b > p->b) p = p->next; else if (b = p->b){ p->b += b; break; } else{ add(list, i, a, b);//插入 break; } } if (i>list->len) add(list, i, a, b);//添加到最后一个 }; void add(struct LinkList *list, int index, float a,int b)//添加新的指数项 { struct num*p = list->head, *s; int i; for (i = -1; i<index - 1; i++) { p = p->next; } s = (struct num *)malloc(sizeof(struct num)); s->a = a; s->b = b; s->next = p->next; p->next = s; list->len++; //if (index == list->len) 感觉不需要尾结点 // list->tail = s; }; int main(){ //指数升序查找 struct LinkList *lista, *listb ; lista = init(lista); listb = init(listb); int n,b; float a; scanf("%d", &n); for (int i = 0; i < n; i++)//lista { scanf("%f%d", &a,&b); compare(lista, a, b); } scanf("%d", &n); for (int i = 0; i < n; i++)//listb { scanf("%f%d", &a, &b); compare(listb, a, b); } return 0; }
在这段代码中,有两个问题:
1. 在定义结构体 `num` 时,没有为 `next` 成员指定类型,应该将 `*num` 改为 `struct num *`。
2. 在函数 `init` 中,没有为头结点的 `next` 成员赋值,应该为其赋值为 `NULL`。
下面是修改后的代码:
```c
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
typedef struct num {
float a; //系数
int b; //指数
struct num* next;
} *num;
struct LinkList // 链表类型
{
num head; // 分别指向线性链表中的头结点和最后一个结点
int len; // 指示线性链表中数据元素的个数
};
struct LinkList* init(struct LinkList* list) //创建空链表
{
list = (struct LinkList*)malloc(sizeof(struct LinkList));
list->len = 0;
list->head = (num)malloc(sizeof(struct num));
list->head->next = NULL;
return list;
};
void compare(struct LinkList* list, float a, int b) //比较指数
{
int i = 0;
num p = list->head;
for (i; i <= list->len; i++)
{
if (b > p->b)
p = p->next;
else if (b == p->b) {
p->a += a;
break;
}
else {
add(list, i, a, b); //插入
break;
}
}
if (i > list->len)
add(list, i, a, b); //添加到最后一个
};
void add(struct LinkList* list, int index, float a, int b) //添加新的指数项
{
num p = list->head, *s;
int i;
for (i = -1; i < index - 1; i++)
{
p = p->next;
}
s = (num)malloc(sizeof(struct num));
s->a = a;
s->b = b;
s->next = p->next;
p->next = s;
list->len++;
};
int main()
{
//指数升序查找
struct LinkList* lista, * listb;
lista = init(lista);
listb = init(listb);
int n, b;
float a;
scanf("%d", &n);
for (int i = 0; i < n; i++) //lista
{
scanf("%f%d", &a, &b);
compare(lista, a, b);
}
scanf("%d", &n);
for (int i = 0; i < n; i++) //listb
{
scanf("%f%d", &a, &b);
compare(listb, a, b);
}
return 0;
}
```
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)