PTA 数组(C语言)

文章目录

    • 1.选择法排序 (20 分)
    • 2. 交换最小值和最大值 (15 分)
    • 3.fibonacci数列 (10 分)
    • 4.逆序 (10 分)
    • 5.插入有序数组 (10 分)
    • 6.找10个整数中的最大值 (12 分)
    • 7. 找出数组中元素的最大数,并指出其位置 (10 分)
    • 8.排序问题 (15 分)
    • 9.计算字符串数组长度 (10 分)
    • 10.字符串字母大小写转换 (15 分)
    • 11.字符串连接 (15 分)
    • 12.将字符串逆序输出 (15 分)
    • 13. 996 (15 分)
    • 14.求二维数组周边元素的累加和 (10 分)
    • 15.杨辉三角 (10 分)
    • 16.求矩阵中的最大小值 (15 分)

1.选择法排序 (20 分)

本题要求将给定的n个整数从大到小排序后输出。

输入格式:
输入第一行给出一个不超过10的正整数n。第二行给出n个整数,其间以空格分隔。

输出格式:
在一行中输出从大到小有序的数列,相邻数字间有一个空格,行末不得有多余空格。

输入样例:
4
5 1 7 6
输出样例:
7 6 5 1

#include 
int  main()
{
    int x,n,i,t;
    scanf("%d",&n);
    int a[n];
    for(i=0;i<n;i++){
     scanf("%d",&a[i]);
    }
    for(x=0;x<n-1;x++)
       for(i=0;i<n-1-x;i++)
          if(a[i+1]>a[i])
            {
            	t=a[i+1];
            	a[i+1]=a[i];
            	a[i]=t;
			}
	printf("%d",a[0]);
    for(i=1;i<n;i++)
    {
       printf(" %d",a[i]);
    }
    return 0;
}

2. 交换最小值和最大值 (15 分)

本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。

注意:题目保证最大和最小值都是唯一的。

输入格式:
输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。

输出格式:
在一行中顺序输出交换后的序列,每个整数后跟一个空格。

输入样例:
5
8 2 5 1 4
输出样例:
1 2 5 4 8

#include 
int  main()
{
    int j,n,i;
    scanf("%d",&n);
    int a[n];
    for(i=0;i<n;i++)
       scanf("%d",&a[i]);
    int max,min;
    
    min=a[0];
	for(i=1;i<n;i++)
	{
		if(a[i]<min)
		{
			min=a[i];
			j=i;
		}
	}
	a[j]=a[0];
	a[0]=min;
	
	
	max=a[0];
	for(i=1;i<n;i++)
	{
		if(a[i]>max)
		{
		    max=a[i];
		    j=i;
	    }
    }
    a[j]=a[n-1];
    a[n-1]=max;
    
	 for(i=0;i<n;i++)
	 {
	 	 printf("%d ",a[i]);
	 }   
}

3.fibonacci数列 (10 分)

用数组计算fibonacci数列的前12个数,并按每行打印3个数的格式输出。

输入格式:
无输入

输出格式:
请使用%6d的格式输出;注意输出最后一个数字后,有一个换行

输出样例:
1 1 2
3 5 8
13 21 34
55 89 144

#include 
int  main()
{
    int i;
    int a[12]={1,1};
    for(i=2;i<12;i++)
       a[i]=a[i-1]+a[i-2];
    for(i=0;i<12;i++)
	{
		printf("%6d",a[i]);
		if((i+1)%3==0) printf("\n");
    }   
}

4.逆序 (10 分)

对n个整数组成的一维数组按逆序重新存储并输出(n<10)。

输入格式:
第一行给出一个不超过10的正整数n。第二行给出n个整数,其间以空格分隔。

输出格式:

在一行中输出n个逆序的整数。每个数输出占4列。

输入样例:
5
7 6 5 8 1
输出样例:
1 8 5 6 7

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

5.插入有序数组 (10 分)

一个长度为10的数组中输入n(0≤n≤9)个整数,这n个整数从小到大有序。再输入一个x,把它插入数组适当位置,使数组仍保持有序。

输入格式:
输入n,再以从小到大顺序输入n个整数,再输入x。

输出格式:
插入x后的数组,数与数间用空格分割。

输入样例:
5
1 3 5 7 9
2
输出样例:
1 2 3 5 7 9

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

6.找10个整数中的最大值 (12 分)

输入10个整数保存到一个数组中,找出其中的最大值并输出。

输入格式:
输入10个整数,数据中间用一个空格分隔。

输出格式:
输出最大值并换行。

