<数组课后练习>
必看注意事项!!!
数组代码基本上都使用了变长数组(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个mn二维数组A|第2个mn二维数组B
【输出形式】mn二维数组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
【样例输出】abc1@?/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
//仅供参考 学习还需自己努力
今天的内容就分享这么多
求三连!!!
求关注!!!