XJTU_ 西安交通大学2020大学计算机作业-第九周

本文详细解答了西安交通大学2020年大学计算机课程的九周作业题目,涉及数组操作、字符串处理、数组查找、等值数列、字符计数、二进制转换、级数求和、因子和计算、字符串比较、字符移动、数组差异、素数与因子、字符串统计和编程算法等多个知识点。
摘要由CSDN通过智能技术生成

XJTU_ 西安交通大学2020大学计算机作业-第九周

XJTU_ 西安交通大学2020大学计算机作业-第九周

注:所有题所有用例均已通过。

俺又更新了,还是求点星星👇
文章没上传到github,反正没人点星星:https://github.com/nobodyXX/XJTU_C_homework/blob/main/week7,如果这篇文章带给你了帮助或者灵感,欢迎给我点个星星,谢谢!!!

第一题

"一个数组A中存有n(n>0)个整数,在不允许使用另外数组的前提下,将每个整数,循环向右移m(m>=0)个位置,即将A中的数据由(A0A1……An-1)变换为(An-m…… An-1A0A1……An-m-1)(最后m个数循环移至A的最前面的m个数)。输入n ( 1<=n<=100)、m(m>=0)及n个整数,输出循环右移m位以后的整数序列。

输入:

占二行,其中

第1行输入n和m两个数,n和m之间用空格分隔。

第2行输入数组A中的n个数,数据间用空格分隔。

输出:

占一行,数据间用一个空格分隔。

样例:

10 5

1 2 3 4 5 6 7 8 9 0

样例输入:
1 1
1
样例输出:
1

int main() {
	int a[100], m, n;
	scanf("%d %d", &n, &m);
	for (int i = 0; i < n; i++) scanf("%d", &a[i]);
	for (int i = 0; i < m; i++) {
		for (int b = 0, c, temp; b < n; b++) (b == 0) ? temp = a[0], a[0] = a[n - 1] : (c = a[b], a[b] = temp, temp = c);//右移一位
	}
	for (int i = 0; i < n; i++) (i == 0) ? printf("%d", a[i]) : printf(" %d", a[i]);
	return 0;
}

第二题

"去掉字符串中的空格。字符串长度不超过200.

输入:带空格的字符串。

输出:不含空格的字符串。

样例:

Washington hosts Chinese folklife festival

WashingtonhostsChinesefolklifefestival

样例输入:
#########!!!
样例输出:
#########!!!

# include<string.h>
int main() {
	char a[202], b[202] = "", c[2];
	gets(a);
	int i = strlen(a);
	for (int d = 0; d < i; d++) {
		sprintf(c,"%c", a[d]);//把a[d]赋给c,用strcpy报错,应该是没在a找到‘\0’
		(c[0] == ' ') ? 0 : strcat(b, c);
	} 
	puts(b);
	return 0;
}

第三题

"编程,查找同时在第一个数组和第二个数组中的全部元素。

首先输入数组a的元素个数,再输入数组a的各个元素的值,接着输入数组b的元素个数,再输入数组b的各个元素的值,输出同时在两个数组的全部元素。

样例输入:

3

1 2 3

5

1 3 5 7 9

样例输出:

1 3

样例输入:
3
1 2 3
5
1 3 5 7 9
样例输出:
1 3

int main() {
	int a[100], b[100], c[100], an, bn, m = 0;
	scanf("%d", &an);
	for (int i = 0; i < an; i++) scanf("%d", &a[i]);
	scanf("%d", &bn);
	for (int i = 0; i < bn; i++) scanf("%d", &b[i]);
	for (int i = 0; i < an; i++) {//历遍a
		for (int j = 0; j < bn; j++) //历遍b
			(a[i] == b[j]) ? c[m] = a[i], m++ : 0;//历遍c可避免重复元素
	}
	for (int i = 0; i < m; i++)(i == 0) ? printf("%d", c[i]) : printf(" %d", c[i]);
	return 0;
}

第四题

如果一个数列中的某一段(至少有两个元素)的各元素值均相同,则称之为等值数列段。等值数列段中元素的个数叫做等值数列段的长度。

输入:

序列长度N和N个整数(其中1<=N<=50), 以空格隔开。

输出:

数组中长度最大的等值数列段的始末下标(0~N-1),用英文逗号分隔。如果没有等值数列段,则输出NO.

说明:

如果有多个同等长度的等值数列,只输出第一个等值数列的起止下标。

样例输入:
7 3 1 2 1 1 2 2
样例输出:
3,4

