计算机程序设计实训记录(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;
}
直接用一个循环来比对就好,注意要吸收掉换行符

浙公网安备 33010602011771号