【沈阳航空航天大学】 <数组课后练习>

必看注意事项!!!

数组代码基本上都使用了变长数组(VLA),VS2022,VS2019,VS2010等编译器中并不支持,如需调试请自行寻找gcc编译器或者clang编译器!!!

但是CG平台是支持变长数组的

1. 顺序查找

【问题描述】输入一组整数和一个待查数据,在一组整数中查找待查数据是否存在。
【输入形式】输入一个整数n,表示一组整数的个数(个数不会超过50个),输入n个整数,输入一个待查数据。
【输出形式】如果查找成功,返回该数据在数组中的下标;如果查找失败,输出no。
【样例输入】5 34 23 12 14 76 12
【样例输出】2

【样例输入】7 4 2 32 41 47 61 81 90
【样例输出】no

#include <stdio.h>
int main()
{
	int n,i,j;
	int flag = 0;
	int data = 0;
	scanf("%d",&n);
	int arr[n];
	for(i = 0; i<n; i++)
	{
		scanf("%d",&arr[i]);
	}
	int temp;
	scanf("%d",&temp);
	for(j = 0; j<n; j++)
	{
		if(arr[j]==temp)
		{
			flag = 1;
			data = j;
			break;
		}
	}
	if(flag)
	{
		printf("%d",data);
	}
	else
	{
		printf("no");
	}
	return 0;
}
//SAU-计科2304-NineSense
//仅供参考 学习还需自己努力

2. 判断输入C语言之父的名字是否正确

【问题描述】本题为回答C语言之父的名字“Dennis Ritchie”,若输入正确,则输出“Good”并结束;否则输出“Try again”并结束。输入的名字各个字母不区分大小写。

【输入形式】一串字符
【输出形式】Good/Try again
【样例1输入】Dennis ritCHiE
【样例1输出】Good

【样例2输入】Denis Ritchie
【样例2输出】Try again

【样例说明】输入只要是对应的字母,即可视为正确,不区分大小写。

#include <stdio.h>
#include <string.h>

int main()
{
	int i;
	char arr1[100];
	char arr2[] = "dennis ritchie";
	gets(arr1);
	for (i = 0; i < strlen(arr1); i++)
	{
		if (arr1[i] >= 'A' && arr1[i] <= 'Z')
		{
			arr1[i] += 32;
		}
	}
	if (strcmp(arr1, arr2)==0)
	{
		printf("Good");
	}
	else
	{
		printf("Try again");
	}
}
//SAU-计科2304-NineSense
//仅供参考 学习还需自己努力

3. 计算两个二维数组的差

【问题描述】输入两个同为mn的二维整数数组A和B(m,n<10),计算A-B的差并输出。
【输入形式】m|n|第1个m
n二维数组A|第2个mn二维数组B
【输出形式】m
n二维数组C
【样例输入】
2
3
1 2 3
4 5 6
-1 -2 -3
-4 -5 -6
【样例输出】
2 4 6
8 10 12

#include <stdio.h>

int main()
{
    int m, n;
    scanf("%d", &m);
    scanf("%d", &n);
    int A[m][n], B[m][n], C[m][n];
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            scanf("%d", &A[i][j]);
        }
    }
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            scanf("%d", &B[i][j]);
        }
    }
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            C[i][j] = A[i][j] - B[i][j];
        }
    }
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            printf("%d ", C[i][j]);
        }
        printf("\n");
    }
    return 0;
}
//SAU-计科2304-NineSense
//仅供参考 学习还需自己努力

4. 输出矩阵鞍点

【问题描述】任意输入一个m*n(3=<m、n<=6)阶整数矩阵,设计算法输出鞍点——鞍点即本行最大,本列最小的元素。
【输入形式】m n <enter>
【输出形式】none或鞍点及鞍点所在行、列整数值

【样例输入】
3 3
1 1 1
1 1 1
1 1 1
【样例输出】none

【样例输入】
3 4
1 7 4 1
4 8 3 6
1 6 1 2
【样例输出】6 2 1

【样例说明】本算法只考虑无鞍点或只有一个鞍点的情况。

