数组题库a

1.任意读入10个整数存放到数组a中,统计数组中出现频率最高的数,输出该数及其出现次数。

如果数组中没有重复出现的数,则输出"没有重复出现的数";

如果有多个频率最好的数字,按照输入的先后顺序全部输出,参考下面的程序运行示例。

解题要求

输入10个整数到a数组中,按题目要求统计完成后,先将a数组中数据全部输出(每个数后隔一空格),并将出现频率最高的数及其出现次数输出。格式如下:

数组a中出现频率最高的数是X,出现次数为X

#include <stdio.h>
  int main()
{
int j,i,a[10],b[10],n=1,t;
printf("a数组元素为:");
for(i=0;i<10;i++)
   {
      b[i]=0;
      scanf("%d",&a[i]);
      printf("%d ",a[i]);
   }
printf("\n");
for(i=0;i<10;i++)
  for(j=i;j<10;j++)
     if(a[i]==a[j])
        b[i]++;
for(i=0;i<10;i++)
     if(b[i]>n)
        {
          n=b[i];t=i;
        }
 if(n!=1)
   {
  printf("数组a中出现频率最高的数是%d,出现次数为%d\n",a[t],b[t]);
   for(i=0;i<10;i++)
     if(b[i]==n&&i!=t)
        printf("数组a中出现频率最高的数是%d,出现次数为%d\n",a[i],b[i]);
   }
 
  else printf("没有重复出现的数");
}

2.任意读入10个整数存放到数组a中,在main()中完成如下功能:

找出其中最大的数,给出其在数组中的位置,如果不止有一个最大数,则需要给出所有的最大数在数组中的位置(位置编号由小到大输出)

#include <stdio.h>
  int main()
{
int a[10],n=0,i,m;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
if(a[i]>n) 
n=a[i];
printf("最大值是%d,其在数组中位置是",n);
 for(i=0;i<10;i++)
if(a[i]==n)
printf("%2d",i);
}

3.输入一个长度为8的整型数组,输出该数组的平均值(保留1位小数),输出数组中大于等于平均值的数组元素。

注意:输出按照输入的顺序,如果有相同的元素都输出,请参考下面的运行结果。

#include <stdio.h>
  int main()
{
int i,a[8];
float b=0;
for(i=0;i<8;i++)
{
    scanf("%d",&a[i]);
    b=b+a[i];
}
 b=b/8;
 printf("平均值是%.1f\n大于平均值的元素是",b);
for(i=0;i<8;i++)
  if(a[i]>b)printf("%d ",a[i]);
}

4.分别输入两个长度为5的从小到大排好序的整数数组,将这两个数组合并到第三个数组中,保持从小到大的排序,并输出。

#include <stdio.h>
  int main()
{int a[5],b[5],c[10],i,j,n;
 for(i=0;i<5;i++)
   scanf("%d",&a[i]);
 for(i=0;i<5;i++)
   scanf("%d",&b[i]);
  for(i=0;i<10;i++)
  {
    if(i<5)
      c[i]=a[i];
    if(i>=5)
      c[i]=b[i-5];
  }
   for(i=0;i<10;i++)
     for(j=i;j<10;j++)
     if(c[i]>c[j])
   {
     n=c[i];
     c[i]=c[j];
     c[j]=n;
   }
 for(i=0;i<10;i++)
   printf("%d ",c[i]);
}

5.输入一个4行4列的单精度数组,计算主对角线元素之和,保留1位小数输出。

#include <stdio.h>
  int main()
{
float a[4][4],m;
 int i,j;
 for(i=0;i<4;i++)
   for(j=0;j<4;j++)
   scanf("%f",&a[i][j]);
 m=a[0][0]+a[1][1]+a[2][2]+a[3][3];
 printf("%.1f",m);
}

6.输入一个2行3列的整数数组,将其进行转置(行和列元素交换)并输出。

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

 7.输入一个3行2列的数组,找出最大的元素值以及最大元素的行下标和列下标,并输出。

