31.判断回文数
编写一个函数来判断一个正整数是否为回文数,若是则返回
1
,否则返回
0
。所谓回文数是指各位
数字左右对称的数,例如
1221
、
3553
等。该函数的原型为:
int ispalindrome(int n);
编写主函数,对上述函数进行测试,并找出
1000
∽
n (
包括
1000
和
n,1000 ≤ n < 10000)
之间的所
有回文数,按从小到大的次序在屏幕上显示输出,每个数之间用一个空格分隔,最后一个数后面
没有空格
。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int ispalindrome(int n);
int main() {
int n;
scanf("%d", &n);
int flag = 0;
for (int i = 1000; i <= n; i++) {
if (ispalindrome(i)) {
if (flag == 0) {
printf("%d", i);
flag = 1;
}
else {
printf(" %d", i);
}
}
}
return 0;
}
int ispalindrome(int n) {
int a[4];
for (int i = 0; i < 4; i++) {
a[i] = n % 10;
n /= 10;
}
if (a[0] == a[3] && a[1] == a[2]) {
return 1;
}
else {
return 0;
}
}
32.统计英文字母
输入一个可能带空格字符的字符串
(
长度不超过
100)
,统计其中各个英文字母的出现次数,不区
分大小写。输出字母
a
~
z
的出现次数,数据间以英文逗号分隔。非英文字母不统计。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
void countWord(char ap, int count[]) {//数组的名称相当于指针,在函数中不会被释放
for (int i = 0; i < 26; i++) {
if (ap == 'a' + i) {
count[i]++;
}
}
}
int main() {
char word[100];
int count[26] = {0};
gets(word);//用gets函数可以向字符串输入空格
int len = strlen(word);
_strlwr(word);//将大写字母转换为小写字母
for (int i = 0; i < len; i++) {
countWord(word[i], count);
}
int flag = 0;
for (int i = 0; i < 26; i++) {
if (flag = 0) {
printf("%d", count[i]);
flag = 1;
}
else printf(",%d", count[i]);//else后不带大括号只能带一个语句
}
return 0;
}
33.找出出现次数最多的字符
编写程序,要求在一个字符串中查找连续出现次数最多的一个字符,并显示其所在的开始下标和
次数。
(
如果出现最多的字符不止一个,输出最靠前的字符
)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main() {
char x[100];
scanf("%s", x);
char max=0;//最大个数
char maxword = x[0];
int maxpos = 0;
int i = 0;
for (int i = 0; i < strlen(x); i++) {
int count = 0;//计数
for (int j = 0; i + j < strlen; j++) {
if (x[i] == x[i + j]) {
count++;
}
else break;
}
if (count > max) {
max = count;
maxword = x[i];
maxpos = i;
}
}
printf("%c %d %d", maxword, max, maxpos);
return 0;
}
34.闰年计算
闰年计算。程序输入一个正整数
Y
,以及另一个正整数
N
,以一个空格分隔。计算从
Y
年开始后的
第
N
个闰年是哪一年(如果
Y
本身是闰年,则
Y
之后的第一个闰年是
Y
)。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int is_leap_year(int year){
return ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) ? 1 : 0;
}
int main(){
int y, n;
scanf("%d%d", &y, &n);
for (int num = 0; num != n; y++){
if (is_leap_year(y)){
num++;
}
}
printf("%d", y - 1);
return 0;
}
35.倒序输出子字符串
编写程序,按下列规则倒序输出子字符串。先输出最后的一个字符,再输出最后两个字符串,在
再出后面三个字符
...,
最后输出整个字符串。输入的字符串长度不超过
100
。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
char ap[100];
scanf("%s", &ap);
for (int i = strlen(ap) - 1; i >= 0; i--) {
for (int j = i; j < strlen(ap); j++) {
printf("%c", ap[j]);
}
if (i != 0) {
printf(" ");
}
}
return 0;
}
36.单词加密
单词加密。输入一个字符串和一个非负整数
k
,对字符串中的每一个字母,用字母表中其后的第
k
个字母代替,不够
k
个时再从字母
a
循环计数。例如
k=3
是,
a
用
d
代替,
A
用
D
代替,
x
用
a
代替,
y
用
b
代替,保持大小写不变。字符串中的非字母字符不变。字符串的长度不超过
100
。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
char ap[100];
int k;
scanf("%s %d", ap, &k);
for (int i = 0; i < strlen(ap); i++) {
ap[i] = (ap[i] - 'a' + k) % 26 + 'a';
}
printf("%s", ap);
return 0;
}
37.去掉多余的*号
编写程序,去掉字符串末尾多余的星号。输入带星号(
*
)的字符串和
n
,使字符串尾部的
*
号
不得多于
n
个;若多于
n
个,则删除多余的
*
号;若少于或等于
n
个,则什么也不做,字符串中间
和前面的
*
号不删除。字符串的长度不超过
200
。字符串中的星号是英文星号。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main() {
char ap[200];
int n;
int count = 0;
scanf("%s %d", ap, &n);
int len = strlen(ap);
int flag = 0;
for (int i = len - 1; i >= 0; i--) {
if (ap[i] == '*' && flag == 0) {
count++;
}
else flag = 1;
}
for (int i = 0; ; i++) {
printf("%c", ap[i]);
if (count <= n) {
if (i == len) break;
}
else {
if (i == len + n - count - 1) break;
}
}
return 0;
}
38.查找字符位置
查找一个字符在字符串中出现的第一个位置并输出这个位置。位置从0开始
输入:待查找的字符串(字符个数不超过
100)和需要查找的字符,字符串中可能含有空格。
(输入时,待查找的字符串与所需查找的字符用*
号隔开)如:
“
待查找字符串
*
需要查找的字符”
输出:字符的位置(如有多个相同的字符,只查找第一个,如果没有输出
- 1。)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main() {
char ap[100];
char x;
/*无法识别:
gets(ap);
scanf("*%c", &x);*/
//正确做法
scanf("%c", &ap[0]);
int len;
for (len = 1; ap[len - 1] != '*'; len++) {
scanf("%c", &ap[len]);
}
scanf("%c", &x);
int pos=0;
while (ap[pos] != x && pos < len) {
pos++;
}
if (pos == len) {
printf("-1");
}
else printf("%d", pos);
return 0;
}
39.投票统计
统计选票。三个候选人分别是
Li
、
Zhang
和
Wang
,
Li
的代号是
1
;
Zhang
的代号是
2
;
Wang
的
代号是
3
。依次输入代表得票人代号的数字(即投票),直到输入
- 1
则投票结束。然后统计每个
人的得票数和废票数。不是
- 1,1,2,3
的数字为废票。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
int Li = 0, Zh = 0, Wa = 0, fei = 0;
int list;
scanf("%d", &list);
while (list != -1) {
switch (list){
case 1:Li++; break;
case 2:Zh++; break;
case 3:Wa++; break;
default:
fei++;
}
scanf("%d", &list);
}
printf("%d %d %d %d", Li, Zh, Wa, fei);
return 0;
}
40.排列字符串
输入一个字符串(长度不超过
200
,不包含空格,至少有
1
个字符),
除首尾字符外
,将其余的字
符按
ascii
码
降序
排列,然后输出。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
void Bubblesort(char a[]);
int main() {
char a[100];
scanf("%s", a);
Bubblesort(a);
printf("%s", a);//字符串的输出
return 0;
}
void Bubblesort(char a[]) {
for (int i = 1; i < strlen(a); i++) {
for (int j = strlen(a) - 2; j > i; j--) {
if (a[j] > a[j - 1]) {
char temp = a[j];
a[j] = a[j - 1];
a[j - 1] = temp;
}
}
}
}