C語言區找找
⑴ c語言排序和查找
1)利用readData()函數從data1.txt中讀入不同規模的數據存入數組,
編寫基於數組的順序查找演算法,測試數據量為1萬、5萬、10萬、20萬、
30萬、40萬和50萬時的數據查詢時間。
演算法代碼如下:
1 int seqsearch(int a[],int n,int key)
2 {
3 int k=n-1;
4 while(k>=0&&a[k]!=key)
5 k--;
6 return (k);
7 }
2)利用readData()函數從data2.txt中讀入不同規模的有序數據存入數組,
編寫基於數組的二分查找演算法,測試數據量為1萬、5萬、10萬、20萬、30萬、
40萬和50萬時的數據查詢時間。
演算法代碼如下:
1 int binSearch(int a[],int n,int key)
2 {
3 int low=0;
4 int high=n-1;
5 int mid;
6 while(low<=high)
7 {
8 mid=(low+high)/2;
9 if(a[mid]==key) return mid;
10 if(a[mid]>key)
11 high=mid-1;
12 else
13 low=mid+1;
14 }
15 return -1;
16 }
3)請設計冒泡排序演算法函數void bubbleSort(int a[],int n),對a[1]..a[n]進行升序排序。
並測試在不同數據規模下的排序效率。
演算法代碼如下:
1 void bubbleSort(int a[],int n)
2 {
3 int i=1,j,flag=1;
4 while(i<=n-1&&flag)
5 {
6 flag=0;
7 for(j=1;j<=n-1-i;j++)
8 if(a[j+1]<a[j])
9 {
10 a[0]=a[j];
11 a[j]=a[j+1];
12 a[j+1]=a[0];
13 flag=1;
14 }
15 i++;
16 }
17 }
⑵ 關於c語言文件查找
//讀數
#include<stdio.h>
#include<stdlib.h>
#defineN20
structstud
{
intnum;
intsco1;
intsco2;
intsco3;
}stu[N];
voidmain()
{
FILE*fp;
doubleave;
inti=0,x;
if((fp=fopen("STUDENT.DAT","r"))==NULL)
{
printf("無法打開該文件! ");
exit(0);
}
else
printf("文件打開成功! ");
for(i=0;i<N;i++){
fread(&stu[i],sizeof(structstud),1,fp);
i++;
}
fclose(fp);
printf("請輸入要查找的學生學號: ");
scanf("%d",&x);
for(i=0;i<N;i++)
{
if(x==stu[i].num)
{
ave=(double)(stu[i].sco1+stu[i].sco2+stu[i].sco3)/3.0;
break;
}
else
i++;
}
if(i==10||ave<0||ave>100)
printf("查無該生成績! ");
else
printf("該生平均成績為:%.2lf ",ave);
}
//存數
#include<stdio.h>
#include<stdlib.h>
#defineN20
structstud
{
intnum;
intsco1;
intsco2;
intsco3;
}stu[N];
voidmain()
{
FILE*fp;
inti,n;
floatsum1=0,sum2=0,sum3=0,ave1=0,ave2=0,ave3=0;
if((fp=fopen("STUDENT.DAT","wb"))==NULL)
{
printf("無法打開該文件! ");
exit(0);
}
else
printf("文件打開成功! ");
printf("請輸入要輸入的學生數: ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("請輸入學生學號,數學成績,政治成績和英語成績: ");
scanf("%d%d%d%d/n",&stu[i].num,&stu[i].sco1,&stu[i].sco2,&stu[i].sco3);
sum1+=stu[i].sco1;
sum2+=stu[i].sco2;
sum3+=stu[i].sco3;
if(fwrite(&stu[i],sizeof(structstud),1,fp)!=1)
printf("filewriteerror ");
}
fclose(fp);
ave1=sum1/n;
ave2=sum2/n;
ave3=sum3/n;
printf("------------------------------------ ");
printf("NUMMathProliticsEnglish ");
for(i=0;i<n;i++)
{
printf("%d%7d%10d%14d ",stu[i].num,stu[i].sco1,stu[i].sco2,stu[i].sco3);
}
printf("------------------------------------ ");
printf("對應三門成績均分為: ");
printf("%7.2f%10.2f%14.2f ",ave1,ave2,ave3);
}
⑶ c語言查找字元串
字元串在存儲上類似字元數組,所以它每一位的單個元素都是可以提取的,如s=「abcdefghij」,則s[1]=「b」,s[9]="j",而字元串的零位正是它的長度,c語言查找字元串方法為:
1、首先,定義一個字元數組變數,可以這么寫。
注意事項:
盡管形式字元串可以有任意(但有限)的長度,實際語言的字元串的長度經常被限制到一個人工極大值。有兩種類型的字元串數據類型: 「定長字元串」,它有固定的極大長度並且不管是否達到了這個極大值都使用同樣數量的內存。
⑷ C語言中怎樣實現查找功能
可以用結構體 把一個人的信息定義成結構體的變數 輸入姓名後在結構體數組查找 匹配時輸出對應的所有信息
很好實現的
⑸ C語言查找的用法
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#defineN20
voidSort(inta[],intn){
inti,j,k,t;
for(i=0;i<n-1;++i){
k=i;
for(j=i+1;j<n;++j){
if(a[k]>a[j])k=j;
}
if(i!=k){
t=a[k];
a[k]=a[i];
a[i]=t;
}
}
}
intFind(inta[],intn,intx){
intlow=0,high=n-1,mid;
while(low<=high){
mid=(low+high)/2;
if(x==a[mid])returnmid;
elseif(x>a[mid])low=mid+1;
elsehigh=mid-1;
}
return-1;
}
voidShow(inta[],intn){
inti;
for(i=0;i<n;++i){
printf("%d",a[i]);
}
printf(" ");
}
intmain(){
inta[20],i,x,res;
srand((unsigned)time(NULL));
for(i=0;i<N;++i)
a[i]=rand()%N;//每個數都在1--100之間
Show(a,N);
Sort(a,N);
Show(a,N);
x=rand()%100+1;
res=Find(a,N,x);
if(res>=0)printf("數值%d的下標為%d。 ",a[res],res);
elseprintf("數列中沒有找到數值%d。 ",x);
return0;
}
⑹ c語言如何查找字元串
C語言中的標准函數庫中的strchr()函數可以實現查找字元串中的某個字元。
C語言strchr()函數:
查找某字元在字元串中首次出現的位置
頭文件:#include <string.h>
strchr() 用來查找某字元在字元串中首次出現的位置,其原型為:
char * strchr (const char *str, int c);
【參數】str 為要查找的字元串,c 為要查找的字元。
strchr() 將會找出 str 字元串中第一次出現的字元 c 的地址,然後將該地址返回。
注意:字元串 str 的結束標志 NUL 也會被納入檢索范圍,所以 str 的組後一個字元也可以被定位。
【返回值】如果找到指定的字元則返回該字元所在地址,否則返回 NULL。
返回的地址是字元串在內存中隨機分配的地址再加上你所搜索的字元在字元串位置。設字元在字元串中首次出現的位置為 i,那麼返回的地址可以理解為 str + i。
提示:如果希望查找某字元在字元串中最後一次出現的位置,可以使用 strrchr() 函數。
⑺ C語言查找函數
首先,指針默認只有一個地址的長度的空間,存不了那麼多的字元。
其次,傳值和傳地址一塌糊塗,完全就是亂寫么。
scanf的第二個參數是地址,如果本身不是指針則需要取址符。
我給你重寫了算了
#include<stdio.h>
int Retrieve(int array[],int length,int x);/*形參x直接傳值就可以了*/
int main()
{
int *a,x;
int length,i;
scanf("%d",&length);
a = (int)malloc(sizeof(int)*length); /*申請一個內存空間用來存放數據,或者直接用一個大數組也可以*/
⑻ C語言中如何查找字元串
用strstr這個函數
包含文件:string.h
函數名: strstr
函數原型:extern char *strstr(char *str1, char *str2);
功能:找出str2字元串在str1字元串中第一次出現的位置(不包括str2的串結束符)。
返回值:返回該位置的指針,如找不到,返回空指針。
源代碼:
#include<stdio.h>
#include<string.h>//調用string.h中的strstr函數
void main(){
char ch1[255]="abcde";
char ch2[100]="cd";
char* ch;//用於接受返回值
if((ch=strstr(ch1,ch2))==NULL){//說明沒有要找的字元串
printf("-1\n");
}else{//說明找到了那個字元串
printf("%d\n",ch-ch1+1);//cde的地址減去abcde的地址+1
}
}
⑼ C語言查找,要代碼
代碼如下,時間復雜度就需要你自己了
#include<stdio.h>
intmain()
{
charstr[100];
intcnt[26]={0};
inti,j;
intmax;
gets(str);
for(i=0;str[i];i++)
{
if(str[i]>='A'&&str[i]<='Z')
{
str[i]+='a'-'A';
}
if(str[i]>='a'&&str[i]<='z')
{
cnt[str[i]-'a']++;
}
}
max=0;
printf("出現次數統計: ");
for(i=0;i<26;i++)
{
if(cnt[i]>0)
{
printf("%c:%d ",i+'a',cnt[i]);
if(cnt[i]>cnt[max])max=i;
}
}
printf("沒出現的字母有: ");
for(i=0;i<26;i++)
{
if(cnt[i]==0)
{
printf("%c ",i+'a');
}
}
max+='a';
printf("出現次數最多的字母是%c ",max);
for(i=j=0;str[i];i++)
{
if(str[i]==max)continue;
str[j++]=str[i];
}
str[j]=0;
printf("刪除出現最多字母%c後的字元串為:%s ",max,str);
return0;
}
⑽ C語言二分查找區求根
修改你的程序後得到是這樣的
這個在語法上沒有錯了;
#include<stdio.h>
#include<math.h>
void main()
{
printf("方程為x*x*x-x-1=0.");
float m,n,mid;
double b,c,d;
printf("請輸入區間:");
scanf("%f",&m);
scanf("%f",&n);
int s=1;
b=m*m*m-m-1;
c=n*n*n-n-1;
if(b*c>0.00)
printf("該方程在此區間沒有根!");
else if(b*c==0.00)
{
if(b==0.00)
printf("該方程根為%f\n",m);
else if(c==0.00)
printf("該方程根為%f\n",n);
}
else if(b*c<0.00)
{
while(s!=0)
{
mid=(m+n)/2;
d=mid*mid*mid-mid-1;
if(d==0.00)
{
printf("根為%f\n",mid);
s=0;
}
else
if(d*b<0)
{
if(fabs(d-b)<=0.001000)
{
printf("根為%f\n",mid);
s=0;
}
else
{
n=mid;
}
}
else if(d*c<0)
{
if(fabs(d-c)<=0.001000)
{
printf("根為%f\n",mid);
s=0;
}
else
{
m=mid;
}
}
}
}
}
你試試看
不行再跟我M下;