大一数据结构作业大合集1

请实现可以用某个值来替换数组中指定值的所有元素的函数。

函数接口定义:
void replace(int *a,int n,int b,int c);
函数传入的参数数组a为指定的数组,参数n为数组a的大小,参数b为数组中需要被替换的值,参数c为替换b的值。

#include <stdio.h>

void replace(int *a,int n,int b,int c);

int main(){
    int n;
    int a[105],b,c;
    while(~scanf("%d %d %d",&n,&b,&c)){
        for(int i = 0;i < n;i++)
            scanf("%d",&a[i]);
        replace(a,n,b,c);
        for(int i = 0;i < n;i++){
            if(i)
                printf(" ");
            printf("%d",a[i]);
        }
        printf("\n");
    }
}

/***## 9ba53fffc0e4fa3f ##***/
void replace(int *a,int n,int b,int c)
{
	for(int j = 0 ; j < n ; j++)
	{
		if(a[j] == b)
		{
			a[j] = c;
		}
	}
}

请实现计算一个数组指定下标值之和的函数。

函数接口定义:
int sum(int *a,int *b,int n,int m);
函数传入的参数数组a为指定的数组,参数数组b中存储的是需要求和的指定下标,参数n为数组a的大小,参数m为数组b的大小,函数的返回值为指定下标所对应的值之和。

#include<stdio.h>

int sum(int *a,int *b,int n,int m);

int main(){
    int a[105],b[105],n,m;
    while(~scanf("%d %d",&n,&m)){
        for(int i = 0;i < n;i++)
            scanf("%d",&a[i]);
        for(int i = 0;i < m;i++)
            scanf("%d",&b[i]);
        printf("%d\n",sum(a,b,n,m));
    } 
}

/***## 22ac04c3fc76c7a6 ##***/
int sum(int *a,int *b,int n,int m)
{
	int s = 0;
  for(int j = 0 ; j < m ; j++)
  {
  	s = s + a[b[j]] ;
  }
  return s;
}

请实现反转数组指定区间的函数。

函数接口定义:
void inserve(int *a,int n,int l,int r);
函数传入的参数数组a为指定的数组,参数n为数组a的大小,参数l为所需反转的区间的起点下标,参数r为所需反转的区间的终点下标,函数无须返回值。

#include <stdio.h>

void inserve(int *a,int n,int l,int r);

int main(){
    int n,l,r;
    int a[105];
    while(~scanf("%d %d %d",&n,&l,&r)){
        for(int i = 0;i < n;i++)
            scanf("%d",&a[i]);
        inserve(a,n,l,r);
        for(int i = 0;i < n;i++){
            if(i)
                printf(" ");
            printf("%d",a[i]);
        }
        puts("");
    }
}

/***## ffa160cf2fadfa31 ##***/
void inserve(int *a,int n,int l,int r)
{
	for(int j = l , i = r; j<i ; j++,i--)
	{
		int temp = a[j];
		a[j] = a[i];
		a[i] = temp;
	}
}

请实现可以删除数组中指定下标元素的函数。

函数接口定义:
void del(int *a,int n,int m);
函数传入的参数数组a为指定的数组,参数n为数组a的大小,参数m为需要被删除的元素的下标。

#include<stdio.h>

void del(int *a,int n,int m);

void output(int *a,int n){
    for(int i = 0;i < n;i++){
        if(i)
            printf(" ");
        printf("%d",a[i]);
    }
    printf("\n");
}

int main(){
    int n,m;
    int a[105];
    while(~scanf("%d %d",&n,&m)){
        for(int i = 0;i < n;i++){
            scanf("%d",&a[i]);
        }
        output(a,n);
        del(a,n,m);
        output(a,n - 1);
    }
}

/***## c4b70977cbad5e15 ##***/
void del(int *a,int n,int m)
{
	for(int j = m ; j < n ; j++)
	{
		a[j] = a[j+1];   
	}
}

珍惜空间,杜绝浪费

输入一个含有n个数的数组,使用C++中的 new 指令给数组开内存,要求开刚好足够的内存,数据类型为 int

然后往数组里输入 n 个数

最后将数组打印出来

输入要求:
输入数据有多组

每组数据第一行输入一个整数n(0<n<100),表示数组长度为n

