华电数组题库

数组题库施工完成啦(~ ̄▽ ̄)~

  1. 任意读入10个整数存放到数组a中,统计数组中出现频率最高的数,输出该数及其出现次数。
    (ᶘ ᵒᴥᵒᶅ尝试改进一下大佬的代码 原链接
#include <stdio.h>
int main()
{
	int a[10],b,c,x[10],max=0;
	printf("a数组元素为:");
	for(b=0;b<10;b++)
	{
	scanf("%d",&a[b]);
	printf("%d ",a[b]);
	x[b]=0;
	}
	for(b=0;b<10;b++)
	{
		for(c=b;c<10;c++)//这样循环可以在多个相同数中只计入一个数出现次数的最大值
		{
			if(a[b]==a[c])
			{
				x[b]++;
			}
		}
	}
	printf("\n");
	for(b=0;b<10;b++)
	{
		if(x[b]>=max)
		{
		max=x[b];
		}
	}
	if(max==1)
	printf("没有重复出现的数");
	if(max>1)
	{
			for(b=0;b<10;b++)
			{
				if(x[b]==max)
				{
						printf("数组a中出现频率最高的数是%d,出现次数为%d\n",a[b],x[b]);
					
				}
			}
				
	}
}

2.任意读入10个整数存放到数组a中,在main()中完成如下功能。找出其中最大的数,给出其在数组中的位置,如果非只一个最大数,则需要给出所有的最大数在数组中的位置。

#include<stdio.h>
int main()
{
	int a[10],i,max;
	for(i=0;i<10;i++)
	scanf("%d",&a[i]);
	for(i=0,max=0;i<10;i++)//max赋值最好还是a【0】,万一数组全是负数呢
	{
	if(a[i]>max)
	max=a[i];
	}
	printf("最大值是%d,其在数组中位置是",max);
	for(i=0;i<10;i++)
	{
		if(a[i]==max)
		printf("%d",i);
	}
}

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

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

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

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

5.输入一个4行4列的单精度数组,计算主对角线元素之和,保留1位小数输出。
(这憨憨做法,是当初没预习到二维数组时做的)

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

6.输入一个2行3列的整数数组,将其进行转置(行和列元素交换)并输出
(这憨憨做法,也是当初没预习到二维数组时做的)

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

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

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

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

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

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

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

10.输入一个字符串和一个特定字符,在字符串中删除从该特定字符开始的所有字符。例如输入字符串为"abcdefg",特定字符为’d’,删除后的字符串为"abc";输入字符串为"abcdefg",特定字符为’x’,则输出“特定字符不存在”
(尝试用了一下strchr()这个内置函数)
试了半天疯狂报错发现是scanf忘加&了=。=

#include <stdio.h>
#include <string.h>
int main()
{
	char str[100],ch;	
	gets(str);
	scanf("%c",&ch);
	int i;
	char *ret= strchr(str, ch);
	printf("特定字符是%c\n",ch);
	if(ret!=NULL)//如果没有找到字符返回NULL。
	{ 
	printf("删除特定字符%c后的字符串是",ch);
	for(i=0;i<100;i++)
		{
		if(str[i]==*ret)//此时*ret为ch后面的字符
		break;
		printf("%c",str[i]);
		}
	} 
	else
	printf("特定字符不存在");
} 


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

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

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

#include<stdio.h>
#include<string.h>
int main()
{
	char a[100],b[100];
	gets(a);
	gets(b);
	int m=strlen(a),i;
	for(i=0;i<100;i++)
	{
		a[m+i]=b[i];
	}
	puts(a);
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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>
#define M 20
int fun(int a[],int n, int y);
int main()
{      int a[15]={1,4,6,9,9,6,19,4,4,8,12,1,9,18,19}, n=15, y, k,i;

       scanf("%d",&y);

       n = fun(a, n, y);

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

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

         printf("\n");

return(0);

}
int fun(int a[],int n, int y)
{
	int k,j;
	for(k=0;k<n; k++)
	{
		if(a[k]==y)
		{
		for(j=k;j<n-1;j++)
		{
		a[j]=a[j+1];
		}
		n--;
		k--;
		}
	}
	return n;
}

21.用空格或换行分开的字符串称为单词。输入多行字符串,直到遇到了单词 “stop” 时才停止。最后输出单词的数量。用于分割单词的空格或换行可能多于1个。单词数量不包括"stop" 。
strcmp()函数的运用|ू・ω・` )

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

22.任意输入一个自然数,输出该自然数的各位数字组成的最大数。例如,输入 1593 ,则输出为 9531 。
可以看成一个字符串排序的问题( ̄▽ ̄)/

#include<stdio.h>
#include<stdlib.h>
int cmp(const void *a,const void *b)
{
   return *(char *)a - *(char *)b;
}
int main()
{
	int i,a;
	char s[100];
	for(i=0;i<100;i++)
	{
		scanf("%c",&s[i]);
		if(s[i]=='\n')
		break;	
	}	
 	qsort(s,i,sizeof(s[0]),cmp); //i为s数组所含有的元素个数
 	puts(s);
}

23.题目:输入一个小于8位数的正整数,判断它是不是回文数。即12321是回文数。
回文数对称数这类题的算法基本一样,题库差不多有四道这样的题ᶘ ᵒᴥᵒᶅ

#include<stdio.h>
int main(  )
{   int n,temp1,temp2=0;
    scanf("%d",&n);
	temp1 = n;       
	while(n)
	{
		temp2*=10;
		temp2=temp2+n%10;
		n/=10;
	}
	if(temp1 == temp2)   
		printf("这是个回文数");
	else
		printf("这不是回文数");
 }

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

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

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

#include <stdio.h>
int main()
{
    int a[10];
    int 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[j]<a[min])
                min=j;
        t=a[min];
        a[min]=a[i];
        a[i]=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}
这里用了qsor(快速排序)函数(。・ω・。)

#include <stdio.h>
#include<stdlib.h>
int cmp(const void *a ,const void *b) 
{ 
return * (int * )a-* (int *)b;
} 
int main()
{
	int a[11]={1,4,6,9,13,16,19,28,40,100};
	int i=11,t,x,k;
	scanf("%d",&x);
	a[10]=x;//不会用qsor的话在进行一次选择排序或者冒泡排序就可以了
	qsort(a,i,sizeof(a[0]),cmp);
    for(i=0;i<11;i++)
		printf("%d ",a[i]);
return 0;
}

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

#include<stdio.h>
int main()
{
	int i,index,n,c;
	int a[10],b[10];
	for(i=0;i<10;i++)
	{
		scanf("%d",&a[i]);
		if(a[i]==-1)
		break;
		n=i+1;
	}
	for(i=0;i<=n;i++)
	{
		b[n-i-1]=a[i];
	}
	for(i=0;i<=n;i++)
		a[i]=b[i];
	 for(i=0;i<n;i++)
	  printf("%d ",a[i]);
}
  • 80
    点赞
  • 222
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值