C语言网刷题记录

简介: C语言网刷题记录

6e3a6c8fea6241089cbd833bc73c254c.jpg


1. 2830: 数字统计


004530108e6c4240bbef87bf5fa5bf41.png

分析:

题目是要求数字2出现的次数,那我们可以对大于9的数字取出个位和十位来判断是否是2,如果是2的话,那计数器就+1;具体呢就这个逻辑,那我们来看代码怎么实现。

#include<stdio.h>
int main(){
    int n,x,i,count=0,t;
    scanf("%d %d",&x,&n);
    for(;x<=n;x++){
        int j=x;
        while(j>0){
            t=j%10;
            if(t==2)
                count++;
            j=j/10;
        }
    }
    printf("%d",count);
}


这道题就写完了。

2. 2240: 蓝桥杯算法训练-删除数组零元素



649d3d4238464cef8570b7afbaac7eeb.png


分析:


题目要求是定义一个函数Compactlntegers,来删除数组中的0,让元素向前面移动;知道条件,那就很好办了,先定义函数Compactlntegers,分别传入数组和数组的长度,然后进行遍历;如果是0的话后面的数字就等于前面的数字(覆盖),同时不等于0时计数器+1,函数返回值就是删除0后数组元素的数量,主函数内输出结果,这题就做完了。

#include <stdio.h>
void CompactIntegers();
int main() {
   int t = 0;
  int a[100] = {0};
  int b[100] = {0};
  int n, count = 0;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d", a + i);
    if(a[i]!=0)
    {
       a[t]=a[i];
       t++;
    }
  }
    printf("%d\n",t);
   for(int i = 0;i<t;i++)
   {
      printf("%d ",a[i]);
   }
}

3.  数字的处理与判断


dd4eafd8a91e4200b4a66094950f3d78.png


分析:

题目很简单,就是分别求几位数和分离每一位数字,然后就是逆序打印数字。

我们上代码:

#include<stdio.h>
int count(int y);
void print(int x);
void func(int z);
int main()
{
    int a;
    scanf("%d",&a);
     printf("%d\n",count(a));
     print(a);
     printf("\n");
     func(a);
     return 0;
}
void print(int x)
{
   if(x>9)
   {
       print(x/10);
   }
   printf("%d ",x%10);
}
int count(int y)
{
    int count = 0;
while(y!=0)
    {
        y= y/10;
        count++;//这里是求几位数
    }
   return count;
}
void func(int z)
{
   if(z<10)
   {
       printf("%d",z);
       return;
   }
  printf("%d",z%10);
  func(z/10);
}


4.1036 :指针传址调用 -C语言



8b5e379663bf40f38a996c825ee63083.png


分析:

这道题主要是需要会指针的传引用,指针交换变量,上代码!

#include<stdio.h>
int main()
{
     int swap(int *a,int *b);
     int a,b;
     scanf("%d%d",&a,&b);
     int *p1=&a;
     int *p2=&b;
     swap(p1,p2);
     printf("%d %d",a,b);
     return 0;
}
int swap(int *a,int *b)
{
    int tmp;
    tmp=*a;
    *a=*b;
    *b=tmp;
    return 0;
}


不可能通过执行调用函数来改变实参指针变量的值,但是可以改变实参指针变量所知变量的值


5.  2804: 与指定数字相同的数的个数


f913cfcfc35746af811b1c75bd7f2988.png


分析:

这道题可以很好的用数组来做,首先按照题目要求输入N,再输入N个数字;在for循环内遍历,如果是指定的数字m那么计数器就不断+1,直到遍历完整个数组为止。

#include<stdio.h>
int main()
{
   int arr[100]={0};
   int n,i;
   int cnt,count,cut;
   cnt = 0,count = 0,cut = 0;
   scanf("%d",&n);
   for(i = 0;i<n;i++)
   {
       scanf("%d",&arr[i]);
   }
   for(i = 0;i<n;i++)//这里不是固定的
   {
       if(arr[i]==1)
       {
         cnt++;
       }
       if(arr[i]==5)
       {
           count++;
       }
       if(arr[i]==10)
       {
           cut++;
       }
   }
   printf("%d\n%d\n%d\n",cnt,count,cut);
}


6. 2798: 整数序列的元素最大跨度值


3bb85825069545f1b01601e8f5ebb29b.png


分析:

这道题依旧是数组来解决,我们首先定义最大值(max)和最小值(min),然后把这两个值定义为数组第一个元素,在数组内遍历,如果当前数字比max或min小那么max和min就是该数字。结果相减即可得到。我们来看代码:

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#define N 1000
int main() {
  int arr[N] = {0};
  int n, max, min;
  int i = 0;
  int sum = 0;
  scanf("%d", &n);
  for (i = 0; i < n;i++) {
    scanf("%d", &arr[i]);
  }
  max = 0, min = 0;
  max = arr[0];
  min = arr[0];
  for (i = 0; i < n; i++) {
    if (max<arr[i]) {
      max = arr[i];
    }
    if (min>arr[i]) {
      min = arr[i];
    }
  }
  sum = max - min;
  printf("%d",sum);
}


