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

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

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

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

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

第一题

编写函数,去掉一个字符串中除头部和尾部空格外的所有空格,并编写主函数进行调用测试。

输入:

占一行(注:输入的字符串长度不会超过80)

输出:

占一行

样例输入:
a,b,c
样例输出:
a,b,c

#include<string.h>
void week11_q1_def1(char *a,int *b) {
	int l = strlen(a);
	for (int i = 0; a[i] == ' '; b[0]++, i++);
	for (int i = l - 1; a[i] == ' '; b[1]++, i--);
}
int main() {
	char a[100];
	gets(a);
	int b[2] = {0};
	week11_q1_def1(a, b);
  for (int i = 0; i < b[0]; i++) printf(" ");
	for (int i = b[0]; i < strlen(a) - b[1]; i++)(a[i] == ' ')? 0 : printf("%c", a[i]);
  for (int i = 0; i < b[1]; i++) printf(" ");
	return 0;
}

第二题

编写程序,将s所指字符串中除了下标(从0开始)为奇数、同时ascii值也为奇数的字符之外,其余的所有字符都删除,串中剩余字符所形成的一个新串放在t所指的一个数组中并显示。若没有满足条件的字符,显示“#”。字符串长度不超过200.

输入:长度不超过200的字符串(无空格)。

输出:处理后的字符串。

样例输入:
attend
样例输出:
e

#include<string.h>
int main() {
	char a[202], b[202]="#";
	gets(a);
	for (int i = 1, j = 0; i < strlen(a); i = i + 2, b[j + 1] = '\0') (a[i] % 2 == 0) ? 0 : (b[j] = a[i],j++);
	puts(b);
	return 0;
}

第三题

"写出正整数的三位分节格式。如,当用户输入82668634时,程序应该输出82,668,634。

输入:正整数

输出:三位分解格式。

样例:

82668634

82,668,634

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

#include<string.h>
int main() {
	char a[100];
	gets(a);
	int b = strlen(a) % 3;
	for (int i = 0; i < b; i++)
		printf("%c", a[i]);
	for (int i = b; i < strlen(a); i++)
		((i - b) % 3 == 0&&i!=0) ? printf(",%c", a[i]) : printf("%c", a[i]);
	return 0;
}

第四题

将字符串中奇数下标(从0开始)的字符顺序颠倒。如字符12345678,结果为18365472

输入:字符串,不含空格。

输出:结果字符串。

样例输入:
1234567890
样例输出:
1038567492

#include<string.h>
int main() {
	char a[100];
	gets(a);
	int b = (strlen(a) % 2 == 0) ? (strlen(a) - 1) : (strlen(a)-2);
	for (int i=0;i< strlen(a); i=i+2, b=b-2){
		printf("%c", a[i]);
		(b > 0) ? printf("%c", a[b]) : 0;
	}
	return 0;
}

第五题

编写程序,输入字符串到字符数组s中,再输入一个字符给变量c,判断s中是否有c,若有则将该字符从s中删除后输出。若没有,则输出字符串“NotFound”。

输入2行,1个字符串和1个字符:

输出:删除后的字符串

样例1:

输入:

smiles

s

输出:

mile

样例2:

输入:

smiles

a

输出:

NotFound

样例输入:
aab
b
样例输出:
aa

#include<string.h>
int main() {
	char a[100], b;
	gets(a);
	b = getchar();
	int s = -1;
	for (int i = 0; i < strlen(a); i++)
		(a[i] == b) ? s = 1 : 0;
	if (s == -1) {
		printf("NotFound");
		return 0;
	}
	else
		for (int i = 0; i < strlen(a); i++) (a[i] == b) ? 0 : printf("%c", a[i]);
	return 0;
}

第六题

"编写程序,要求在一个字符串中查找连续出现次数最多的一个字符,并显示其所在的开始下标和次数。(如果出现最多的字符不止一个,输出最靠前的字符)

输入:一个字符串

输出:出现最多的字符,次数,开始下标

样例输入:
xyxyzzzqqq1122334
样例输出:
z 3 4

