C语言程序设计基础练习题四

本文包含了多个编程题目,涉及字符查找、整数排序、字符串去重及排序、字符计数、冒泡排序过程展示、单词计数、序列调整、字符大小写转换、数字提取与转换以及序列中出现最多次数的数字。这些题目涵盖了字符串操作、排序算法和基本的字符处理技巧,是提升编程技能的好练习。
摘要由CSDN通过智能技术生成
  • 1.1 本题要求编写程序,从给定字符串中查找某指定的字符。

输入格式:
输入的第一行是一个待查找的字符。第二行是一个以回车结束的非空字符串(不超过80个字符)。
输出格式:
如果找到,在一行内按照格式“index = 下标”输出该字符在字符串中所对应的最大下标(下标从0开始);否则输出"Not Found"。
输入样例1:
m
programming
输出样例1:
index = 7
输入样例2:
a
1234
输出样例2:
Not Found

#include <stdio.h> 
#include  <string.h>
int main(void)
{
	char find;
	scanf("%c\n",&find);  //必须加\n
	
	char arr[81];  //80会报错,不够用的
	gets(arr);
	int len = strlen(arr);
	int flag = 1;

	for(int i=len-1;i>=0;i--)
	{
		if(arr[i]==find) 
		{
			printf("index = %d",i);
			flag = 0;
			break;
		}
	}
	if(flag) printf("Not Found");
	
	return 0;
}
  • 1.2 本题要求将给定的n个整数从大到小排序后输出。

输入格式:
输入第一行给出一个不超过10的正整数n。第二行给出n个整数,其间以空格分隔。
输出格式:
在一行中输出从大到小有序的数列,相邻数字间有一个空格,行末不得有多余空格。
输入样例:
4
5 1 7 6
输出样例:
7 6 5 1

#include <stdio.h>
int main(void)
{
	int n;
	scanf("%d",&n);
	int arr[100] = {0};
	for(int i=0; i<n; i++)
	{
		scanf("%d",&arr[i]);
	}
	//冒泡
// 	for(int j=0; j<n-1; j++) 
// 	{
// 		for(int i=0; i<n-j-1; i++) 
// 		{
// 			int t;
// 			if(arr[i]<arr[i+1])
// 			{
// 				t=arr[i];
// 				arr[i] = arr[i+1];
// 				arr[i+1] = t;
// 			}
// 		}
// 	}
	//选择
    for(int j=0; j<n; j++)
	{
		for(int i=j+1; i<n; i++)
		{
			int t;
			if(arr[j]<arr[i])
			{
				t=arr[j];
				arr[j] = arr[i];
				arr[i] = t;
			}
		}
	}
	for(int i=0; i<n; i++)
	{
		printf("%d",arr[i]);
		if(i!=n-1) printf(" ");
	}

	return 0;
}
  • 1.3 本题要求编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。

输入格式:
输入是一个以回车结束的非空字符串(少于80个字符)。
输出格式:
输出去重排序后的结果字符串。
输入样例:
ad2f3adjfeainzzzv
输出样例:
23adefijnvz

#include <stdio.h>
#include <string.h>
int main(void)
{
	char arr[81];
	gets(arr);
	int len = strlen(arr);
	for(int i=0; i<len; i++)
	{
		for(int j=i+1; j<len; j++)
		{
			if(arr[i]>arr[j])
			{
				int t;
				t = arr[i];
				arr[i] = arr[j];
				arr[j] = t;
			}
		}
	}
	for(int i=0; i<len; i++)
	{
		if(arr[i]!=arr[i-1])
			printf("%c",arr[i]);
	}

	return 0;
}
  • 1.4 本题要求编写程序,统计并输出某给定字符在给定字符串中出现的次数。

输入格式:
输入第一行给出一个以回车结束的字符串(少于80个字符);第二行输入一个字符。
输出格式:
在一行中输出给定字符在给定字符串中出现的次数。
输入样例:
programming is More fun!
m
输出样例:
2

#include <stdio.h>
#include <string.h>
int main(void)
{
	char arr[81];
	gets(arr);
	int len = strlen(arr);
	char ch;
	scanf("%c",&ch);
	int count = 0;
	for(int i=0; i<len; i++)
	{
		if(arr[i]==ch) count++;
	}
	printf("%d",count);

	return 0;
}
  • 1.5 将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们。通过一遍扫描,则最后一个元素必定是最大的元素。然后用同样的方法对前N−1个元素进行第二遍扫描。依此类推,最后只需处理两个元素,就完成了对N个数的排序。
    本题要求对任意给定的K(<N),输出扫描完第K遍后的中间结果数列。

输入格式:
输入在第1行中给出N和K(1≤K<N≤100),在第2行中给出N个待排序的整数,数字间以空格分隔。
输出格式:
在一行中输出冒泡排序法扫描完第K遍后的中间结果数列,数字间以空格分隔,但末尾不得有多余空格。
输入样例:
6 2
2 3 5 1 6 4
输出样例:
2 1 3 4 5 6

