當前位置:首頁 » 編程軟體 » STI編程

STI編程

發布時間: 2022-04-19 12:54:14

c語言編程,還會追加分數的

#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(struct scorenode)
#define DEBUG
#include <string.h>
struct scorenode
{
int number;/*學號*/
char name[10];/*姓名*/
float chinese;/*語文成績*/
float english;/*英語成績*/
float math;/*數學成績 */
struct scorenode *next;
};
typedef struct scorenode score;
int n,k;/*n,k為全局變數,本程序中的函數均可以使用它*/
/*==============================================================================================*/
score *create(void)
/*函數create ,功能:創建鏈表,此函數帶回一個指向鏈表頭的指針*/
{
score*head;
score *p1,*p2,*p3,*max;
int i,j;
float fen;
char t[10];
n=0;
p1=p2=p3=(score *)malloc(LEN);head=p3; /*開辟一個新單元*/
printf("請輸入學生資料,輸0退出!\n");
repeat1: printf("請輸入學生學號(學號應大於0):");/*輸入學號,學號應大於0*/
scanf("%d",&p1->number);
while(p1->number<0)
{
getchar();
printf("輸入錯誤,請重新輸入學生學號:");
scanf("%d",&p1->number);}
/*輸入學號為字元或小於0時,程序報錯,提示重新輸入學號*/
if(p1->number==0)
goto end;/*當輸入的學號為0時,轉到末尾,結束創建鏈表*/
else
{
p3=head;
if(n>0)
{for(i=0;i<n;i++)
{if(p1->number!=p3->number)
p3=p3->next;
else
{printf("學號重復,請重輸!\n");
goto repeat1;
/*當輸入的學號已經存在,程序報錯,返回前面重新輸入*/
}
}
}
}
printf("請輸入學生姓名:");
scanf("%s",&p1->name);/*輸入學生姓名*/
printf("請輸入語文成績(0~100):");/*輸入語文成績,成績應在0-100*/
scanf("%f",&p1->chinese);
while(p1->chinese<0||p1->chinese>100)
{
getchar();
printf("輸入錯誤,請重新輸入語文成績");/*輸入錯誤,重新輸入語文成績直到正確為止*/
scanf("%f",&p1->chinese);
}
printf("請輸入英語成績(0~100):");/*輸入英語成績,成績應在0-100*/
scanf("%f",&p1->english);
while(p1->english<0||p1->english>100)
{
getchar();
printf("輸入錯誤,請重新輸入英語成績");/*輸入錯誤,重新輸入英語成績直到正確為止*/
scanf("%f",&p1->english);
}
printf("請輸入數學成績(0~100):");/*輸入數學成績,成績應在0-100*/
scanf("%f",&p1->math);
while(p1->math<0||p1->math>100)
{
getchar();
printf("輸入錯誤,請重新輸入數學成績");
scanf("%f",&p1->math);
}/*輸入錯誤,重新輸入數學成績直到正確為止*/
head=NULL;
while(p1->number!=0)
{
n=n+1;
if(n==1)
head=p1;
else

p2->next=p1;
p2=p1;
p1=(score *)malloc(LEN);
printf("請輸入學生資料,輸0退出!\n");
repeat2:printf("請輸入學生學號(學號應大於0):");
scanf("%d",&p1->number);/*輸入學號,學號應大於0*/

while(p1->number<0)
{
getchar();
printf("輸入錯誤,請重新輸入學生學號:");
scanf("%d",&p1->number);
}
/*輸入學號為字元或小於0時,程序報錯,提示重新輸入學號*/
if(p1->number==0)
goto end;/*當輸入的學號為0時,轉到末尾,結束創建鏈表*/
else
{
p3=head;
if(n>0)
{
for(i=0;i<n;i++)
{
if(p1->number!=p3->number)
p3=p3->next;
else
{
printf("學號重復,請重輸!\n");
goto repeat2;
/*當輸入的學號已經存在,程序報錯,返回前面重新輸入*/
}
}
}

}
printf("請輸入學生姓名:");
scanf("%s",&p1->name);/*輸入學生姓名*/
printf("請輸入語文成績(0~100):");
scanf("%f",&p1->chinese);/*輸入語文成績,成績應在0-100*/
while(p1->chinese<0||p1->chinese>100)
{
getchar();
printf("輸入錯誤,請重新輸入語文成績");
scanf("%f",&p1->chinese);
}/*輸入錯誤,重新輸入語文成績直到正確為止*/
printf("請輸入英語成績(0~100):");
scanf("%f",&p1->english);/*輸入英語成績,成績應在0-100*/
while(p1->english<0||p1->english>100)
{
getchar();
printf("輸入錯誤,請重新輸入英語成績");
scanf("%f",&p1->english);
}/*輸入錯誤,重新輸入英語成績直到正確為止*/
printf("請輸入數學成績(0~100):");
scanf("%f",&p1->math);/*輸入數學成績,成績應在0-100*/
while(p1->math<0||p1->math>100)
{
getchar();
printf("輸入錯誤,請重新輸入數學成績");
scanf("%f",&p1->math);
}/*輸入錯誤,重新輸入數學成績直到正確為止*/

}

end: p1=head;
p3=p1;
for(i=1;i<n;i++)
{
for(j=i+1;j<=n;j++)
{
max=p1;
p1=p1->next;
if(max->number>p1->number)
{
k=max->number;
max->number=p1->number;
p1->number=k;
/*交換前後結點中的學號值,使得學號大者移到後面的結點中*/
strcpy(t,max->name);
strcpy(max->name,p1->name);
strcpy(p1->name,t);
/*交換前後結點中的姓名,使之與學號相匹配*/
fen=max->chinese;
max->chinese=p1->chinese;
p1->chinese=fen;
/*交換前後結點中的語文成績,使之與學號相匹配*/
fen=max->english;
max->english=p1->english;
p1->english=fen;
/*交換前後結點中的英語成績,使之與學號相匹配*/
fen=max->math;
max->math=p1->math;
p1->math=fen;
/*交換前後結點中的數學成績,使之與學號相匹配*/
}

}
max=head;p1=head;/*重新使max,p指向鏈表頭*/
}
p2->next=NULL;/*鏈表結尾*/
printf("輸入的學生數為:%d個!\n",n);
return(head);
}
/*==============================================================================================*/
/*==============================================================================================*/
score *add (score *head,score *stu)
/*函數add ,功能:追加學生資料,並且將所有學生資料按學號排序*/
{
score *p0,*p1,*p2,*p3,*max;
int i,j;
float fen;
char t[10];
p3=stu=(score *)malloc(LEN);/*開辟一個新單元*/
printf("\n輸入要增加的學生的資料!");
repeat4: printf("請輸入學生學號(學號應大於0):");
scanf("%d",&stu->number);
/*輸入學號,學號應大於0*/
while(stu->number<0)
{
getchar();
printf("輸入錯誤,請重新輸入學生學號:");
scanf("%d",&stu->number);
}/*輸入錯誤,重新輸入學號*/
/******************************************************/
if(stu->number==0)
goto end2;/*當輸入的學號為0時,轉到末尾,結束追加*/
else
{
p3=head;
if(n>0)
{for(i=0;i<n;i++)
{if(stu->number!=p3->number)
p3=p3->next;
else
{printf("學號重復,請重輸!\n");
goto repeat4;
/*當輸入的學號已經存在,程序報錯,返回前面重新輸入*/
}
}
}

}

/******************************************************/
printf("輸入學生姓名:");
scanf("%s",stu->name); /*輸入學生姓名*/
printf("請輸入語文成績(0~100):");
scanf("%f",&stu->chinese); /*輸入語文成績,成績應在0-100*/
while(stu->chinese<0||stu->chinese>100)
{
getchar();
printf("輸入錯誤,請重新輸入語文成績");
scanf("%f",&stu->chinese);
} /*輸入錯誤,重新輸入語文成績直到正確為止*/
printf("請輸入英語成績(0~100):");
scanf("%f",&stu->english);/*輸入英語成績,成績應在0-100*/
while(stu->english<0||stu->english>100)
{
getchar();
printf("輸入錯誤,請重新輸入英語成績");
scanf("%f",&stu->english);
}/*輸入錯誤,重新輸入英語成績直到正確為止*/
printf("請輸入數學成績(0~100):");
scanf("%f",&stu->math);/*輸入數學成績,成績應在0-100*/
while(stu->math<0||stu->math>100)
{
getchar();
printf("輸入錯誤,請重新輸入數學成績");
scanf("%f",&stu->math);
}/*輸入錯誤,重新輸入數學成績直到正確為止*/
p1=head;
p0=stu;
if(head==NULL)
{
head=p0;p0->next=NULL;}/*當原來鏈表為空時,從首結點開始存放資料*/
else/*原來鏈表不為空*/
{
if(p1->next==NULL)/*找到原來鏈表的末尾*/
{
p1->next=p0;
p0->next=NULL;/*將它與新開單元相連接*/
}
else
{
while(p1->next!=NULL)/*還沒找到末尾,繼續找*/
{
p2=p1;p1=p1->next;
}
p1->next=p0;
p0->next=NULL;
}

}
n=n+1;
p1=head;
p0=stu;
for(i=1;i<n;i++)
{
for(j=i+1;j<=n;j++)
{
max=p1;
p1=p1->next;
if(max->number>p1->number)
{
k=max->number;
max->number=p1->number;
p1->number=k;
/*交換前後結點中的學號值,使得學號大者移到後面的結點中*/
strcpy(t,max->name);
strcpy(max->name,p1->name);
strcpy(p1->name,t);
/*交換前後結點中的姓名,使之與學號相匹配*/
fen=max->chinese;
max->chinese=p1->chinese;
p1->chinese=fen;
/*交換前後結點中的語文成績,使之與學號相匹配*/

fen=max->english;
max->english=p1->english;
p1->english=fen;
/*交換前後結點中的英語成績,使之與學號相匹配*/
fen=max->math;
max->math=p1->math;
p1->math=fen;
/*交換前後結點中的數學成績,使之與學號相匹配*/
}

}
max=head;p1=head;/*重新使max,p指向鏈表頭*/
}
end2:
printf("現在的學生數為:%d個!\n",n);
return(head);
}
/*==============================================================================================*/
/*==============================================================================================*/
score *search (score *head)
/*函數search ,功能:查詢學生成績*/
{
int number;
score *p1,*p2;
printf("輸入要查詢的學生的學號,");
scanf("%d",&number);
while(number!=0)
{
if(head==NULL)
{
printf("\n沒有任何學生資料!\n");return(head);
}
printf("-----------------------------------------\n");
printf("|學號\t|姓名\t|語文\t|英語\t|數學\t|\n");
printf("-----------------------------------------\n");/*列印表格域*/
p1=head;
while(number!=p1->number&&p1->next!=NULL)
{
p2=p1;p1=p1->next;
}
if(number==p1->number)
{
printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n",p1->number,p1->name,p1->chinese,p1->english,p1->math);
printf("-----------------------------------------\n");
}/*列印表格域*/
else
printf("%d不存在此學生!\n",number);
printf("輸入要查詢的學生的學號,");
scanf("%d",&number);
}
printf("已經退出了!\n");
return(head);
}
/*==============================================================================================*/
/*==============================================================================================*/
void print (score *head)
/*函數print ,功能:顯示學生成績*/
{
score *p;
if(head==NULL)
{
printf("\n沒有任何學生資料!\n");}
else
{
printf("%d\n",n);
printf("-----------------------------------------\n");
printf("|學號\t|姓名\t|語文\t|英語\t|數學\t|\n");
printf("-----------------------------------------\n");/*列印表格域*/
p=head;
do
{
printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n",p->number,p->name,p->chinese,p->english,p->math);
printf("-----------------------------------------\n");/*列印表格域*/
p=p->next;}while (p!=NULL);/*列印完成了*/
}
}
/*==============================================================================================*/
/*==============================================================================================*/
int menu (int k)/*函數menu ,功能:菜單選擇界面*/
{
int i;
printf("\t\t\t\t考試成績管理系統\n");
printf("\t\t\t作者:劉樂&文輝 班級:軟體工程0602\n" );
for(i=0;i<80;i++)
printf("*");
printf("\t\t1輸入學生的資料\t\t\t2查詢學生的成績\n");
printf("\t\t3顯示學生的成績\t\t\t4追加學生的資料\n");
/*菜單選擇界面*/
for(i=0;i<80;i++)
printf("*");
printf("歡迎進入成績管理系統,請選擇您所要的操作(選擇(0)退出):");
scanf("%d",&k);/*選擇操作*/
getchar();
return (k);}
/*==============================================================================================*/
/*==============================================================================================*/
void main() /*主函數main,功能:通過調用create,search,del,add,print,ststistics,save,taxis等函數,實現學生成績查詢系統功能*/
{
score *head=0,*stu=0;
while(1)
{
int k;
k=menu (k);
switch(k)/*用switch語句實現功能選擇*/
{
case 1: head=create ();break;/*調用創建鏈表函數*/
case 2: head=search (head);break;/*調用成績查詢函數*/
case 3: print (head); break;/*調用顯示學生資料函數*/
case 4: head=add (head,stu);break;/*調用追加學生資料函數*/
case 0: exit(0);/*退出系統,返回主界面*/
default: printf("輸入錯誤,請重試!\n");
}
}
}

