高级语言讲义2016计专(仅高级语言部分)

1.斐波那契序列的第n项可以表示成以下形式,编写一个非递归函数,返回该数列的第n项的数值

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

int func(int n) {
	if(n==1||n==2)
		return 1;
	int p=1,q=1,num;
	for(int i=3; i<=n; i++) {
		num=p+q;
		q=p;
		p=num;
	}
	return num;
}

2.在MXN的二维数组A中,已经存放了MXN个整型元素,其中,M和N均是大于1的常量。编写一段代码,用来对A中的元素按元素数值大小进行排序。排序的规则是: (1) 数组A的每一行中的元素,均按升序排列;(2)当i大于1时,数组A的任意第i行中的任意元素值,均不小于第i-1行中的任意元素值。

cpp 复制代码
#include <stdio.h>
#include <stdlib.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]>arr[j+1]) {
				int temp=arr[j];
				arr[j]=arr[j+1];
				arr[j+1]=temp;
			}
}

int finsort(int **arr,int m,int n) {
	int *finarr=(int *)malloc(sizeof(int)*m*n);
	int k=0;
	for(int i=0; i<m; i++)
		for(int j=0; j<n; j++)
			finarr[k++]=arr[i][j];
	sort(finarr,m*n);
	k=0;
	for(int i=0; i<m; i++)
		for(int j=0; j<n; j++)
			arr[i][j]=finarr[k++];
}

3.编写一段代码,对给定的由整型元素节点构成的链表L进行插入节点操作,方案是:任意两个相邻节点之间插入一个新节点,新节点中的元素值是两个相邻节点中的元素值之和。说明: (1) 简要说明你所采用的程序设计语言如何表示链表;(2)假设L中的有效节点个数大于1;(3)只针对L中原有节点进行插入节点操作。

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

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

struct node *insert(struct node *head) {
	if(head->next==NULL)
		return NULL;
	struct node *p=head->next,*pre=head;
	while(p!=NULL) {
		struct node *temp=(struct node *)malloc(sizeof(struct node));
		temp->key=p->key+pre->key;
		pre->next=temp;
		temp->next=p;
		pre=p;
		p=p->next;
	}
	return head;
}

4.某程序设计语言中,对实数的定义如下语法图所示:

语法图中的数字是属于[0,9]中的任意普通数字。这个语法图定义的实数是C、 C++、Java 等程序设计语言中实数的子集,所以,这样的实数可以与你答题时所采用的程序设计语言中的实数进行运算。定义并实现一个函数,它带有两个参数,第一个参数代表个字符串,第二个参数代表一个实数,函数的返回值是布尔类型,其功能是:试图把参数字符串根据语法图翻译成一个实数,若能够成功翻译,则进一步用翻译出的实数与实数参进行数值比较,若大于实数参数则函数返回真值;若参数字符串不满足语法图对实数的定义,或者,翻译出的实数不大于实数参数,则返回假值。例如:当参数字符串分别为"2a.4"、"-3.14"、"3.b"时,因不满足语法图对实数的定义,则无论实数参数的值是多少,均返回假值;;当给定参数字符串分别为"123"、"123."、"123. 789"时,由于它们均满足语法图对实数的定义,所以可以把它们翻译成实数,随后与给定的实数参数进行数值比较,根据比较结果给出返回值。

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

bool judge(char *str,double num) {
	double a=0,b=0;
	int i=0;
	while(str[i]!='\0') {
		if(str[i]>='0'&&str[i]<='9')
			a=a*10+str[i]-'0';
		else
			break;
		i++;
	}
	if(str[i]!='\0') {
		if(str[i]!='.') {
			i++;
			double time=0.1;
			while(str[i]!='\0') {
				if(str[i]>='0'&&str[i]<='9') {
					b=b+(str[i]-'0')*time;
					time*=0.1;
				} else
					return false;
				i++;
			}
		} else
			return false;
	}
	if(a+b>num)
		return true;
	else
		return false;
}
相关推荐
Greedy Alg9 小时前
LeetCode 239. 滑动窗口最大值
数据结构·算法·leetcode
空白到白9 小时前
机器学习-KNN算法
人工智能·算法·机器学习
闪电麦坤9510 小时前
数据结构:排序算法的评判标准(Criteria Used For Analysing Sorts)
数据结构·算法·排序算法
爱coding的橙子10 小时前
每日算法刷题Day65:8.27:leetcode dfs11道题,用时2h30min
算法·leetcode·深度优先
不懂机器人10 小时前
linux网络编程-----TCP服务端并发模型(epoll)
linux·网络·tcp/ip·算法
Mercury_Lc11 小时前
【链表 - LeetCode】25. K 个一组翻转链表
数据结构·leetcode·链表
地平线开发者11 小时前
理想汽车智驾方案介绍 3|MoE+Sparse Attention 高效结构解析
算法·自动驾驶
小O的算法实验室12 小时前
2025年KBS SCI1区TOP,矩阵差分进化算法+移动网络视觉覆盖无人机轨迹优化,深度解析+性能实测
算法·论文复现·智能算法改进
艾莉丝努力练剑13 小时前
【C语言16天强化训练】从基础入门到进阶:Day 11
c语言·学习·算法
浩少70215 小时前
LeetCode-22day:多维动态规划
算法·leetcode·动态规划