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下;