吉林大学967-高级语言程序设计-2016

2016-1
//假设有包含m个元素的整型数组a,该数组中存放了m个不重复的整数
//编写函数求数组a中第k大的整数。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define M 10
int main() {
	int a[M] = { 5,7,9,12,10,1,9,2,1,13};
	int i, j, k;
	int temp;
	scanf("%d",&k);
	for (i = 0; i < M; i++)
		for (j = 0; j < M - i; j++) {
			if (a[j] < a[j + 1]) {
				temp = a[j];
				a[j] = a[j + 1];
				a[j + 1] = temp;
			}
		}
	printf("第%d大的数:%d",k,a[k-1]);
	system("pause");
	return 0;
}



2016-2
假设利用整型数组存储二进制数,即数组的一个元素存放二进制数的一位。
编写函数实现该存储形式的二进制的加1运算
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
typedef struct Snode
{
	int data;
	Snode *next;
}Snode, *PSnode;
PSnode CreatListF(void) {
	int num;
	PSnode head;
	Snode *s;
	head = NULL;
	printf("请输入一个二进制数(空格隔开,-1结束):\n");
	scanf("%d",&num);
	while (num != -1) {
		s = (Snode*)malloc(sizeof(Snode));
		if (s == NULL) return nullptr;
		s->data = num;
		s->next = head;
		head = s;
		scanf("%d", &num);
	}
	return head;
}
void output(PSnode&L) {
	PSnode p = L;
	while (p) {
		printf("%d ",p->data);
		p = p->next;
	}
	printf("\n");
}
void BinaryAddOne(PSnode&L)
{						//链表表头到表尾依次为高位到低位 
	PSnode Temp, q, p, s;
	q = L->next;      //遍历查找的头指针
	p = L;
	s = NULL;         //查找0位的标记指针
	while (q)
	{
		if (q->data == 0)
			s = q;		//记录从最高位开始的最后一个0位的位置
		q = q->next;
	}
	if (s)
	{
		s->data = 1;	//记录的位置变为1 
		s = s->next;
		while (s)
		{
			s->data = 0;//其后边的1位全变为0
			s = s->next;
		}
	}
	else
	{//Temp 为二进制位满1时新进位空间开辟指针 形如1 3 7 15等二进制表示的下一个高位
		Temp = new Snode;
		Temp->data = 1;			//采用头插法进行新进位的添加
		Temp->next = p->next;
		p->next = Temp;
		while (Temp)				//新进位后的所有1位全变为0
		{
			Temp->data = 0;
			Temp = Temp->next;
		}
	}
}
int main() {
	PSnode h=CreatListF();
	output(h);
	BinaryAddOne(h);
	output(h);
	system("pause");
	return 0;
}




2016-3
#include<stdio.h>
#include<stdlib.h>
#define A 5
#define B 4
void output(int *str,int n) {
	int i;
	for (i = 0; i < n; i++) {
		printf("%d ",str[i]);
	}
	printf("\n");
}
void output(char *ch,int *str, int n) {
	int i;
	printf("%s",ch);
	for (i = 0; i < n; i++) {
		printf("%d ", str[i]);
	}
	printf("\n");
}
int* interse(int *str1,int *str2 ,int size) {
	int *in = (int*)malloc(size*sizeof(int));
	int i;
	for (i = 0; i < size; i++) {
		if (str1[i] == str2[i]) {
			in[i] = 1;
		}
		else {
			in[i] = 0;
		}
	}
	return in;
}
int* union_(int *str1, int *str2, int size) {
	int *un = (int *)malloc(size*sizeof(int));
	int i;
	for (i = 0; i < size; i++) {
		if (str1[i] == 1 || str2[i] == 1) {
			un[i] = 1;
		}
		else {
			un[i] = 0;
		}
	}
	return un;
}
int main() {
	int a[A] = { 1,0,1,1,0 }, b[B] = {0,0,0,1};
	int *in, *un;
	int min, max;
	output(a, A); output(b, B);
	if (A > B) {
		min = B;
		max = A;
	}
	else {
		min = A;
		max = B;
	}
	in = interse(a, b, min);
	un = union_(a, b, max);
	output("交集:",in, min); output("并集:",un, max);
	system("pause");
	return 0;
}



2016-4
#include<stdio.h>
#include<stdbool.h>
#define N 100
int main() {
	bool jude(char talk[]);
	char talk[N];
	printf("输入对话:");
	gets_s(talk);
	if (jude(talk))
		printf("是两机器人的对话");
	else
		printf("不是两机器人的对话");
	printf("\n");
}
bool jude(char talk[]) {
	int i;
	if (talk[0] != 'Y' && talk[0] != 'N' && talk[0] != '2')
		return false;
	for (i = 0; talk[i] != '\0'; i++) {
		if (talk[i] == 'Y' || talk[i] == 'N') {
			if (talk[i + 1] != 'Y'&&talk[i + 1] != 'N'&&talk[i + 1] != '2')
				return false;
		}
		else if (talk[i] == '2') {
			if (talk[i + 1] != 'y'&&talk[i + 1] != 'n'&&talk[i + 1] != '1'&&talk[i + 1] != '\0')
				return false;
		}
		else if (talk[i] == 'y' || talk[i] == 'n') {
			if (talk[i + 1] != 'y'&&talk[i + 1] != 'n'&&talk[i + 1] != '1')
				return false;
		}
		else if (talk[i] == '1') {
			if (talk[i + 1] != 'Y'&&talk[i + 1] != 'N'&&talk[i + 1] != '2'&&talk[i + 1] != '\0')
				return false;
		}
		else
			return false;
	}
	return true;
}

猜你喜欢

转载自blog.csdn.net/qq_36109528/article/details/86231675