XJTU大学计算机编程作业题 第11周

第一题

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

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

样例输入:

3
10 15 -10

样例输出:

15
-10
5.000000

参考代码:

#include 

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

int main()
{
	int n;
	int a[256];
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &a[i]);
	}
	int max = a[0]; int min = a[0];
	fun(a, n, &max, &min);
	printf("%d\n%d\n",max,min);
	printf("%lf\n", fun(a, n, &max, &min));
	return 0;
}

第二题

题目描述:
编写函数,将一个二进制数(以字符串形式表示)转换为十进制数。函数原型如下:

double binTodec(char *str);
其中str为接收的二进制数,函数的返回值为对应的十进制数。

样例输入:

1111

样例输出:

15

参考代码

#include 
#include 
#include 
double binTodec(char* str);
int main()
{
	char str[128] ;
	scanf("%s", str);
	printf("%g", binTodec(&str));
	return 0;
}
double binTodec(char* str)
{
	int n=strlen(str);
	int x=0;
	int y = 0;
	for (int i = n - 1; i >= 0; i--)
	{
		x += pow(2, n-i-1)*(str[i]-'0');
	}
	return x;
}

第三题

!!!
题目描述:
编写函数,去掉一个字符串(长度不超过80)中除头部和尾部空格外的所有空格,并编写主函数进行调用测试(即返回去掉空格后的字符串。)。

注:字符串头部或尾部可能有多个空格。

样例输入:

av dg , ,e ,   

样例输出:

avdg,,e,   

参考代码

#include
#include
int clear_blank(char *p, char *q, int len)
{
	char *start, *end;
	start = p;
	end = p + len;
	while (*start == ' ')
	{
		*q = *start;       //将头部空格放到字符串2中
		q++;             
		start++;
	}
	while (*(end - 1) == ' ')
	{
		end--;
	}

	while (start != end)//去除字符串中间的空格,并放到字符串2中
	{
		if (*start != ' ')
		{
			*q = *start;
			q++;
		}
		start++;
	}
	while (start != p + len)//尾部空格
	{
		*q = *start;
		q++;
		start++;
	}
	*q = '\0';
	return 0;
}
 
int main()
{
	char str1[81] = " ", str2[81] = "", *p, *q;
	int len;
	p = str1;
	q = str2;
	gets(str1);
	//puts(str1);
	len = strlen(str1);
	clear_blank(p, q, len);
	puts(str2);
	//printf("%d",strlen(str2));
	return 0;
}

第四题

考察排序
!!!

题目描述:
输入一个字符串(其长度不超过81),分别统计其中26个英文字母出现的次数(不区分大、小写字母),并按字母出现次数从高到低排序,若次数相同,按字母顺序排列。字母输出格式举例,例如:A-3,表示字母A出现3次,C-0表示字母C没有出现。

样例输入:

ABCDEFGHIJKLMNOPQTSTUVWXYZ

样例输出:

T-2 A-1 B-1 C-1 D-1 E-1 F-1 G-1 H-1 I-1 J-1 K-1 L-1 M-1 N-1 O-1 P-1 Q-1 S-1 U-1 V-1 W-1 X-1 Y-1 Z-1 R-0

参考代码

#include
#include
 
 
int main()
{
	char str[81];
   gets(str);
	int letter_stat[26] = {0};//对应字母出现的次数
	char letter[26] = { ' ' };//便于后面打印对应大写字母
	for (int i = 0; i < 26; i++)
	{
		letter[i] = i + 'A';
	}
	int i = 0;
	while (str[i])//统计次数
	{
		int k = 0;
		if (str[i] >= 'A'&&str[i] <= 'Z')
		{
			k = str[i] - 'A';
			letter_stat[k]++;
		}
		else if (str[i] >= 'a'&&str[i] <= 'z')
		{
			k = str[i] - 'a';
			letter_stat[k]++;
		}
		i++;
	}
 
	for (int i = 0; i < 26; i++)//插入排序
	{
		int k = letter_stat[i];
		int temp = letter[i];
		int j = i - 1;
		while (j >= 0 && letter_stat[j] < k)
		{
			letter_stat[j + 1] = letter_stat[j];
			letter[j + 1] = letter[j];
			j--;
		}
		letter_stat[j + 1] = k;
		letter[j + 1] = temp;
	}
	for (int i = 0; i < 25; i++)
	{
		printf("%c-%d ", letter[i],letter_stat[i]);
	}
	printf("%c-%d", letter[25], letter_stat[25]);
	return 0;
}