#include <stdio.h>
int main(void)
{
	int n,k;
	scanf("%d %d",&n,&k);
	int arr[101] = {0};
	for(int i=0; i<n; i++)
	{
		scanf("%d",&arr[i]);
	}
	for(int i=0; i<k; i++)
	{
		for(int j=0; j<n-1-i; j++)
		{
			if(arr[j]>arr[j+1])
			{
				int temp;
				temp = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = temp;
			}
		}
	}
	for(int i=0; i<n; i++)
	{
		printf("%d",arr[i]);
		if(i!=n-1) printf(" ");
	}

	return 0;
}
  • 1.6 本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。

输入格式:
输入给出一行字符。
输出格式:
在一行中输出单词个数。
输入样例:
Let’s go to room 209.
输出样例:
5

#include <stdio.h>
#include <string.h>
int main(void)
{
	char arr[1000];
	gets(arr);
	int len = strlen(arr);
	int count = 0;
	for(int i=0; i<len; i++)
	{
		if(arr[i]!=' ' && arr[i+1]==' ')
			count++;
	 	if(arr[i]!=' ' && arr[i+1]=='\0')
			count++;
	}
	printf("%d",count);
    
	return 0;
}
  • 1.7 本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。
    注意:题目保证最大和最小值都是唯一的。

输入格式:
输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。
输出格式:
在一行中顺序输出交换后的序列,每个整数后跟一个空格。
输入样例:
5
8 2 5 1 4
输出样例:
1 2 5 4 8

#include <stdio.h>
int main(void)
{
	int n;
	scanf("%d",&n);
	int arr[100] = {0};
	scanf("%d",&arr[0]);
	int max,min;
	max = min = arr[0];

	for(int i=1; i<n; i++)
	{
		scanf("%d",&arr[i]);
	}
	for(int i=0; i<n; i++)
	{
		if(arr[i]<min) min = arr[i];
		if(arr[i]>max) max = arr[i];
	}
	for(int i=0; i<n; i++)
	{
		if(arr[i]==min)
		{
			int temp;
			temp = arr[i];
			arr[i] = arr[0];
			arr[0] = temp;
		}
	}
	for(int i=0; i<n; i++)
	{
		if(arr[i]==max)
		{
			int temp;
			temp = arr[i];
			arr[i] = arr[n-1];
			arr[n-1] = temp;
		}
	}
	for(int i=0; i<n; i++)
		printf("%d ",arr[i]);

	return 0;
}
  • 1.8 本题要求编写程序,对一个以“#”结束的字符串,将其小写字母全部转换成大写字母,把大写字母全部转换成小写字母,其他字符不变输出。

输入格式:
输入为一个以“#”结束的字符串(不超过30个字符)。
输出格式:
在一行中输出大小写转换后的结果字符串。
输入样例:
Hello World! 123#
输出样例:
hELLO wORLD! 123

#include <stdio.h>
#include <string.h>
int main(void)
{
	char arr[32]; //31报错 不够用
	gets(arr);
	int len = strlen(arr);
	for(int i=0; arr[i]!='#'; i++)
	{
		if(arr[i]>=65 && arr[i]<=90) arr[i] += 32;
		else if(arr[i]>=97 && arr[i]<=122) arr[i] -= 32;
		printf("%c",arr[i]);
	}
	
	return 0;
}
  • 1.9 本题要求统计一个整型序列中出现次数最多的整数及其出现次数。

输入格式:
输入在一行中给出序列中整数个数N(0<N≤1000),以及N个整数。数字间以空格分隔。
输出格式:
在一行中输出出现次数最多的整数及其出现次数,数字间以空格分隔。题目保证这样的数字是唯一的。
输入样例:
10 3 2 -1 5 3 4 3 0 3 2
输出样例:
3 4

#include <stdio.h>
int main(void)
{
	int arr[1001] = {0};
	int times[1001] = {0};
	int n,k,max = 0;
	scanf("%d",&n);
	for(int i=0; i<n; i++)
	{
		scanf("%d",&arr[i]);
	}

	for(int i=0; i<n; i++)
	{
		for(int j=0; j<n; j++)
		{
			if(arr[i]==arr[j]) times[i]++;
		}
		if(times[i]>max)
		{
			max = times[i];
			k=i;
		}
	}

	printf("%d %d",arr[k],max);

	return 0;
}
  • 1.10 本题要求提取一个字符串中的所有数字字符(‘0’……‘9’),将其转换为一个整数输出。

输入格式:
输入在一行中给出一个不超过80个字符且以回车结束的字符串。
输出格式:
在一行中输出转换后的整数。题目保证输出不超过长整型范围。
输入样例:
free82jeep5
输出样例:
825

#include <stdio.h>
#include <string.h>
int main(void)
{
	char arr[81];
	gets(arr);
	int sum = 0;
	for(int i=0; i<strlen(arr); i++)
		if(arr[i]>='0' && arr[i]<='9')
			sum = sum*10 + arr[i]-'0';
	printf("%d",sum);

	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值