您的位置:

dq分解c语言的简单介绍

本文目录一览:

c语言程序设计 学生成绩管理程序

#include stdio.h

#include stdlib.h

#include string.hstruct student

{

char name[60];

char ID[7];

int score;

};int dq(struct student st[]);

void xianshi();

void bc(struct student st[]);

void add();

void select();

void zz();

void chazhao();

void xhcz();

void xmcz();

void del();

void xmsc();

void xhsc();

void tj();

void px();

void bjg();

void xg();

void xhxg();

void xmxg();

void bca();

void fh();

struct student st[300]; //这个数组用来保存所有的学生信息 和文件里面的一致

int Number=0; //记录总的学生人数 也就是数组/文件里面的学生人数

void main()

{

int choose=0;

FILE *fp=NULL;

char yesorno;

if((fp=fopen("C://student.dat","rb"))==NULL)

{

printf("\n=========提示:文件不存在,是否要创建一个?(y/n)\n");

scanf("%c",yesorno);

if(yesorno=='y'||yesorno=='Y')

{

//这里仅为了建立文件

fp=fopen("C://student.dat","wb");

fclose(fp);

}

else

exit(0);

}

else

{

Number=dq(st); //要是文件只能够已经有数据 将数据初始化到数组中

}

system("cls");

while(true)

{

xianshi();

printf("\t\t====请选择:");

scanf("%d",choose);

system("cls");

switch(choose)

{

case 0: exit(0);

//退出

break;

case 1: add();

fh();//增加学生成绩

break;

case 2: select();

fh();//查看学生成绩

break;

case 3: chazhao();

fh();// 查找

break;

case 4: del();

fh();//删除

break;

case 5: tj();

fh();//统计

break;

case 6: px();

fh();//排序

break;

case 7: bjg();

fh();//输出不及格

break;

case 8: xg();

fh();//修改

break;

case 9:zz();

fh();//作者

break;

case 10:bca();

fh();//保存

break;

default:

break;

}

fflush(stdin);

getchar();

system("cls");

}

}

void bca()

{

printf("\t=====程序在运行时已自动保存.....\n");

}

void fh()

{

printf("\t===按Enter键返回主菜单\n");

}

void xg() //修改学生信息

{

int way=0;

printf("请选择修改查找方式\n");

printf("1 按姓名查找修改\n");

printf("2 按学号查找修改\n");

scanf("%d",way);

switch(way)

{

case 1: xmxg();

break;

case 2: xhxg();

break;

default: printf("输入有误,结束!\n");

break;

}

}

//按姓名修改

void xmxg()

{

FILE *fp=NULL;

char name[60];

int i=0;

int changeIndex=0;

int index=0;

printf("请输入要修改的学生姓名:");

scanf("%s",name);

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

{

if (strcmp(name,st[i].name))

{

changeIndex=i; //保存要修改的人的下标

}

break;

}

printf("\t姓名\t学号\t成绩\n");

printf("\t%s\t%s\t%d\n\n",st[changeIndex].name,st[changeIndex].ID,st[changeIndex].score);

printf("请重新输入该学生信息");

printf("姓名:");

scanf("%s",st[changeIndex].name);

printf("学号:");

scanf("%s",st[changeIndex].ID);

printf("成绩:");

scanf("%d",st[changeIndex].score);//信息修改后重新更新文件里面的数据 以保持数据一致性

fp=fopen("C://student.dat","wb");

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

{

fwrite(st[i],sizeof(struct student),1,fp);

}

fclose(fp);

}

void xhxg()//按学号修改