int main() {
	int a[50], n = 0, b = -1, c = 0;
	for (char d = ' '; d != '\n'; n++) scanf("%d%c", &a[n], &d);
	for (int i = 2; i < n; i++) {
		c = (a[i] == a[i - 1]) ? ((b == -1) ? b = i - 2 : 0) : i - 2;
		if (c != 0 && b != -1 && c != b) break;//第一次等于时c=b,其它c=0,结束时c=i-2
	}
	printf("%d,%d", b, c);
	return 0;
}
//改进版
int main() {
	int a[50], n = 0, maxip=0, c=0, b[30] = {0};//b记录下标,b[0]和b[1]是第一组。
	for (char d = ' '; d != '\n'; n++) scanf("%d%c", &a[n], &d);
	for (int i = 2; i < n; i++) {
		if (a[i] == a[i - 1]) {
			(b[c] == 0) ? b[c] = i - 2 : 0;
			b[c + 1] = i - 1;
		}
		else
			c = (b[c + 1] == i - 2) ? c + 2 : 0;
	}
	for (int i = 0, maxlen=b[1]-b[0]; i < 30; i = i + 2) {
		maxip = ((b[i + 1] - b[i]) > maxlen) ? i : maxip;
	}
	printf("%d,%d", b[maxip], b[maxip + 1]);
	return 0;
}

第五题

输入一个可能带空格字符的字符串(长度不超过200),统计其中各个英文字母的出现次数,不区分大小写。输出字母a~z的出现次数,数据间以英文逗号分隔。非英文字母不统计。

输入:可能带空格的字符串。

输出:26个整数,以英文逗号分隔。

样例输入:
World’s oldest drink enjoys new success
样例输出:
0,0,2,3,4,0,0,0,1,1,1,2,0,3,3,0,0,2,6,1,1,0,2,0,1,0

#include<string.h>
int main() {
	char a[200];
	gets(a);
	int l[26] = { 0 }, n = strlen(a);
	for (int i = 0; i < n; i++) {
		(a[i] >= 97 && a[i] <= 122) ? l[a[i] - 97]++ : 0;
		(a[i] >= 65 && a[i] <= 90) ? l[a[i] - 65]++ : 0;//大写字母也算
	}
	//a的ASCII码是97,A的ASCII码是65
	for (int i = 0; i < 26; i++) (i == 0) ? printf("%d", l[i]) : printf(",%d", l[i]);
	return 0;
}

第六题

从键盘输入一个位数不超过20位的无符号二进制整数,将其转换为十进制。

输入:二进制序列

输出:对应的十进制数

样例输入:
16142
样例输出:
2+7+1153=1162

#include<math.h>
int main() {
	long long a = 0, n;
	scanf("%lld", &n);//长长整型占位符%ld
	for (int i = 0; n != 0; n = n / 10, i++) a = a + ((n % 10 == 1) ? pow(2, i) : 0);
	printf("%d", a);
	return 0;
}

第七题

计算级数

2/1, -3/2, 5/3, -8/5,…

的前n项和。

级数的特点是:(1)若先不考虑符号,则前一项的分子是后一项的分母,前一项的分子分母之和为后一项的分子。(2)级数各项的正负号交错。

输入:项数n, 0<n<100.

输出:前n项的和,格式"%f"。

样例输入:
1
样例输出:
2.000000

#include<math.h>
int main() {
	float a = 2, b = 1, sum = 0, n;
	scanf("%f", &n);
	for (int i = 0; i < n; i++) {
		sum = sum + pow(-1, i)*a / b;
		a = a + b;
		b = a - b;
	}
	printf("%f", sum);
	return 0;
}

第八题

求正整数n的所有因子(1和n除外)的和。例如:n=20时,因子为2、4、5、10 ,它们的和为21。素数的因子和为0。

输入:正整数n。

输出:除1和本身之外的因子的和,整数。

样例输入:
3
样例输出:
0

int main() {
	int sum = 0, n;
	scanf("%d", &n);
	for (int i = 2; i < n / 2 + 1; i++) sum = sum + ((n%i == 0) ? i : 0);
	printf("%d", sum);
	return 0;
}

第九题

比较两个字符串的前n个字符,不区分大小写。字符串的长度不超过100。

如果第1个字符串的前n个字符大于第2个字符串的前n个字符,输出1;

如果第1个字符串的前n个字符小于第2个字符串的前n个字符,输出-1;

如果第1个字符串的前n个字符等于第2个字符串的前n个字符,输出0;

字符比较:字母表中后面的大于前面的。

输入:两个字符串和一个正整数。

输出:1、-1或0。

样例输入:
abcxyz abcdef 5
样例输出:
1