#include <stdio.h>
int main()
{
	int i = 0, j = 0, k = 0;
	int m, n, row = 0, col = 0;
	int flag = 0;
	int max, min;
	scanf("%d %d", &m, &n);
	int arr[m][n];
	for (i = 0; i < m; i++)
	{
		for (j = 0; j < n; j++)
		{
			scanf("%d", &arr[i][j]);
		}
	} //
	
	for (i = 0; i < m; i++)
	{
		max = arr[i][0];
		for (j = 1; j < n; j++)
		{
			if (arr[i][j] > max)
			{
				max = arr[i][j];
				col = j;
			}
		} // 找到第i行的最大值
		min = arr[0][col];
		for (k = 0; k < m; k++)
		{
			if (arr[k][col] < min)
			{
				min = arr[k][col];
				row = k;
			}
		}
		
		if (min == max)
		{
			flag++;
		}
	}
	
	if (flag == 1)
		printf("%d %d %d", arr[row][col], row, col);
	else
		printf("none");
	
	return 0;
}
//SAU-计科2304-NineSense
//仅供参考 学习还需自己努力

5. 求多个学生的平均成绩

【问题描述】一个学习小组有5个人,每个人有三门课(高数、英语和C语言)的考试成绩,求每人的平均成绩。按行输出每个学生的各科成绩及平均成绩。

【输入形式】按高数、英语和C语言课程顺序输入每个学生的成绩。
【输出形式】按行输出每个同学每个同学的每门课成绩及平均成绩。

【样例输入】
95 84 74 60 35
87 67 98 78 69
98 89 78 76 67
【样例输出】
95 87 98 93.33
84 67 89 80.00
74 98 78 83.33
60 78 76 71.33
35 69 67 57.00

【样例说明】输出每个同学信息各占一行,且平均成绩保留两位小数

#include<stdio.h>
#include<stdlib.h>

int main()
{
	int a[3][5];
	int i, j, sum;
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 5; j++)
		{
			scanf("%d", &a[i][j]);
		}
	}
	system("cls");
	for (j = 0; j < 5; j++)
	{
		sum = 0;
		for (i = 0; i < 3; i++)
		{
			printf("%d ", a[i][j]);
			sum += a[i][j];
		}

		printf("%.2f\n", sum / 3.0);
	}
	return 0;
}
//SAU-计科2304-NineSense
//仅供参考 学习还需自己努力

6. 按照规则找两个最大数

【问题描述】从键盘读入大于1小于100的正整数n,再输入n个整数。要求找出两个最大值,分别为小于平均值的最大数和大于平均值的最大数,不考虑最大数和平均值相等的情况。输出这两个最大数和平均值,顺序为较小最大数,平均值(保留两位小数点),较大最大数。

【输入形式】输入正整数n以及n个整数
【输出形式】按顺序输出较小最大数,平均值(保留两位小数点),较大最大数。

【样例输入】9 1 2 3 4 5 6 7 8 9
【样例输出】4 5.00 9

【样例输入】4 90 48 63 14
【样例输出】48 53.75 90

#include<stdio.h>
#include<stdlib.h>

void Bubble_sort(int arr[], int size);

void Bubble_sort(int arr[], int size)
{
	int j, i, tem;
	for (i = 0; i < size - 1; i++)
	{
		int count = 0;
		for (j = 0; j < size - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				tem = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tem;
				count = 1;
			}
		}
		if (count == 0)
			break;
	}
}

int main()
{
	int i=0,n=0;
	int max=0;
	int sz,sum=0;
	int min_max=0;
	double average=0;
	scanf("%d",&n);
	int arr[n];
	
	for (i = 0; i < n; i++)
	{
		scanf("%d",&arr[i]);
	}
	
	sz = sizeof(arr) / sizeof(arr[0]);
	Bubble_sort(arr, sz);

	max=arr[0];
	for (i = 0; i < n; i++)
	{
		if (arr[i] < arr[i + 1])
		{
			if(i+1==n)
			{
				break;
			}
			max = arr[i + 1];
		}
	}
	
	for(i = 0;i < n; i++)
	{
		sum += arr[i];
	}
	average = (double)sum/n;
	
	min_max = arr[0];
	for (i = 0; i < n; i++)
	{
		if (arr[i] >= average)
		{
			if(arr[1]==average)
			{
				break;
			}
			min_max = arr[i - 1];
			break;
		}
	}
	
	printf("%d %.2lf %d",min_max,average,max);
	return 0;
}
//SAU-计科2304-NineSense
//仅供参考 学习还需自己努力