{

FILE *fp=NULL;

char id[60];

int i=0;

int changeIndex=0;

int index=0;

printf("请输入要修改的学生学号:");

scanf("%s",id);

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

{

if (strcmp(id,st[i].ID))

{

changeIndex=i; //保存要修改的人的下标

}

break;

}

printf("\t姓名\t学号\t成绩\n");

printf("\t%s\t%s\t%d\n\n",st[changeIndex].name,st[changeIndex].ID,st[changeIndex].score);

printf("请重新输入该学生信息");

printf("姓名:");

scanf("%s",st[changeIndex].name);

printf("学号:");

scanf("%s",st[changeIndex].ID);

printf("成绩:");

scanf("%d",st[changeIndex].score);

//信息修改后重新更新文件里面的数据 以保持数据一致性

fp=fopen("C://student.dat","wb");

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

{

fwrite(st[i],sizeof(struct student),1,fp);

}

fclose(fp);

printf("\t=======修改成功\n");

}void bjg() //输出不及格人数

{

int i=0;

printf("以下是不及格:\n");

printf("\t姓名\t学号\t成绩\n");

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

{

if (st[i].score60)

{

printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score);

}

}

}

void px()//排序

{

struct student temp;

int wantNUmber=0;

int i=0;

int j=0;

for(i=0;iNumber-1;i++)

{

for(j=i;jNumber-1;j++)

{

if(st[j].scorest[j+1].score)

{

temp=st[j];

st[j]=st[j+1];

st[j+1]=temp;

}

}

}

printf("你想输出前几名的成绩:");

scanf("%d",wantNUmber);

if (wantNUmberNumber)

{

wantNUmber=Number;

}printf("\t姓名\t学号\t成绩\n");

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

{

printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score);

}

}

void tj()//统计

{

int i=0;

double sum=0.0;

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

{

sum+=st[i].score;

}

printf("全班总分为:%f\n",sum);

printf("平均分为:%f\n",sum/Number);

}

void del()//删除

{

int n=0;

printf("1 按姓名删除\n");

printf("2 按学号删除\n");

scanf("%d",n);

switch(n)

{

case 1: xmsc();

break;

case 2: xhsc();

break;

}

}

void xmsc()//按姓名删除

{

FILE *fp=NULL;

char name[60];

int i=0;

int j=0;

printf("请输入要删除的学生姓名:");

scanf("%s",name);

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

{

if (strcmp(name,st[i].name)==0) //如果查找到就删除

{

for (j=i;jNumber-1;j++)

{

st[j]=st[j+1];

}

Number--;

}

}//将剩余数据写入文件 重新一写的方式打开文件 把以前的数据擦除了

fp=fopen("C://student.dat","wb");

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

{

fwrite(st[i],sizeof(struct student),1,fp);

}

fclose(fp);

printf("删除成功;\n");

}

void xhsc()//按学号删除

{

FILE *fp=NULL;

char id[60];

int i=0;

int j=0;

printf("请输入要删除的学生学号:");

scanf("%s",id);

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

{

if (strcmp(id,st[i].ID)==0) //如果查找到就删除

{

for (j=i;jNumber-1;j++)

{

st[j]=st[j+1];

}

Number--;

}

}

//将剩余数据写入文件 重新一写的方式打开文件 把以前的数据擦除了

fp=fopen("C://student.dat","wb");

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

{

fwrite(st[i],sizeof(struct student),1,fp);

}

fclose(fp);

printf("删除成功;\n");

}

void chazhao()//查找学生

{

int n=0;

printf("1 按姓名查找\n");

printf("2 按学号查找\n");

scanf("%d",n);

switch(n)

{

case 1: xmcz();

break;

case 2: xhcz();

break;

default: printf("输入有误,结束!\n");

break;

}

}

void xhcz()//按学号查找

{

char id[7];

int i=0;

printf("请输入要查找学生学号:");

scanf("%s",id);

system("cls");

printf("\t姓名\t学号\t成绩\n");

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

{

if (strcmp(id,st[i].ID)==0)

{

printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score);

}

}

}

void xmcz()//按姓名查找

{

char name[7];

int i=0;

printf("请输入要查找学生姓名:");

scanf("%s",name);

system("cls");

printf("\t姓名\t学号\t成绩\n");

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

{

if (strcmp(name,st[i].name)==0)

{

printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score);

}

}

}

void zz()

