以下是引用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"); }