在c语言中的遍历函数 c语言层序遍历

c语言如何用函数指针利用循环结构遍历多个函数

#include stdio.h

目前创新互联公司已为近千家的企业提供了网站建设、域名、虚拟主机、网站改版维护、企业网站设计、宝山网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

#define TYPE int

// 下面是加减乘除 4 个函数

TYPE add(TYPE a, TYPE b){return a+b;}

TYPE sub(TYPE a, TYPE b){return a-b;}

TYPE muti(TYPE a, TYPE b){return a*b;}

TYPE div(TYPE a, TYPE b){return a/b;}

int main(int argc, char *argv[])

{

// 函数指针数组,一共有 4 四个元素,分别是:

// 加减乘除 4 个函数的函数指针

// 你可以自己再添加其他函数,而不用修改代码。

TYPE (*functions[])(TYPE, TYPE) = {add,sub,muti,div};

// 函数指针数组中的元素个数,这里是 4 个。

unsigned int n = sizeof(functions)/sizeof(functions[0]);

// 要进行运算的数字

TYPE a = 10, b = 5 , result;

int i=0;

for(i=0; in; i++)

{// 调用函数指针数组里面的所有函数。

result = functions[i](a,b);

printf("%d\n", result);

}

return 0;

}

C语言的遍历算法

思路1:

写出所有24种4个数的排列,存到一个数组里,假如数组是P[24][4];

那么可以

for (i = 0; i 24; i++)

for (j = 0; j 24; j++)

for (k = 0; k 24; k++)

三层循环,P[i],P[j],P[k]分别是矩阵的三个列

思路2:

利用dfs递归枚举

int used[3][4];/*这个数组存放三个列中0~3这四个数是否已在这一列中出现过,需要提前清零*/

int mat[3][4];/*要枚举的矩阵*/

void dfs(int col, int row)/*col表示现在已经搜索到哪一列(从0开始编号),row表示这一列已经填了几行*/

{

int i;

if (col == 2 row == 4)

{

....../*运行到这里的时候,mat就是枚举到的一个矩阵*/

return;

}

if (row == 4)

{row = 0; col++;}

for (i = 0; i 4; i++)

if (!used[col][i])

{

used[col][i] = 1;

mat[col][row] = i;

dfs(col, row + 1);

used[col][i] = 0;

}

return;

}

调用的时候调用dfs(0,0)

c语言中,对二维数组的所有元素遍历一次,有几种循环方式,为什么?

1,行优先和列优先

有三种循环方式:for循环,do-while循环

、while循环,

字符串之间的比较,它有专门的字符串比较函数:strcmp函数.

2,不能用运算关系符

C语言遍历所有文件的函数!

#include stdio.h

#include dos.h

#include errno.h

#include io.h

#include dirent.h

#include dir.h

#include string.h

#include sys\stat.h

#include "pm03a.h"

void main(int argc,char* argv[])

{

//printf("Number %d\n",ConfirmFileAttrib(argv[1]));

GetDirectory(argv[1]);

printf("\nSearch Over.\n");

}

//------------------------------------------------------------------

//pm03a.h

//------------------------------------------------------------------

void GetDirectory(char *DirectoryName);

int ConfirmFileAttrib(char* filename);

char *GetCurrentPath();

char* GetFullFileName(char *filename);

char *WillDeleteFile(char *FileName);

//--------------------------------------------------------

//--------------- 获得文件属性 ---------------------------

//--------------------------------------------------------

int ConfirmFileAttrib(char* filename)

{

int temp=0;

int attrib=(_rtl_chmod(filename,0));

if(attrib==-1)

{

switch(errno)

{

case ENOENT:

//printf("%s Path or file not found.\n",filename);

temp=0;

break;

case EACCES:

//printf("Permission denied.\n");

temp=-1;

break;

default:

//printf("Error number: %d", errno);

temp=-2;

break;

}

}

else

{

if(attrib FA_RDONLY)

{

temp=1;

//printf("%s is read-only.\n", filename);

}

if(attrib FA_HIDDEN)

{

temp=2;

//printf("%s is hidden.\n", filename);

}

if(attrib FA_SYSTEM)

{

temp=3;

//printf("%s is a system file.\n", filename);

}

if(attrib FA_DIREC)

{

temp=4;

//printf("%s is a directory.\n", filename);

}

if (attrib FA_ARCH)

{

temp=5;

//printf("%s is an archive file.\n", filename);

}

}

return temp;

}

//--------------------------------------------------------

//--------------------------------------------------------

//--------------- 获取目录流 -----------------------------

//--------------------------------------------------------

void GetDirectory(char *DirectoryName)

