大家好!今天想和大家一起分享一下这几题刷过的几道题,大家呢也可以从中吸取一些好的方法,我们一起来看一下。
第一道题
这道题呢是关于有序数列的合并问题,第一种做法呢是把两个序列一起放在同一个数组当中去,然后再进行排序,但这种做法呢相对而言比较麻烦,今天呢我给大家分享一下一种好的做法。
#include<stdio.h>
int main()
{
int m=0;
int n=0;
int arr1[]={0};
int arr2[]={0};
int i =0;
for(i=0;i<n;i++)
{
scanf("%d",&arr1[i]);
}
int j=0;
for(j=0;j<m;j++)
{
scanf("%d",&arr2[j]);
}
int f=0;
int g=0;
while(f<n && g<m)
{
if(arr1[f]<arr2[g])
{
printf("%d",arr1[f]);
f++;
}
else
{
printf("%d",arr2[g]);
g++;
}
}
if(f==n)
{
for(;g<m;g++)
{
printf("%d",arr2[g]);
}
else
{
for(;f<n;f++)
{
printf("%d",arr1[f]);
}
}
return 0;
}
这种做法呢其实就是让arr1中的元素和arr2中的元素进行比较,如果arr1[0]<arr2[0],那么最小的数就是arr1[0],然后f++,再用arr1[1]和arr2[0]进行比较,如果arr1[1]大于arr2[0],则第二个最小的数为arr2[0],此时g++,再用arr2[1]和arr2[1]进行比较,如果arr1[1]小于arr2[0],则第二个最小的数为arr1[1],此时f++na再用arr1[2]和arr2[1],进行比较,就这样一直循环下去,直到有一方的元素加到头了,那么另一方剩下的元素直接按顺序打印出来就可以了。我们看一下程序运行结果
接下来给大家介绍一道序列中删除制定数字的题目
我们来看一下这道题的一个解法,这个题比较简单简洁的一个方式是在同一个数组里操作,可以再定义一个变量j,然后判断arr[i]中的元素如果不是要删除的数字的话,就把它赋值给arr[j],这样就很巧妙地解决了这道题
大家再来看一道大小写字母转换的题目题目要求如下
第一种解法:比较常规的方法
对于多组输入的问题我们通常采用while(scanf("%c",&f)==1) 的形式,scanf每成功输入一个字符就返回1,那么这里为啥会有一个getchar()呢,因为我们在输入的时候每输入一个会进行换行,所以getchar()是用来吃掉换行符的,如果去掉,程序运行的结果就会出现错误,我们不妨来看一下,
我们看到因为换行符的影响造成了输入输出并不是连续的 。
其实这道题对于字符是大小写的判断还可以直接引用库函数
isupper(int c)库函数是用来判断字符是否为大写,如果是返回非0的数,如果不是则返回0,那么有人可能会问c不是整数吗?咋成了字符了,其实在c语言中字符就是整数,因为字符在内存中存储的就是它的ASCll码值,islower(int c) 则是用来判断字符是不是小写,如果是返回非0的数,如果不是则返回0,tolower函数用来把大写字母转换成小写字符,toupper函数用来把小写字母转换成大写,引用的头文件是#include<ctype.h>.isalpha(int c)用来判断一个字符是不是英文字母,如果是则返回非0值,如果不是,则返回0,头文件是#include<ctype.h>。
今天和大家分享的内容就到这里了,大家可以多多提出一些宝贵的意见。