计算机程序设计实训记录(2)

终于把题做完了,结果发现事情还是不少,但还是抽点时间记录一下。

例题

例题3

计算一系列实数的个数、最小值、最大值和“平均值”

问题描述   给定若干个(大于0且不超过1024)实数,计算其中数据的个数(n)、最小值、最大值,以及“平均值”。此处的“平均值”定义为,若n>2,则需去掉一个最大值、一个最小值,剩下的n-2个数据的算术平均值;若n为1或2,则为普通的算术平均值。

输入   输入数据有多行,每一行上有若干个实数,对应一种情形(数据之间用一个空格字符分隔)。

输出   对于每一种情形,依次输出数据的个数、最小值、最大值、平均值、换行。其中数据之间用逗号和空格分隔,浮点型数据保留2位小数。

输入样例

1

1 1

-1 -2 -1.2

输出样例

1, 1.00, 1.00, 1.00

2, 1.00, 1.00, 1.00

3, -2.00, -1.00, -1.20

乍一看好像很简单,但是怎么方便地输入就成了一个问题

例题4

字符串倒置

问题描述   对于给定的字符串,将其按字符倒置。

输入   输入数据有多行。每一行为一个字符串(字符串长度小于1024,其中可能含有空格字符),对应一种情形。

输出   对于每一种情形,输出结果并换行。

输入样例

Abc

abc def

1230

输出样例

cbA

fed cba

0321

用一个循环交换首末尾即可

// OJ04.c
#include <stdio.h>

char *reverse(char *str)
{
	char temp;
	int left, right;
	for(right=0; str[right]!='\0'; right++)
	;
		if(right>0) 
			right--;			//前面判断空字符的if可以不需要,right--退一位不影响结束符
	for(left=0; left<right; left++,right--)
	{
		temp = str[left];
		str[left] = str[right]; 
		str[right] = temp;
	}
	return str;
}

#define N 1024

int main()
{
	char str[N];
	while(gets(str))
		printf("%s\n", reverse(str));
	return 0;
}

例题5

字符在字符串中首次出现的位置

问题描述   给定一个字符、一个字符串(字符串的长度小于1024),计算该字符在字符串中首次出现的位置。

输入   输入数据有若干行。每两行对应一种情形,这两行中的第一行上有一个字符(请注意将该字符后面的换行字符“吃掉”),第二行上有一个字符串(字符串中可能含有空白字符)。

输出   对于每一种情形,输出计算结果(若字符不在字符串中,则输出0),然后换行。

输入样例

a

abcd

a

baaa

a

xyz

输出样例

1

2

0

// OJ05.c		字符在字符串中首次出现的位置
#include <stdio.h>

int Pos(char c, const char *str)
{
	int i;
	for(i=0; str[i]!='\0'; i++)
		if(str[i]==c)
			return i+1;
	return 0;
}

#define N 1024
int main()
{
	char ch, str[N];
	while(scanf("%c", &ch)==1)	// 仅读取字符,其后的换行字符待处理
	{
		gets(str);				// 读取字符所在行的换行字符'\n'(此时读取的字符串长度为0)
		gets(str);				// 本语句读取的为待处理字符串
		printf("%d\n", Pos(ch, str));
	}
	return 0;
}

直接用一个循环来比对就好,注意要吸收掉换行符

 

posted @ 2020-08-01 23:28  DoRCL  阅读(165)  评论(0)    收藏  举报