静态分析技术检测恶意JavaScript的原理
时间: 2023-10-28 19:33:51 浏览: 68
javascript 恶意代码检测
3星 · 编辑精心推荐
1. 显示成绩列表:遍历顺序表输出所有成绩信息
2. 查询成绩:输入学生姓名,查找其对应的成绩并输出
3. 插入成绩:输入学生姓名和成绩,将其插入到合适的位置
4. 删除成绩:输入学生姓名,将其对应的成绩从顺序表中删除
5. 合并成绩:输入两个已排好序的班级成绩顺序表,将它们合并成一个新的排好序的成绩顺序表
具体代码实现如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LEN 20 // 学生姓名最大长度
#define MAX_CAPACITY 100 // 顺序表最大容量
// 学生成绩信息结构体
typedef struct {
char name[MAX_NAME_LEN]; // 学生姓名
int score; // 学生成绩
} StudentScore;
// 成绩顺序表结构体
typedef struct SqList {
StudentScore *elem; // 学生成绩信息数组
int length; // 当前元素个数
int capacity; // 最大容量
} SqList, *Ptr;
// 创建一个新的成绩顺序表
SqListPtr createSqList() {
SqListPtr list = (SqListPtr) malloc(sizeof(SqList));
list->elem = (StudentScore*) malloc(sizeof(StudentScore) * MAX_CAPACITY);
list->length = 0;
list->capacity = MAX_CAPACITY;
return list;
}
// 销毁一个成绩顺序表
void destroySqList(SqListPtr list) {
free(list->elem);
free(list);
}
// 遍历顺序表输出所有成绩信息
void displayScores(SqListPtr list) {
printf("学生姓名\t成绩\n");
for (int i = 0; i < list->length; i++) {
printf("%s\t\t%d\n", list->elem[i].name, list->elem[i].score);
}
}
// 输入学生姓名,查找其对应的成绩并输出
void searchScoreByName(SqListPtr list) {
char name[MAX_NAME_LEN];
printf("请输入学生姓名:");
scanf("%s", name);
for (int i = 0; i < list->length; i++) {
if (strcmp(list->elem[i].name, name) == 0) {
printf("%s的成绩是%d\n", name, list->elem[i].score);
return;
}
}
printf("没有找到名为%s的学生\n", name);
}
// 输入学生姓名和成绩,将其插入到合适的位置
void insertScore(SqListPtr list) {
if (list->length == list->capacity) {
printf("顺序表已满,无法插入\n");
return;
}
StudentScore newScore;
printf("请输入学生姓名:");
scanf("%s", newScore.name);
printf("请输入学生成绩:");
scanf("%d", &newScore.score);
int i;
for (i = 0; i < list->length; i++) {
if (strcmp(list->elem[i].name, newScore.name) > 0) {
break;
}
}
for (int j = list->length - 1; j >= i; j--) {
list->elem[j + 1] = list->elem[j];
}
list->elem[i] = newScore;
list->length++;
printf("插入成功\n");
}
// 输入学生姓名,将其对应的成绩从顺序表中删除
void deleteScoreByName(SqListPtr list) {
char name[MAX_NAME_LEN];
printf("请输入学生姓名:");
scanf("%s", name);
int i;
for (i = 0; i < list->length; i++) {
if (strcmp(list->elem[i].name, name) == 0) {
break;
}
}
if (i == list->length) {
printf("没有找到名为%s的学生\n", name);
return;
}
for (int j = i; j < list->length - 1; j++) {
list->elem[j] = list->elem[j + 1];
}
list->length--;
printf("删除成功\n");
}
// 输入两个已排好序的班级成绩顺序表,将它们合并成一个新的排好序的成绩顺序表
SqListPtr mergeScores(SqListPtr list1, SqListPtr list2) {
SqListPtr newList = createSqList();
int i = 0, j = 0;
while (i < list1->length && j < list2->length) {
if (strcmp(list1->elem[i].name, list2->elem[j].name) < 0) {
newList->elem[newList->length++] = list1->elem[i++];
} else {
newList->elem[newList->length++] = list2->elem[j++];
}
}
while (i < list1->length) {
newList->elem[newList->length++] = list1->elem[i++];
}
while (j < list2->length) {
newList->elem[newList->length++] = list2->elem[j++];
}
printf("合并成功\n");
return newList;
}
int main() {
SqListPtr list = createSqList();
while (1) {
printf("\n");
printf("1. 显示成绩列表\n");
printf("2. 查询成绩\n");
printf("3. 插入成绩\n");
printf("4. 删除成绩\n");
printf("5. 合并成绩\n");
printf("0. 退出程序\n");
printf("请选择操作:");
int op;
scanf("%d", &op);
switch (op) {
case 1:
displayScores(list);
break;
case 2:
searchScoreByName(list);
break;
case 3:
insertScore(list);
break;
case 4:
deleteScoreByName(list);
break;
case 5: {
SqListPtr list1 = createSqList();
SqListPtr list2 = createSqList();
printf("请输入第一个班级的成绩信息(姓名和成绩,以空格分隔,每个学生一行,输入0结束):\n");
while (1) {
char name[MAX_NAME_LEN];
int score;
scanf("%s", name);
if (strcmp(name, "0") == 0) {
break;
}
scanf("%d", &score);
list1->elem[list1->length].score = score;
strcpy(list1->elem[list1->length++].name, name);
}
printf("请输入第二个班级的成绩信息(姓名和成绩,以空格分隔,每个学生一行,输入0结束):\n");
while (1) {
char name[MAX_NAME_LEN];
int score;
scanf("%s", name);
if (strcmp(name, "0") == 0) {
break;
}
scanf("%d", &score);
list2->elem[list2->length].score = score;
strcpy(list2->elem[list2->length++].name, name);
}
SqListPtr mergedList = mergeScores(list1, list2);
displayScores(mergedList);
destroySqList(list1);
destroySqList(list2);
destroySqList(mergedList);
break;
}
case 0:
destroySqList(list);
return 0;
default:
printf("无效操作,请重新输入\n");
break;
}
}
}
阅读全文