高级语言期末2011级A卷

1.编写函数,判定正整数m和n(均至少为2)是否满足:数m为数n可分解的最小质因数(数n可分解的最小质因数为整除n的最小质数)

提示:判定m为质数且m是n的最小因数

cpp 复制代码
#include <stdio.h>
#include <stdbool.h>

bool isprime(int m,int n) {
	for(int i=0; i<m; i++) {
		if(m%i==0||n%i==0)
			return false;
	}
	if(n%m!=0)
		return false;
	return true;
}

2.编写函数,对给定的整数数组a的前n个元素排序,使得所有正整数均出现在负整数和零之前。

提示:排序结果中,正整数之间的出现顺序不受限制,负整数和0之间的出现顺序不限制。

例如:原数组为-1、4、-3、0、2、1、-9、7,则排序后可以为4、2、1、7、0、-1、-3、-9

cpp 复制代码
#include <stdio.h>

void sort(int *arr,int n) {
	for(int i=0; i<n-1; i++)
		for(int j=0; j<n-i-1; j++)
			if(arr[j]<=0) {
				int temp=arr[j];
				arr[j]=arr[j+1];
				arr[j+1]=temp;
			}
	for(int i=0; i<n-1; i++)
		for(int j=0; j<n-i-1; j++)
			if(arr[j]<0) {
				int temp=arr[j];
				arr[j]=arr[j+1];
				arr[j+1]=temp;
			}
}

int main() {
	int arr[]= {-1,4,-3,0,2,1,-9,7};
	sort(arr,8);
	for(int i=0; i<8; i++) {
		printf("%d ",arr[i]);
	}
}

3.编写递归函数,实现按照如下公式计算的功能。其中n为自然数。

提示:如果独立编写阶乘运算函数,可以不考虑存储溢出,默认结果类型为整型。

cpp 复制代码
#include <stdio.h>

int fac(int n) {
	if(n==0)
		return 1;
	else
		return n*fac(n-1);
}

double func(int n) {
	if(n==0)
		return 0;
	return 1.0*n/((n+1)*fac(n+2))+func(n-1);
}

4.定义一个表示学生的结构体(包含3个字段:姓名、性别、成绩),编写函数,将下图所示的结构体数组s中的前n个学生的信息,存储到当前目录下的output.txt中。

提示:性别可以定义为bool、int、enum等类型均可,存储信息的具体形式不限制

|---------|----------|--------|---------|
| 张三 | 李四 | ...... | 赵九 |
| 男(true) | 女(false) | ...... | 男(true) |
| 83 | 76 | ...... | 97 |

例如:一个教师的信息为Zhangsan、true、50,另一个教师的信息为Lisi、false、37。

cpp 复制代码
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

typedef struct student {
	char name[20];
	bool sex;
	int score;
} student;

void save(struct student stu[],int n) {
	FILE *file;
	if((file=fopen("out.txt","w"))==NULL) {
		printf("open error");
		exit(0);
	}
	for(int i=0; i<n; i++) {
		fprintf(file,"%s %d %d\n",stu[i].name,stu[i].sex,stu[i].score);
	}
	fclose(file);
}

5.定义一个单链表(每个结点包含2个字段:整数信息、后继指针),如下图所示。编写函数,删除该单链表中所含整数信息等于x的多个重复结点。

例如:若单链表中存储的整数信息依次是1、5、5、0、5、6、0、0、5、1,如果x为5,则得到的单链表中相应信息依次是1、0、6、0、0、1。

cpp 复制代码
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

typedef struct node {
	int key;
	struct node *next;
} node;

void del(struct node *head,int x) {
	struct node *dummyhead=(struct node *)malloc(sizeof(struct node));
	dummyhead->next=head;
	struct node *p=head,*pre=dummyhead;
	while(p!=NULL) {
		if(p->key==x)
			pre->next=p->next;
		else
			pre=p;
		p=p->next;
	}
}
相关推荐
inputA26 分钟前
【LwIP源码学习8】netbuf源码分析
android·c语言·笔记·嵌入式硬件·学习
前进的李工35 分钟前
LeetCode hot100:094 二叉树的中序遍历:从递归到迭代的完整指南
python·算法·leetcode·链表·二叉树
麦麦大数据1 小时前
F049 知识图谱双算法推荐在线学习系统vue+flask+neo4j之BS架构开题论文全源码
学习·算法·知识图谱·推荐算法·开题报告·学习系统·计算机毕业设计展示
兩尛2 小时前
215. 数组中的第K个最大元素
数据结构·算法·排序算法
952362 小时前
数据结构-堆
java·数据结构·学习·算法
吃着火锅x唱着歌2 小时前
LeetCode 面试题 16.24.数对和
算法·leetcode·职场和发展
不会编程的小寒2 小时前
数据结构 2.0
数据结构·算法
专注VB编程开发20年2 小时前
图片转矢量图(提取轮廓线条)Potrace:一个基于多边形的位图轮廓矢量化算法(translation)
算法·图片转矢量
while(1){yan}2 小时前
MYSQL索引的底层数据结构
数据结构·数据库·mysql
小羊失眠啦.3 小时前
Rust核心库(core)深度解析:无依赖基石的设计与实践
数据库·算法·rust