数组练习

这篇博客涵盖了一系列基于数组的编程练习,包括寻找序列中出现次数最多的数、查找鞍点、整数排序、矩阵操作、字符串处理、统计字符出现次数、回文判断等,旨在提升编程能力和算法理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.求整数序列中出现次数最多的数

#include<stdio.h>
int main()
{
	int N,i,j,count=0,max,n;
	scanf("%d",&N);
	int a[5];
	for(i=0;i<N;i++)
	{
		scanf("%d",&a[i]);//输入n个数 
	}
	for(i=0;i<N;i++)
	{
		for(j=0;j<N;j++)
		{
			if(a[i]==a[j])
				count++;//出现的次数 
			if(i==0)
			{
				max=count;//第一次比较,n放下标,max放次数  
				n=i;
			}
			if(i!=0&&count>max)
			{
				max=count;
					n=i;
			}
		}
		count=0;//每次循环,count为0 
	}
	printf("%d %d",a[n],max); 
}

2.找鞍点

#include<stdio.h>
int main()
{
	float a[3][3],max,min;
	int i,j,k,maxk,mink,flag=0;
	for(i=0;i<3;i++)
	{
		for(j=0;j<3;j++)
		{
			scanf("%f",&a[i][j]);
		}//输入矩阵 
	}
		for(i=0;i<3;i++)
		{
				max=a[i][0];//最大值为每行的第一个元素 
				maxk=0;//代表列的值 
			for(j=0;j<3;j++)
			{
				if(a[i][j]>max)
				{
					max=a[i][j];
					maxk=j;
				}
			}
			min=a[0][maxk];//以找到的最大值为基准列 
			mink=0;
			for(k=1;k<3;k++)
			{
				if(a[k][maxk]<min)//这列的第二个元素要是小于第一个元素 
				{
				min=a[k][maxk];
				mink=k;
				}
			}
				if(i==mink)//该行最大该列最小, 
				{
					flag=1;
					printf("鞍点在第%d行,%d列,为%f:",mink+1,maxk+1,a[mink]1[maxk]);
				}
		}
		if(!flag)
			printf("找不到"); 
 } 

3.输入十个整数,将这是个整数按升序排列输出,并且奇数前,偶数后。

#include<stdio.h>
 int main()
 {
 	int i,j,n,t,a[10]={0},odd=0,even=9;
 	for(i=0;i<10;i++)
 	{
 		scanf("%d",&n);
	if(n%2!=0)
		a[odd++]=n;//奇数放在数组的左边 
	else
		a[even--]=n;//偶数放在数组的右边
	}
	for(i=0;i<odd-1;i++)
	{
		n=i;//若第一个元素最小 
		for(j=1+i;j<odd;j++)
		{
			if(a[j]<a[n])
				n=j;
		}
		if(n!=i)
		{
			t=a[i];
			a[i]=a[n];
			a[n]=t;
		}
	 } 
	 for(i=odd;i<9;i++)
	 {
	 	n=i;
	 	for(j=i+1;j<10;j++)
	 	{
		 	if(a[j]<a[n])
				n=j;		
		 }
			if(n!=i)
		{
			t=a[i];
			a[i]=a[n];
			a[n]=t;
		}
	  } 
	  for(i=0;i<10;i++)
	  {
	  	printf("%d ",a[i]);
	   } 
	   printf("\n");
}

4.输入任意六个整数,按下面方阵打印
123456
612345
561234
456123
345612
234561

#include<stdio.h>
int main()
{
	int i,j,t,a[6];
	for(i=0;i<6;i++)
	{
		scanf("%d",&a[i]);//输入六个数字 
	}
	printf("\n");
	for(i=0;i<6;i++)//做6行 
	{
		for(j=0;j<6;j++)
			printf("%d",a[j]);//每行输出 
		printf("\n");
		t=a[5];//把第五个元素和第一个交换 
		for(j=5;j>0;j--)//做5行 
		{
			a[j]=a[j-1];
		}
		a[0]=t;
	}
 }

5.输入5*5矩阵两条对角线上各元素之和,两条对角线上行列下标都为偶数的各元素之积

#include<stdio.h>
int main()
{
	int a[5][5],i,j,sum=0,mul=1;
	for(i=0;i<5;i++)
	{
		for(j=0;j<5;j++)
		{
			scanf("%d",&a[i][j]);
		}
	 } 
	 printf("\n");
	 for(i=0;i<5;i++)
	 {
	 	sum+=a[i][i];//累加 
	 	if(i!=2)
	 		sum+=a[i][4-i];//不重复添加元素 
	 	if(i%2!=0)//先判断若为奇数不* 
	 		continue;
	 	mul*=a[i][i];
	 	if(i!=2)//不重复* 
	 		mul*=a[i][4-i];
	 }
	 printf("sum=%d mul=%d\n",sum,mul);
 }

