数组(1)

#include <stdio.h>  

int main()
{
	int j;
	int arr[6] = { 0 };
	int i;
	for (i = 0; i < 6; i++)
	{
		scanf("%d", &arr[i]);

	}
	printf("\n");
	for (i = 0; i < 6; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");
	for (j = 0; j < 5; j++)
	{

		int temp = arr[5];
		for (i = 5; i > 0; i--)
		{
			arr[i] = arr[i - 1];
		}
		arr[0] = temp;
		for (i = 0; i < 6; i++)
		{
			printf("%d ", arr[i]);
		}
		printf("\n");
	}
	return 0;
}

#include <stdio.h>  

int main()
{
	printf("Input 10 numbers:");
	int i;
	int lable1 = 0, lable2 = 0;  //不要重复定义,同时要给标签设置初值
	int arr[10] = { 0 };
	for (i = 0; i < 10; i++)
	{
		scanf("%d", &arr[i]);
	}
	int max = arr[0];
	for (i = 0; i < 10; i++)
	{
		if (arr[i] > max)
		{
			max = arr[i];
			lable1 = i;
		}
	}

	int min = arr[0];
	for (i = 0; i < 10; i++)
	{
		if (arr[i] <min)
		{
			min = arr[i];
			 lable2 = i;
		}
	}
	printf("Max element position:%d,Max element:%d\n", lable1, max);
	printf("Min element position:%d,Min element:%d\n", lable2, min);
	int temp = arr[lable1];
	arr[lable1] = arr[lable2];
	arr[lable2] = temp;
	printf("Exchange results:");
	for (i = 0; i < 10; i++)
	{
		printf("%4d", arr[i]);
	}
	return 0;
}

#include <stdio.h>  

int main()
{
    int a[20] = { 2, 4, 6, 8, 10, 12, 14, 16 };
    int n, i, j;
    printf("Enter n:");
    scanf("%d", &n);

    // 寻找插入位置  
    for (i = 0; i < 8; i++)
    {
        if (n < a[i])
        {
            break;
        }
    }

    // 将新元素插入到找到的位置,并将后续元素后移  
    for (j = 7; j >= i; j--) 
    {
        a[j + 1] = a[j];
    }
    a[i] = n; // 插入新元素  

    // 打印数组元素  
    for (j = 0; j < 9; j++) 
    {
        printf("%d ", a[j]);
    }
    printf("\n");

    return 0;
}

#include <stdio.h>  


int main() 
{
    int arr[5] = { 0 };
    int i;
    for (i = 0; i < N; i++) 
    {
        printf("Enter No.%2d:", i + 1);
        scanf("%d", &arr[i]);
    } 
    int j,min;
    for (j = 0; j <= 3; j++)
    {
        min = j;
        for (i = j; i < 5; i++)
        {
            if (arr[i] < arr[min])
            {
                min = i;
            }
        }
        if (min != j)
        {
            int temp = arr[j];
            arr[j] = arr[min];
            arr[min] = temp;
        }
    }
    for (i = 0; i < 5; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

删除数组中的重复元素 

#include <stdio.h>  
int main()
{
	printf("Please input the arraysize\n");
	int n,i,j,m=0;
	int count=0;
	scanf("%d",&n);
	int arr[n];
	 for(i=0;i<n;i++)
{
        printf("Please input the %d-th number\n",i);
        scanf("%d",&arr[i]);
 }
    for(i=0;i<n;i++)
    {
    	for(j=i+1;j<n;)
    	{
    		if(arr[i]==arr[j])
    		{
    		    for(m=j;m<n-1;m++)
    		    {
    		    	arr[m]=arr[m+1];
				}
				n--;
			}
			else
			{
				j++;
			}
		
		}
	}
	  printf("values are %d\n",n);
    for (i=0;i<n;i++)
    {
        printf("%d\n",arr[i]);
    }
	return 0;
}

#include <stdio.h>

int main()
{
    // 提示用户输入10个整数
    printf("Please input %d integer numbers:\n", 10);

    int i, j;
    int flag = 0;
    int arr[10]; // 用于存储用户输入的10个整数
    int remain = 0; // 负数的计数器
    int count = 0; // 正数的计数器
    int ret = 0; // 零的计数器

    // 读取用户输入的10个整数
    for (i = 0; i < 10; i++)
    {
        scanf("%d", &arr[i]);
    }

    // 遍历数组,统计正数、负数和零的个数
    for (i = 0; i < 10; i++)
    {
        if (arr[i] > 0)
        {
            count++;
        }
        if (arr[i] < 0)
        {
            remain++;
        }
        if (arr[i] == 0)
        {
            ret++;
        }
    }

    // 定义三个数组分别存储负数、正数和零
    int g = 0; // 正数数组的索引
    int f = 0; // 负数数组的索引
    int r = 0; // 零数组的索引
    int brr[remain]; // 用于存储负数
    int crr[count]; // 用于存储正数
    int drr[ret]; // 用于存储零

    // 根据正数、负数和零进行分类存储
    for (i = 0; i < 10; i++)
    {
        if (arr[i] > 0)
        {
            crr[g] = arr[i];
            g++;
        }
        else if (arr[i] < 0)
        {
            brr[f] = arr[i];
            f++;
        }
        else if (arr[i] == 0)
        {
            drr[r] = arr[i];
            r++;
        }
    }

    // 输出负数
    for (i = 0; i < remain; i++)
    {
        printf("%5d", brr[i]);
    }

    // 输出零
    for (i = 0; i < ret; i++)
    {
        printf("%5d", 0);
    }

    // 输出正数
    for (i = 0; i < count; i++)
    {
        printf("%5d", crr[i]);
    }

    return 0;
}

#include <stdio.h>

int main()
{
    int n; // 定义变量n表示总人数
    printf("请输入人数:");
    scanf("%d", &n); // 输入人数

    int people[n]; // 定义一个数组来表示每个人的编号
    int i; // 定义循环变量i
    for (i = 0; i < n; i++)
    {
        people[i] = i + 1; // 初始化数组,编号从1到n
    }

    int count = n; // 剩余人数计数器,初始为总人数
    int index = 0; // 当前报数的人的索引
    int number = 1; // 当前报数的数字

    // 循环直到只剩一个人
    while (count > 1)
    {
        if (people[index] != 0) // 如果当前的人还在圈中
        {
            if (number == 3) // 如果报数为3
            {
                number = 1; // 报数重置为1
                people[index] = 0; // 将该人的编号设为0,表示其退出圈子
                count--; // 剩余人数减1
            }
            else
            {
                number++; // 报数加1
            }
        }
        index = (index + 1) % n; // 移动到下一个人,使用取模运算实现循环
    }

    // 查找最后一个剩下的人的编号
    for (i = 0; i < n; i++)
    {
        if (people[i] != 0)
        {
            printf("%d个人中最后留下的是第%d号。\n", n, people[i]);
            break; // 找到最后一个人后退出循环
        }
    }

    return 0;
}

 

这一行代码的目的是在报数过程中循环遍历数组,模拟人们围成一圈的情况。具体来说,`index` 表示当前报数的人的位置,每报数一次,`index` 就会移动到下一个人。

### 详细解释
假设我们有一个数组 `people`,表示围成一圈的 `n` 个人,例如 `n = 5` 时,数组 `people` 可以表示为 `[1, 2, 3, 4, 5]`。

在报数过程中,我们需要不断地从第一个人开始顺序报数,但同时要考虑到最后一个人报完后,报数要继续从第一个人开始。为了实现这种循环遍历,使用取模运算非常有效。

### 取模运算的作用
取模运算 `%` 的作用是对一个数取余数。在这里,`index = (index + 1) % n` 的作用是:

1. **`index + 1`**:将当前报数的人的索引 `index` 加1,即移动到下一个人。
2. **`% n`**:对 `index + 1` 进行取模运算,取模的基数是 `n`(总人数)。

取模运算确保 `index` 的值始终在 0 到 `n-1` 之间循环。这就实现了当 `index` 到达数组的最后一个元素后,再次返回到第一个元素的效果。

### 举例说明
假设 `n = 5`,数组 `people` 的初始状态为 `[1, 2, 3, 4, 5]`,并且当前 `index` 为 4(指向最后一个人,第5人)。

1. 当前 `index = 4`,表示指向第5人。
2. 执行 `index = (index + 1) % n`,即 `index = (4 + 1) % 5 = 5 % 5 = 0`。
3. 结果 `index = 0`,即指向第1人。

通过这种方式,我们能够实现报数过程中从最后一个人回到第一个人的循环。
这行代码的核心作用是实现数组索引的循环遍历,使得报数可以连续进行而不会超出数组的边界,模拟人们围成一圈的情况。

#include <stdio.h>

int main()
{
    int y; // 定义变量y,用于存储最高分学生的索引
    int count = 0; // 计数器,记录输入的学生数量
    long int a[40]; // 数组a,用于存储学生的学号
    long int b[40]; // 数组b,用于存储学生的成绩
    long int e, f; // 临时变量,用于输入学生的学号和成绩
    int i = 0; // 循环变量,用于数组的索引

    while (1)
    {
        printf("Input student’s ID and score:"); // 提示输入学生的学号和成绩
        scanf("%ld%ld", &e, &f); // 读取输入的学号和成绩
        if (e == -1) // 如果输入的学号为-1,表示结束输入
            break;
        count++; // 增加计数器
        a[i] = e; // 将学号存入数组a
        b[i] = f; // 将成绩存入数组b
        i++; // 增加索引
    }

    printf("Total students are %d\n", count); // 输出学生总数

    int max = b[0]; // 初始化最大值为第一个学生的成绩
    for (i = 0; i < count; i++) // 遍历所有学生的成绩
    {
        if (b[i] > max) // 如果当前学生的成绩大于max
        {
            max = b[i]; // 更新max为当前学生的成绩
            y = i; // 更新最高分学生的索引
        }
    }

    printf("The highest is:%ld, %d\n", a[y], max); // 输出最高分学生的学号和成绩
    return 0; // 程序结束
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值