题目描述:
编写函数,寻找具有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]);
}
}