int main() {
	char a[100], b[100];
	int c = 0, d = 0, n;
	scanf("%s %s %d", a, b, &n);
	for (int i = 0; i < n; i++) {
		c = c + ((a[i] < 97) ? a[i] + 32 : a[i]);//大写转小写
		d = d + ((b[i] < 97) ? b[i] + 32 : b[i]);
	}
	(c == d) ? printf("0") : printf("%d", (c > d) ? 1 : -1);
	return 0;
}

第十题

将字符串首部的号全部移到字符串的尾部,中间若有号,保持中间的*号不动。字符串长度不超过200.

样例:

streetmusic*

streetmusic*

样例输入:
streetmusic
样例输出:
stree
tmusic

#include<string.h>
int main() {
	char a[100], b[100] = "", c[2], d[2]="*";
	gets(a);
	int i = 0, l = strlen(a);
	for (; a[i] == '*'; i++);//*数量
	for (int j = i; j < l; j++) {//复制余下字符到b
		sprintf(c, "%c", a[j]);
		strcat(b, c);
	}
	for (int j = 1; j <= i; j++) strcat(b, d);
	puts(b);
	return 0;
}

第十一题

输入两个整型数组(假设数组的大小为不超过10)的各个元素,输出不是两个数组共有的元素,并从小到大排序输出。

输入:两个数组的元素(小于10个),数组中第一个数据指示元素的个数.

输出:两个数组的元素中非共有的元素,并且从小到大进行排序.

样例输入:
7 1 2 3 4 5 6 7 6 5 6 7 8 9 0
样例输出:
0 1 2 3 4 8 9

这个代码写的很不怎么样

int w9_q11_pd(int p[11], int q[11], int w[20], int n, int m, int wn) {//m是另一个数组的长度
	for (int i = 0, f1 = -1, f2 = 1; i < n; i++, f1 = -1,f2=1) {//f1判断p[i]是否在q内
		for (int j = 0; j < m; j++) {
			if (p[i] == q[j]) break;
			if (p[i] != q[j] && j == m - 1) f1 = 1;
		}
		for (int j = 0; j < wn; j++) //f2判断p[i]是否与w中元素重复
			if (p[i] == w[j]) f2=-1;
		(f1 == 1&&f2==1) ? w[wn] = p[i], wn++ : 0;//把p有q没有的数赋给w[wn]
	}
	return wn;//wn是c[]内有几个数
}
int week9_q11() {//这个代码写的麻烦了,理解错题意了
	//输入7 1 2 3 4 5 6 7 6 5 6 7 8 9 0,第一个数组7位,第二个6的意思是第二个数组有六位
	int a[11], b[11], n1,n2, c[20];//n1是a的长度,n2是b的长度
	//a,b是输入的两个数组,c存储两数组不同的数字
	scanf("%d", &n1);
	for (int i = 0; i < n1; i++) scanf("%d", &a[i]);
	scanf("%d", &n2);
	for (int i = 0; i < n2; i++) scanf("%d", &b[i]);//两个数组的长度不一定都是n
	int wn = w9_q11_pd(a, b, c, n1, n2, 0);
	wn = w9_q11_pd(b, a, c, n2, n1, wn);//wn记录c数字个数
	int max = c[0], min = c[0];
	for (int i = 1; i < wn; i++) {//排序太麻烦,就不写了
		max = (c[i] > max) ? c[i] : max;
		min = (c[i] < min) ? c[i] : min;
	}
	for (int i = min, f = 0; i <= max; i++) {
		for (int j = 0; j < wn; j++) (i == c[j]) ? ((f == 0) ? printf("%d", i), f = 1 : printf(" %d", i)) : 0;
	}
	return 0;
}

第十二题

输入任意长度的字符串,分别统计其中大写字母,小写字母,数字字符及其它字符的个数并输出统计结果,再按统计值从多到少依次输出。

提示:测试用例输出的冒号是中文冒号。

输入:任意长度的字符串。

输出:统计其中大写字母,小写字母,数字字符及其它字符的个数。

样例输入:
ASDFghjkl*(),;19
样例输出:
大写字母:4 小写字母:5 数字字符:2 其它字符:5 从多到少依次输出如下: 小写字母:5 其它字符:5 大写字母:4 数字字符:2

自认为这个写得不错

int w9_q12_print(int i, int a[4]) {
	switch (i){
	case 0:
		printf(" 大写字母:%d", a[0]);
		break;
	case 1:
		printf(" 小写字母:%d", a[1]);
		break;
	case 2:
		printf(" 数字字符:%d", a[2]);
		break;
	case 3:
		printf(" 其它字符:%d", a[3]);
		break;
	}
}