6.将用户输出的字符串中的所有字符‘c’删除并输出

#include<stdio.h>
#include<string.h>
int main()
{
	char str[20],strcmp[20],ch;
	int i,j,l;
	printf("请输入字符串:");
	gets(str);
	printf("请输入要删除的字符:");
	ch=getchar();
	l=strlen(str);
	for(i=0,j=0;i<l;i++)
	{
		if(str[i]!=ch)
			strcmp[j++]=str[i];
}
		strcmp[j]='\0';
		strcpy(str,strcmp);
		printf("删除后的字符:");
		//puts(str) ;
		printf("%s\n",str);	
}

7.将字符串中连续的空格保留一个

#include<stdio.h>
#include<string.h>
int main()
{
	char b[61];//定义一个数组
	int i;
	gets(b);//获取元素
	for(i=1;b[i]!='\0';i++)
	{
		if(b[i-1]==' '&&b[i]==' ')
			{
				strcpy(b+i-1,b+i);
				i--;
			}
	 } 
	 puts(b);
 }

8.统计单词个数

#include<stdio.h>
 #include<string.h>
 int main()
 {
 	char s[20],c1,c2;
 	int i=0,n=0;
 	gets(s);
 	while(s[i]!='\0') 
 	{
 		c1=s[i];
 		if(i==0)//附加条件 
		 	c2=' ';
		else//与前一个数比较 
			c2=s[i-1];
 		if(c1!=' '&&c2==' ')
 			n++;
 			i++;
	 }
	 printf("%d",n);
 }

9.将一正整数序列重新排列成一个新的序列,将比第一个元素小的放在前面,比他大的放在他的后面

*#include<stdio.h>
int main() 
{
	int a[9]={3,5,8,9,1,2,4,6,7};
	int i,j,k,val,num;
	val=a[0];
	for(j=0;j<9;j++)
	{
		if(a[j]<val)
		{
			num=a[j];//把小的数保存起来 
			for(k=j;k>0;k--)
			{
				a[k]=a[k-1];//把前面的数往后面移 
			}
			a[0]=num;
		}
	}
	for(j=0;j<9;j++)
	{
		printf("%3d",a[j]);
	 } 
}

10.输出一个字符串,再输入一个字符,统计并输出该字符在字符串中出现的次数

#include<stdio.h>
#include<string.h>
int main()
{
	char str[20],ch;
	int i=0,num=0;
	gets(str);
	ch=getchar();
	while(str[i])
	{
		if(str[i]==ch)
			num++;
			i++;
	}
	printf("出现了%d次",num);
}

11.一个存放在数组中的序列循环右移,使后边的m个数存放在数列的开头,m键盘输入

#include<stdio.h>
int main()
{
	int a[10]={1,2,3,4,5,6,7,8,9,10},i,j,m,temp;
	scanf("%d",&m);//循环几次
	for(i=0;i<m;i++)
	{
		temp=a[0];
		for(j=0;j<10-1;j++)
		{
			a[j]=a[j+1];
		}		
			a[9]=temp;
	}
	for(i=0;i<10;i++)
	{
		printf("%d ",a[i]);
		}	
		printf("\n");
}

12.数字对应火柴棒个数

#include<stdio.h>
int main()
{
	int n,b[100],a[10]={6,2,5,5,4,5,6,3,7,6},s;
	while(scanf("%d",&n)!=EOF)
	{
		s=0;
		while(n) 
		{
		s+=a[n%10];
		n/=10;
		}
		printf("%d\n",s);
	}
}

11.输入一字符串,找到最大的字符并在后面加上max

#include<stdio.h>
#include<string.h>
int main()
{
    char str[101],maxCh;
    while (true) 
	{
        gets(str);
        maxCh = str[0];//加入最大的字母是第一个 
        for (int i = 1; i < strlen(str); ++i)
            if (str[i] > maxCh) 
				maxCh = str[i];
        for (int i = 0; i < strlen(str); ++i)
		{
            printf("%c", str[i]);//一个一个输出字母 
            if (str[i] == maxCh)//遇到了最大的字母就输出max 
                printf("(max)");
        }
        printf("\n");
    }
    return 0;
}

12.删除前面的*

#include<stdio.h>
#include<string.h>
void  fun( char *a )
{
    char *p;
    int len;
    int i;
    p=a;
    len=strlen(a);   // 求字符串长度
    for(i=0;i<len;i++)
    {
        if((a[i]!='*') && (a[i]<'A'|| a[i]>'Z') && (a[i]<'a'|| a[i]>'z'))   //  字符串合法性检查   
        {
            //printf("输入的数组格式不对!\n");
            return;
        }
    }
    for(i=0;i<len;i++)
    {
        if('*' == a[i]) //  查找开头属于*的字符串
        {
            p++;    //  如果一直是*号,指针p跳到下一个
            if(a[i+1]!='*') //  判断数组的下一个元素是不是*号
            {
                break;
            }
        }
    }
    i=0;
    while(*p!='\0')     //  将数组a通过指针p来改变,重新赋值。去除开头的*号部分
    {
        a[i]=*p;
        p++;
        i++;
    }
    a[i]='\0';  //  最后要加上结束符

}
int main()
{ 
    char s[81];
    gets(s);
    fun(s);
    puts(s);
}

