首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【手把手带你刷好题】--C语言基础编程题(九)

【手把手带你刷好题】--C语言基础编程题(九)

作者头像
草莓熊Lotso
发布2025-10-29 13:49:25
发布2025-10-29 13:49:25
1730
举报
文章被收录于专栏:C++/LinuxC++/Linux

🔥个人主页:@草莓熊Lotso 🎬作者简介:C++研发方向学习者 📖个人专栏: 《C语言》 《数据结构与算法》《C语言刷题集》 ⭐️人生格言:生活是默默的坚持,毅力是永久的享受。

前言:本篇博客是刷题集中的第九篇,题目都是一些比较基础的IO型题目,适合C语言初学者。特别声明一下,这里提供的答案和思路都并非唯一,仅供参考。

1. 统计成绩

题目链接:统计成绩_牛客题霸_牛客网

题目描述:

题目示例:

代码演示:

代码语言:javascript
复制
#include <stdio.h>

int main() 
{
    int n=0;
    scanf("%d",&n);
    double s=0.0;
    double min=100.0;
    double max=0.0;
    double sum=0.0;
    for(int i=0;i<n;i++)
    {
        scanf("%lf",&s);
        if(max<s)
        max=s;
        if(min>s)
        min=s;
        sum+=s;
    }
    printf("%.2lf %.2lf %.2lf",max,min,sum/n);

    return 0;
}

题目解析:

  • 在输入的同时就最大值最小值和求和,然后后续直接计算想要的结果就可以了

2.密码验证

题目链接:密码验证__牛客网

题目描述:

题目示例:

代码演示:

代码语言:javascript
复制
#include <stdio.h>

int main() 
{
    char p1[30]={0};
    char p2[30]={0};
    scanf("%s %s",p1,p2); 
        if(strcmp(p1,p2)==0)
        {
            printf("same");
        }
        else {
            printf("different");
        }
    return 0;
}

题目解析: 注意密码是字符串,在C语言中字符串的比较不能直接用大于小于,要用strcmp这个函数来进行比较,它的具体使用我在之前的字符串函数的博客中讲到过大家可以去看看。 【C语言字符函数和字符串函数(二)】--strcmp,strstr的使用和模拟实现,strncpy,strncat,strncmp函数的使用,strock,strerror函数的使用


3.矩阵计算

题目链接:矩阵计算_牛客题霸_牛客网

题目描述:

题目示例:

代码演示:

代码语言:javascript
复制
#include <stdio.h>

int main() 
{
    int n=0;
    int m=0;
    int arr[10][10]={0};
    int sum=0;
    scanf("%d %d", &n, &m);
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            scanf("%d ",&arr[i][j]);
            if(arr[i][j]>0)
            sum+=arr[i][j];
        }
    }
 
    printf("%d",sum);
    return 0;
}

题目解析:

  • 定义一个二维数组,其实这题就是二维数组的输入操作,然后在输入的过程中把大于0的值加起来就行了,难度不是很大

4.逆序输出

题目链接:逆序输出_牛客题霸_牛客网

题目描述:

题目示例:

代码演示:

代码语言:javascript
复制
#include <stdio.h>

int main() 
{
    int arr[100]={0};
    for(int i=0;i<10;i++)
    {
        scanf("%d ",&arr[i]);
    }
    for(int i=9;i>=0;i--)
    {
        printf("%d ",arr[i]);
    }
    return 0;
}

题目解析:

  • 逆序输出很简单,没有啥难的,大家可以想想如果题目中要求将数组中的元素逆序存放的话,我们该如何解决这个问题呢?我把实现的代码放在下面,大家可以自己画图理解一下,我这里就不详细的去讲了。

数组逆序的代码实现:

代码语言:javascript
复制
#include <stdio.h>

void reverse(int*arr,int n)
{
    int begin=0;
    int end=n-1;
    while(begin<end)
    {
        int temp=arr[begin];
        arr[begin]=arr[end];
        arr[end]=temp;
        begin++;
        end--;
    }
}

int main() 
{
    int arr[100]={0};
    for(int i=0;i<10;i++)
    {
        scanf("%d ",&arr[i]);
    }
    reverse(arr,10);
    for(int i=0;i<10;i++)
    {
        printf("%d ",arr[i]);
    }
}

5.统计数据正负个数

题目链接:统计数据正负个数_牛客题霸_牛客网

题目描述:

题目示例:

代码演示:

代码语言:javascript
复制
#include <stdio.h>

int main() 
{
    int p=0;
    int n=0;
    int a=0;
    for(int i=0;i<10;i++)
    {
        scanf("%d",&a);
        if(a>0)
        {
            p++;
        }
        if(a<0)
        {
            n++;
        }
    }
    printf("positive:%d\nnegative:%d",p,n);

    return 0;
}

题目解析:

  • 这个题真的太简单了,相信大家经过前面的学习,这个题肯定是手到擒来的,博主这里就不讲了。

6.N个数之和

题目链接:N个数之和_牛客题霸_牛客网

题目描述:

题目示例:

代码演示:

代码语言:javascript
复制
#include <stdio.h>

int main() 
{
   int n=0;
   int a=0;
   int sum=0;
   scanf("%d",&n);
   for(int i=0;i<n;i++)
   {
    scanf("%d",&a);
    sum+=a;
   }
   printf("%d",sum);
    return 0;
}

题目解析:

  • 这个题依旧是很简单,可以不需要讲了,前面也做过同类型题

7.最高分和最低分之差

题目链接:最高分与最低分之差_牛客题霸_牛客网

题目描述:

题目示例:

代码演示:

代码语言:javascript
复制
#include <stdio.h>

