难度明显提升,涉及部分数据结构
1
#include<stdio.h>
//编写一个函数以实现排序功能,其中传入参数分别为待排序的数组地址与其长度
void selec_array(int a[], int length) {
for (int i = 0; i < length - 1; i++) {
int min = i; // 记录最小值的位置,第一个元素默认最小
for (int j = i + 1; j < length; j++) {
if (a[j] < a[min]) { // 找到目前最小值
min = j; // 记录最小值的位置
}
}
// 交换两个变量
if (min != i) {
int temp = a[min];
a[min] = a[i];
a[i] = temp;
}
}
}
//主函数
int main()
{
int length = 10;
int num[length]; //初始化一个长度为10的整形数组
for (int i = 0; i < length; i++) { //通过for循环接受10个数字存入数组中
scanf("%d", &num[i]);
}
selec_array(&num, length); //调用上方编写的选择排序函数对数组进行排序
for (int i = 9; i != -1; i--) { //通过for将排序好的数组输出
printf("%d ", num[i]);
}
return 0;
}
2
#include <stdio.h>
int main(void) {
int n = 0,a;
scanf("%d", &n);
int arr[n];
//通过循环接受所有数据
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
scanf("%d", &a);
//遍历所有数据
for (int i = 0; i < n; i++) {
if (arr[i] == a) {
printf("%d\n", i+1);
break;
}
else if (i == n-1) {
printf("-1");
}
}
return 0;
}
3
#include <stdio.h>
int main(void) {
int m,n;
printf("Input m, n:");
scanf("%d,%d",&m,&n);
printf("Input %d*%d array:\n", m,n);
int arr[m][n];
int max=0,row,col;
for(int i=0;i<m;i++) {
for(int j=0;j<n;j++) {
scanf("%d",&arr[i][j]);
}
scanf("");
}
for (int i=0;i<m;i++)
for (int j=0;j<n;j++)
if (max< arr[i][j])//找最大值
{
max=arr[i][j];
row=i+1;//行数
col=j+1;//列数
}
printf("max=%d, row=%d, col=%d",max,row,col);
return 0;
}
4
#include<stdio.h>
int main(void)
{
int n;
scanf("%d",&n);
int arr[n],t=0,s;
for(int i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
int m;
scanf("%d",&m);
for(int i=0;i<n;i++)
{
if(m==arr[i])
{
t=1;
s=i+1; //i每增加1,t便增加2,t始终为i的两倍
printf("%d",s);
break;
}
}
if(t==0)
printf("None");
return 0;
}
5
#include<stdio.h>
int main(void)
{
int i,j,p,q,m,n,y,z,x=0,t=100; //i是行,j是列;
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++)
{
//先找出每行最大的
for(j=0;j<n;j++)
{
if(x<arr[i][j])
{
x=arr[i][j];
p=i;
z=j;
//把每行最大值的下标存起来
}
}
x=0;
//判断是不是这列最小的
for(q=0;q<m;q++)
{
if(t>arr[q][z])
{
t=arr[q][z];
y=q;
}
}
t=100;
if(p==y)
{
printf("Array[%d][%d]=%d",p,z,arr[p][z]);
return 0;
}
}
}
6
该题目实际上涉及到数据结构中的顺序表
通过链表可实现同样效果,不过涉及到大量结构体与指针的应用
#include<stdio.h>
//编写一个删除数组中任意值的函数
void delete(int arr[],int num,int length){
for(int i=num;i<length;i++) {
arr[i]=arr[i+1];
}
}
int main() {
int length=10,max,row;
int arr[length];
for(int i=0;i<length;i++) {
scanf("%d",&arr[i]);
}
for(int i=0; i<length; i++) {
if(arr[i]>max){
max=arr[i];
row=i;
//定位到最大值的位置
}
}
//调用函数删除下标为row的元素
delete(&arr,row,length);
for(int i=0;i<length-1;i++) {
printf("%d ",arr[i]);
}
}
7
#include<stdio.h>
int main() {
int height=10;
int arr[height][height];
//通过循环将三角中恒为1的位置赋值
for(int i=0;i<=9;i++)
for(int j=0;j<=i;j++)
{
arr[i][0]=1;
arr[i][i]=1;
}
for(int i=2;i<=9;i++)
for(int j=1;j<=i-1;j++)
//计算每个位置的值
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
for (int i= 0; i < 10; ++i)
{
for ( int j = 0; j <= i; ++j)
{
printf("%d", arr[i][j]);
if (j != i)
//打印空格
printf(" ");
}
if(i<=8)
//打印换行符
printf("\n");
}
}