c課程設計有程序注釋
A. C語言課程設計,求高手幫我解釋一下這個代碼啊,打上注釋!再給個流程圖。給150分啊
哎,累死了。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
charnum[10][6]={"zero","one","two","three","four","five","six","seven","eight","nine"};
intparse(char*input)//就3中操作數要麼是+號,要麼是=號要麼是要運算的數據【英文標示的】
{
inti=0;intmatch=0;
for(i=0;i<10;i++)
{
match=strcmp(input,num[i]);//比較用戶輸入和num數組中的值比如three是第3個元素,輸入three剛好能返回3
if(match==0)returni;
}
return-1;
}//+,=返回-1數據返回對應的十進制數
structTStack//棧的結構體定義
{
intdata;
structTStack*next;
};
structTStack*root=0;//全局變數,棧的根節點
voidstack_push(intdata)//元素入棧
{
structTStack*x=(structTStack*)malloc(sizeof(structTStack));//實例化一個節點
x->data=data;//給節點賦值
x->next=root;//新節點指向根
root=x;//根從新賦值為根保證跟都指向最後一個元素
}
intstack_pop(int*data)//彈出棧頂元素並用data返回,棧非空返回1否則返回0
{
structTStack*x=root;//x=跟節點
if(!x)return0;//如果棧為空就返回0
root=x->next;//出棧後棧頂指針下移
*data=x->data;//用data返回棧頂元素的值
free(x);//釋放棧頂元素的內存空間
return1;//返回操作成功
}
intSumFromStack(void)//把棧內所有的英文數據換成一個十進制數據。
{
intx=0,y=0,z=0,sum=0;
inttens[]={1,10,100,1000,10000};
do
{
x=stack_pop(&y);//y得到棧頂元素,x為返回狀態
if(x==0)break;//棧中元素為空,就退出
sum+=y*tens[z++];//sum用來得到一個操作數例如threefive=35
}while(z<5);/*最大計算到五位數*/
returnsum;
}
voidprint(intC)//給定一個數值返回對應的英文形式如:256-->twofivesxi
{
charstr[256]="";size_ti=0;
sprintf(str,"%d",C);//c的%d形式存到str中比如C=258那麼str[0]='2',str[1]='5',str[2]='8'
for(i=0;i<strlen(str);i++)
printf("%s",num[str[i]-'0']);//根據字元與『0』的距離列印出數字對應的num中的字元串。
printf(" ");
}
intmain(void)
{
charstr[256]="";intA=0,B=0,x=0;//A,B用來記錄2個要加的數的十進制x用來記錄輸入的是數據還是+,=號
do
{
A=0;B=0;root=0;x=0;
for(;;)
{
str[0]=0;
scanf("%s",str);//獲取字元串的輸入
x=parse(str);//根據輸入的字元串轉換成對應進制數
if(x<0)//parse返回-1有可能是+號,有可能是=號
{
if(str[0]=='+')A=SumFromStack();//遇到+號,那麼肯定+左邊的數據全入棧,可以用A得到一個翻譯成十進制的運算數
if(str[0]=='=')
{
B=SumFromStack();//遇到=號那麼肯定第二個家數也全部入棧了,B得到一個翻譯成10進制的元算數據
break;
}
}
else//否則是運算數據那麼就入棧
{
stack_push(x);
}
}
if(A||B)print(A+B);//如果A,B不同時為0,那麼用print函數列印A+B對應的特殊編碼字元如234->towthreefour
}while(A||B);//一旦A,B同時為0就退出
system("pause");
return0;
}
流程圖中寫出了詳細的函數調用和程序思路。
樓主如果不給出程序的話,我自己動手寫還方便點。人家的代碼看著蛋疼。好在他的思路還是清晰好理解的。流程圖附下,樓主趕緊去准備課程設計吧。
【樓主好好珍惜啊,注釋也是一句一句寫的,流程圖一個一個在visio裡面話的,看著你是真的想學東西,所以我弄的很詳細。不是為了你的分數來的,而是我對程序的興趣】
B. c語言課程設計(詞法分析器)要注釋跟報告
以前寫過,現在忘了~~
C. 跪求一c語言課程設計啊,最好是原創的,最好後,面有注釋。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
intcompute(intm,intn,charop)
{
switch(op){
case'+':returnm+n;
case'-':returnm-n;
}
}
intgenExpression(char*exp)
{
intm,n;
charc,op[2]={'+','-'};
srand((unsigned)time(NULL));
m=rand()%10+1;//隨機生成兩個操作數
n=rand()%10+1;
c=op[rand()%2];//隨機生成運算符
if(c=='-'&&m<n){//如果被減數小於減數,兩個數交換
m^=n;
n^=m;
m^=n;
}
sprintf(exp,"%d%c%d=?",m,c,n);
returncompute(m,n,c);
}
main()
{
charexp[20];
inti,n,result,answer,right=0;
printf("請輸入題數:");
scanf("%d",&n);
for(i=0;i<n;i++){
result=genExpression(exp);
puts(exp);
scanf("%d",&answer);
if(result==answer){
printf("正確! ");
right++;
}
elseprintf("錯誤! ");
}
printf("你最終的分數是:%d ",100*right/n);
return0;
}
D. 哪位大蝦,幫我寫一下C語言程序詳細注釋
不過你要每句都解釋的話。。。真的就要100分。。都不一定有人來弄的。。。你最好是找出你不懂得地方,讓別人來解釋吧。。。。不然工作量可比寫一個程序還麻煩了。。。
E. 求給C語言程序加註釋
#include<stdio.h> //標准輸入輸出庫所在的頭文件
//自定義函數聲明
void add(int *m,int *m1,int *m2,int r,int c); //矩陣加法
void sub(int *m,int *m1,int *m2,int r,int c); //矩陣減法
void mult(int *m,int *m1,int *m2,int r,int p,int c); //矩陣乘法
void disp(int *m,int r,int c); //列印數組數據(矩陣里的數據)
//主測試函數
void main()
{
int a[3][4]={{4,3,5,2},{5,1,7,3},{2,7,6,2}};
int b[3][4]={{2,4,4,-7},{4,2,5,-8},{7,-3,-4,2}};
int c[4][3]={{5,4,4},{1,3,1},{4,4,2},{7,1,3}};
int d[3][4]={0};
int e[3][4]={0};
int f[3][3]={0};
printf("\nA(3x4):\n");
disp(a[0],3,4); //顯示矩陣a
printf("\nB(3x4):\n");
disp(b[0],3,4); //顯示矩陣b
add(d[0],a[0],b[0],3,4); // 計算矩陣 a + b,並將結果存到d中
printf("\nD(3x4)=A+B:\n");
disp(d[0],3,4); //顯示a+b的結果(即d中的數據)
sub(e[0],a[0],b[0],3,4);// 計算矩陣 a - b,並將結果存到e中
printf("\nE(3x4)=A-B:\n");
disp(e[0],3,4);//顯示a-b的結果(即e中的數據)
printf("\nA(3x4):\n");
disp(a[0],3,4); // 顯示矩陣a
printf("\nC(4x3):\n");
disp(c[0],4,3); //顯示矩陣c
mult(f[0],a[0],c[0],3,4,3); //計算矩陣a*c 並將結果存到f中
printf("\nF(3x3)=A*C:\n");
disp(f[0],3,3); //顯示a*c的結果(即f中的數據)
}
//函數定義
/*
*****函數功能:兩個矩陣進行加法運算 C = A+B
*****參數: m 指向運算結果存放的二維數組(即矩陣) C的首地址
***** m1為矩形A的首地址,m2為矩形B的首地址
***** r 為矩陣的行數, c為矩陣的列數
*(m+i*c+j) = *(m1+i*c+j) + *(m2+i*c+j);這個表示將矩陣A的第i行j列的數據 與 矩陣B的第i行j列的數據 相加
然後將結果賦值給矩陣C的第i行j列數據
*(m1+i*c+j) :m1+i*c+j 這個表示指向矩陣A的第i行第j列的數據的指針,則 *(m1+i*c+j) 就表示矩陣A的第i行第j列的數據
*(m2+i*c+j) :m2+i*c+j 這個表示指向矩陣B的第i行第j列的數據的指針,則 *(m2+i*c+j) 就表示矩陣B的第i行第j列的數據
*(m+i*c+j) : m+i*c+j 這個表示指向矩陣C的第i行第j列的數據的指針,則 *(m+i*c+j) 就表示矩陣C的第i行第j列的數據
這里是用指針實現的,
*(m+i*c+j) = *(m1+i*c+j) + *(m2+i*c+j);
等價於
c[i][j] = a[i][j] + b[i][j];
*/
void add(int *m,int *m1,int *m2,int r,int c) //
{
int i,j;
for(i=0; i<r; i++)
for(j=0; j<c; j++)
*(m+i*c+j) = *(m1+i*c+j) + *(m2+i*c+j);
}
//注釋與上邊加法類似
void sub(int *m,int *m1,int *m2,int r,int c) //兩個矩陣之間的減法運算
{
int i,j;
for(i=0; i<r; i++)
for(j=0; j<c; j++)
*(m+i*c+j) = *(m1+i*c+j) - *(m2+i*c+j);
}
/*注釋與上邊類似,因為矩陣乘法運算公式較為復雜一些,可自行對照矩陣乘法運算公式
如矩陣c = a * b
for(k=0; k<p; k++)
t += *(m1+i*p+k) * *(m2+k*c+j); //表示將m1的第i行k列的數據 與 m2的第k行j列的數據相乘 ,
//並將p (k的值從0到p) 次結果進行累加
*(m+i*c+j)=t; //最後將這個累加的結果賦值給矩陣c的第i行第j列的數據
*/
void mult(int *m,int *m1,int *m2,int r,int p,int c)//兩個矩陣之間的乘法運算
{
int i,j,k,t;
for(i=0; i<r; i++)
for(j=0; j<c; j++)
{
t=0;
for(k=0; k<p; k++)
t += *(m1+i*p+k) * *(m2+k*c+j);
*(m+i*c+j)=t;
}
}
//顯示列印矩陣中的數據
void disp(int *m,int r,int c)
{
int i,j;
for(i=0; i<r; i++)
{
for(j=0; j<c; j++)
printf("%6d",*(m+i*c+j));
printf("\n");
}
}
F. C語言課程設計 車輛管理系統代碼 最好有注釋
#include<stdio.h>
#include<string.h>
typedefstruct{
intqq;
charstring[1024];
}C語言;
intmain(){
C語言c={563337217,"計算機C語言課程設計有償助攻,看清楚了有償助攻再加好專友! 總有窮逼和傻逼想不屬花錢讓爹給你白寫,你TMD以為你是誰啊。 想讓爹給你白寫的滾一邊去,省的挨罵!"};
printf("QQ:%d %s ",c.qq,c.string);
return0;
}
G. C語言程序設計 源代碼+注釋
採用廣度優先搜索即可,程序如下:
char A[64][64]= {"..###","#....","#.#.#","#.#.#","#.#.."};//迷宮,A,R,C這里預設,實際請改成輸入
int M[64][64] = {0}, //標記走過的點
R = 5, C = 5;
//判斷點(x,y)是否可達
bool pass(int x, int y)
{
return x>=0 && x<=R && y>=0 && y<=C
&& A[x][y]=='.' && !M[x][y];
}
//廣度搜索
int steps()
{
struct{ int x, y, depth;}Queue[256], t; //隊列
int front = 0, rear = 0, //頭尾指標
di[4][2] = {{1,0},{0,-1},{-1,0},{0,1}}; //方向數組
int i, new_x, new_y;
Queue[rear].x = 0; //初始點入隊
Queue[rear].y = 0;
Queue[rear++].depth = 1;
M[0][0] = 1; //標記該店
while(front != rear)
{
t = Queue[front++]; //出隊
for(i=0; i<4; i++) //遍歷每個方向
{
new_x = t.x+di[i][0]; //產生新的坐標
new_y = t.y+di[i][1];
if(pass( new_x, new_y)) //若可達
{
if(new_x==R-1 && new_y==C-1)return t.depth+1; //結束條件
//入隊
Queue[rear].x = new_x;
Queue[rear].y = new_y;
Queue[rear++].depth = t.depth+1;
M[new_x][new_y] = 1; //同樣標記入隊的點
}
}
}
return -1; //無法走到終點,返回-1
}
int main()
{
printf("%d", steps());
}
H. 求一份簡單點的c語言的課程設計 最好有注釋 急急急
你是想要個代碼吧
我給你
If:用法
#include<stdio.h>
int main()
{
intsd;
scanf("%d",&sd);
if(sd>60)//判斷if大於60則輸出1,不大於60則執行else if
{
printf("速度過高\n");//1
}
elseif(sd<60)//判斷sd小於60則輸出2,不大於則輸出else
{
printf("速度不高\n");//2
}
else
{
printf("速度60\n");
}
return0;
}
問號表達式
#include <stdio.h>
int main()
{
inti;
scanf("%d",&i);
i=(i<5?1:2);
printf("%d",i);
}
Switch:語句用法
#include <stdio.h>
int main()
{
inti;
scanf("%d",&i);
switch(i)//括弧表示判斷i
{
case1://若i符合此條件則輸出
printf("1");
break;//執行遇見break則停止,若無遇見則從符合條件處一直往後執行輸出
case2: //若i符合此條件則輸出
printf("2");
break;//執行遇見break停止,若無遇見則從符合條件處一直往後執行輸出
default://若i不符合上述條件則輸出
printf("3");
break;//執行遇見break停止,若無遇見則從符合條件處一直往後執行輸出
}
return0;
I. C語言課程設計,二叉樹,源程序已給出,求三種便利程序和注釋以及流程圖!
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
struct tree //定義結構體tree
{
char info;
struct tree *left,*right; //定義左樹結點指針和右樹結點指針
};
//聲明函數
struct tree *create_btree(struct tree *root,struct tree *r,char info);
struct tree *search_btree(struct tree *root,char key);
void print_btree(struct tree *r,int l);
void pretra(struct tree *head);
void midtra(struct tree *head);
void afttra(struct tree *head);
main ()
{
char s[100],c,key=' ' ;
struct tree *root=0 ;
do
{
printf("Enter a letter:");
gets(s);
//下面這個條件是我添加的,如果沒有這個條件最後會多一個info為NULL也就是0的值,因為是先gets(s)->賦值,最後才判斷*s是否為空
if(*s==0)
break;
if (!root)
root=create_btree(root,root,*s);
else
create_btree(root,root,*s);
}while(*s) ;
//printf("%d",root->left);
print_btree(root,0);
printf("前序遍歷:\n");
pretra(root);
printf("\n");
printf("中序遍歷:\n");
midtra(root);
printf("\n");
printf("後序遍歷:\n");
afttra(root);
printf("\n");
key='1';
while (key)
{
printf("Enter a key to find:");
scanf("%s",&c);
root=search_btree(root,c);
printf("press to continue\n");
}
} /* Btree.C 結束 */
//創建二叉樹,實際上創建的是一個有序二叉樹
struct tree *create_btree(struct tree *root,struct tree *r,char info)
{
if (r ==0 ) //也就是r==NULL
{
//r=new(struct tree);// same as function: malloc(sizeof())
r=(struct tree *)malloc(sizeof(struct tree)); //我這用前面那句老是編譯不過
if ( r == 0) //如果內存申請失敗,就報錯然後退出
{
printf("Out of memory\n");
return 0;
}
r->left=0; //初始化這個新結點
r->right=0;
r->info=info; //將輸入的字元賦值給這個結點
if (root) //如果root不為空
{
if(info<root->info) //如果info小於root的info,則新結點為root的左結點
root -> left=r;
else //否則為右結點
root -> right=r;
}
else
{
r->right=0; //如果root為空,那麼新結點的左右結點都設置為空
r->left=0;
}
return r; //返回新結點的指針的地址
} /* if = = 0 接下頁 */
if (info < r->info) //如果輸入的info小於r的info
create_btree(r,r->left,info); //遞歸調用,目的是插入到合適的位置,小則跟左子結點比較,沒有就加為左子結點
if(info>=r->info)
create_btree(r,r->right,info); //同理,沒有右子節點就加為右子結點
} /* create_btree(root,r,info) */
//查詢功能
struct tree *search_btree(struct tree *root,char key)
{
if (!root) //如果跟結點為空,輸出該二叉樹是一個空二叉樹,並返回NULL
{
printf("Emptu btree\n");
return root;
}
while(root->info!=key) //如果當前結點不是要查找的結點
{
if(key<root->info) //如果要查找的結點小於當前結點,當前結點指向當前結點的左結點
root=root->left;
else
root=root->right; //如果key大於當前結點,則當前結點指向當前結點的右結點
if(root==0) //如果root為空,列印查找失敗
{
printf("Search Failure\n");
break ;
}
} /* while(root->info!=key) */
if (root !=0) //如果root不為空,也就是上面找到了root->info==key的值
printf("Successful search\n key=%c\n",root->info); //那麼返回找到的值
return root ; //分會該值的指針,如果沒找到是NULL,找到的話就是找到結點的指針
} /* *search_btree(root,key) */
//二叉樹的輸出
void print_btree(struct tree *r,int l)
{
int i;
if (r == 0)
return ; //如果r指針為空,該次調用返回
print_btree(r->left,l+1); //調用傳入結點的左子結點
for(i=0;i<l;i++) //列印l*2個空格
printf(" ");
printf("%c\n",r->info); //列印出該結點的info值
print_btree(r->right,l+1); //調用傳入結點的又子結點
}
void pretra(struct tree *head) //前序遍歷
{
if(NULL==head)
{
printf("這是一個空的二叉樹!\n");
return;
}
else
{
printf("%c",head->info);
if(head->left!=NULL)
pretra(head->left);
if(head->right!=NULL)
pretra(head->right);
}
}
void midtra(struct tree *head) //中序遍歷
{
if(NULL==head)
{
printf("這是一個空的二叉樹!\n");
return;
}
else
{
if(head->left!=NULL)
midtra(head->left);
printf("%c",head->info);
if(head->right!=NULL)
midtra(head->right);
}
}
void afttra(struct tree *head) //後序遍歷
{
if(NULL==head)
{
printf("這是一個空的二叉樹!\n");
return;
}
else
{
if(head->left!=NULL)
afttra(head->left);
if(head->right!=NULL)
afttra(head->right);
printf("%c",head->info);
}
}