以下是引用FATALIZM在2016-7-7 14:26:51的发言:
结果一直是这样的,我也不知道为什么
结果一直是这样的,我也不知道为什么
不过我重新建了一个源程序然后把这个复制粘贴过去就可以运行了,真的好神奇,原来怎么运行都不对的
程序代码:#include <stdio.h>
//清空缓存函数,代替你的fflush(stdin);这个可移植性更好点
void safe_flush(FILE *fp)
{
int ch;
while( (ch = fgetc(fp)) != EOF && ch != '\n' );
}
void insert(int *p,int d)
{
int i=0,j;
//先判断输入的数是不是原有序序列最大的,是就直接放到最后,不是再逐个比较找位置插入
if(d>p[5])
p[6]=d;
else
{
while(p[i]<d)
{
i++;
}
for(j=6;j>i;j--)
{
p[j]=p[j-1];
}
p[i] = d;
}
printf("\n新序列为:");
for(i=0;i<7;i++)
printf("%d\t",p[i]);
}
int main()
{
int p[10]={1,3,4,8,15,17};
int d,i;
printf("原序列为:");
for (i=0;i<6;i++)
printf("%d\t",p[i]);
printf("\n请输入要插入的整数:");
scanf("%d",&d);
safe_flush(stdin);
insert(p,d);
printf("\n");
return 0;
}
[此贴子已经被作者于2016-7-7 14:46编辑过]



[此贴子已经被作者于2016-7-7 15:15编辑过]
程序代码:#include <stdio.h>
#include <malloc.h>
//清空缓存函数
void safe_flush(FILE *fp)
{
int ch;
while( (ch = fgetc(fp)) != EOF && ch != '\n' );
}
//排序函数
void sort(int a[],int n)
{
int i,j,temp=0;
int num=n;
for(i=0;i<n;i++)
{
n--; //每次循环都是把最大的值交换到最右面
for(j=0;j<n;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
printf("\n\n新序列为:");
for(i=0;i<num;i++)
printf("%d\t",a[i]);
}
void insert(int *p,int d,int n)
{
int i;
//插入数据放至数组最后
p[n-1]=d;
//输出新数组
printf("\n新数组为:\n\n");
for(i=0;i<n;i++)
printf("%d\t",p[i]);
sort(p,n);
}
//主函数
int main()
{
int i=0,n=0,d=0;
printf("先输入动态数组的长度: ");
scanf("%d", &n);
int* arr = (int *)calloc(n+1,sizeof(int));
printf("\n输入%d个整数给数组赋值:\n\n",n);
//给数组赋值
for(i = 0; i < n; i++)
scanf("%d",&arr[i]);
//给数组最后加上结束符
arr[n+1]='\0';
//清除输入超过n长度的数字,避免后续误读入存进elem中
safe_flush(stdin);
//输出该数组的元素值
printf("\n初始数组为:\n\n");
for(i=0;i<n;i++)
printf("%d\t",arr[i]);
//输入需要插入的元素
printf("\n\n请输入要插入的元素值: ");
scanf("%d",&d);
safe_flush(stdin);
insert(arr,d,n+1);
//释放堆内存
free(arr);
//将arr指向NULL,避免通过arr不当使用已经释放的内存
arr=NULL;
return 0;
}
程序代码:#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
//先判断有几个元素等于elem,即需调用几次removeElement
int same_elem(int A[],int n,int elem)
{
int i=0;
//统计几次相等
int num=0;
for(i=0;i<n;i++)
{
if(elem==A[i])
num++;
}
return num;
}
//移除函数
int removeElement(int A[], int n, int elem,int m)
{
int i=0,j=0;
for(i=0;i<n;i++)
{
if(elem==A[i])
{
for(j=i;j<n;j++)
A[j]=A[j+1];
A[n]='\0';
break;
}
}
n=0;
i=0;
printf("\n第%d次删除后数组为:\n\n",m+1);
while(A[i]!=0)
{
printf("arr[%d]=%d\t",i,A[i]);
n++;
i++;
}
printf("\n");
return n;
}
//清空缓存函数
void safe_flush(FILE *fp)
{
int ch;
while( (ch = fgetc(fp)) != EOF && ch != '\n' );
}
//主函数
int main()
{
int i=0, n=0,num=0,m=0;
//elem要删除的元素,index剩下的数组长度
int elem=0,index=0;
printf("先输入动态数组的长度: ");
scanf("%d", &n);
int* arr = (int *)calloc(n,sizeof(int));
printf("\n输入%d个整数给数组赋值\n\n",n);
//给数组赋值
for(i = 0; i < n; i++)
scanf("%d",&arr[i]);
//给数组最后加上结束符
arr[n]='\0';
//清除输入超过n长度的数字,避免后续误读入存进elem中
safe_flush(stdin);
// getchar();
//输出该数组的元素值
printf("\n初始数组为:\n\n");
for(i = 0; i < n; i++)
printf("arr[%d]=%d\t",i,arr[i]);
//输入需要删除的元素
printf("\n\n请输入要删除的元素值: ");
scanf("%d",&elem);
//调用函数判断数组中有几个需要删除的元素
num=same_elem(arr,n,elem);
//调用移除函数计算剩下的数组长度
if(num!=0)
{
index=n;
for(i=0;i<num;i++)
{
index=removeElement(arr,index,elem,m);
m++;
}
printf("\n删除元素后的数组长度为: %d\n\n",index);
}
else
{
printf("\n该元素不在数组内.\n\n");
exit(0);
}
//释放堆内存
free(arr);
//将arr指向NULL,避免通过arr不当使用已经释放的内存
arr=NULL;
return 0;
}
[此贴子已经被作者于2016-7-7 15:29编辑过]
程序代码:#include<stdio.h>
#include<string.h>
int loc(char *str1,char *str2)
{
char *p = str1;
int len = strlen(str2);
while (*p != '\0')
{
if (strncmp(p, str2, len) == 0)
{
return p-str1+1;
}
p++;
}
return 0;
}
main()
{
char str1[]="woshiyigedahaoren";
char str2[]="yi";
int k = loc(str1, str2);
if (k > 0)
printf("%d\n", k);
else
printf("没找到\n");
}