int main() {
	int a[4] = { 0 }, n, b[4] = { 0 }, max = 0;
	char s[1000];
	gets(s);
	n = strlen(s);
	for (int i = 0; i < n; i++) {
		if (s[i] >= 65 && s[i] <= 90)a[0]++;
		else if (s[i] >= 97 && s[i] <= 122)a[1]++;
		else if (s[i] >= 48 && s[i] <= 57)a[2]++;
		else a[3]++;
	}
	printf("大写字母:%d 小写字母:%d 数字字符:%d 其它字符:%d", a[0], a[1], a[2], a[3]);
	printf(" 从多到少依次输出如下:");
	for (int i = 0; i < 4; i++) max = (a[i] > max) ? a[i] : max;
	for (int j = max; j >= 0; j--) {
		for (int i = 0; i < 4; i++) {
			if (a[i] == j) w9_q12_print(i, a);
		}
	}
	return 0;
}

第十三题

从键盘输入一个正整数(>1),然后将该整数分解为1和各个质因子的相乘,如果输入的整数本身就是质数,则应分解为1和该数本身相乘。

样例输入:
18
样例输出:
123*3

int week8_q13() {//用第六题的代码改一改就好
	int n, s = 0;
	scanf("%d", &n);
	for (int i = 2, w = 0, b = n; n != 1; i++, w = 0) {
		for (int a = 2; a <= i / 2 + 1; a++) {//判断i是否为质数,是的话w=1
			if (i%a != 0 || i == 2)(a == i / 2 + 1) ? w = 1 : 0;
			else break;
		}
		if (w == 1 && n%i == 0) {
			if (i == b)printf("1*%d",n), n = 1;//n是质数输出0
			else {
				(n == b) ? printf("1*%d", i) : printf("*%d", i);
				n = n / i, s = s + i;
				i = 1;//从头再来,后边还要执行i++
			}
		}
	}
	return 0;
}

第十四题

从键盘输入两个正整数m和n,然后从m+1开始找出大于m的n个素数。

输入:m,n

输出:n个素数,数据间以一个空格分隔。

样例输入:
1 20
样例输出:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71

int main() {
	int m, n;
	scanf("%d %d", &m, &n);
	for (int a = m + 1, b = 0; b < n; a++) {
		for (int i = 2; i <= a; i++) {
			if (a%i == 0 && i != a) break;
			if (i == a) {
				(b == 0) ? printf("%d", a) : printf(" %d", a);
				b++;
			}
		}
	}
	return 0;
}

第十五题

所谓孪生素数是指间隔为 2 的相邻素数,例如最小的孪生素数是3和5,5和7也是孪生数。

编写程序,求给定区间[m,n]中的孪生数的数量。例如[2,10]中的孪生数有(3,5)和(5,7),则[2,10]中孪生数的数量为2.

输入:正整数m,n,    m,n>1.

输出:[m,n]中的孪生的数量

样例输入:
2 100
样例输出:
8

int main() {
	int m, n, count = 0;
	scanf("%d %d", &m, &n);
	for (int a = m, b = -1; a <= n; a++) {
		for (int i = 2; i <= a; i++) {
			if (a%i == 0 && i != a) break;
			if (i == a) {
				(a - b == 2) ? count++ : 0;
				b = a;
			}
		}
	}
	printf("%d", count);
	return 0;
}

都看到这儿了,点个星星呗https://github.com/nobodyXX/XJTU_C_homework/blob/main/week7

西安交通大学轴承故障数据集(xjtu-sq)是西安交通大学与国内某大型航空制造公司合作收集整理的一组有关轴承故障的数据集。该数据集是针对航空领域的轴承故障进行研究和分析而创建的,并具有一定的代表性和实用性。 xjtu-sq数据集中包括了大量的轴承故障数据,例如振动、电流、温度等参数,这些参数是实时采集的,并记录了轴承在运行过程中的各种状态。通过对这些数据进行分析和挖掘,可以有效地预测轴承的寿命和故障情况,帮助航空制造公司实现轴承的智能化维护和管理。 该数据集采集的数据量大、质量高,包含了多种类型和规模的轴承故障情况,覆盖了航空工程中常见的各种故障模式。通过对这些数据进行深入研究和分析,可以为航空制造公司提供有效的故障诊断和预测模型,提高轴承的可靠性和使用寿命。 同时,xjtu-sq数据集的收集和整理过程符合科学、严谨的原则,数据的采集和处理过程都经过了严格控制和验证,数据的准确性和可信度得到了保证。这使得xjtu-sq数据集成为了国内外学术界和工业界研究轴承故障的重要参考资料。 总的来说,xjtu-sq数据集不仅代表了西安交通大学在轴承故障研究领域的重要成果之一,也为航空制造公司提供了宝贵的数据资源,有助于改进轴承的设计和运行管理,提高飞机的安全性和可靠性。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值