㈡ visualc stiual c#圖形的旋轉編程步驟

private void button1_Click(object sender, EventArgs e)
{
//順時針
this.KiRotate(this.pictureBox1,1);
}
private void button2_Click(object sender, EventArgs e)
{
//逆時針
this.KiRotate(this.pictureBox1, 2);
}

///
/// 放在控制項picturebox里的圖片的旋轉
///
/// picturebox控制項
/// 順時針還是逆時針
///
private Image KiRotate(PictureBox Pic,int sign)
{
Image img = Pic.Image;
width = img.Width;
height = img.Height;
Pic.Width = height;
Pic.Height = width;
try
{
//sign表示順時針或者逆時針
if (sign == 1)
{
//順時針
img.RotateFlip(RotateFlipType.Rotate90FlipNone);
}
else if(sign==2)
{
//逆時針
img.RotateFlip(RotateFlipType.Rotate90FlipXY);
}
Pic.「refresh」();
return img;
}
catch
{
Pic.「refresh」();
return null;
}
}

python 在編程語言中是什麼地位為什麼很多大學不教 Python

python的地位很高,目前是世界第5大編程語言。。但我覺得大學不教python,其實是正確的。
Python在誕生之初,只是用來在Linux上給Perl和shell做銜接用的「膠水」,而今天已經成為了主流的編程語言,能獲得今天的地位,當然具備諸多優勢。。。比如數學運算相關的各種庫,爬蟲,等等。。。但這都不是導致Python流行的最根本原因。
有沒有比Python運算更強的語言?多得是
有沒有比Python爬蟲效率更高的語言?也不少
所以其實平日里隨口道來的種種優勢,並不是不可替代的。。這些優勢,很多語言都具備。就比如perl,erlang,Julia等語言,其實用來做運算或爬蟲比Python更強,但為什麼這些語言卻流行不起來?
說到底,Python成功的秘訣只有一條,其實就是在功能基本夠用的前提下,比其他語言簡單。而比Python簡單的語言,功能又不夠全面,比如Lua,Javascript,Ruby這些語言比Python更簡單,但往往只適合一兩個領域的工作,而無法面面俱到。
Python可以提供的這些功能,對於非專業程序員來講,已經顯得非常強大了。。但對於專業程序員來說,Python最大的作用,其實也只是用來「偷懶」而已。因為相比JAVA或C#這種工業級的編程語言來講,Python除了入門簡單之外,並無任何優勢可言。而Python的動態語言特性、不利於維護等缺點,成為了限制它邁向深層開發的重大缺陷。
而如果熟練掌握JAVA或C#中的任何一門,想利用閑暇之餘學習一下Python,看幾個案例便可以入門,幾乎不需要專門學習。
如果你並不以成為專業程序員做為目標,那麼以Python為主,是可以的。但若想靠編程養家糊口,靜態語言才是重中之重。
但如果是計算機專業的話,僅僅學Python,似乎就有點對不起「科班出身」的稱號了。。。。學生們花著昂貴的學費,消耗四年光陰,卻只學個Python,豈不是誤人子弟?
就像你若報考攝影專業,老師應該教你使用單反,而不是教你使用手機攝像頭。