7.2799: 奥运奖牌计数


bec77a35795d485fada5523d5233091a.png


分析:

这次就用不上数组了哦,定义三个变量输入,四个sum,依次相加输出就做完了,但是不能忽略的一点是不要忘记初始化变量。

#include<stdio.h>
#include<math.h>
int main()
{
  int n;
   int a,b,c;
   a = 0,b = 0,c = 0;
  int sum1,sum2,sum3;
  sum1 = 0,sum2 = 0,sum3 = 0;
  int sum = 0;
  scanf("%d",&n);
   for(int i = 1;i<=n;i++)
   {
      scanf("%d%d%d",&a,&b,&c);
      sum1+=a;
      sum2+=b;
      sum3+=c;
   }
   printf("%d %d %d %d\n",sum1,sum2,sum3,sum1+sum2+sum3);
return 0;
}



8. 2819: 数字反转


7302ccab04d845beaf5942b9db80ce10.png


分析:

这道题主要是分解每一位数字然后再次逆序打印出来,具体用while循环实现。

#include<stdio.h>
void kr(int n);
int main()
{
    int n;
    scanf("%d",&n);
    kr(n);
}
void kr(int n)
{
  int s;
    s = 0;
    while(n!=0){
s=s*10+n%10;
n=n/10;
}
    printf("%d",s);
}


9.2883: 矩阵加法


19c317ce6ae640719b04c5fdeb96172a.png


分析:

定义三个数组,两个数组全部输入完成后相加后赋值个第三个数组,之后打印即可。

#include<stdio.h>
int main()
{
    int arr[100][100];
    int brr[100][100];
    int crr[100][100];
    int a,b,i,j;
    scanf("%d%d",&a,&b);
    for(i = 0;i<a;i++)
    {
        for(j = 0;j<b;j++)
        {
            scanf("%d",&arr[i][j]);
        }
    }
    for(i = 0;i<a;i++)
    {
        for(j = 0;j<b;j++)
        {
            scanf("%d",&brr[i][j]);
        }
    }
    for(i = 0;i<a;i++)
    {
        for(j = 0;j<b;j++)
        {
           crr[i][j]=arr[i][j]+brr[i][j];
           printf("%d ",crr[i][j]);
        }
        printf("\n");
    }
    return 0;
}


10.  2823: 计算分数加减表达式的值


534d49ba3fb2433fb6ff679189e6e372.png

分析:

重点在于我们需要定义一个变量来控制正负,每循环一次就颠倒一次正负。

下面是代码:

#include<stdio.h>
int main()
{
  int i,j;
  int  sign = 1;
  double sum = 0;
  scanf("%d",&j);
  for(i = 1;i<=j;i++)
  { 
     sum+=(double)sign*1/i;
     sign = -sign;
  }
   printf("%.4lf",sum);
  return 0;
}


相关文章
|
6月前
|
C语言
【C语言刷题系列】合并两个有序数组
【C语言刷题系列】合并两个有序数组
|
4月前
|
存储 C语言
【C语言】基础刷题训练4(含全面分析和代码改进示例)
【C语言】基础刷题训练4(含全面分析和代码改进示例)
|
6月前
|
C语言
【C语言刷题系列】删除公共元素
【C语言刷题系列】删除公共元素
|
6月前
|
存储 C语言
【C语言刷题系列】对数字添加逗号
【C语言刷题系列】对数字添加逗号
|
6月前
|
C语言
【C语言刷题系列】喝汽水问题
【C语言刷题系列】喝汽水问题
|
2月前
|
机器学习/深度学习 编译器 C语言
C语言刷题(中)(保姆式详解)
C语言刷题(中)(保姆式详解)
16 0
|
4月前
|
C语言
【C语言刷题训练】——第7节(含代码与分析思路)
【C语言刷题训练】——第7节(含代码与分析思路)
|
4月前
|
测试技术 C语言 C++
【C语言刷题训练——6】鹏哥C语言刷题训练营笔记,含代码讲解改进
【C语言刷题训练——6】鹏哥C语言刷题训练营笔记,含代码讲解改进
|
4月前
|
存储 C语言
【C语言】鹏哥C语言刷题训练营——第5节内容笔记(含代码全面分析和改进,讲解)
【C语言】鹏哥C语言刷题训练营——第5节内容笔记(含代码全面分析和改进,讲解)
|
6月前
|
C语言
C语言刷题(函数)
C语言刷题(函数)