當前位置:首頁 » 編程語言 » 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語言是一門很好的功課,在裡面的演算法,流程圖的描繪,可以幫助我們很好的入門,同時鍛煉我們的邏輯