#include <stdio.h>
  int main()
{
int a[3][2],max,i,j;
 for(i=0;i<3;i++)
   for(j=0;j<2;j++)
     scanf("%d",&a[i][j]);
 max=0;
  for(i=0;i<3;i++)
    for(j=0;j<2;j++)
      if(a[i][j]>max)
         max=a[i][j];
 for(i=0;i<3;i++)
    for(j=0;j<2;j++)
       if(a[i][j]==max)
          printf("max=a[%d][%d]=%d",i,j,max);
}

 8.输入一个2×3的矩阵,求每列的和

#include <stdio.h>
  int main()
{
int a[2][3],i,j,number[3];
 for(i=0;i<2;i++)
   for(j=0;j<3;j++)
       scanf("%d",&a[i][j]);
number[0]=a[0][0]+a[1][0];
 number[1]=a[0][1]+a[1][1];
 number[2]=a[0][2]+a[1][2];
 printf("%d %d %d",number[0],number[1],number[2]);
}

9.编写程序,从输入的一行字符串中抽取一部分(从第n个字符开始,抽取m个字符)构成一个新的字符串,并输出。n>0且n<=字符串的长度,否则打印起始位置-n-越界

要求:n和m都由用户输入。

如果抽取的字符串长度不够,则按照实际长度抽取,例如,字符串为“abcde”,若n=2,m=3,则抽取结果为“bcd”;若n=3,m=5,则抽取结果为“cde”;若n=0,m=4 则输出:起始位置0越界  ;若n=6,m=2 则输出:起始位置6越界  

#include <stdio.h>
  #include <string.h>
  int main()
{
 char a[80];
 int n,m,b,i,j;
 gets(a);
 b=strlen(a);
 scanf("%d %d",&n,&m);
 if(n>0&&n<=b)
  {
    for(i=n-1;a[i]!='\0'&&i<n-1+m;i++) 
    printf("%c",a[i]);
  }
 else printf("起始位置%d越界",n);
}

10.输入一个字符串和一个特定字符,在字符串中删除从该特定字符开始的所有字符。例如输入字符串为"abcdefg",特定字符为'd',删除后的字符串为"abc";输入字符串为"abcdefg",特定字符为'x',则输出“特定字符不存在”

#include <stdio.h>
  int main()
{
 char a[80],b;
 int i,n=0;
 gets(a);
 scanf("%c",&b);
 for(i=0;a[i]!='\0';i++)
 if(b==a[i])
 {
   a[i]='\0';
   n++;
   break;
  }
 if(n==0)
    printf("特定字符是%c\n特定字符不存在",b);
 else
  {
     printf("特定字符是%c\n删除特定字符%c后的字符串是",b,b);
      puts(a);
  }
}

11.任意输入一行字符串保存在一维字符数组中,判断里面数字字符的个数。

#include <stdio.h>
  int main()
{
   char  a[80];
   int n,m=0;
   gets(a);
   for(n=0;a[n]!='\0';n++)
    {
       if(a[n]>='0'&&a[n]<='9')
       m++;
    }
   printf("%d",m);
}

 12.任意输入两行字符串,把第二行字符串连接到第一行字符串末尾(不用strcat函数)。

#include<stdio.h>
  #include<string.h>
  int main()
{
   char a[80],b[80];
   int n,i,j;
   gets(a);
   gets(b);
   n=strlen(a);
   for(j=0,i=n;b[j]!='\0';j++,i++)
      a[i]=b[j];
   a[i]='\0';
   puts(a);
}

13.任意输一行字符串(包括空格),求其长度(不用strlen函数)。

#include <stdio.h>
  int main()
{
char a[80];
 int n=0,i;
 gets(a);
 for(i=0;a[i]!='\0';i++)
   n++;
 printf("%d",n);
}

14.输入m,n 和一个m*n矩阵 (最大为10 x 10),求他们的各行元素之和。

#include <stdio.h>
  int main()
{
 int a,b,aa[80][80],i,j,n[80];
 scanf("%d%d",&a,&b);
 for(i=0;i<a;i++)
 {
    n[i]=0;
    for(j=0;j<b;j++)
    scanf("%d",&aa[i][j]);
}
 for(i=0;i<a;i++)
 {
    for(j=0;j<b;j++)
      n[i]=n[i]+aa[i][j];
      printf("第%d行元素之和是%d\n",i,n[i]);
 }
}
  
 
   