7. 求整数数组组中特定值K出现次数

【问题描述】求整数数组组中特定值出现次数。

【输入形式】输入N个整数,以-1作为结束(-1不记在数组中),然后输入一个整数K,数据以空格隔开
【输出形式】整数K在N个整数中出现的次数C

【样例输入】3 1 1 2 2 3 -1 2
【样例输出】2

【样例输入】3 1 1 2 2 3 -1 0
【样例输出】0

【特殊说明】数组元素个数不超过50个

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
	int n=0,i=0;
	int count=0;
	int sz;
	char arr[50];
	for(i=0;i<50;i++)
	{
		scanf("%d",&arr[i]);
		if(arr[i]==-1)
		{
			arr[i]='\0';
			break;
		}
	}
	scanf("%d",&n);
    sz=strlen(arr);
	for(i=0;i<sz;i++)
	{
		if(arr[i]==n)
		{
			count++;
		}
	}
	printf("%d",count);
	return 0;
}
//SAU-计科2304-NineSense
//仅供参考 学习还需自己努力

8. 数组最大、最小元素与第一个和最后一个元素的对调

【问题描述】输入n个整数,其中n为大于等于2 的正整数。将数组中最大元素与第一个元素对调,最小元素与最后一个元素对调,并输出新数组。

【输入形式】n及n个整数
【输出形式】n个整数

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

#include <stdio.h>

int main()
{
	int n, i, max, min, temp;
	scanf("%d", &n);
	int arr[n];
	for(i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	max = arr[0];
	min = arr[0];
	for(i = 1; i < n; i++)
	{
		if(arr[i] > max)
		{
			max = arr[i];
		}
		if(arr[i] < min)
		{
			min = arr[i];
		}
	}
	for(i = 0; i < n; i++)
	{
		if(arr[i] == max)
		{
			temp = arr[0];
			arr[0] = max;
			arr[i] = temp;
		}
		if(arr[i] == min)
		{
			temp = arr[n-1];
			arr[n-1] = min;
			arr[i] = temp;
		}
	}
	for(i = 0; i < n; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}
//SAU-计科2304-NineSense
//仅供参考 学习还需自己努力

9. 删除字符串中特定字符并输出

【问题描述】任意输入一串字符s1,以回车键结束;再输入一个字符ch,把s1中所有ch删除,然后输出新字符串。

【输入形式】<字符串> <字符>
【输出形式】<字符串>

【样例输入】abcd1@?/wdsd
d
【样例输出】abc
1@?/ws

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define N 20

int main()
{
	char s1[N],s2[N]="\0",ch;
	int i,j;
	scanf("%s ",s1);
	fflush(stdin);
	ch=getchar();
	j=0;
	i=0;
	while(s1[i]!='\0')
	{
		if(s1[i]!=ch)
		{
			s2[j]=s1[i];
			j++;
		}
		i++;
	}
	puts(s2);
	return 0;
}
//SAU-计科2304-NineSense
//仅供参考 学习还需自己努力

10. 将任意输入的一串英文字母按字典顺序排序并输出

【问题描述】输入输入一串英文字母,按ASCII顺序排序后输出。

【输入形式】<字符串>
【输出形式】<字符串>

【样例输入】ertSAuqW
【样例输出】ASWeqrtu

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define N 20

int main()
{	
	char  s[N],t;
	int  i,j,SIZE;
	gets(s);
	t=0;
	SIZE=0;
	SIZE=strlen(s);
	for(i=1;i<SIZE;i++)
		for(int j=0;j<SIZE-i;j++)
		{
			if(s[j]>s[j+1])
			{
				t=s[j];
				s[j]=s[j+1];
				s[j+1]=t;}
		}
	puts(s);
	return 0;
}
//SAU-计科2304-NineSense
//仅供参考 学习还需自己努力

今天的内容就分享这么多
求三连!!!
求关注!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NineSense

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值