13.求平均值,除去最大最小值

#include<stdio.h>
int main()
{
	int i,j,min,max,n,a[200],sum=0;
	float aver;
	printf("输入几个数:");
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
		sum+=a[i];
	}
	max=a[0];
	min=a[0];
	for(i=1;i<n;i++)
	{
		if(max<a[i])
		max=a[i];
	}
	for(i=1;i<n;i++)
	{
		if(min>a[i])
		min=a[i];
	}
	aver=(sum-max-min)/(n-2);
	printf("平均值为:%f",aver);
 } 

14.字符数组中在指定位置插入字符

#include<stdio.h>
#include<string.h> 
int main() 
{
    char str[20] = {0},ch;
    char b[20] = {0};
    int m, i, length;
    int j = 0;
    char c;
    printf("请输入字符串:");
    //scanf("%s", str);
    //getchar();//也可以
    gets(str) ;
    printf("请输入插入位置:");
    scanf("%d", &m);
    getchar();   //消除enter影响
    printf("请输入插入元素:");
	scanf("%c",&c);//插入空格也是可以的 
    length = strlen(str);
 
    for(i = m-1; i <= length; i++)
    {
        b[j] = str[i];//把要插入元素的位置后面的东西放到b中 
        j++;
    }
 
    str[m-1] = c;
    j = 0;
 
    for(i = m; i <= length; i++)
    {
        str[i] = b[j];//把b中的元素放入插入后的不完整字符串中 
        j++;
    }
 
    printf("结果:%s\n", str);
    return 0;

}

15,在字符数组中指定开始位置插入字符串

#include<stdio.h>
#include<string.h>
 
int main() //字符数组中在指定位置插入字符串
{
    char a[20] = {0};
    char b[20] = {0};
    char c[20] = {0};
    int i, j = 0, n, lengtha, lengthb, lengthc;
 
    printf("请输入字符串:");
    scanf("%s", a);
    getchar();
    printf("请输入插入字符串:");
    scanf("%s", b);
    getchar();
    printf("请输入插入位置:");
    scanf("%d", &n);
    getchar();
    lengtha = strlen(a);
    lengthb = strlen(b);
 
    for(i = n; i < lengtha; i++)
    {
        c[j] = a[i];//dsfdsf第二个位置插入,从二开始到后面放在c中 
        j++;
    }
    lengthc = j;//后面的长度 
    j = n;
 
    for(i = 0; i < lengthb; i++)
    {
        a[j] = b[i];//把要插入的字符串放在d第n个位置 
        j++;
    }
 
    for(i = 0; i < lengthc; i++)
    {
       a[j] = c[i];//把分隔的字符串放在要插入的后面 
       j++;
    }
 
    printf("结果:%s\n",a);
 
    return 0;
}

16.判断数组s中的字符串是不是回文。一个字符串从左向右读和从右向左读是一样的,读字符串是回文。例如:字符串“abcdedcba”是回文。

#include<stdio.h>
#include<string.h>  
int main()
{
       char s[80];
      int i, j, n;
      printf("Input a character string: \n");
       gets(s);
      n = strlen(s);
      for(i = 0, j = n - 1; i < j; i++, j--)
      {
	  if(s[i] != s[j])
          break;
	  } 
     if(i >=j)
          printf("回文\n");
     else
          printf("非回文\n");
     return 0;
} 

17.输出数组s中字符串的子串,子串从s[begin]开始,长度为len。

#include<stdio.h>
int main()
{
   char s[80];
   int begin, len;
   gets(s);
   scanf("%d%d", &begin, &len);
   len += begin;
   for(; begin < len; begin++)
      printf("%c", s[begin]);
   printf("\n");
   return 0;
 }

18.编写一个程序,把输入作为字符流读取,直至遇到 EOF。令其报告输入中的大写字母个数和小写字母个数。假设小写字母的数值是连续的,大写字母也是如此。或者你可以使用 ctypc,h 库中的合适的函数来区分大小写。

#include<stdio.h>
#include<ctype.h>
int main()
{
    char ch;
    int l = 0, u = 0;

    printf("Please input some characters:\n");
    while((ch = getchar()) != EOF) {
        if(islower(ch))
            l++;
        if(isupper(ch))
            u++;
    }
    printf("\nlower letter = %d,\nupper letter = %d.\n", l, u);

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值