15.青年歌手参加歌曲大奖赛,有10个评委对她(他)进行打分,试编程求这位选手的平均得分并输出(去掉一个最高分和一个最低分,保留2位小数)。

#include <stdio.h>
  int main()
{
float a[10],b=0,c,ave=0;
 int n;
  for(n=0;n<10;n++)
 scanf("%f",&a[n]);
 c=a[0];
 for(n=0;n<10;n++)
 {  
  if(b<a[n])
    b=a[n];
  if(c>a[n])
    c=a[n];
}
 for(n=0;n<10;n++)
   ave=ave+a[n];
 ave=ave-b-c;
 printf("最高分%.2f\n最低分%.2f\n最后得分%.2f",b,c,ave/8);
}

16.输入n个(1<n<=10)正整数并保存到数组中,求出最大值、最小值、平均值(保留2位小数),以及最大值、最小值在数组中的下标分别是多少。

输入

输入2行

第1行输入整数的个数n

第2行输入n个整数,用空格分隔

输出

需要输出5行

第1行输出最大值

第2行输出最大值的下标

第3行输出最小值

第4行输出最小值的下标

第5行输出平均值

#include <stdio.h>
  int main()
{ int n,a[10],i,max,min;
 float ave=0;
 scanf("%d",&n);
 for(i=0;i<n;i++)
   scanf("%d",&a[i]);
 max=a[0];
      min=a[0];
  for(i=0;i<n;i++)
  {  if(a[i]<min)
    min=a[i];
     if(a[i]>max)
    max=a[i];
  }
for(i=0;i<n;i++)
{ ave=ave+a[i];
  if(max==a[i])
         printf("最大值%d\n最大值下标%d\n",max,i);
     if(min==a[i])
        printf("最小值%d\n最小值下标%d\n",min,i);
}
  printf("平均值%.2f",ave/n);
}

17.将n个数输入到一维数组,将值最大的数组元素与值最小的数组元素的位置对调后输出。

#include <stdio.h>
  int main()
{
int a[80],n,max,min,i;
 scanf("%d",&n);
 for(i=0;i<n;i++)
   scanf("%d",&a[i]);
 max=a[0];
 min=a[0];
  for(i=0;i<n;i++)
  {
    if(a[i]>max)
       max=a[i];
    if(a[i]<min)
       min=a[i];
  }
  for(i=0;i<n;i++)
  {
    if(a[i]==max)
       a[i]=min;
  else  if(a[i]==min)
       a[i]=max;
   printf("%d ",a[i]);
  }
}

18.从键盘输入10个整数并保存到数组,要求找出最小的数,把它和数组中最前面的元素对换位置后输出。

#include <stdio.h>
  int main()
{
  int a[10],i,n;
   for(i=0;i<10;i++)
     scanf("%d",&a[i]);
   n=a[0];
   for(i=0;i<10;i++)
      if(n>a[i])
        n=a[i];
     for(i=0;i<10;i++)
    if(n==a[i])
     {  
        a[i]=a[0];
        a[0]=n;
     }
    for(i=0;i<10;i++)
    printf("%d ",a[i]);
}
        

 19.给定一系列正整数,对每个正整数的每一位数字统计0~9各个数字的出现次数,求出现次数最多的数字。

输入:是整数n(1<=n<=100),表示有n个整数;第二行是n个整数值

第一种。

(ps比较不正规叭,题目要求输入的是一系列正整数) 

#include <stdio.h>
  int main()
{
  int  n,i,number[100],max;
  char a[100];
  scanf("%d\n",&n);
  gets(a);
   for(i=0;a[i]!='\0';i++)
        number[i]=0;
  for(i=0;a[i]!='\0';i++)
    for(n=i;a[n]!='\0';n++)
  if(a[i]!=' ')
  {
    if(a[i]==a[n])
       number[i]++;
  }
    max=number[0];
    for(i=0;a[i]!='\0';i++)
      if(number[i]>max)
      max=number[i];
    printf("出现次数最多%d次的数字是",max);
    for(i=0;a[i]!='\0';i++)
    if(number[i]==max)
      printf(" %c",a[i]);
  }
  

注意

一.scanf("%d\n",&n);

二.if(a[i]!=' ')的判断,否则空格也将算入其中

第二种。