{

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

printf("\t^^^^^^^^^^ 武汉工程大学邮电与信息工程学院 ^^^^^^^^^^\n\n");

printf("\t^^^^^^^^^ 07网络与安全管理2班 ^^^^^^^^^\n\n");

printf("\t^^^^^^^^ 易樊制作 ^^^^^^^^\n\n");

printf("\t^^^^^^^^^ 禁止CTRL+C 谢谢合作 ^^^^^^^^^\n\n");

printf("\t^^^^^^^^^^ QQ:895115828\n\n");

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

}

void select()//查看学生

{

int i=0;

printf("以下是全部学生成绩\n");

printf("\t姓名\t学号\t成绩\n");

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

{

printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score);

}

}

void add()//增加学生

{

int numberTemp=0;

int i=0;

struct student temp; //临时保存信息

printf("请输入要增加学生成绩个数:");

scanf("%d",numberTemp);

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

{

printf("输入第%d个同学信息\n",i+1);

printf("姓名:");

scanf("%s",temp.name);

printf("学号:");

scanf("%s",temp.ID);

printf("成绩:");

scanf("%d",temp.score);

st[Number++]=temp; //将刚添加的写入到数组

bc(temp); //将刚添加的写入到文件}

printf("添加成功\n");

}

void bc(struct student *st)

{

FILE *fp=NULL;

fp=fopen("C://student.dat","ab+");

fwrite(st,sizeof(struct student),1,fp);

fclose(fp);

}

int dq(struct student st[])

{

FILE *fp=NULL;

int i=0;

fp=fopen("C://student.dat","rb");

while(fread(st[i],sizeof(struct student),1,fp))

i++;

fclose(fp);

return i;

}

void xianshi()

{

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

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

printf("\t* 学生成绩管理系统 *\n");

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

printf("\t* [1] 增加学生成绩 [2] 查看学生成绩 *\n");

printf("\t* [3] 查找学生成绩 [4] 删除学生成绩 *\n");

printf("\t* [5] 统计(总成绩和平均分) [6] 输出前N名学生成绩 *\n");

printf("\t* [7] 输出不及格人数 [8] 修改学生信息 *\n");

printf("\t* [9] 关于作者 [10] 保存数据 *\n");

printf("\t* [0] 退出系统 *\n");

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

}

c语言解释 要挨句解释

~LZ,看代码应该从main开始看,怎么挨句解释呀~我们老师当初也是这么让我们看代码的,现在想想都恶心。你直接看方法有时候都不知道是什么东西,按流程来会比较好点,流程能顺利看下去,代码也就理解的差不多了。

1. 先从main开始

void main(void) //主方法,程序开始

{unsigned int temp; //无符号整型变量temp

while(1) //死循环

{ temp=ReadTemperature(); //调用ReadTemperature()方法,返回值赋给整型temp。此时主方法暂停,程序跳入ReadTemperature()方法继续运行。

//下面两个if是程序运行完ReadTemperature()返回主函数后判断所得到得temp值

if(temp35) { L0=1;L0=0; } //if为真,L0=1. if为假,L0=0

if(temp35) { L1=1;L1=0; } //与上同理

} }

2.uint ReadTemperature(void) //从主函数第四行调用该方法后跳入这里开始运行

{

unsigned char m=0; //无符号字符型m,赋初值0

unsigned char n=0; //同理 n附初值0

unsigned int t=0; //略。。。。

float tt=0; //浮点型,以下变量定义略。。

Init_DS18B20(); //调用Init_DS18B20()方法,此时该函数暂停运行,跳入Init_DS18B20()运行,运行完Init_DS18B20()后返回这个位置继续往下运行。

WriteOneChar(0xCC); //调用该函数,传实参0xCC,流程同上

WriteOneChar(0x44); //调用该函数,传实参0x44,流程同上

Init_DS18B20(); //调用该函数,流程同上

WriteOneChar(0xCC); //略、、

WriteOneChar(0xBE); //略、、、

m=ReadOneChar(); //调用该函数,并把它的返回值赋值给m

n=ReadOneChar(); //同上

t=n; //赋值语句

t=8; //t左移八位

t=t|m; //t或上m的值,结果赋给t ,这是求或结果。

tt=t*0.0625; //求值

t= tt*10+0.5;

return(t);} //把所得t值返回

基本的流程就是这样,你从main一句句就能看下去了,其中 t=8是位移的意思,=同理

其他的地方貌似也没难懂的了,基本介绍都有了,后面就按照之前的思路一句句看。

当发生方法调用时,当前运行的方法会暂停,转入调用的方法运行,运行完再回来继续运行,不要弄乱流程就好。

这么看一遍,比你从程序头看到程序尾结果好多了吧。。。

怎样提取出C语言代码中的注释和函数体

#include string.h

#include stdlib.h

#include stdio.h

#include fcntl.h

#include io.h

/**

 * 功能:移除C/C++程序代码中的注释

 *

 * 输入:指向C/C++程序代码的指针

 */

void

remove_comment(char *buf, size_t size)

{

  char *p, *end, c;

  char *sq_start, *dq_start;

  char *lc_start, *bc_start;

  size_t len;

  p = buf;

  end = p + size;

  sq_start = NULL;

  dq_start = NULL;

  lc_start = NULL;

  bc_start = NULL;

  while (p  end) {

  c = *p;

  switch (c) {

  case '\'': /* 单引号 */

  if (dq_start || lc_start || bc_start) {

  /* 忽略字符串与注释中的单引号 */

  p++;

  continue;

  }

  if (sq_start == NULL) {

  sq_start = p++;

  } else {

  len = p++ - sq_start;

  if (len == 2  *(sq_start + 1) == '\\') {

  /* 忽略字符中的单引号 */

  continue;

  }

  sq_start = NULL;

  }

  break;

  case '\"': /* 双引号 */

  if (sq_start || lc_start || bc_start) {

  /* 忽略字符或注释中的双引号 */

  p++;

  continue;

  }

  if (dq_start == NULL) {

  dq_start = p++;

  } else {

  if (*(p++ - 1) == '\\') {

  /* 忽略字符串中的双引号 */

  continue;

  }

  dq_start = NULL;

  }

  break;

  case '/': /* 斜杆 */

  if (sq_start || dq_start || lc_start || bc_start) {

  /* 忽略字符、字符串或注释中的斜杆 */

  p++;

  continue;

  }

  c = *(p + 1);

  if (c == '/') {

  lc_start = p;

  p += 2;

  } else if (c == '*') {

  bc_start = p;

  p += 2;

  } else {

  /* 忽略除号 */

  p++;

  }

  break;

  case '*': /* 星号 */

  if (sq_start || dq_start || lc_start || bc_start == NULL) {

  /* 忽略字符、字符串或行注释中的星号,还有忽略乘号 */

  p++;

  continue;

  }

  if (*(p + 1) != '/') {

  /* 忽略块注释中的星号 */

  p++;

  continue;

  }

  p += 2;

  memset(bc_start, ' ', p - bc_start);

  bc_start = NULL;

  break;

  case '\n': /* 换行符 */

  if (lc_start == NULL) {

  p++;

  continue;

  }

  c = *(p - 1);

  memset(lc_start, ' ',

  (c == '\r' ? (p++ - 1) : p++) - lc_start);

  lc_start = NULL;

  break;

  default:

  p++;

  break;

  }

  }

  if (lc_start) {

  memset(lc_start, ' ', p - lc_start);

  }

}

int

main(int argc, char *argv[])

{

  int fd, n;

  char buf[102400];

  fd = open("C:\\Documents and Settings\\Administrator\\桌面\\remove_comment.c",

  _O_RDONLY, 0);

  if (fd == -1) {

  return -1;

  }

  n = read(fd, buf, sizeof(buf));

  if (n == -1 || n == 0) {

  close(fd);

  return -1;

  }

  //printf("test\n");

  remove_comment(buf, n);

  *(buf + n) = '\0';

  printf(buf);

  /***********\\\/////// */

  close(fd);

  return 0;

}