接下来一行输入n个数存入数组当中

输出要求:
每组依次输出数组中的数,每个数后面有一个空格,每组数据打印结束后换行。

数据示例1:
输入:
5
1 2 3 4 5
输出:
1 2 3 4 5

#include<stdio.h>

int* createArray(int n); // 动态开辟内存空间并读入n个整数

int main(){
	int n;
	while(~scanf("%d", &n)){
		int *p = createArray(n); 
		for(int i=0; i<n; i++){
			printf("%d ", p[i]);
		} 
		printf("\n");
		delete[] p;
	}
} 

int* createArray(int n)
{
	int *y = new int[n];
	for(int i=0; i<n; i++){
		scanf("%d",&y[i]);
	}
	return y;
}

打印存储在结构体变量中的学生信息

输入要求:
多组输入。每组输入包括学号,学生姓名,学生生日(包括年,月,日)。

输出要求:
每个学生信息占一行。包括:学号 姓名 生日

生日的输出格式为 yyyy-mm-dd,即4位整数代表年,2位整数代表月,2位整数代表日。数据确保输入的日期合法,并且年为4位整数,如果月和日不足2位数,则前面补0

数据示例1:
输入:
20201 张三 2000 1 1
20202 李四 2002 12 12
输出:
20201 张三 2000-01-01
20202 李四 2002-12-12

#include<stdio.h>
struct date {
	int year, month, day;
};
struct student{
	int id;
	char name[20];
	date bd;
};

void output(student s);

int main(){
	student s;
	while(~scanf("%d %s %d %d %d", &s.id, s.name, 
				&s.bd.year, &s.bd.month, &s.bd.day)){					
		output(s);
	}	
}

void output(student s)
{
	printf("%d %s %4d-%02d-%02d\n", s.id, s.name, s.bd.year, s.bd.month, s.bd.day);					
}

输入一串字符串,使用指针,将字符串中选择的位置下标后面的子串打印出来

输入要求:
数据有多组
第一行输入一个字符串 ( 2 =< len <= 100)
第二行输入一个值 n ( 1 <= l <= 50 ),表示要打印的次数
接下来输入 n 个数x,表示要截取的下标

输出要求:
输出n个下标从 x 到 len - 1的子串,每个子串后需要换行

数据示例1:
输入:
abcdefghijk
4
3 4 5 6
输出:
defghijk
efghijk
fghijk
ghijk

#include<stdio.h>
int main()
{
  	char a[100];
  	while(~scanf("%s",&a))
  	{
  		int n,b[50],q=0;
  		scanf("%d",&n);
  		for(int i = 0 ; i < n ; i++)
  		{
  			scanf("%d",&b[i]);
		}
		while(a[q] != '\0')
		{
			q++;
		}
		for(int i = 0 ; i < n ; i++)
		{
			for(int j = b[i] ; j < q ; j++)
			{
				printf("%c",a[j]);
			}
			printf("\n");
		}	
	}
  	return 0;
} 

在数组指定下标位置插入一个元素

输入要求:
第一行,输入数组的长度n,插入元素的下标m和插入元素的值x

第二行,输入n个数组元素

输入确保0<=n<=100, 0<=m<=n
输出要求:
输出插入操作后数组元素的值

数据示例1:
输入:
6 0 111
1 3 5 2 4 6
6 6 111
1 3 5 2 4 6
输出:
111 1 3 5 2 4 6
1 3 5 2 4 6 111

#include<stdio.h>

void insert(int *a,int n,int m, int x);

void output(int *a,int n){
    for(int i = 0;i < n;i++){
        if(i)
            printf(" ");
        printf("%d",a[i]);
    }
    puts("");
}

int main(){
    int n,m,x; 
    int a[105];
    while(~scanf("%d %d %d",&n,&m,&x)){
        for(int i = 0;i < n;i++){
            scanf("%d",&a[i]);
        }
        insert(a,n,m,x);
        output(a, n+1);
    }
}
void insert(int *a,int n,int m, int x)
{
	for(int i = 0 ; i <= n ; i++)
	{
		if(i == m)
		{
				for(int j = n ; j >= m ; j--)
				{
					a[j] = a[j-1];
				}
				a[m] = x ;
				break;
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值