将输入的数用除10取余10的方法分成单独的数字(在0到9之间)然后存入另外数组b中,再在b中依次求出数字出现次数

#include <stdio.h>
  int main()
{
  int a[100],b[100],n,i,j=0,m,z,number[100]={0},max;
  scanf("%d",&n);
  for(i=0;i<n;i++)
  {
    scanf("%d",&a[i]);
    m=a[i];
    while(m!=0)
    {
      b[j]=m%10;
      m=m/10;
      j++;
    }
  }
  for(i=0;i<j;i++)
  {
    for(z=i;z<j;z++)    
    if(b[i]==b[z])
    number[i]++;
  }
  max=number[0];
   for(i=0;i<j;i++)
   {
	   if(number[i]>max)
     max=number[i];
   }
	   printf("出现次数最多%d次的数字是",max);
   for(i=0;i<j;i++)
     if(max==number[i])
     printf(" %d",b[i]);
}

20.从键盘上读入一个数,从一个已知的数组中删除这个数。

要求使用数组初始化语句为:  int a[15]={1,4,6,9,9,6,19,4,4,8,12,1,9,18,19};

n为数组元素的个数,初始值n=15。 程序的输出语句为必要代码:

for(i=0;i<n;i++)

    printf("%d ",a[i]);

#include <stdio.h>
  int main()
{ int a[15]={1,4,6,9,9,6,19,4,4,8,12,1,9,18,19},i,n=15,j,m;
scanf("%d",&j);
 for(i=0;i<n;i++)
 if(a[i]==j)
 {
   for(m=i;m<n-1;m++)
     a[m]=a[m+1];
      n--;
   i--;
 }
 for(i=0;i<n;i++)
    printf("%d ",a[i]);
}

21.用空格或换行分开的字符串称为单词。输入多行字符串,直到遇到了单词 "stop" 时才停止。最后输出单词的数量。用于分割单词的空格或换行可能多于1个。单词数量不包括"stop" 。

#include <stdio.h>
#include <string.h>
int main()
{
char a[80][80];
int i;
scanf("%s",a[0]);
 for(i=1;strcmp(a[i-1],"stop")!=0;i++)
   scanf("%s",a[i]);
 printf("%d",i-1);
}

22.任意输入一个自然数,输出该自然数的各位数字组成的最大数。例如,输入 1593 ,则输出为 9531 。

一.啊哈也是不规范,然鹅简单一些的方法

#include <stdio.h>
  #include <string.h>
  int main()
{ 
char a[80],i,j,n,m;
 gets(a);
 n=strlen(a);
 for(i=0;i<n-1;i++)
   for(j=0;j<n-i-1;j++)
   if(a[j]<a[j+1])
 {
   m=a[j];
  a[j]=a[j+1];
  a[j+1]=m;
 }
 puts(a);
}

 二.规范的la

#include <stdio.h>
  #include <string.h>
  int main()
{ int a,b[80],i=0,j,k,n;
 scanf("%d",&a);
 while(a!=0)
 {
   b[i++]=a%10;
   a=a/10;
 }
 for(j=0;j<i;j++)
   for(k=j;k<i;k++)
   if(b[j]<b[k])
 {
   n=b[j];
   b[j]=b[k];
   b[k]=n;
 }
  for(j=0;j<i;j++)
    printf("%d",b[j]);
}

23.题目:输入一个小于8位数的正整数,判断它是不是回文数。即12321是回文数。

一. 

#include <stdio.h>
  #include <string.h>
  int main()
{
  char a[8];
  int i,j,n,m=0;
  gets(a);
  n=strlen(a);
  for(i=0,j=n-1;i<j;i++,j--)
    if(a[i]!=a[j])
    m--;
  if(m==0)
    printf("这是个回文数");
    else
    printf("这不是回文数");
}

 二.

#include <stdio.h>
  #include <string.h>
  int main()
{
 int a,b[8],i=0,j,k;
  scanf("%d",&a);
  while(a!=0)
  {
   b[i++]=a%10;
    a=a/10;
  }
  for(j=0,k=i-1;j<i&&k>=j;j++,k--)
    if(b[j]!=b[k])
  {  k=0;
   break;
  }
  if(k==0)
    printf("这不是回文数");
  else
    printf("这是个回文数");
}
    

