高级语言讲义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;
}
相关推荐
এ᭄画画的北北2 小时前
力扣-234.回文链表
算法·leetcode·链表
八股文领域大手子3 小时前
深入理解缓存淘汰策略:LRU 与 LFU 算法详解及 Java 实现
java·数据库·算法·缓存·mybatis·哈希算法
__lost3 小时前
C++ 解决一个简单的图论问题 —— 最小生成树(以 Prim 算法为例)
算法·图论·最小生成树·prim算法
wuqingshun3141594 小时前
蓝桥杯 11. 打印大X
数据结构·算法·职场和发展·蓝桥杯·深度优先
Blossom.1185 小时前
量子网络:构建未来通信的超高速“高速公路”
网络·opencv·算法·安全·机器学习·密码学·量子计算
A林玖5 小时前
【机器学习】朴素贝叶斯
人工智能·算法·机器学习
六边形战士DONK5 小时前
神经网络基础[损失函数,bp算法,梯度下降算法 ]
人工智能·神经网络·算法
wuqingshun3141596 小时前
蓝桥杯 2. 确定字符串是否是另一个的排列
数据结构·c++·算法·职场和发展·蓝桥杯
小刘|6 小时前
JVM 自动内存管理
java·jvm·算法
小羊不会c++吗(黑客小羊)6 小时前
c++头文件知识
算法