本文目錄一覽:
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;
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/200703.html