㈣ 如何利用內嵌匯編程序實現使能和禁止中斷

在Windows下開關中斷指令屬於特權指令,就算內嵌了也不會被執行的。

DOS下的話CLI是關中斷,STI是開中斷.要實模式下的DOS,虛擬的DOS(就是Windows下的那個DOS窗口)還是會被Windows屏蔽掉。

#include<stdio.h>

void main()

{

int a=2;

__asm{

lea eax,a

shl [eax],2

}

printf("a=%d ",a);

}

(4)STI編程擴展閱讀:

嵌 入式系統是基於特定用途的 , 以計算機技術為基礎 ,其軟硬體具備良好可裁剪性的專用計算機系統,適用於對功能、可靠性、成本、體積、 功耗有嚴格要 求的場合。它一般由嵌入式微處理器、 外圍硬體設備、嵌入式操作系統以及用戶應用程序四個部分組成。從 20 世紀 60年代中期集成電路誕生至今,嵌入式系統應用已經有接近 40 年的發展歷史。

通常來說,嵌入式系統具備以下特點:

(1)體積小,重量輕。

(2)結構簡單、功耗低、可靠性高。

(3)便於規模化生產、價格相對低廉。

(4)模塊化、晶元化。

(5)強調量身定做的原則。

㈤ 加工中心編程ST4鋼絲螺套螺距是多少

用於安裝鋼絲螺套ST4底孔的螺距是0.7,其ST底孔大中小徑如下:

★ 鋼絲螺套安裝參數

─────────────

☆ 螺紋規格:STI M4×0.7

☆ 系列:第1系列

☆ 粗細牙:粗牙

☆ 鋼絲螺套專用絲錐大徑[ST絲錐][參考]:4.9093 mm

☆ 鋼絲螺套專用絲錐中徑[ST絲錐][參考]:4.4546 mm

☆ 鋼絲螺套專用絲錐小徑[ST絲錐][參考]:4.1165 mm


更多的關於鋼絲螺套的安裝參數您可以在這里查詢:網頁鏈接

㈥ 只能使用目前學過的匯編指令,最多使用4條指令,編程計算2的4次方。

你是不是 不知道這是嘛意思?

它們在存貯器和寄存器、寄存器和輸入輸出埠之間傳送數據.
1. 通用數據傳送指令.
MOV 傳送字或位元組.
MOVSX 先符號擴展,再傳送.
MOVZX 先零擴展,再傳送.
PUSH 把字壓入堆棧.
POP 把字彈出堆棧.
PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次壓入堆棧.
POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次彈出堆棧.
PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次壓入堆棧.
POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次彈出堆棧.
BSWAP 交換32位寄存器里位元組的順序
XCHG 交換字或位元組.( 至少有一個操作數為寄存器,段寄存器不可作為操作數)
CMPXCHG 比較並交換操作數.( 第二個操作數必須為累加器AL/AX/EAX )
XADD 先交換再累加.( 結果在第一個操作數里 )
XLAT 位元組查表轉換.
—— BX 指向一張 256 位元組的表的起點, AL 為表的索引值 (0-255,即
0-FFH); 返回 AL 為查表結果. ( [BX+AL]->AL )
2. 輸入輸出埠傳送指令.
IN I/O埠輸入. ( 語法: IN 累加器, {埠號│DX} )
OUT I/O埠輸出. ( 語法: OUT {埠號│DX},累加器 )
輸入輸出埠由立即方式指定時, 其范圍是 0-255; 由寄存器 DX 指定時,
其范圍是 0-65535.
3. 目的地址傳送指令.
LEA 裝入有效地址.
例: LEA DX,string ;把偏移地址存到DX.
LDS 傳送目標指針,把指針內容裝入DS.
例: LDS SI,string ;把段地址:偏移地址存到DS:SI.
LES 傳送目標指針,把指針內容裝入ES.
例: LES DI,string ;把段地址:偏移地址存到ES:DI.
LFS 傳送目標指針,把指針內容裝入FS.
例: LFS DI,string ;把段地址:偏移地址存到FS:DI.
LGS 傳送目標指針,把指針內容裝入GS.
例: LGS DI,string ;把段地址:偏移地址存到GS:DI.
LSS 傳送目標指針,把指針內容裝入SS.
例: LSS DI,string ;把段地址:偏移地址存到SS:DI.
4. 標志傳送指令.
LAHF 標志寄存器傳送,把標志裝入AH.
SAHF 標志寄存器傳送,把AH內容裝入標志寄存器.
PUSHF 標志入棧.
POPF 標志出棧.
PUSHD 32位標志入棧.
POPD 32位標志出棧.