{

DIR* Directory_Point;

struct dirent *entry;

bool DirControl;

if((Directory_Point=opendir(DirectoryName))==NULL)

{

printf("Error opening directory!\n");

return;

}

else

{

if(strcmp(DirectoryName,"..")==0)

{

return;

}

if(strcmp(DirectoryName,".")==0)

DirControl=true;

else

DirControl=false;

chdir(DirectoryName);

//char *filename=DirectoryName;

//int k=creat(strcat(filename,".txt"),S_IWRITE);

while(bool(entry=readdir(Directory_Point)))

{

if(ConfirmFileAttrib(entry-d_name)==5) // 确定为文件属性

{

// 文件过滤

WillDeleteFile(entry-d_name);

}

if(ConfirmFileAttrib(entry-d_name)==4) // 确定为目录属性

{

if(strcmpi(entry-d_name,"..")==0||strcmpi(entry-d_name,".")==0)

{

continue;

}

else

{

//printf("\n%s is direct\n\n",entry-d_name);

GetDirectory(entry-d_name);

}

}

}

if(!DirControl==true)

chdir("..");

closedir(Directory_Point);

}

}

//--------------------------------------------------------

//--------------------------------------------------------

//---------- 判断文件类型以备过滤 ------------------------

//--------------------------------------------------------

char* GetFullFileName(char *filename)

{

char *FullFilename=GetCurrentPath();

if(strlen(FullFilename)=3)

{

strcat(FullFilename,filename);

}

else

{

strcat(FullFilename,"\\");

strcat(FullFilename,filename);

}

return FullFilename;

}

char *GetCurrentPath()

{

char path[1024]="";

strcpy(path, "X:\\"); /* fill string with form of response: X:\ */

path[0] = 'A' + getdisk(); /* replace X with current drive letter */

getcurdir(0, path+3); /* fill rest of string with current directory */

return path;

}

char *WillDeleteFile(char *FileName)

{

int len;

for(len=strlen(FileName);len=0;len--)

{

if(FileName[len]=='.')

break;

}

char* Retname;

int s=-1;

for(int i=len;i=strlen(FileName);i++)

{

Retname[s+=1]=FileName[i];

}

int i=-1;

if(Retname[1]=='~')i=0;

if(strcmpi(Retname,".bak")==0)i=0;

if(strcmpi(Retname,".obj")==0)i=0;

if(strcmpi(Retname,".tds")==0)i=0;

if(strcmpi(Retname,".dcu")==0)i=0;

if(strcmpi(Retname,".tmp")==0)i=0;

if(strcmpi(Retname,".ilk")==0)i=0;

if(strcmpi(Retname,".pch")==0)i=0;

if(strcmpi(Retname,".pdb")==0)i=0;

if(strcmpi(Retname,".tlb")==0)i=0;

if(strcmpi(Retname,".idb")==0)i=0;

if(strcmpi(Retname,".pdb")==0)i=0;

if(strcmpi(Retname,".r$p")==0)i=0;

if(strcmpi(Retname,".OBR")==0)i=0;

if(strcmpi(Retname,".mbt")==0)i=0;

if(strcmpi(Retname,".mrt")==0)i=0;

if(strcmpi(Retname,".csm")==0)i=0;

if(i==0)

{

remove(GetFullFileName(FileName));

printf("%s delete\n",GetFullFileName(FileName));

}

return Retname;

}

C语言中,对二维数组所有元素遍历一次,有几种循环方式?为什么?

1、行优先和列优先

有三种循环方式:FOR循环、DO-WHILE循环 、WHILE循环,字符串之间的比较,它有专门的字符串比较函数:strcmp函数。

2、不能用运算关系符

扩展资料:

二维数组A[m][n],这是一个m行,n列的二维数组。设a[p][q]为A的第一个元素,即二维数组的行下标从p到m+p,列下标从q到n+q,按“行优先顺序”存储时则元素a[i][j]的地址计算为:

LOC(a[i][j]) = LOC(a[p][q]) + ((i − p) * n + (j − q)) * t

按“列优先顺序”存储时,地址计算为:

LOC(a[i][j]) = LOC(a[p][q]) + ((j − q) * m + (i − p)) * t

存放该数组至少需要的单元数为(m-p+1) * (n-q+1) * t 个字节。

参考资料来源:

百度百科-二维数组

C语言遍历目录中的文件

使用dir.h库的两个函数即可:findfirst和findnext。

首先调用findfirst函数查找是否有满足条件的某目录文件,如果返回值非0则表示找不到返回。

如果findfirst返回值为0,则循环调用findnext函数,根据返回值,如果为0,结束循环,遍历结束。否则循环调用findnext即可遍历,直到返回非0值即可。

当然,这两个函数需要定义一个结构体来存储函数返回的数据。结构体如下:

struct

ffblk

{

char

ff_reserved[21];

/*DOS保留字*/

char

ff_attrib;

/*文件属性*/

int

ff_ftime;

/*文件时间*/

int

ff_fdate;

/*文件日期*/

long

ff_fsize;

/*文件长度*/

char

ff_name[13];

/*文件名*/

}

将结构体中的ff_name[13]显示出来即可。


当前标题:在c语言中的遍历函数 c语言层序遍历
新闻来源:http://lszwz.com/article/hehcso.html

其他资讯

售后响应及时

7×24小时客服热线

数据备份

更安全、更高效、更稳定

价格公道精准

项目经理精准报价不弄虚作假

合作无风险

重合同讲信誉,无效全额退款