第五题

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

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

样例输入:

Hello

样例输出:

o lo llo ello Hello

参考代码

#include
#include

main() {
  char s[100];
  scanf("%s", s);
  for (int i = 0; i < strlen(s)-1; i++)
  {
    for (int j = strlen(s) - i-1; j <= strlen(s)-1; j++)
    {
      printf("%c", s[j]);
    }
    printf(" ");
  }
  printf("%s", s);
}

第六题

原题为PTA L1-009,可以考虑去参考原题
!!!
题目描述:
给定N个“分子/分母”形式的有理数,计算这些分数的和。

输入输出格式:

输入格式:第一行输入一个正整数N(<=100),然后下一行N个有理数“a1/b1 a2/b2…”,其中所有的分子和分母都在“int”的范围内。如果有负数,则符号必须出现在分子的前面。

输出格式:输出最简单形式的和,“整数 分子/分母”,其中“整数”是和的整数部分,“分子”<“分母”,分子和分母没有公因数。如果整数部分为0,则必须仅输出小数部分。

样例输入:

5
1/2
-1/2
1/2
1/2
-1/2

样例输出:

1/2

参考代码

#include
#include
typedef long long ll;
int gcd(int a,int b)
{
    int r;
    while(b)
        r=b,b=a%b,a=r;
    return a;
}
int main()
{
    int n;scanf("%d",&n);
    int a,b,c,d;
    scanf("%d/%d",&a,&b);
    while(--n)
    {
        scanf("%d/%d",&c,&d);
        ll tmp=b*d/gcd(b,d);//最小公倍数
        a=a*tmp/b+c*tmp/d,b=tmp;
        if(!a)
            b=1;//适当一丢丢减少一些数的范围,作用极小
        tmp=gcd(a,b);
        if(tmp)
            a/=tmp,b/=tmp;
    }
    if(!(a%b))
        printf("%d\n",a/b);
    else if(a/b)
        printf("%d %d/%d\n",a/b,a%b,b);
    else
        printf("%d/%d\n",a,b);
}

第七题

!!!

题目描述:
恺撒加密法加密规则是:将原来的小写字母用字母表中其后面的第3个字母的大写形式来替换,大写字母按同样规则用小写字母替换,对于字母表中最后的三个字母,可将字母表看成是首未衔接的。如字母c就用F来替换,字母y用B来替换,而字母Z用c代替。编程实现以下功能:输入一个字符串,将其加密后输出。

输入输出格式:

输入:仅含有字母的字符串
输出:加密后的字符串

**样例: **

输入为:

AMDxyzXYZ
输出为:
dpgABCabc

样例输入:

abKLoNY

样例输出:

DEnoRqb

参考代码

#include
#include
main() {
  int i = 0;
  char a[100];
  scanf("%s",a);
  for (i; i < strlen(a); i++) {
    if (a[i] >= 'a' && a[i] <= 'z') {
      a[i] = a[i] + 3 - 'a' + 'A';
      if (a[i] > 'Z')   a[i] = a[i] - 26;
    }
    else if (a[i] >= 'A' && a[i] <= 'Z') {
      a[i] = a[i] + 3 - 'A' + 'a';
      if (a[i] > 'z')   a[i] = a[i] - 26;
    }
    printf("%c", a[i]);
  }
}

你可能感兴趣的:(XJTU大学计算机编程作业题 第11周)