当前位置:首页 » 编程语言 » c语言解决实际问题
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言解决实际问题

发布时间: 2022-04-25 21:35:34

c语言中链表主要应用于哪些实际问题的解决

链表可以解决很多实际问题,比如数据结构课程上讲的多项式运算、求解约瑟夫问题,操作系统原理中的内存管理器实现等等。举一个在Windows通过链表搜索文件的实例,代码如下(vc6.0中编译通过)。

#include<stdio.h>
#include<windows.h>
structDirList{
chartable[256];
DirList*pNext;
};
DirList*first,*newlist,*last;
//加入文件夹链表
voidAddList(char*list)
{
newlist=newDirList;
strcpy(newlist->table,list);
newlist->pNext=NULL;
//假如文件链表为空,那么第一个和最后一个节点都指向新节点
if(first==NULL)
{
first=newlist;
last=newlist;
}
//不为空,则原来最后一个节点指向新节点
else
{
last->pNext=newlist;
last=newlist;
}
}
//查找文件,并把找到的文件夹加入文件夹链表
voidFindFile(char*pRoad,char*pFile)
{
charFileRoad[256]={0};
charDirRoad[256]={0};
charFindedFile[256]={0};
charFindedDir[256]={0};
strcpy(FileRoad,pRoad);
strcpy(DirRoad,pRoad);
strcat(DirRoad,"\*.*");
WIN32_FIND_DATAfindData;
HANDLEhFindFile;
hFindFile=FindFirstFile(DirRoad,&findData);
if(hFindFile!=INVALID_HANDLE_VALUE)
{
do
{
if(findData.cFileName[0]=='.')
continue;
//假如是文件夹,则假如文件夹列表
if(findData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
{
strcpy(FindedDir,pRoad);
strcat(FindedDir,"\");
strcat(FindedDir,findData.cFileName);
//加入文件夹列表
AddList(FindedDir);
memset(FindedDir,0x00,256);
}
//继续查找
}while(FindNextFile(hFindFile,&findData));
}
strcat(FileRoad,"\");
strcat(FileRoad,pFile);
//查找要查找的文件
hFindFile=FindFirstFile(FileRoad,&findData);
if(hFindFile!=INVALID_HANDLE_VALUE)
{
do
{
strcpy(FindedFile,pRoad);
strcat(FindedFile,"\");
strcat(FindedFile,findData.cFileName);
//输出查找到的文件
printf("%s ",FindedFile);
memset(FindedFile,0x00,256);
}while(FindNextFile(hFindFile,&findData));
}
}
intSeachFile(char*Directory,char*SeachFile)
{
DirListNewList;
strcpy(NewList.table,Directory);
NewList.pNext=NULL;
last=&NewList;
first=&NewList;
while(true)
{
DirList*Find;
//假如链表不为空,提取链表中的第一个节点,并把第一个节点指向原来第二个
if(first!=NULL)
{
//提取节点
Find=first;
//并把第一个节点指向原来第二个
first=first->pNext;
//在提取的节点的目录下查找文件
FindFile(Find->table,SeachFile);
}
//为空则停止查找
else
{
printf("文件搜索完毕 ");
return0;
}
}
return0;
}
intmain(intargc,char*argv[])
{
if(argc!=3){
printf("程序名文件目录要搜索的文件名 ");
return0;
}
SeachFile(argv[1],argv[2]);
return0;
}

执行效果如下,测试搜索c:windows目录中的记事本程序notepad.exe。

㈡ c语言做一个小项目(或称大作业),解决一个实际问题。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void xieruwenjian(struct txgl stu[],int count,char wenjian[]);
void huanyuan(struct txgl stu[],char wenjian[]);
void txxxlr(struct txgl stu[],int &count);
void xianshi(struct txgl stu[],int count);
void chaxun(struct txgl stu[],int count);

struct txgl
{
char xinming[10];
char di[30];
int dianhua;
int youbian;
};
void main()
{

printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\t ----------------------------------------------------- \n");
printf("\t ----------------------------------------------------- \n");
printf("\n");
printf("\t \n");
printf("\t \n");
printf("\t 欢迎进入通讯管理系统 \n");
printf("\t \n");
printf("\t \n");

printf("\t ----------------------------------------------------- \n");
printf("\t ----------------------------------------------------- \n");
printf("\n");
printf("\n");
printf("\n");

system("PAUSE"); //清屏操作
system("CLS");
int a; //选择使用
int count=0; //学生的个数
char wenjian[]={"stu.txt"};
struct txgl stu[100];
//huanyuan(stu,wenjian);
while(1)
{

printf("1 通讯的信息录入\n");
printf("2 写入文件\n");
printf("3 显示所有信息\n");
printf("4 查询\n");
printf("0 退出\n");
printf("请输入你的选择:");
scanf("%d",&a);
switch(a)
{
case 1:txxxlr(stu,count);break;
case 2:xieruwenjian(stu,count,wenjian);break;
case 3:xianshi(stu,count);break;
case 4:chaxun(stu,count);break;
case 0: exit(0);
default:{
printf("\n你输入的选项有误!请按照提示输入\n");
printf("\n---------------------------------------------------\n");
printf("\n请选择....\n");
printf("\n---------------------------------------------------\n");
}
}
}
}

void xieruwenjian(struct txgl stu[],int count,char wenjian[])
{
FILE *fp;
if(count<=0)
{
printf("\n没有任何信息无法写入文件\n");
printf("\n---------------------------------------------------\n");
printf("\n请选择....\n");
printf("\n---------------------------------------------------\n");
return;
}
fp=fopen(wenjian,"w");
for(int i=0;i<count;i++)
{
fprintf(fp,"%s","姓名:");
fprintf(fp,"%s",stu[i].xinming);
fprintf(fp,"%s","地址:");
fprintf(fp,"%s",stu[i].di);
fprintf(fp,"%s","电话:");
fprintf(fp,"%d",stu[i].dianhua);
fprintf(fp,"%s","邮编:");
fprintf(fp,"%d",stu[i].youbian);
fprintf(fp,"\n");
}
fclose(fp);
printf("\n文件写入成功\n");
printf("\n---------------------------------------------------\n");
printf("\n请选择....\n");
printf("\n---------------------------------------------------\n");
}
void huanyuan(struct txgl stu[],char wenjian[])
{
int i=0;
FILE *fp;
fp=fopen(wenjian,"r");
if(fp==NULL)
printf("没有任何信息读取\n");
else
{
while(!feof(fp)) //feof是文件结束标志的文件,feof(fp)有两个返回值:如果遇到文件结束,函数feof(fp)的值为1,否则为0
{
//fscanf(fp,"%s","姓名:");
fscanf(fp,"%s",stu[i].xinming);
printf("%s\n",stu[i].xinming);
//fscanf(fp,"%s","地址:");
fscanf(fp,"%s",stu[i].di);
printf("%s\n",stu[i].di);
//fscanf(fp,"%s","电话:");
fscanf(fp,"%d",&stu[i].dianhua);
printf("%d\n",stu[i].dianhua);
//fscanf(fp,"%s","邮编:");
fscanf(fp,"%d",&stu[i].youbian);
printf("%d\n",stu[i].youbian);
i++;
//fprintf(fp,"\n");
printf("文件读出成功\n");
}
}
fclose(fp);

}

void txxxlr(struct txgl stu[],int &count)
{
char a;//选择退出使用
printf("\n录入的通讯信息,包括,姓名,地址,电话,邮编\n");
do{
printf("\n请输入%d个人的姓名:",count+1);
scanf("%s",stu[count].xinming);
printf("\n请输入%d个人的地址:",count+1);
scanf("%s",stu[count].di);
printf("\n请输入%d个人的电话:",count+1);
scanf("%d",&stu[count].dianhua);
printf("\n请输入%d个人的邮编:",count+1);
scanf("%d",&stu[count].youbian);
count++;
printf("\n请问你还要输入吗?按y确认,按n取消\n");
scanf("%s",&a);
}while(a=='y');
printf("\n---------------------------------------------------\n");
printf("\n请选择....\n");
printf("\n---------------------------------------------------\n");

}
void xianshi(struct txgl stu[],int count)
{
int i;
if(count<=0)
{
printf("没有任何数据不能显示\n");

printf("\n---------------------------------------------------\n");
printf("\n请选择....\n");
printf("\n---------------------------------------------------\n");
return;
}
for(i=0;i<count;i++)
{
printf("\n\n\n");
printf("第%d个人的资料\n",i);
printf("姓名:");
printf("%s\n",stu[i].xinming);
printf("地址:");
printf("%s\n",stu[i].di);
printf("电话:");
printf("%d\n",stu[i].dianhua);
printf("邮编:");
printf("%d\n",stu[i].youbian);
printf("\n");
}
printf("\n---------------------------------------------------\n");
printf("\n请选择....\n");
printf("\n---------------------------------------------------\n");
}
void chaxun(struct txgl stu[],int count)
{
char xm[10];
int i;
if(count<=0)
{
printf("没有任何信息不能实现查询\n");
printf("\n---------------------------------------------------\n");
printf("\n请选择....\n");
printf("\n---------------------------------------------------\n");
return;
}
printf("请按姓名查询,请输入姓名:\n");
scanf("%s",xm);
for(i=0;i<count;i++)
{
if(strcmp(xm,stu[i].xinming)==NULL) break;
}

printf("\n查询到%s的信息如下:\n",xm);
printf("姓名:%s\n",stu[i].xinming);
printf("地址:%s\n",stu[i].di);
printf("电话:%d\n",stu[i].dianhua);
printf("邮编:%d\n",stu[i].youbian);
printf("\n---------------------------------------------------\n");
printf("\n请选择....\n");
printf("\n---------------------------------------------------\n");
}

㈢ 结合自己的工作找出一个可以用C语言编程解决的实际问题,并介绍解决问题的思路。

输出的时候一个字符一个字符的输出,并记住当前输出的值。每个字符输出前判断是不是空格,是的话,后一个也是空格就不输出,否则输出。for(i=0;str[i];i++){if((str[i]!='')||(str[i+1]!='')){printf("%c",str[i]);}}

㈣ 用C语言解决一个实际问题(不要太长)

约瑟夫环(很有名的数学问题)

已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。

void JOSEPHUS(int n,int k,int m) //n为总人数,k为第一个开始报数的人,m为出列者喊到的数
{
/* p为当前结点 r为辅助结点,指向p的前驱结点 list为头节点*/
LinkList p,r,list;

/*建立循环链表*/
for(int i=0,i<n,i++)
{
p=(LinkList)malloc(sizeof(LNode));
p->data=i;
if(list==NULL)
list=p;
else
r->link=p;
r=p;
}
p>link=list; /*使链表循环起来*/
p=list; /*使p指向头节点*/

/*把当前指针移动到第一个报数的人*/
for(i=0;i<k;i++)
{
r=p;
p=p->link;
}

/*循环地删除队列结点*/
while(p->link!=p)
{
for(i=0;i<m;i++)
{
r=p;
p=p->link;
}
r->link=p->link;
printf("被删除的元素:%4d ",p->data);
free(p);
p=r->link;
}
printf("\n最后被删除的元素是:%4d",P->data);
}

㈤ c语言实际问题中的问题

一、C语言规定总是从main()开始执行的(这个函数也叫“主函数”)。因此,你发来的题目中的(1、6、8)叙述都是错误的,都应该选择F。
二、第2题中,C语言对其数据在内存中所占用的实际字节数,随着程序中声明的数据类型以及数据的多少而变化,C语言本身并没有明确规定。这题应该选F。
三、第3题,C语言中强制类型转换,仅对转换的语句有效,而不会改变所转换变量的原有数据类型,这是正确的,应该选T。
四、第4题,i=8,j=10;printf("%d,%d,%d,%d\n",i,j,++i,j++);实际上是一个程序执行类题目,执行这一句时,先取得ij变量的值,其中有一个++i(先自增),一个j++(后自增),先自增的i先加上1,也就是i=8+1=9,而后自增的j在打印之后再加1,所以打印时仍是j=10。所以打印出来是:9 10 9 10。这是正确的。
五、第5题“C语言中放在“”之间的内容都被视为字符串的一个构成部分,都可以在屏幕上原样显示”的说法是错误的。举一个例子就可以了:print("%d",8);是打印不出来%d的,它只能打印出来8。所以它是错的。
六、第7题,设x、t均为int型变量,则执行语句"x = 10;t = x && x >10;"后,t的值为,这个题目好似没有写完,成了填空题了,现在来看计算过程,t = x && x >10,根据计算的优先级,>号是6级,&&是11级,先计算x >10,因为x=10,故x>10是不成立的,所以它的值是0,第二步再计算x && 0=10 && 0=0。t的值最后应该是0。
希望对你有所帮助。

㈥ 如何高效的学好C 语言啊

美河提供.C.精髓.软件工程方法.pdf,免费下载

链接:https://pan..com/s/17Q0JIVCI98FVDaRaisgA3A

提取码:ikzw

C++是一种大型而复杂的语言,其设计目标是作为一种通用的工程语言。 本书分4个部分共19章,不仅详细介绍了C++语言的基本语法,而且讲解了 C++的高级应用(如虚函数、模板、异常等),并通过大量详尽的代码表达了有关软件工程及维护的观点。

㈦ 用C语言解决问题

你可以用一个二维数组代替一维数组:
int num[1000][20],i,j, lenth=20;
int num1[20] = { 1, 2, 3, 4, 5, 5, 6, 1, 4, 5, 5, 7, 1, 5, 3, 8, 3, 5, 9, 1 };
初值 for (i=0;i<lenth;i++) num[0][i]=num1[i];
双重循环语句计算:
for (j=1;j<=1000;j++) for (i=0;i<lenth;i++) num[j][i]=num[j-1][i] + 1;
输出也类似,双重循环。
-----
节省内存方法:
只声明 int num1[20],num2[20]; 初始化 num1[i] 数组
做循环 500 次:
{ 1推算2 : add(num1,num2,lenth);

输出 num1[i] 数组
2推算1: add(num2,num1,lenth);
输出 num2[i] 数组

} 完毕。

㈧ C语言解决实际问题

卡车耗油为1升/公里,那么有几公里就需要多少油对么?那为什么还有“最少耗油量”这种说法呢?

另外,input和output的各行分别是什么呀?是我理解错了么。。。

㈨ c语言可以解决哪些实际问题,及思路

摘要 主要是学习思维,C语言是一门很好的功课,在里面的算法,流程图的描绘,可以帮助我们很好的入门,同时锻炼我们的逻辑