#include<string.h>
int main() {
	char a[100];
	gets(a);
	int b[6] = { 0, 1, 0, 0, 1, 0 };//0:字符,1:重复次数,2:下标
	for (int i = 1; i < strlen(a); i++) {
		if (a[i] == a[i - 1]) b[0] = a[i], b[1]++, b[2] = i - b[1] + 1;
		else b[1] = 1;
		if (b[1] > b[4]) b[3] = b[0], b[4] = b[1], b[5] = b[2];
	}
	printf("%c %d %d", b[3], b[4], b[5]);
	return 0;
}

第七题

"编程函数,将字符串(长度小于20个字符)用替换加密法译成密码。

替换加密的加密规则是:将原来的字母用字母表中其后面的第3个字母来替换,对于字母表中最后的三个字母,可将字母表看成是首尾衔接的。如字母c就用f来替换,字母y用b来替换。例如输入字符串为“Study”,则加密后的字符串为“Vwxgb”。

样例:

Study

Vwxgb

样例输入:
Student
样例输出:
Vwxghqw

int main() {
	char a[100];
	gets(a);
	for (int i = 0; a[i] != '\0'; i++) {
		(a[i] >= 65&& a[i] <= 'Z') ? ((a[i] > 87) ? printf("%c", a[i] % 88 + 65) : printf("%c", a[i] + 3)) : 0;
		(a[i] >= 97) ? ((a[i] > 'w') ? printf("%c", a[i] % 'x' + 'a') : printf("%c", a[i] + 3)) : 0;
	}
	return 0;
}

第八题

"编写字符串反转函数,该函数将指定字符串中的字符左右顺序颠倒排列。该函数的原型为:

char * mystrrev(char string[]);

其中参数string是待反转的字符串,该函数的返回值为左右顺序颠倒后的字符串指针。

编写主函数,对上述函数进行测试。

样例:

abcdefghijklmn

nmlkjihgfedcba

样例输入:
information
样例输出:
noitamrofni

char * mystrrev(char string[]) {
	static char b[100];//要加static,否则字符串b会被释放
	int l = strlen(string);
	for (int i = 0; i < l; i++)b[l - i - 1] = string[i];
	b[l] = '\0';
	return b;
}
int main() {
	char a[100], *bip;
	gets(a);
	bip = mystrrev(a);
	puts(bip);
	return 0;
}

注:C 不支持在调用函数时返回局部变量的地址,除非定义局部变量为 static 变量。
因为局部变量是存储在内存的栈区内,当函数调用结束后,局部变量所占的内存地址便被释放了,因此当其函数执行完毕后,函数内的变量便不再拥有那个内存地址,所以不能返回其指针。
除非将其变量定义为 static 变量,static 变量的值存放在内存中的静态数据区,不会随着函数执行的结束而被清除,故能返回其地址。

第九题

编写程序,输入字符串到字符数组s中,将字符串中的空格均改为逗号(每1个空格对应1个英文逗号)。 输入一行:字符串。 输出一行:改变后的字符串; 若没有空格,则输出字符串“NotFound”。

样例输入:
zzz yyy xxx aa
样例输出:
zzz,yyy,xxx,aa

#include<string.h>
int main() {
	char a[100];
	gets(a);
	for (int i = 0; a[i] != '\0'; i++) {
		if (a[i] == ' ')break;
		if (i == strlen(a) - 1) {
			printf("NotFound");
			return 0;
		}
	}
	for (int i = 0; a[i] != '\0'; i++) (a[i] == ' ') ? printf(",") : printf("%c", a[i]);
	return 0;
}

第十题

编写函数,寻找具有n个元素的一维数组中的最大值和最小值,并返回数组元素的平均值,函数原形如下:

double fun(int a[],int n,int *max,int *min);

输入输出格式:

输入:用户输入的n+1个数,用空格分隔。第一个数为数组元素个数n。

输出:3个数字:第一个数字为数组中的最大元素值,第二个数字为数组中的最小元素值,第三个数字为数组元素的平均值(保留小数点后6位有效数字)。3个数用空格分开。

样例输入:
3 10 15 -10
样例输出:
15 -10 5.000000

double fun(int a[],int n,int *max,int *min){
    double sum=0;
    for(int i=1;i<=n;i++){
        sum=sum+a[i];
        if(a[i]>*max)*max=a[i];
        if(a[i]<*min)*min=a[i];
    }
    return sum/n;
}

int main(){
    int a[100],i=0;
    for(char c='a';c!='\n';i++) scanf("%d%c",&a[i],&c);
    int max=a[1],min=a[1];
    double arg=fun(a,a[0],&max,&min);
    printf("%d %d %.6f",max, min, arg);
    return 0;
}

