高级语言讲义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;
}
相关推荐
yszaygr213834 分钟前
Verilog参数化游程编码RLE模块
算法
望易1 小时前
刚设计的大模型架构-双域耦合认知框架
算法·架构
复杂网络5 小时前
多个 Claude Code 与多个 Codex 协同工作:设计与实现方案
算法
apocelipes19 小时前
常用编程语言和库的正则表达式性能对比
c语言·c++·python·性能优化·golang·开发工具和环境
HjhIron20 小时前
面试常客:字符串算法从入门到进阶
算法·面试
吴佳浩1 天前
DeepSeek DSpark:Confidence-Scheduled Speculative Decoding 技术解析
人工智能·算法·deepseek
触底反弹1 天前
🧠 搞懂 Token,才算真正入门大模型——从分词原理到 Embedding 语义实战
javascript·人工智能·算法
vivo互联网技术1 天前
ICLR 2026 | 基于后验采样的图像恢复方法LearnIR:人脸去阴影、去雾
人工智能·算法·aigc
浮生望1 天前
JS字符串与回文算法:从包装类到双指针的面试进阶之路
javascript·算法
黄敬峰1 天前
面试必刷:从JS底层包装类到双指针,彻底搞懂字符串与回文算法
算法