#include <stdio.h>
#include <stdlib.h>
int main()
{
int arr1[10]={4,5,6,2,9,7,1,3,2,8};
// printf("%d\n",search(arr1,4));
//delete(arr1,0);
//printf("\n");
sort(arr1);
print(arr1)
//creat(4);
return 0;
}
int creat(int n){
int arr[n];
for(int i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
for(int i=0;i<n;i++)
printf("%d",arr[i]);
}
int search(int arr[],int n){
int length = sizeof(arr);
for(int i=0;i<length;i++){
if(arr[i]==n){
return i;
}
}
}
void delete(int arr[],int n){
int length =sizeof(arr);
for(int i=n;i<=length;i++){
arr[i]=arr[i+1];
}
//length=length-1;
for(int i=0;i<=length;i++){
printf("%d",arr[i]);
}
}
void sort(int arr[]){
int length =sizeof(arr);
int temp=0;
for(int i=0;i<length-1;i++){
for(int j=0;j<=length-1-i;j++){
if(arr[j]>arr[j+1]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
void print(int arr[]){
int length=sizeof(arr);
for(int i=0;i<length;i++){
printf("%d\n",arr[i]);
}
}
}
指针传递的问题,你传递了数组指针,在函数内部sizeof得到的的是指针的长度,不是数组的长度。
解决方法:
71行
void sort(int arr[])
改成
void sort(int *arr,int len)
print也都存在相同问题。
调用第18行地方改成
sort(arr1,sizeof(arr1));
如果解决您的问题,请采纳,谢谢。
int length =sizeof(arr); 函数中arr退化为指针了,得不到数组尺寸。
【以下回答由 GPT 生成】
问题描述: 给定的C代码中,排序和打印数组的函数没有进行正确的输出。请修改代码,使其能够正确排序并打印数组元素。
问题解决方案如下所示:
#include <stdio.h>
#include <stdlib.h>
void creat(int arr[], int n) {
for(int i=0; i<n; i++) {
scanf("%d", &arr[i]);
}
}
int search(int arr[], int n, int length) {
for(int i=0; i<length; i++) {
if(arr[i]==n) {
return i;
}
}
return -1; // 如果未找到,返回-1
}
void delete(int arr[], int n, int length) {
int i;
for(i=n; i<length-1; i++) {
arr[i] = arr[i+1];
}
arr[length-1] = 0; // 最后一个元素置为0
}
void sort(int arr[], int length) {
int temp=0;
for(int i=0; i<length-1; i++) {
for(int j=0; j<length-1-i; j++) {
if(arr[j]>arr[j+1]) {
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
void print(int arr[], int length) {
for(int i=0; i<length; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main()
{
int arr1[10]={4,5,6,2,9,7,1,3,2,8};
int length = sizeof(arr1) / sizeof(arr1[0]);
sort(arr1, length);
print(arr1, length);
int arr2[10];
creat(arr2, length);
sort(arr2, length);
print(arr2, length);
int index = search(arr2, 6, length);
printf("Index: %d\n", index);
delete(arr2, index, length);
print(arr2, length-1);
return 0;
}
解决方案解释: 1. 将 creat
方法用作创建数组,并接受一个数组和其大小作为参数。使用scanf
函数在循环中逐个输入数组元素,并使用%d
作为格式化字符串。然后,使用printf
函数打印出数组元素。 2. search
方法用于在数组中查找给定的元素,并返回它的索引。循环遍历数组,如果找到相应的元素,则返回索引。如果循环结束后未找到相应的元素,则返回-1. 3. delete
方法用于删除数组中给定索引的元素。将给定索引后面的元素前移一个位置,并将最后一个元素置为0. 4. 修改sort
方法,将数组和数组长度作为参数传递进去。计算数组长度的方法是sizeof(arr) / sizeof(arr[0])
。在冒泡排序算法中,循环的上界由length-1
确定。 5. 修改print
方法,以便循环遍历整个数组,并使用printf
函数按照预定格式打印数组元素。 6. 在main
函数中,首先对arr1
数组进行排序并打印输出。然后,通过调用creat
方法,动态输入arr2
数组的元素。再次对arr2
数组进行排序并打印输出。接下来,使用search
方法查找6在arr2
中的索引,并打印输出。最后,使用delete
方法删除找到的元素,并打印输出删除后的数组。
以上是解决问题的具体步骤和解释,希望对你有帮助。如果还有其他问题,请随时提问。
【相关推荐】