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);
}
}