输入样例1:
1 2 3 10 4 6 5 7 8 9
输出样例1:
10
输入样例2:
10 1 2 3 4 5 6 7 8 9
输出样例2:
10

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

7. 找出数组中元素的最大数,并指出其位置 (10 分)

找出数组中值最大的一个元素,并指出它是第几个元素。

输入格式:
从键盘上给10个整型数组元素赋值,之间用空格隔开。

输出格式:
第m个数最大,最大数是:x。

输入样例:
在这里给出一组输入。例如:

-123 5 78 24 69 6 8 687 0 -900
输出样例:
在这里给出相应的输出。例如:

第8个位置的数最大,最大数是:687

#include 
int  main()
{
    int i,a[10],max,t;
    for(i=0;i<10;i++)
       scanf("%d",&a[i]);
    max=a[0];
    t=0;
	for(i=1;i<10;i++)
	{
		if(a[i]>max){
		max=a[i];
		t=i;
	    }
    }    
    printf("第%d个位置的数最大,最大数是:%d",t+1,max);
}

8.排序问题 (15 分)

从键盘输入某班学生某门课程的成绩(每班人数最多不超过40人),当输入为负值时,表示输入结束,试编程将分数从高到低顺序进行排序输出。用函数编程实现排序功能。

输入格式:
以空格分隔,不超过40个的整数数值,以负数结束

输出格式:
从大到小排序后的数值,以逗号分隔,最后一个数后不跟逗号,不包含输入的最后一个负数

输入样例:
在这里给出一组输入。例如:

64 85 73 99 92 -1
输出样例:
在这里给出相应的输出。例如:

99,92,85,73,64

#include
int main()
{
	int i,j,t,n=0;
	int a[40];
	for(i=0;;i++)
	{
	    scanf("%d",&a[i]);
	    n++;
	    if(a[i]<0) break;
	}
	for(j=0;j<n-2;j++)
	{
	   for(i=0;i<n-2-j;i++)
	   {
	      if(a[i]<a[i+1])
	      {
	      	t=a[i+1];
	      	a[i+1]=a[i];
	      	a[i]=t;
		  }
	    }
	}
	printf("%d",a[0]);	  
	for(i=1;i<n-1;i++)
	{
		printf(",%d",a[i]);
    }
}

9.计算字符串数组长度 (10 分)

从键盘任意输入一个字符串,用数组的方式计算其实际字符个数并打印出来,即不使用字符串处理函数strlen()编程实现strlen的功能。

函数接口:
unsigned int MyStrlen(const char str[])
输入格式:
字符串

输出格式:
字符串长度

输入样例:
在这里给出一组输入。例如:

hello world
输出样例:
在这里给出相应的输出。例如:

11

#include
#include 
int main()
{
	int s=0;
	char a[20];
	gets(a);
	{
		s=strlen(a);
	}
	printf("%d",s);
} 

10.字符串字母大小写转换 (15 分)

本题要求编写程序,对一个以“#”结束的字符串,将其小写字母全部转换成大写字母,把大写字母全部转换成小写字母,其他字符不变输出。

输入格式:
输入为一个以“#”结束的字符串(不超过30个字符)。

输出格式:
在一行中输出大小写转换后的结果字符串。

输入样例:
Hello World! 123#
输出样例:
hELLO wORLD! 123

#include
int main()
{
	char a[32];
	int i;
	gets(a);
	for(i=0;a[i]!='#';i++)
	{
		if(a[i]>='a'&&a[i]<='z')
		{
			printf("%c",a[i]-32);	
		}
		else if(a[i]>='A'&&a[i]<='Z')
		{
	         printf("%c",a[i]+32);
		}
		else printf("%c",a[i]);
	}
}

11.字符串连接 (15 分)

从键盘输入两个字符串,将第二个字符串连接在第一个字符串的末尾,然后输出连接后的字符串。要求不能使用strcat函数。

输入格式:
输入只有一行,为两个字符串,中间用空格隔开。每个字符串的长度都不超过100。

输出格式:
输出只有一行,为连接后的字符串。

输入样例:
hello world
输出样例:
helloworld

#include
int main()
{
	char a[100],b[100];
	scanf("%s %s",a,b);
	printf("%s%s",a,b);
}

12.将字符串逆序输出 (15 分)

将字符串逆序输出。输入一个字符串后,将其逆序输出。

输入格式:
输入在一行中给出一个不超过80个字符长度的、以回车结束的非空字符串。

输出格式:
在一行中输出逆序后的字符串。

输入样例:
C/C++
输出样例:
++C/C