int main() 
{
   int n=0;
   int s=0;
   int max=0;
   int min=100;
   scanf("%d",&n);
   for(int i=0;i<n;i++)
   {
    scanf("%d",&s);
    if(max<s)
    max=s;
    if(min>s)
    min=s;
   }
   int d=max-min;
   printf("%d",d);
    return 0;
}

题目解析:

  • 和前面的一些题类似,在输入的过程中求出最大和最小值,最后直接相减后输出就行了

8.有序序列判断

题目链接:有序序列判断_牛客题霸_牛客网

题目描述:

题目示例:

代码演示:

代码语言:javascript
复制
#include <stdio.h>

int main() 
{
    int n=0;
    int a[50]={0};
    int flag1=1;//假设它不是升序的
    int flag2=1;//假设它不是降序的
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%d ",&a[i]);
    }
    for(int j=0;j<n;j++)
    {
        if(j>0)
        {
        if(a[j]>a[j-1])//只要有一个符合,就是升序的
        {
            flag1=0;
        }
        else if(a[j]<a[j-1])//只要有一个符合,就是降序的
        {
            flag2=0;
        }
        }
      
    }
    if(flag1==0&&flag2==0)//两个都符合就是无序的
    printf("unsorted");
    else
     printf("sorted");
    return 0;
}

题目解析:

  • 题目中设置2个标记变量,flag1,flag2,满足相邻2个元素升序把flag1设置为0,满足相邻2个元素降序把flag2设置为0.如果flag1和flag2都是0,那就是乱序。

9.序列中删除指定数字

题目链接:序列中删除指定数字_牛客题霸_牛客网

题目描述:

题目示例:

代码演示:

代码语言:javascript
复制
#include <stdio.h>

int main() 
{
   int n=0;
   int arr[50]={0};
   int del=0;
   scanf("%d",&n);
   for(int i=0;i<n;i++)
   {
    scanf("%d",&arr[i]);
   }
   scanf("%d",&del);
   for(int j=0;j<n;j++)
   {
    if(arr[j]==del)
    {
        arr[j]=0;
    }
   }
   for(int k=0;k<n;k++)
   {
    if(arr[k]!=0)
    {
        printf("%d ",arr[k]);
    }
    }
    return 0;
}

题目解析:

  • 输入完数据后,遍历数组,如果数组当前元素等于你要删除的元素,就置为0。最后打印所有不为0的元素就行了,当然这里还有很多别的思路和想法,我就一 一说明了。

10.序列中整数去重

题目链接:序列中整数去重_牛客题霸_牛客网

题目描述:

题目示例:

代码演示:

代码语言:javascript
复制
#include <stdio.h>

int main() 
{
    int n=0;
    int arr[1000]={0};
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%d ",&arr[i]);
    }
    for(int j=0;j<n;j++)
    {
        for(int k=j+1;k<n;k++)
        {
            if(arr[j]==arr[k])
            {
                arr[k]=0;
            }
        }
        if(arr[j]!=0)
        printf("%d ",arr[j]);
    }
}

题目解析:

  • 其实这里跟上面一题思路差不多,只是这里遍历的时候相当于每次都是拿当前数组元素和它的后一个元素开始一直比到结束,相同的就置为0。数组中所有元素都完成此操作后结束,最后打印不是0的元素就行了

11.有序序列合并

题目链接:有序序列合并_牛客题霸_牛客网

题目描述:

题目示例:

代码演示:

代码语言:javascript
复制
#include <stdio.h>
#include<string.h>

int main() {
    int n=0;
    int m=0;
    scanf("%d%d", &n, &m);
    int arr1[1000]={0};
    int arr2[1000]={0};
    int arr3[2000]={0};
    int i=0;
    int j=0;
    int k=0;
     
    for(i=0;i<n;i++)
    {
        scanf("%d",&arr1[i]);
    }
 
    for(j=0;j<m;j++)
    {
        scanf("%d",&arr2[j]);
    }
    i=0;
    j=0;
    while(i<n&&j<m)
    {
        if(arr1[i]<arr2[j])
        {
            arr3[k++]=arr1[i++];
        }
        else {
            arr3[k++]=arr2[j++];
        }
    }
    while(i<n)
    {
        arr3[k++]=arr1[i++];
    }
    while(j<m)
    {
        arr3[k++]=arr2[j++];
    }
    for(int i=0;i<k;i++)
    {
        printf("%d ",arr3[i]);
    }

    return 0;
}

题目解析:

  • 我们专门定义一个数组用来存储合并后的数据,按照题目要求每次比较,把小的数先放进arr3数组中,直到其中arr1和arr2其中一个数组全部元素都放完了,那么另外剩的那个数组中所有元素直接放入arr3就可以了,最后输出arr3数组就行了。

往期回顾:

【手把手带你刷好题】--C语言基础编程题(五)

【手把手带你刷好题】--C语言基础编程题(六)

【手把手带你刷好题】--C语言基础编程题(七)

【手把手带你刷好题】--C语言基础编程题(八)

结语: 本篇文章就到此结束了,C语言刷题集专栏中的第九篇的后面有部分题目会难点,特别是删除数字,数组去重,数组合并这些经典题目需要额外注意一下,但有了前面的基础,这样的难度也是在合理范围内的,大家应该都可以解决,还是非常适合刚学完C语言的朋友们拿来练手,提升自己代码能力的。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-10-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 统计成绩
  • 2.密码验证
  • 3.矩阵计算
  • 4.逆序输出
  • 5.统计数据正负个数
  • 6.N个数之和
  • 7.最高分和最低分之差
  • 8.有序序列判断
  • 9.序列中删除指定数字
  • 10.序列中整数去重
  • 11.有序序列合并
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档