第十一题

“设5个单词的单词表,”“reserve”", ““replace””, ““core””, ““nature,”” ““literature””,编写程序在单词表中查找单词,若找到,则显示YES,若找不到则显示NO。查找不区分大小写。

输入:一个表示单词的字符串。

输出:YES或NO。

样例1:

RESERVE

YES

样例2:

change

NO

样例输入:
NATURE
样例输出:
YES

int main() {
	char a[5][20] = { {"reserve"},{"replace"},{"core"},{"nature"},{"literature"} }, b[20], d=0;//d用来判断
	gets(b);
	for (int i = 0; b[i] != '\0'; i++) b[i] = (b[i] >= 'a') ? b[i] : (b[i] % 'A' + 'a');//大写转小写
	for (int i = 0; i < 5; i++) {
		for (int j = 0; a[i][j] != '\0'&&b[j] != '\0'; j++) {
			if (b[j] != a[i][j]) break;
			if (b[j+1]=='\0'&& a[i][j+1]=='\0') d=1;
		}
	}
	(d == 0) ? printf("NO") : printf("YES");
	return 0;
}

第十二题

"编写程序,按下列规则倒序输出子字符串。先输出最后的一个字符,再输出最后两个字符串,在再出后面三个字符…, 最后输出整个字符串。输入的字符串长度不超过100。

输入:一个字符串

输出:空格隔开的子字符串,用一个空格间隔。

输入输出样例:

student

t nt ent dent udent tudent student

#include<string.h>
int main() {
	char a[100];
	gets(a);
	int l = strlen(a);
	for (int i = 1; i <= l; i++)
		for (int j = l - i; j <= l - 1; j++)
			(j == l - 1 && i != l) ? printf("%c ", a[j]) : printf("%c", a[j]);
	return 0;
}

第十三题

"一个字符串,如果第1个字符和最后一个字符相同,第2个字符和倒数第2个相同,…,则称为回文字符串,简称回文串。如deed。

输入一个字符串,判断是否回文字符串。若是则显示YES,否则显示NO。输入的字符串长度不超过200.

样例1:

deed

YES

样例2:

good

NO

样例输入:
d
样例输出:
YES

#include<string.h>
int main() {
	char a[100];
	gets(a);
	int l = strlen(a), b=-1;
	for (int i = 0; i <= l / 2; i++) {
		if (a[i] != a[l - i - 1])break;
		if (i == l / 2)b = 1;
	}
	(b == 1) ? printf("YES") : printf("NO");
	return 0;
}

第十四题

"输入两个字符串,交叉输出(第1个字符串的字符先输出),长度不同时,最后只输出长的字符串中的字符。例如team和good,输出为tgeoaomd ;若两个字符串是challenge和put,则输出为cphuatllenge。字符的长度不超过100。输入字符串间以空格分隔。

样例:

challenge put

cphuatllenge

样例输入:
territorial put
样例输出:
tpeurtritorial

int main() {
	char a[100], b[100];
	scanf("%s", a);
	scanf("%s", b);
	for (int i = 0; a[i] > 0 || b[i] > 0; i++) {//'\0'为0,初始化空字符串为-52
		(a[i] > 0) ? printf("%c", a[i]) : 0;
		(b[i] > 0) ? printf("%c", b[i]) : 0;
	}
	return 0;
}

第十五题

"输入两个字符串,统计第2个字符串(至少含2字符)在第1个字符串中出现的次数。没有出现,次数为0.

输入:两个字符串,以空格分隔。

输出:出现次数,整数。

样例1:

banana an

2

样例2:

bnnnn nn

3

样例输入:
nanfinancebananafnainancebanannan nan
样例输出:
6

int main() {
	char a[200], b[100];
	scanf("%s", a);
	scanf("%s", b);
	int count = 0;
	for (int i = 0; a[i] !='\0'; i++) {
		if (a[i] == b[0]) {
			for (int j = 0; b[j] != '\0'; j++, i++) {
				if (a[i] != b[j])break;
				if (b[j + 1] == '\0')count++,i--;//和第一个循环i++抵消
			}
		}
	}
	printf("%d", count);
	return 0;
}

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

  • 68
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值