二、算術運算指令
——————————————————————————————
ADD 加法.
ADC 帶進位加法.
INC 加 1.
AAA 加法的ASCII碼調整.
DAA 加法的十進制調整.
SUB 減法.
SBB 帶借位減法.
DEC 減 1.
NEC 求反(以 0 減之).
CMP 比較.(兩操作數作減法,僅修改標志位,不回送結果).
AAS 減法的ASCII碼調整.
DAS 減法的十進制調整.
MUL 無符號乘法.
IMUL 整數乘法.
以上兩條,結果回送AH和AL(位元組運算),或DX和AX(字運算),
AAM 乘法的ASCII碼調整.
DIV 無符號除法.
IDIV 整數除法.
以上兩條,結果回送:
商回送AL,余數回送AH, (位元組運算);
或 商回送AX,余數回送DX, (字運算).
AAD 除法的ASCII碼調整.
CBW 位元組轉換為字. (把AL中位元組的符號擴展到AH中去)
CWD 字轉換為雙字. (把AX中的字的符號擴展到DX中去)
CWDE 字轉換為雙字. (把AX中的字元號擴展到EAX中去)
CDQ 雙字擴展. (把EAX中的字的符號擴展到EDX中去)

三、邏輯運算指令
————————————————————————————
AND 與運算.
OR 或運算.
XOR 異或運算.
NOT 取反.
TEST 測試.(兩操作數作與運算,僅修改標志位,不回送結果).
SHL 邏輯左移.
SAL 算術左移.(=SHL)
SHR 邏輯右移.
SAR 算術右移.(=SHR)
ROL 循環左移.
ROR 循環右移.
RCL 通過進位的循環左移.
RCR 通過進位的循環右移.
以上八種移位指令,其移位次數可達255次.
移位一次時, 可直接用操作碼. 如 SHL AX,1.
移位>1次時, 則由寄存器CL給出移位次數.
如 MOV CL,04
SHL AX,CL

四、串指令
———————————————————————————
DS:SI 源串段寄存器 :源串變址.
ES:DI 目標串段寄存器:目標串變址.
CX 重復次數計數器.
AL/AX 掃描值.
D標志 0表示重復操作中SI和DI應自動增量; 1表示應自動減量.
Z標志 用來控制掃描或比較操作的結束.
MOVS 串傳送.
( MOVSB 傳送字元. MOVSW 傳送字. MOVSD 傳送雙字. )
CMPS 串比較.
( CMPSB 比較字元. CMPSW 比較字. )
SCAS 串掃描.
把AL或AX的內容與目標串作比較,比較結果反映在標志位.
LODS 裝入串.
把源串中的元素(字或位元組)逐一裝入AL或AX中.
( LODSB 傳送字元. LODSW 傳送字. LODSD 傳送雙字. )
STOS 保存串.
是LODS的逆過程.
REP 當CX/ECX<>0時重復.
REPE/REPZ 當ZF=1或比較結果相等,且CX/ECX<>0時重復.
REPNE/REPNZ 當ZF=0或比較結果不相等,且CX/ECX<>0時重復.
REPC 當CF=1且CX/ECX<>0時重復.
REPNC 當CF=0且CX/ECX<>0時重復.

