题一:查找:给定有10个元素的整数数组,输入一个数,在数组中查找是该数 【C语言】查找:给定有10个元素的整数数组,输入一个数,在数...
\u529f\u80fd\uff1a\u4e3a\u4e00\u7ef4\u6570\u7ec4\u8f93\u516510\u4e2a\u6574\u6570\uff1b\u5c06\u5176\u4e2d\u6700\u5c0f\u7684\u6570\u4e0e\u7b2c\u4e00\u4e2a\u6570 \u5bf9\u6362\uff0c\u5c06\u6700\u5927\u7684\u6570\u4e0e\u6700\u540e\u4e00\u4e2a\u6570\u5bf9\u6362\uff0c\u8f93\u51fa\u6570\u7ec4\u5143scanf("%d",p\u2605++); \u6216 scanf("%d",arr[i]); \u6216 scanf("%d",p+i); \u6216 scanf("%d",arr+i);
2). if(*p>*max) \u6216 if(*max<*p)
3). if(\u2605max\u2605==\u2605arr\u2605)
4). for(i=0;ii;i++) \u6216 for(p=arr;p=i;i++) \u6216 for(p=arr;p=p;)
#include
#define COMMON0
#define MUL_EQU1
#define ORDER2
#define INC1
#define DEC2
int main(){
int array[10];
int i,n,type,index,found=0,order;
printf("Input 10 integers:");
for(i=0;i<10;i++){
scanf("%d",&n);
array[i]=n;
}
printf("Input array type.\n \"0\" for Common\n \"1\" for 2 or more equal numbers\n \"2\" for ordered array\n:");
scanf("%d",&type);
switch(type){
case COMMON:
printf("Input index to search:");
scanf("%d",&index);
for(i=0;i<10;i++){
if(array[i]==index){
printf("Found at array[%d].\n",i);
return 0;
}
}
printf("Index not found!\n");
return 0;
case MUL_EQU:
printf("Input index to search:");
scanf("%d",&index);
for(i=0;i<10;i++){
if(array[i]==index){
printf("Found at array[%d].\n",i);
found=1;
}
}
if(found==0) printf("Index not found!\n");
return 0;
case ORDER:
if(array[0]<array[1]){
order=INC;
}else{
order=DEC;
}
printf("Input index to search:");
scanf("%d",&index);
if(index==array[5]){
printf("Found at array[5]\n");
return 0;
}else if(index>array[5]){
for(i=6;i<10;i++){
if(array[i]==index){
printf("Found at array[%d]\n",i);
return 0;
}
}
printf("Index not found!\n");
return 0;
}else if(index<array[5]){
for(i=0;i<5;i++){
if(array[i]==index){
printf("Found at array[%d]\n",i);
return 0;
}
}
printf("Index not found!\n");
return 0;
}
}
return 0;
}
\u9700\u8981\u6ce8\u91ca\u5417\uff1f
完整C程序:
#include "stdio.h"
int count = 0;
int isOrdinal(int arr[], int n);
int binarySearch(int arr[], int low, int high, int key);
int find(int arr[], int n, int key);
void main()
{
int arr[] = {1, 2, 3, 4, 4, 4, 5, 5, 6, 7};
int n = 10;
int key = 4;
int pos = -1;
pos = find(arr, n, key);
printf("first find %d at position %d
", key, pos);
printf("number of same data : %d
", count);
}
/* 判断数组arr是否是排序的,若是返回1,否则返回0 */
int isOrdinal(int arr[], int n)
{
int i;
for(i=0; i<n-1 && arr[i]<=arr[i+1]; i++);
if(i >= n-1)
return 1;
if(i > 0)
return 0;
for(i=0; i<n-1 && arr[i]>=arr[i+1]; i++);
if(i >= n-1)
return 1;
return 0;
}
/* 折半查找,若找到返回索引,否则返回-1 */
int binarySearch(int arr[], int low, int high, int key)
{
int mid;
while(low <= high)
{
mid = (low + high) / 2;
if(arr[mid] == key)
{
count++;
binarySearch(arr, low, mid-1, key);
binarySearch(arr, mid+1, high, key);
return mid;
}
else if(arr[mid] < key)
low = mid + 1;
else
high = mid - 1;
}
return -1;
}
/* 查找,若找到返回索引,否则返回-1 */
int find(int arr[], int n, int key)
{
int i, pos = -1;
if(isOrdinal(arr, n) == 1)
return binarySearch(arr, 0, n-1, key);
for(i=0; i<n; i++)
if(arr[i] == key)
{
count++;
if(pos == -1)
pos = i;
}
return pos;
}
运行测试:
给你写了个普通数组的查询,对于多个等于关键字的又稍微的处理,没有折半查找
#include"stdio.h"
void main()
{
int a[10]={1,3,5,7,3,9,8,2,4,10};
int n,count=0,c[10];
for(int i=0;i<10;i++)printf("%d ",a[i]);
printf("\n请输入要查找的数:");
scanf("%d",&n);
for(i=0;i<10;i++){
if(a[i]==n){c[count]=i;count++;}
}
if(count==0){printf("未找到符合的数");}
else {
printf("共找到%d个符合的数\n",count);
for(i=0;i<count;i++)
printf("第%d个符合的数为数组的%d号位置\n",i+1,c[i]+1);
}
}
算了,送佛送到西好了,再给你弄个折半查找
#include<stdio.h>
#include<stdlib.h>
void main(){
int a[10]={1,3,12,15,22,45,93,501,1023,12345};
int mid;
int low=0;
int high=9;
int x,i;
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n请输入你要查找的数:");
scanf("%d",&x);
while(low<=high)
{
mid=(low+high)/2;
if(x==a[mid]){
printf("符合的数为数组的%d号位置\n ",mid+1);break;}
else{
if(x<a[mid])
high=mid-1;
else low=mid+1;
}
}
}//将升序排列的数组 进行折半查找
已发
同学不会也是为了湖大期中考试吧?
他们写的都太高级了,记不住哎~
第一个的第二种还好理解些~
绛旓細int isOrdinal(int arr[], int n);int binarySearch(int arr[], int low, int high, int key);int find(int arr[], int n, int key);void main(){ int arr[] = {1, 2, 3, 4, 4, 4, 5, 5, 6, 7};int n = 10;int key = 4;int pos = -1;pos = find(arr, n,...
绛旓細include <stdio.h>int main(void){int a[10]={1,2,3,4,5,6,7,8,9,10};int i,k;scanf("%d",&k);for(i=0;i<10;i++){if(a[i]==k){printf("鎸囧畾鍊糼鐨勪笅鏍囨槸:%d\n",i);break;}}if(i==10){printf("娌℃湁涓涓厓绱犵殑鍊肩瓑浜庢寚瀹氬糼!\n");} return 0;} ...
绛旓細C10锛3鎰忔濇槸浠10涓腑娌℃湁椤哄簭鐨勯3涓紝灏辨槸10*9*8/锛1*2*3锛=120锛2^10鎰忔濇槸2鐨10娆℃柟锛屽洜涓轰粠10涓厓绱閫夊瓙闆嗭紝鏈塁10,0+~~~+C10,10=2鐨10娆℃柟锛堜綘鍙互绠椾竴涓嬶紝鍒憡璇夋垜涓嶇煡閬揅鏄粈涔堟剰鎬濓級锛屾墍浠ョ患涓婂嵆寰楃瓟妗
绛旓細include<stdio.h> void main(){ int i,j,k,f[10],max,min;for(i=0;i<10;i++)scanf("%d",&f[i]);max=min=f[0];for(j=1;j<10;j++){if(f[j]>max)max=f[j];if(f[j]<min) //鏂板姞鐨勶紒鏂板姞鐨勶紒min=f[j];} printf("max=%d min=%d\n",max,min);} ...
绛旓細void main(){ int i, j, a[10],temp;for (i = 0; i < 10; i++)scanf("%d",&a[i]);printf("\n");for (i = 0; i < 9; i++)for (j = i+1; j < 10; j++)if (a[j]<a[i]){ temp = a[i];a[i] = a[j];a[j] = temp;} for (i = 0; i < 10;...
绛旓細int i, j, a[10],temp;for (i = 0; i < 10; i++)scanf("%d",&a[i]);printf("\n");for (i = 0,j=9; i< =9&&j>=0; i++,j--)//浜ゆ崲棣栧熬鐨勬暟,瀹炵幇閫嗗簭瀛樻斁 { temp = a[i];a[i] = a[j];a[j] = temp;} for (i = 0; i < 10; i++)printf("%3d"...
绛旓細妤间富浣犲ソ锛佹牴鎹綘鐨勮姹備唬鐮佸疄鐜板涓嬶紒include<stdio.h> int main(){ int a[10]={},i,sum=0;printf("璇疯緭鍏10涓暣鏁帮細\n");for(i=0;i<10;i++){ scanf("%d",&a[i]);sum+=a[i];} printf("10涓厓绱鍜屼负锛%d",sum);return 0;} 甯屾湜鎴戠殑鍥炵瓟瀵逛綘鏈夊府鍔╋紒
绛旓細stdio.h"int main(){int i,n=0,a[10];printf("璇疯緭鍏10涓鏁存暟锛歕n");for(i=0;i<10;i++){scanf("%d",&a[i]);if(a[i]>10)n++;} printf("杈撳叆鐨10涓暟鏄細\n");for(i=0;i<10;i++)printf("%d ",a[i]);printf("\n鍏朵腑澶т簬10鐨勬暟鏈%d涓猏n",n);return 0;} ...
绛旓細甯姪浜虹殑鏃朵唬鏉ヤ复锛屾墍閽熸儏銆傚嵈涓嶈兘鐪嬪埌缁撴灉 澶氫箞缇庡锛岃繖姊︿竴鏍风殑鍦烘櫙锛佸湪濂ヨ尐缁磋緵涔嬪悗锛屾病鏈夌瀛︼細浠栦滑搴旇鐗㈣杩囦腑鍝堝搱
绛旓細int i, t, s;printf("璇疯緭鍏鍗佷釜鏁!\n");for (i = 0; i < 10; i++){ scanf("%d", &p[i]);} for (i = 0; i < 10; i++){ for(t = i + 1; t < 10; t++){ if (p[i] > p[t]){ s = p[i];p[i] = p[t];p[t] = s;} } } printf("max=%d\...