24.有一篇文章,共有多行文字(不超过10行), 最后一行为end。要求分别统计出其中英文大写字母、小写字母、空格以及其它字符的个数。统计结果不包括最后一行的end。

#include <stdio.h>
  #include <string.h>
  int main()
{  
  char a[10][80];
  int i,j,n,A=0,z=0,s=0,k=0,q=0;
  gets(a[0]);
  for(i=1;strcmp(a[i-1],"end")!=0;i++)
      gets(a[i]);
  for(i=0;strcmp(a[i],"end")!=0;i++)
    for(j=0;a[i][j]!='\0';j++)
  {
    if(a[i][j]>='A'&&a[i][j]<='Z')
    A++;
   else if(a[i][j]>='a'&&a[i][j]<='z')
      z++;
  else  if(a[i][j]>='0'&&a[i][j]<='9')
      s++;
   else if(a[i][j]==' ')
      k++;
    else
      q++;
  }
  printf("大写字母有%d个\n小写字母有%d个\n数字有%d个\n空格有%d个\n其他字符有%d个\n",A,z,s,k,q);
}

25.用选择法对10个整数从小到大排序,这10个整数需要输入。

要求选择法排序由以下语句实现,其中黄色的为必要代码

  for (i=0;i<9;i++)

    { for (min=i,j=i+1;j<10;j++)

      。。。

     }

#include <stdio.h>
 void main()
{
  int a[10],i,min,j,t;
  for(i=0;i<10;i++)
    scanf("%d",&a[i]);
  for (i=0;i<9;i++)
  {
    for (min=i,j=i+1;j<10;j++)
      if(a[min]>a[j])
    {
      t=a[min];
      a[min]=a[j];
      a[j]=t;
    }
  }
      for(i=0;i<10;i++)
    printf("%d",a[i]);
 }

26.已有一个已从小到大排好序的数组,要求输入一个数要求按原来排序的规律将它插入数组中。

要求使用数组初始化语句为:   int a[11]={1,4,6,9,13,16,19,28,40,100} 

#include <stdio.h>
  int main()
{
  int a[11]={1,4,6,9,13,16,19,28,40,100},n,i,m;
  scanf("%d",&n);
  for(i=0;i<10;i++)
  {
    if(n<a[i])
  {
    m=i;
    for(i=10;i>=m+1;i--)
      a[i]=a[i-1];
       a[m]=n;
	break;
  }
    else
      a[10]=n;
  }
   for(i=0;i<11;i++)
     printf("%d ",a[i]);
}

27.打印出n行杨辉三角形(要求输入n的值,n<=10)。  
1  
1  1  
1  2  1  
1  3  3  1  
1  4  6  4  1  
1  5  10 10  5  1  

∶  ∶  ∶  ∶  ∶  ∶

一. 

#include <stdio.h>
  int main()
{ 
   int n,j,i;
   int a[10][10]={{1},{1,1}};
   scanf("%d",&n);
   for(i=2;i<10;i++)
     for(j=1;j<i;j++)
    {
       a[i][i]=1;
       a[i][0]=1;
       a[i][j]=a[i-1][j]+a[i-1][j-1];
    }
   for(i=0;i<n;i++)
   { 
     for(j=0;j<=i;j++)
       printf("%d",a[i][j]);
     printf("\n");
   }
}

二.

#include <stdio.h>
  int main()
{ int n,a[10][10],i,j;
 scanf("%d",&n);
 for(i=0;i<n;i++)
 {
   a[i][i]=1;
    a[i][0]=1;
    for(j=1;j<i;j++)
    a[i][j]=a[i-1][j]+a[i-1][j-1];
 }
 for(i=0;i<n;i++)
 {
   for(j=0;j<=i;j++)
   printf("%d ",a[i][j]);
   printf("\n");
 }
}
   

28.将不多于10个的正整数输入到数组a[ ]中,以-1作为结束符, 要求数组的值按逆序重新存放并输出(不包含-1)。

输出语句必须是:

 for(i=0;i<n;i++) printf("%d ",a[i]);

例如,输入: 8 6 5 4 1 -1

输出 1 4 5 6 8。

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

 

  • 28
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值