oj第八次测试(含数组相关知识点)

1. 数组排序

题目描述
a)实现一个函数。函数的参数有2个,分别是数组名(数组起始地址),数组大小(即数组元素个数)。函数返回值为void, 函数功能是将数组中有意义的元素按降序排列。
b)实现一个函数。函数的参数有3个,分别是数组名(数组起始地址,要求数组元素按降序排列),数组大小(即数组元素个数),和待插入的元素值函数返回值为void.函数功能是将待插入的元素插入数组中,并维持降序接列。例如:将元素4插入数组{8, 7,5, 2, 1, 0,0}后,数组变为{8,7,5,4,2,1,0}
c)在主函数中定义数组,元素个数为100,首先读入5个整数作为数组元素初始值(剩余元素初始值为0).并调用第一个函数,对数组进行降序排列然后读入1个整数作为数组新增元素,调用第二个函数将其插入数组并输出。
输入格式
6个整数,前5个为数组元素初始值,第6个为新增元素值
输出格式
数组前六项`

#include<stdio.h>
//降序排列部分 
void rank(int array1[],int n)
{
	int i,j,big;
	for(i=0;i<n;i++) {
		for(j=i+1;j<n;j++){
			if(array1[i]<array1[j])	{
			big=array1[j];
			array1[j]=array1[i];
			array1[i]=big;
			}
		}		
	}
}
//插入元素再排序部分
void again_rank(int array2[],int n,int a)//a是插入元素
{
	int i,j;
	int again_rank[6];
	for(i=0;i<n;i++) {
		if(a>array2[i]){
			for(j=n;j>i;j--){
				array2[j]=array2[j-1];
			}//把剩余的元素依次位置退一步
			array2[i]=a;
			break; 
		}
	}
} 
main()
{
	int i,num[6];
	for(i=0;i<5;i++){
		scanf("%d",&num[i]);
	}
	rank(num,i);
	scanf("%d",&num[5]);
	again_rank(num,i,num[5]);
	for(i=0;i<6;i++){
		printf("%d ",num[i]);
	}
	return 0;	
}

待改进部分:

  • 降序排列可以再简洁一点
  • 尝试更改至可使用n个数

2.句子输出

题目描述:
事先允许最多五个英文字符串输入后,再指定输出顺序的编号(即对应输入字符串的顺序),使对应输出的英文字符串按照指定的顺序输出在一行上。
输入格式:
第一行:输入一个正整数,表示将要输入的字符串的个数,最大为5。
第二行起:在每行内对应输入-个字符事,限制在10个字符以内(含10个字符) :
输入完最后一个字符串的下一行:依次输入输出顺序编号,从0开始(即0表示输入的第一个字符串,1表示输入的第二个字符串,依次类推),两个相邻数字之间用空格隔开。
输出格式:
只有一行,按照输入指定的顺序输出字符串。两个相邻的字符串间用空格隔开,最后一个字符串后没有空格且应换行。
输入样例
3
world
Hello
!
1 0 2
输出样例
Hello world !

#include<stdio.h>
main()
{
	char c[5][11];
	int i,n,turn[11];
	scanf("%d",&n);
	for(i=0;i<n;i++){
		scanf("%s",c[i]);
	}
	for(i=0;i<n;i++){
		scanf("%d",&turn[i]);
	}
	//完成输入部分
	for(i=0;i<n-1;i++){
		printf("%s ",c[turn[i]]);
	}
	printf("%s\n",c[turn[i]]);//输出最后一个字符串
	return 0; 
}

注意事项

关于数组:

1.字符串的初始化:

  1. char c[]={“hello world”}
  2. char c[]=“hello world”
  3. char c[]={‘h’,‘e’,‘l’,‘l’,‘o’,’’,‘w’,‘o’,‘r’,‘l’,‘d’,’\0’}

2.二维数组的初始化
未被初始化赋值的元素会自动初始化为0;若是字符型数组,则初始化为’\0’;指针型则初始化为NULL,即空指针。

  1. 分行赋值。eg. int a[3][4]={{1,2,3,4},{1,2,3,4}…}
  2. 按顺序赋值。 eg. int a[3][4]={1,2,3,4,5,6,7…}

3.位置问题:

  1. 一维数组时,数组名即代表数组初始元素位置。eg. c[10],则c即代表c[0]的位置。输入输出时都无需加&寻位置。
  2. 二维数组时,数组名即数组的起始地址;a[i]代表i行0列元素的地址。 eg.二维数组 a [5] [10], scanf("%s",a[1]),即表示从a[1][0]开始储存该字符串。
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值