五、程序轉移指令
——————————————————————————
1>無條件轉移指令 (長轉移)
JMP 無條件轉移指令
CALL 過程調用
RET/RETF過程返回.
2>條件轉移指令 (短轉移,-128到+127的距離內)
( 當且僅當(SF XOR OF)=1時,OP1 JA/JNBE 不小於或不等於時轉移.
JAE/JNB 大於或等於轉移.
JB/JNAE 小於轉移.
JBE/JNA 小於或等於轉移.
以上四條,測試無符號整數運算的結果(標志C和Z).
JG/JNLE 大於轉移.
JGE/JNL 大於或等於轉移.
JL/JNGE 小於轉移.
JLE/JNG 小於或等於轉移.
以上四條,測試帶符號整數運算的結果(標志S,O和Z).
JE/JZ 等於轉移.
JNE/JNZ 不等於時轉移.
JC 有進位時轉移.
JNC 無進位時轉移.
JNO 不溢出時轉移.
JNP/JPO 奇偶性為奇數時轉移.
JNS 符號位為 "0" 時轉移.
JO 溢出轉移.
JP/JPE 奇偶性為偶數時轉移.
JS 符號位為 "1" 時轉移.
3>循環控制指令(短轉移)
LOOP CX不為零時循環.
LOOPE/LOOPZ CX不為零且標志Z=1時循環.
LOOPNE/LOOPNZ CX不為零且標志Z=0時循環.
JCXZ CX為零時轉移.
JECXZ ECX為零時轉移.
4>中斷指令
INT 中斷指令
INTO 溢出中斷
IRET 中斷返回
5>處理器控制指令
HLT 處理器暫停, 直到出現中斷或復位信號才繼續.
WAIT 當晶元引線TEST為高電平時使CPU進入等待狀態.
ESC 轉換到外處理器.
LOCK 封鎖匯流排.
NOP 空操作.
STC 置進位標志位.
CLC 清進位標志位.
CMC 進位標志取反.
STD 置方向標志位.
CLD 清方向標志位.
STI 置中斷允許位.
CLI 清中斷允許位.

六、偽指令
———————————————————————————
DW 定義字(2位元組).
PROC 定義過程.
ENDP 過程結束.
SEGMENT 定義段.
ASSUME 建立段寄存器定址.
ENDS 段結束.
END 程序結束.

㈦ 程序題:學習stitac定義靜態變數的用法。

你好,是static不是stitac,這是很多編程語言裡面的關鍵字,表示靜態的,程序啟動時就會載入並且賦值,無論你是否調用它,它都會在內存裡面佔用空間,沒有加static則不然,只有當你用到的時候才會生成,佔用內存

㈧ 定時器中斷匯編語言編程

主程序:
push ds ;保存數據段
mov ax,0000
mov ds,ax ;數據段清零
mov ax,offset irq7 ;取中斷程序入口地址
add ax,2000 ;加裝時IP=2000地址
mov si,003c ;填8259中斷7中斷矢量
mov w[si],ax ;填偏移量矢量
mov ax,0000 ;段地址CS=0000H
mov si,003e
mov w[si],ax ;填段地址矢量
pop ds ;彈棧
in al,21 ;讀8259中斷屏蔽字
and al,7f ;開8259中斷7
out 21,al
mov al,b4 ;8253的計數器2為方式2,採用二進制計數,先低後高寫入計數值 10110100
out 43,al ;寫入方式控制字
mov ax,2e9c 0010 1110 1001 1100B 11932D
out 42,al ;寫入低位元組計數值 1001 1100
mov al,ah
out 42,al ;寫入高位元組計數值 0010 1110
mov al,81 ;8255的A口為方式0輸出,B口為方式0輸出,C口下部輸入 1000 0001
out 63,al ;寫方式控制字
call first ;調用first子程序,賦計數初值
begi:hlt 延時等待
sti ;開中斷
mov ah,01
int 16 ;檢測是否按了鍵盤
jz begi
mov ah,00 ;讀鍵值
int 16
cmp al,0d ;是否按了回車
jnz A1
mov si,4000
not [si+04] ;偏移地址為4004的內存單元內容取反
jmp begi
A1:cmp al,1b ;是否按了ESC鍵
jnz A2
call first ;重新賦初值,相當於清零
A2:jmp begi
中斷程序:
irq7:call disp ;調用disp子程序,用來在數碼管顯示數據
mov si,4000
cmp [si+04],00 ;判斷是否按了第2次回車鍵
je A4
call addn ;調用addn子程序,用來計數
A4:mov al,20
out 20,al
cli ;關中斷
iret ;返回
addn程序:
addn:mov si,4000
add [si+03],01 ;百分之一秒加1
cmp [si+03],0a ;判斷是否大於10
jz A5
jmp A9
A5:mov [si+03],00
Add [si+02],01 ;十分之一秒加1
cmp [si+02],0a ;判斷是否大於10
jz A6
jmp A9
A6:mov [si+02],00
add [si+01],01 ;秒位加1
cmp [si+01],0a ;判斷是否大於10
jz A7
jmp A9
A7:mov [si+01],00
add [si],01 ;十秒位加1
cmp [si],06 ;判斷是否大於6
jz A8
jmp A9
A8:mov [si],00 ;大於60:00重新開始
A9: ret
賦初值程序:
first:mov si,4000
mov al,00
mov [si],al
mov [si+01],al
mov [si+02],al
mov [si+03],al
mov [si+04],al
ret
顯示程序:
disp:push ax ;保存AX
mov si,4000 ;指向數據緩沖區
mov dl,f7 ;1111 0111 指向數碼管
mov al,dl ;al=1111 0111
again:out 60,al ;寫埠A
mov al,[si]
mov bx,4100 ;指向數碼緩沖區 bx=0100 0001 0000 0000
and ax,00ff ; ax=0000 0000 al
add bx,ax ;得到顯示代碼 bx=0100 0001 al
mov al,[bx]
out 61,al ;寫埠B
call dally :調用延時程序dally
inc si
mov al,dl
test al,01
jz out
ror al,1 ;指向下一個數碼管
mov dl,al
jmp again
out: pop ax ;彈出AX
ret
dally:push cx ;延時程序
push ax
mov cx,0010
t1 :mov ax,0010
t2 dec ax
jnz t2
loop t1
pop ax
pop cx
ret
數碼緩沖區:
0000:4000 3f,06,5b4f,66,6d,7d,07,7f,6f
二、 設計思想
電子秒錶要實現的功能:用鍵盤中斷來控制整個程序,按一下回車鍵啟動電子秒錶,再按一下暫停,按一下ESC鍵清零,用七段數碼管顯示時間。整個程序涉及到8255、8253與8259三個晶元。8253的OUT2,CLK2分別連接8259的IRQ7與PCLK,8253的GATE2連接正5伏電壓,採用計數器2每隔0.01秒產生一次中斷並且計數,寫入以偏移地址4000H開始的4個內存單元,然後利用8255將內存單元的數據輸出到七段數碼管。由於鍵盤中斷優先於8259的7號中斷,所以程序只有在按一下回車鍵才啟動電子秒錶,再按一下暫停,按一下ESC鍵清零,如果超出了60秒,整個程序自動重新開始。
三、 所用晶元工作原理
8255:介面電路在CPU和I/O設備之間起著信號的變換和傳輸的作用。 任何介面電路與CPU之間的信息傳輸方式都是並行的,即CPU與介面電路之間以數據位元組/字為單位傳送信息。介面電路與I/O設備之間的信息傳送方式,有並行和串列兩種,相應的介面電路稱為並行介面和串列介面。
並行介面是在多根數據線上,以數據位元組/字與I/O設備交換信息。在輸入過程中,輸入設備把數據送給介面,並且使狀態線「輸入准備好」有效。介面把數據存放在「輸入緩沖寄存器」中,同時使「輸入回答」線有效,作為對外設的響應。外設在收到這個回答信號後,就撤消數據和「輸入准備好」信號。數據到達介面中後,介面會在「狀態寄存器」中設置輸入准備好標志,或者向CPU發一個中斷請求。CPU可用查詢方式或中斷方式從介面中讀取數據。介面中的數據被讀取後,介面會自動清除狀態寄存器中的標志,且撤消對CPU的中斷請求。
在輸出過程中,每當輸出寄存器可以接收數據,介面就會將狀態寄存器中「輸出准備好」狀態置1或向CPU發一個中斷請求,CPU可用查詢或中斷方式向介面輸出數據。當CPU輸出的數據到達介面後,介面會清除「輸出准備好」狀態,把數據送往外設,並向外設發一個「數據輸出准備好」信號。外設受到驅動後,便接收數據,並向介面電路發一個「輸出回答」信號,介面收到該回答信號後,又將狀態寄存器中「輸出准備好」置位,以便CPU輸出下一個數據。
8253:對CLK信號進行「減1計數」。首先CPU把「控制字」,寫入「控制寄存器」,把「計數初始值」寫入「初值寄存器」,然後, 定時/計數器按控制字要求計數。計數從「計數初始值 開始,每當CLK信號出現一次,計數值減1,當計數值減為0時,從OUT端輸出規定的信號(具體形式與工作模式有關)。當CLK信號出現時,計數值是否減1(即是否計數),受到「門控信號」GATE的影響,一般,僅當GATE有效時,才減1.門控信號GATE如何影響計數操作,以及輸出端OUT在各種情況下輸出的信號形式與定時/計數器的工作模式有關。
8259:1. IR線上提出了中斷請求的中斷源,即出現請求,IRR中斷請求寄存器(共有8位D7~D0)對應於連接在IR0~IR7線上的外設的中斷請求,哪一根輸入線有請求,哪一根輸入線就置1。
2. 若OCW1(IMR中斷屏蔽寄存器)未使該中斷請求屏蔽(對應位為0時不屏蔽),該請求被送入PR(優先權分析器)比較。否則,不送入PR比較。
3. PR把新進入的請求與ISR(服務中寄存器)中正在被處理的中斷進行比較。如果新進入的請求優先順序較低,則8259不向CPU提出請求。如果新進入的請求優先順序較高,則8259使INT引腳輸出高電平,向CPU提出請求。
4. 如果CPU內部的標志寄存器中的IF(中斷允許標志)為0,CPU不響應該請求。若IF=1,CPU在執行完當前指令後,從CPU的INTA引腳上向8259發出兩個負脈沖。
5.第一個 INTA負脈沖到達8259時,8259完成以下三項工作:
a.使IRR(中斷請求寄存器)的鎖存功能失效。這樣一來,在IR7~IR0上的請求信號就不會被8259接收。直到第二個INTA負脈沖到達8259時,才又使IRR的鎖存功能有效。
b.使ISR(服務中寄存器)中的相應位置1。
c.使IRR中的相應位清0。
6.第二個INTA負脈沖到達8259時,8259完成以下工作:
a.將中斷類型碼(ICW2中的值)送到數據匯流排上,CPU將其保存在「內部暫存器」中。
b.如果ICW4(它設定級中斷聯方式之特定完全嵌套方式,將在8259的工作方式中詳述ICW4)中設置了中斷自動結束方式,則將ISR的相應位清0。

㈨ 編程如何用C語言編寫一個學生成績管理系統程序

我們才做了這個作業。。。
#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(struct scorenode)
#define DEBUG
#include <string.h>
struct scorenode
{
int number;/*學號*/
char name[8];/*姓名*/
float cj1;/*成績1*/
float cj2;/*成績2*/
float cj3;/*成績3 */
struct scorenode *next;
};
typedef struct scorenode score;
int n,k;/*n,k為全局變數,本程序中的函數均可以使用它*/
/*==============================================================================================*/
score *creat(void)
/*函數creat,功能:創建鏈表,此函數帶回一個指向鏈表頭的指針*/
{
score*head;
score *p1,*p2,*p3,*max;
int i,j;
float fen;
char t[10];
n=0;
p1=p2=p3=(score *)malloc(LEN);head=p3; /*申請一個新單元*/
printf("請輸入學生資料,輸0退出!\n");
repeat1: printf("請輸入學生學號(學號應大於0):");/*輸入大於0的學號*/
scanf("%d",&p1->number);
while(p1->number<0)
{
getchar();
printf("輸入錯誤,請重新輸入學生學號:");
scanf("%d",&p1->number);
}
/*輸入學號為字元或小於0時,程序報錯,提示重新輸入學號*/
if(p1->number==0)
goto end;/*當輸入的學號為0時,轉到末尾,結束創建鏈表*/
else
{
p3=head;
if(n>0)
{
for(i=0;i<n;i++)
{
if(p1->number!=p3->number)
p3=p3->next;
else
{
printf("學號重復,請重輸!\n");
goto repeat1;
/*當輸入的學號已經存在,程序報錯,返回前面重新輸入*/
}
}
}
}
printf("請輸入學生姓名:");
scanf("%s",&p1->name); /*輸入學生姓名*/
printf("請輸入cj1(0~100):"); /*輸入cj1,成績應在0-100*/
scanf("%f",&p1->cj1);
while(p1->cj1<0||p1->cj1>100)
{
getchar();
printf("輸入錯誤,請重新輸入cj1"); /*輸入錯誤,重新輸入成績1*/
scanf("%f",&p1->cj1);
}
printf("請輸入cj2(0~100):"); /*輸入cj2,成績應在0-100*/
scanf("%f",&p1->cj2);
while(p1->cj2<0||p1->cj2>100)
{
getchar();
printf("輸入錯誤,請重新輸入cj2"); /*輸入錯誤,重新輸入cj2直到正確為止*/
scanf("%f",&p1->cj2);
}
printf("請輸入cj3(0~100):");/*輸入cj3,成績應在0-100*/
scanf("%f",&p1->cj3);
while(p1->cj3<0||p1->cj3>100)
{
getchar();
printf("輸入錯誤,請重新輸入cj3");
scanf("%f",&p1->cj3);} /*輸入錯誤,重新輸入cj3直到正確為止*/
head=NULL;
while(p1->number!=0)
{
n=n+1;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(score *)malloc(LEN);
printf("請輸入學生資料,輸0退出!\n");
repeat2:printf("請輸入學生學號(學號應大於0):");
scanf("%d",&p1->number); /*輸入學號,學號應大於0*/
while(p1->number<0)
{
getchar();
printf("輸入錯誤,請重新輸入學生學號:");
scanf("%d",&p1->number);
}
/*輸入學號為字元或小於0時,程序報錯,提示重新輸入學號*/
if(p1->number==0)
goto end; /*當輸入的學號為0時,轉到末尾,結束創建鏈表*/
else
{
p3=head;
if(n>0)
{
for(i=0;i<n;i++)
{
if(p1->number!=p3->number)
p3=p3->next;
else
{
printf("學號重復,請重輸!\n");
goto repeat2;
/*當輸入的學號已經存在,程序報錯,返回前面重新輸入*/
}
}
}
}
printf("請輸入學生姓名:");
scanf("%s",&p1->name);/*輸入學生姓名*/
printf("請輸入cj1(0~100):");
scanf("%f",&p1->cj1);/*輸入cj1,成績應在0-100*/
while(p1->cj1<0||p1->cj1>100)
{
getchar();
printf("輸入錯誤,請重新輸入cj1");
scanf("%f",&p1->cj1);}/*輸入錯誤,重新輸入cj1直到正確為止*/
printf("請輸入cj2(0~100):");
scanf("%f",&p1->cj2);/*輸入cj2,成績應在0-100*/
while(p1->cj2<0||p1->cj2>100)
{
getchar();
printf("輸入錯誤,請重新輸入cj2");
scanf("%f",&p1->cj2);
} /*輸入錯誤,重新輸入cj2績直到正確為止*/
printf("請輸入cj3(0~100):");
scanf("%f",&p1->cj3);/*輸入cj3,成績應在0-100*/
while(p1->cj3<0||p1->cj3>100)
{
getchar();
printf("輸入錯誤,請重新輸入cj3");
scanf("%f",&p1->cj3);} /*輸入錯誤,重新輸入cj3直到正確為止*/
}
end: p1=head;
p3=p1;
for(i=1;i<n;i++)
{
for(j=i+1;j<=n;j++)
{
max=p1;
p1=p1->next;
if(max->number>p1->number)
{
k=max->number;
max->number=p1->number;
p1->number=k;
/*交換前後結點中的學號值,使得學號大者移到後面的結點中*/
strcpy(t,max->name);
strcpy(max->name,p1->name);
strcpy(p1->name,t);
/*交換前後結點中的姓名,使之與學號相匹配*/
fen=max->cj1;
max->cj1=p1->cj1;
p1->cj1=fen;
/*交換前後結點中的cj1,使之與學號相匹配*/
fen=max->cj2;
max->cj2=p1->cj2;
p1->cj2=fen;
/*交換前後結點中的cj2,使之與學號相匹配*/
fen=max->cj3;
max->cj3=p1->cj3;
p1->cj3=fen;
/*交換前後結點中的cj3,使之與學號相匹配*/
}
}
max=head;p1=head;/*重新使max,p指向鏈表頭*/
}
p2->next=NULL;/*鏈表結尾*/
printf("輸入的學生數為:%d個!\n",n);
return(head);
}
score *add(score *head,score *stu)
/*函數add,功能:追加學生資料,並且將所有學生資料按學號排序*/
{
score *p0,*p1,*p2,*p3,*max;
int i,j;
float fen;
char t[10];
p3=stu=(score *)malloc(LEN);/*開辟一個新單元*/
printf("\n輸入要增加的學生的資料!");
repeat4: printf("請輸入學生學號(學號應大於0):");
scanf("%d",&stu->number);
/*輸入學號,學號應大於0*/
while(stu->number<0)
{
getchar();
printf("輸入錯誤,請重新輸入學生學號:");
scanf("%d",&stu->number);} /*輸入錯誤,重新輸入學號*/
/******************************************************/
if(stu->number==0)
goto end2;/*當輸入的學號為0時,轉到末尾,結束追加*/
else
{
p3=head;
if(n>0)
{for(i=0;i<n;i++)
{if(stu->number!=p3->number)
p3=p3->next;
else
{
printf("學號重復,請重輸!\n");
goto repeat4;
/*當輸入的學號已經存在,程序報錯,返回前面重新輸入*/
}
}
}
}
/******************************************************/
printf("輸入學生姓名:");
scanf("%s",stu->name); /*輸入學生姓名*/
printf("請輸入cj1(0~100):");
scanf("%f",&stu->cj1); /*輸入cj1,成績應在0-100*/
while(stu->cj1<0||stu->cj1>100)
{getchar();
printf("輸入錯誤,請重新輸入cj1");
scanf("%f",&stu->cj1);
} /*輸入錯誤,重新輸入cj1直到正確為止*/
printf("請輸入cj2(0~100):");
scanf("%f",&stu->cj2);/*輸入cj2,成績應在0-100*/
while(stu->cj2<0||stu->cj2>100)
{
getchar();
printf("輸入錯誤,請重新輸入cj2");
scanf("%f",&stu->cj2);}/*輸入錯誤,重新輸入cj2直到正確為止*/
printf("請輸入cj3(0~100):");
scanf("%f",&stu->cj3);/*輸入cj3,成績應在0-100*/
while(stu->cj3<0||stu->cj3>100)
{
getchar();
printf("輸入錯誤,請重新輸入cj3");
scanf("%f",&stu->cj3);}/*輸入錯誤,重新輸入cj3直到正確為止*/
p1=head;
p0=stu;
if(head==NULL)
{head=p0;p0->next=NULL;}/*當原來鏈表為空時,從首結點開始存放資料*/
else/*原來鏈表不為空*/
{
if(p1->next==NULL)/*找到原來鏈表的末尾*/
{
p1->next=p0;
p0->next=NULL;/*將它與新開單元相連接*/
}
else
{
while(p1->next!=NULL)/*還沒找到末尾,繼續找*/
{
p2=p1;p1=p1->next;
}
p1->next=p0;
p0->next=NULL;
}
}
n=n+1;
p1=head;
p0=stu;
for(i=1;i<n;i++)
{
for(j=i+1;j<=n;j++)
{
max=p1;
p1=p1->next;
if(max->number>p1->number)
{
k=max->number;
max->number=p1->number;
p1->number=k;
/*交換前後結點中的學號值,使得學號大者移到後面的結點中*/
strcpy(t,max->name);
strcpy(max->name,p1->name);
strcpy(p1->name,t);
/*交換前後結點中的姓名,使之與學號相匹配*/
fen=max->cj1;
max->cj1=p1->cj1;
p1->cj1=fen;
/*交換前後結點中的cj1,使之與學號相匹配*/
fen=max->cj2;
max->cj2=p1->cj2;
p1->cj2=fen;
/*交換前後結點中的cj2績,使之與學號相匹配*/
fen=max->cj3;
max->cj3=p1->cj3;
p1->cj3=fen;
/*交換前後結點中的cj3,使之與學號相匹配*/
}
}
max=head;p1=head;/*重新使max,p指向鏈表頭*/
} end2:
printf("現在的學生數為:%d個!\n",n);
return(head);
}
/*========================================================
======================================*/
score *search(score *head)
/*函數search,功能:查詢學生成績*/
{int number;
score *p1,*p2;
printf("輸入要查詢的學生的學號,");
scanf("%d",&number);

while(number!=0)
{
if(head==NULL)
{printf("\n沒有任何學生資料!\n");return(head);}

printf("-----------------------------------------\n");
printf("|學號\t|姓名\t|cj1\t|cj2\t|cj3\t|\n");
printf("-----------------------------------------\n");/*列印表格域*/
p1=head;
while(number!=p1->number&&p1->next!=NULL)
{p2=p1;p1=p1->next;}
if(number==p1->number)
{printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n",p1->number,p1->name,p1->cj1,p1->cj2,p1->cj3);
printf("-----------------------------------------\n");}/*列印表格域*/
else
printf("%d不存在此學生!\n",number);
printf("輸入要查詢的學生的學號,");
scanf("%d",&number);
}
printf("已經退出了!\n");
return(head);
}/*=============================================
=================================================*/
score *del(score *head)/*函數del,功能:刪除學生資料*/
{
score *p1,*p2;
int number;
printf("輸入要刪除的學生的學號(輸入0時退出):");
scanf("%d",&number);
getchar();
while(number!=0)/*輸入學號為0時退出*/
{

if(head==NULL)
{
printf("\n沒有任何學生資料!\n");
return(head);
}
p1=head;
while(number!=p1->number&&p1->next!=NULL)
/*p1指向的不是所要找的首結點,並且後面還有結點*/
{
p2=p1;p1=p1->next;
} /*p1後移一個結點*/

if(number==p1->number)
/*找到了*/
{
if(p1==head)
head=p1->next;
/*若p1指向的是首結點,把地二個結點地址賦予head*/
else
p2->next=p1->next;
/*否則將下一個結點地址 賦給前一結點地址*/
printf("已經刪除:%d\n",number);n=n-1;
}
else
printf("%d不存在此學生!\n",number);
/*找不到該結點*/
printf("輸入要刪除的學生的學號:");
scanf("%d",&number);
getchar();
}
#ifdef DEBUG
printf("已經退出了!\n");
#endif
printf("現在的學生數為:%d個!\n",n);
return(head);
} /*==================================================
============================================*/
score *statistics(score *head)
/*函數statistics,功能:統計學生成績*/
{
float sum1=0,sum2=0,sum3=0,ave1=0,ave2=0,ave3=0,max=0,min;
score *p;
int x,y=0,i=0;
p=head;
printf("1個人總分和平均分\t2單科平均分\t3總分最高分\t4總分最低分\n");
scanf("%d",&x);
getchar();
switch(x)
/*用switch語句實現功能選擇*/
{
case 1: if(head==NULL)
{printf("\n沒有任何學生資料!\n");return(head);}/*鏈表為空*/
else
{
printf("---------------------------------------------------------\n");
printf("|學號\t|姓名\t|cj1\t|cj2\t|cj3\t|總分\t|平均分\t|\n");
printf("---------------------------------------------------------\n");/*列印表格域*/
while(p!=NULL)
{
sum1=p->cj1+p->cj2+p->cj3; /*計算個人總分*/
ave1=sum1/3;/*計算個人平均分*/

printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|%.1f\t|%.1f\t|\n",p->number,p->name,p->cj1,p->cj2,p->cj3,sum1,ave1);
/*列印結果*/
printf("---------------------------------------------------------\n");/*列印表格域*/
p=p->next;}
}
return(head); break;
case 2: if(head==NULL)
{printf("\n沒有任何學生資料!\n");return(head);}/*鏈表為空*/
while(p!=NULL)
{
sum1=sum1+p->cj1;
sum2=sum2+p->cj2;
sum3=sum3+p->cj3;/*計算總分*/
y=y+1;
ave1=sum1/y;
ave2=sum2/y;
ave3=sum3/y;/*計算平均分*/
p=p->next;/*使p指向下一個結點*/
}
printf("cj1平均分是%.1f\n",ave1);
printf("cj2平均分是%.1f\n",ave2);
printf("cj3平均分是%.1f\n",ave3);/*列印結果*/
return(head); break;
case 3:
if(head==NULL)
{printf("\n沒有任何學生資料!\n");return(head);}/*鏈表為空*/
max=p->cj1+p->cj2+p->cj3;
while(i<n)
{
i=i+1;
sum1=p->cj1+p->cj2+p->cj3; /*計算個人總分*/
if(max<sum1)
max=sum1;
p=p->next;
}
printf("總分最高分:%.1f",max);
printf("\n");
return(head); break;
case 4: if(head==NULL)
{printf("\n沒有任何學生資料!\n");return(head);}/*鏈表為空*/
while(p!=NULL)
{
min=p->cj1+p->cj2+p->cj3;
while(p!=NULL)
{sum2=p->cj1+p->cj2+p->cj3;

if(min>sum2)
min=sum2;
p=p->next;
}
}

printf("總分最低分:%.1f",min);
printf("\n");
return(head); break;

default :printf("輸入錯誤,請重試!\n");
}
return(head);

}
/*===========================================================
===================================*/
int save(score *p1)
/*函數save,功能:保存學生的資料*/
{
FILE *fp;

char filepn[20];/*用來存放文件保存路徑以及文件名*/

printf("請輸入文件路徑及文件名:");
scanf("%s",filepn);
if((fp=fopen(filepn,"w+"))==NULL)
{
printf("不能打開文件!\n");
return 0;
}

fprintf(fp," 學生成績管理系統 \n");
fprintf(fp,"-------------------------------------------------------\n");
fprintf(fp,"| 學號\t| 姓名\t| cj1\t| cj2\t| cj3\t|\n");
fprintf(fp,"-------------------------------------------------------\n");
/*列印表格域*/
while(p1!=NULL)
{
fprintf(fp,"%d\t%s\t%.1f\t%.1f\t%.1f\t\n",p1->number,p1->name,p1->cj1,p1->cj2,p1->cj3);

p1=p1->next;/*下移一個結點*/

}
fclose(fp);
printf("文件已經保存!\n");
return 0;
}
int menu()/*函數menu,功能:菜單選擇界面*/
{
int i,k;
printf("\t\t\t\t學生成績管理系統\n");
for(i=0;i<80;i++)
printf("*");
printf("\t\t1創建資料\t\t\t2查詢成績\t\t\n");
printf("\t\t3刪除資料\t\t\t4追加資料\t\t\n");
printf("\t\t5統計成績\t\t\t6保存資料\t\t\n");
/*菜單選擇界面*/

for(i=0;i<80;i++)
printf("*");
printf("請選擇您所要的操作(選擇(0)退出):");
scanf("%d",&k);/*選擇操作*/
getchar();

return (k);}

/*==============================================================================================*/
main() /*主函數main,功能:通過調用creat,search,del,add,print,ststistics,save,taxis等函數,實現學生成績查詢系統功能*/
{
score *head=0,*stu=0;
while(1)
{
k=menu();
switch(k)/*用switch語句實現功能選擇*/
{
case 1: head=creat();break;/*調用創建鏈表函數*/
case 2: head=search(head);break;/*調用查詢函數*/
case 3: head=del(head); break;/*調用刪除函數*/
case 4: head=add(head,stu);break;/*調用追加函數*/
case 5: statistics(head); break;/*調用統計函數*/
case 6: save(head);break;/*調用保存函數*/
case 0: exit(0);/*退出系統,返回主界面*/
default: printf("輸入錯誤,請重試!\n");
}
}
}

熱點內容
買車的車主要看哪些配置 發布:2025-03-20 22:17:59 瀏覽:253
oracle生成腳本 發布:2025-03-20 22:08:34 瀏覽:730
遺傳演算法非線性 發布:2025-03-20 22:07:19 瀏覽:816
python編譯體積大 發布:2025-03-20 21:51:37 瀏覽:626
暴風影音清理緩存 發布:2025-03-20 21:46:14 瀏覽:463
centos內核編譯安裝 發布:2025-03-20 21:31:04 瀏覽:948
扣扣怎麼清理緩存 發布:2025-03-20 21:30:58 瀏覽:276
35的氨水溶液怎麼配置 發布:2025-03-20 21:29:24 瀏覽:256
安卓抖音封設備怎麼解決 發布:2025-03-20 21:29:23 瀏覽:351
手機微店批量上傳 發布:2025-03-20 21:27:56 瀏覽:557