#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; // 程序结束
}