#include
#include
int main()
{
	int i,n;
    char a[81];
    gets(a);
    n=strlen(a);
    for(i=n-1;i>=0;i--){
        printf("%c",a[i]);
    }
}

13. 996 (15 分)

PTA 数组(C语言)_第1张图片

996工作制是指工作日早9点上班,晚上9点下班,中午和傍晚休息1小时(或不到),总计10小时以上,并且一周工作6天的工作制度。2019年3月27日,一个名为“996ICU”的项目在GitHub上传开。程序员们揭露"996ICU"互联网公司,抵制互联网公司的996工作制度。2019年12月2日,996入选《咬文嚼字》2019年十大流行语。 同日,入选国家语言资源监测与研究中心发布的“2019年度十大网络用语“。 本题就请你编写程序,将句子中的”996”替换成” 996ICU”。

输入格式:
输入在一行中给出一句话,即一个非空字符串,由不超过 1000 个英文字母、数字和空格组成,以回车结束。

输出格式:
从左到右扫描输入的句子:如果句子中有"996"子串,则将其替换为"996ICU";其他内容不受影响,原样输出。

输入样例:
Working overtime 996 is not as good as 966.
输出样例:
Working overtime 996ICU is not as good as 966.

#include
#include
int main()
{
	char s[1000];
	int i,k1=0,k2=0;
	gets(s);
	for(i=0;i<strlen(s);i++)
    {
    	if(s[i]=='9') k1++;
		if(s[i]=='6') k2++;
		printf("%c",s[i]);
		 if(k1==2&&k2==1)
		 {
		 	printf("ICU");
		 	k1=0;
		 	k2=0;
		 } 
    }
    return 0;
}

14.求二维数组周边元素的累加和 (10 分)

求一个二维数组周边元素的累加和。 输入一个二维数组的行数m(m<10),列数n(n<10),二维数组的各元素值。输出周边元素之和。

输入格式:
输入的第一行为矩阵的行数和列数,从第二行开始,为矩阵元素的输入。

输出格式:
输出周边元素之和。

输入样例:
在这里给出一组输入。例如:
3 4
1 2 3 4
5 6 7 8
1 2 3 4
输出样例:
在这里给出相应的输出。例如:
33

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

15.杨辉三角 (10 分)

求杨辉三角的前n行数据。

输入格式:
输入n(n<10)值。

输出格式:
输出杨辉三角的前n行数据,每个数据占4列。

输入样例:
5
输出样例:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1

#include
int main()
{
	int n,i,j;
	int a[10][10];
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		for(j=0;j<=i;j++)
		{
			if(i==j||j==0) a[i][j]=1;
			else a[i][j]=a[i-1][j-1]+a[i-1][j];
			printf("%4d",a[i][j]);
			if(i==j) printf("\n");
		}
	}
}

16.求矩阵中的最大小值 (15 分)

向一个n×m的数组中输入一组整数(n<=10,m<=10),然后输出其中的最大值、最小值,并输出这两个值的下标。

输入格式:
第一行输出n×m的数组中的最大值及其下标。每两项之间一个空格。 第二行输出n×m的数组中的最小值及其下标。每两项之间一个空格。 (如果有相同的最大的数,要求输出行列最小,行优先)

输出格式:
请在这里描述输出格式。例如:对每一组输入,在一行中输出A+B的值。

输入样例:
3 5
57 30 66 41 98
11 93 54 62 31
49 87 71 70 37
输出样例:
max=98 row=0 col=4
min=11 row=1 col=0

#include
int main()
{
    int i,j,m,n;
    int max=0,min=0,row1,col1,row2,col2;
    int a[20][20];
     while(scanf("%d",&m)!=EOF){
         row1=col1=row2=col2=0;
         scanf("%d",&n);
    for(i=0;i<m;i++)
    {
    	for(j=0;j<n;j++)
    	{
    		scanf("%d",&a[i][j]);
		}
	}
	max=a[0][0];
	for(i=0;i<m;i++)
    {
    	for(j=0;j<n;j++)
    	{
    		if(max<a[i][j])
    		{
			max=a[i][j];
    		row1=i;
    		col1=j;
    	    }
		}
	}
	printf("max=%d row=%d col=%d\n",max,row1,col1);
	
	min=a[0][0];
	for(i=0;i<m;i++)
    {
    	for(j=0;j<n;j++)
    	{
    		if(min>a[i][j])
    		{
			min=a[i][j];
    		row2=i;
    		col2=j;
    	    }
		}
	}
	printf("min=%d row=%d col=%d\n",min,row2,col2);
     }
}

你可能感兴趣的:(C语言,c语言)