1. 实验7-1-11 求整数序列中出现次数最多的数(15 分)
本题要求统计一个整型序列中出现次数最多的整数及其出现次数。
输入格式: 输入在一行中给出序列中整数个数N(0<N≤1000),以及N个整数。数字间以空格分隔。
输出格式: 在一行中输出出现次数最多的整数及其出现次数,数字间以空格分隔。题目保证这样的数字是唯一的。
输入样例: 10 3 2 -1 5 3 4 3 0 3 2
输出样例: 3 4
#include <stdio.h>
#define N 1000
int main()
{
int i, j, n;
int a[N]; //用来保存输入数据
int b[N] = { 0 }; //用来保存出现次数(类似哈希表)
int max;
int index = 0;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
for (i = 0; i < n; i++)
{
b[a[i]]++;
}
max = b[0];
for (i = 1; i <= n; i++) //注意小于等于n
{
if (max < b[i])
{
max = b[i];
index = i;
}
}
printf("%d %d\n", index, max);
return 0;
}
2. 实验7-3-3 统计大写辅音字母 (15 分)
英文辅音字母是除A、E、I、O、U以外的字母。本题要求编写程序,统计给定字符串中大写辅音字母的个数。
输入格式:输入在一行中给出一个不超过80个字符、并以回车结束的字符串。
输出格式: 输出在一行中给出字符串中大写辅音字母的个数。
输入样例:HELLO World!
输出样例: 4
#include <stdio.h>
int main()
{
char str[81];
char* p = str;
int cnt = 0;
gets(str, 81);
while (*p != '\0')
{
if (*p >= 'A' && *p <= 'Z')
{
if (*p != 'A' && *p != 'E' && *p != 'I' && *p != 'O' && *p != 'U')
cnt++;
}
p++;
}
printf("%d", cnt);
}
3. 实验2-3-2 求N分之一序列前N项和 (15 分)
本题要求编写程序,计算序列 1 + 1/2 + 1/3 + … 的前N项之和。
输入格式: 输入在一行中给出一个正整数N。
输出格式: 在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后6位。题目保证计算结果不超过双精度范围。
输入样例:
6
输出样例:
sum = 2.450000
#include <stdio.h>
int main()
{
int n,i;
scanf("%d", &n);
double sum = 0;
for (i = 1; i <= n; i++)
{
sum=sum+(1.00/i);
}
printf("sum = %.6f", sum);
}
4. 实验7-3-7 字符转换 (15 分)
本题要求提取一个字符串中的所有数字字符(‘0’……‘9’),将其转换为一个整数输出。
输入格式:输入在一行中给出一个不超过80个字符且以回车结束的字符串。
输出格式: 在一行中输出转换后的整数。题目保证输出不超过长整型范围。
输入样例: free82jeep5
输出样例: 825
#include <stdio.h>
int main()
{
int i;
char ch;
char str[N];
char* p = str;
ch = getchar();
for (i = 0; ch != '\n'; i++)
{
str[i] = ch;
ch = getchar();
}
while (*p != '\n')
{
if (*p >= '0' && *p <= '9')
printf("%c", *p);
p++;
}
}
6. 实验7-3-6 字符串转换成十进制整数 (15 分)
输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。
输入格式: 输入在一行中给出一个以#结束的非空字符串。
输出格式: 在一行中输出转换后的十进制数。题目保证输出在长整型范围内。
输入样例:
±P-xf4±1!#
输出样例:
-3905
#include <stdio.h>
#include <math.h>
#define N 1000
int num(char c)
{
if (c == 'a' || c == 'A')
return 10;
if (c == 'b' || c == 'B')
return 11;
if (c == 'c' || c == 'C')
return 12;
if (c == 'd' || c == 'D')
return 13;
if (c == 'e' || c == 'E')
return 14;
if (c == 'f' || c == 'F')
return 15;
}
int main()
{
int i, j = 0, flag = 0, sum = 0, count = 0;
char str1[N], str2[N];
char* p = str1;
gets_s(str1, N);
while (*p != '#')
{
if (flag==0 && *p == '-')
flag = 1;
if ((*p >= '0' && *p <= '9') ||
(*p >= 'A' && *p <= 'F') ||
(*p >= 'a' && *p <= 'f'))
{
if(flag == 0)
flag = 2;
str2[j++] = *p;
}
p++;
}
for (i = j - 1; i >= 0; i--)
{
if (str2[i] >= '0' && str2[i] <= '9')
sum += (str2[i] - '0')*pow(16, count);
else
sum += (num(str2[i]))*pow(16, count);
count++;
}
if (flag == 1)
printf("-%d", sum);
else
printf("%d", sum);
}
7. 实验7-3-5 输出大写英文字母 (15 分)
本题要求编写程序,顺序输出给定字符串中所出现过的大写英文字母,每个字母只输出一遍;若无大写英文字母则输出“Not Found”。
输入格式: 输入为一个以回车结束的字符串(少于80个字符)。
输出格式: 按照输入的顺序在一行中输出所出现过的大写英文字母,每个字母只输出一遍。若无大写英文字母则输出“Not Found”。
输入样例1: FONTNAME and FILENAME
输出样例1: FONTAMEIL
输入样例2: fontname and filrname
输出样例2: Not Found
#include <stdio.h>
#define N 1000
int main()
{
int i, len=0, flag = 0;
char ch;
char str[N];
int alp[N] = { 0 };
char* p = str;
ch = getchar();
for (i = 0; ch != '\n'; i++)
{
str[i] = ch;
len++;
ch = getchar();
}
for (i = 65; i <= 90; i++)
{
alp[i] = 1;
}
for(i=0;i<len;i++)
{
if ((*p >= 'A') && (*p <= 'Z'))
{
if (alp[*p] == 1)
{
printf("%c", *p);
alp[*p] = 0;
flag = 1;
}
}
p++;
}
if (flag == 0)
printf("Not Found");
}
8. 实验7-3-4 字符串替换 (15 分)
本题要求编写程序,将给定字符串中的大写英文字母按以下对应规则替换: 原字母 对应字母 A Z
B Y
C X
D W
… …
X C
Y B
Z A
输入格式: 输入在一行中给出一个不超过80个字符、并以回车结束的字符串。
输出格式: 输出在一行中给出替换完成后的字符串。
输入样例: Only the 11 CAPItaL LeTtERS are replaced.
输出样例: Lnly the 11XZKRtaO OeGtVIH are replaced.
#include <stdio.h>
#define N 1000
int main()
{
int i, j, len = 0;
char ch;
char str[N];
char* p = str;
int alp[N];
ch = getchar();
for (i = 0; ch != '\n'; i++)
{
str[i] = ch;
len++;
ch = getchar();
}
for (i = 65, j = 90; i <= 90; i++, j--)
{
alp[i] = j;
}
for (i = 0; i < len; i++)
{
if ((*p >= 'A') && (*p <= 'Z'))
{
printf("%c", alp[*p]);
}
else
printf("%c", *p);
p++;
}
}
9. 实验7-3-2 查找指定字符 (15 分)
本题要求编写程序,从给定字符串中查找某指定的字符。
输入格式:输入的第一行是一个待查找的字符。第二行是一个以回车结束的非空字符串(不超过80个字符)。
输出格式:如果找到,在一行内按照格式“index = 下标”输出该字符在字符串中所对应的最大下标(下标从0开始);否则输出"Not Found"。
输入样例1: m programming
输出样例1: index = 7
输入样例2: a 1234
输出样例2: Not Found
#include <stdio.h>
#define N 1000
int main()
{
int i, len = 0, max = -1, flag = 0;
char ch, findx;
char str[N];
scanf("%c\n", &findx); //注意添加\n,否则只读一个字符就结束了
ch = getchar();
for (i = 0; ch != '\n'; i++)
{
str[i] = ch;
len++;
ch = getchar();
}
for (i = 0; i < len; i++)
{
if (str[i] == findx && i > max)
{
max = i;
flag = 1;
}
}
if (flag == 1)
printf("index = %d", max);
else
printf("Not Found");
}
10. 实验7-3-1 字符串逆序 (15 分)
输入一个字符串,对该字符串进行逆序,输出逆序后的字符串。
输入格式:输入在一行中给出一个不超过80个字符长度的、以回车结束的非空字符串。
输出格式: 在一行中输出逆序后的字符串。
输入样例:
Hello World!
输出样例:
!dlroW olleH
#include <stdio.h>
#define N 1000
int main()
{
int i, len = 1;
char ch;
char str[N];
ch = getchar();
for (i = 0; ch != '\n'; i++)
{
str[i] = ch;
len++;
ch = getchar();
}
for (i = len - 1; i >= 0; i--)
{
printf("%c", str[i]);
}
}
11. 实验7-1-10 交换最小值和最大值 (15 分)
本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。
注意:题目保证最大和最小值都是唯一的。
输入格式: 输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。
输出格式: 在一行中顺序输出交换后的序列,每个整数后跟一个空格。 输入样例:
5
8 2 5 1 4
输出样例: 1 2 5 4 8
#include<stdio.h>
#define N 100
int main()
{
int n, min, max, temp, i, index;
int num[N];
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d", &num[i]);
}
min = num[0];
for (i = 1; i < n; i++)
{
if (num[i] < min)
{
min = num[i];
index = i;
}
}
temp = num[0];
num[0] = min;
num[index] = temp;
max = num[1];
for (i = 2; i < n; i++)
{
if (num[i] > max)
{
max = num[i];
index = i;
}
}
temp = num[n - 1];
num[n - 1] = max;
num[index] = temp;
for (i = 0; i < n; i++)
{
printf("%d ", num[i]);
}
}