C语言 刷题

大家好!今天想和大家一起分享一下这几题刷过的几道题,大家呢也可以从中吸取一些好的方法,我们一起来看一下。

  第一道题

这道题呢是关于有序数列的合并问题,第一种做法呢是把两个序列一起放在同一个数组当中去,然后再进行排序,但这种做法呢相对而言比较麻烦,今天呢我给大家分享一下一种好的做法。

#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>。

    今天和大家分享的内容就到这里了,大家可以多多提出一些宝贵的意见。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值