⑴ c語言程序設計是什麼
這些C語言版本不僅實現了ANSI C標准,而且在此基礎上各自作了一些擴充,使之更加方便、完美。
回答者: - 10-13 14:34
C語言是一種通用的程序設計語言,由於其功能非常強大,因此可以用來完成一些非常復雜的工作.很多操作系統都是用C語言編寫的,例如:UNIX,MS-DOS,
Microsoft Windows,Linux 等.C語言具有高效,靈活,功能豐富,表達力強和移植性好等特點.
回答者: - 10-13 15:40
C語言的發展史和演變史就不多說了!
首先C語言是屬於高級語言(在這之前有機器語言,匯編語言)
其次C語言的特點是面向結構
再次它執行的特點是指至頂向下逐行
執行!
⑵ c語言程序設計
#include<stdio.h>
void main()
{
FILE *fp;
if((fp=fopen("d:\sdlkfj.c","wt"))==NULL)
{
printf("Can't open the file!\nPress any key to exit!");
getchar();
}
fprintf(fp,"寫入內容");
fclose(fp);
}
你的問題我一個一個來哈
第一個我們要創建一個文件那麼第四行這一句FILE *fp是定義一個文件指針我們知道有了個文件指針那麼肯定就要有這個文件,因此我們的C++它就創建了這樣一個文件,文件的名字類型就是sdlkfj.c
而你說的第二個補充問題 它創建這個文件是保存在你的新建的上面這個程序的保存的地方,如果你想改 那麼就可以把文件名改為D:\sdlkfj.c這樣它就保存在D盤下了
你的第三個補充,我首先想說無語......我上面的程序中不是有個「寫入內容」嗎? 在那兒把你想要保存的自己寫的程序輸入進去就可以了撒
所以可以是這樣的
#include<stdio.h>
void main()
{
FILE *fp;
if((fp=fopen("d:\sdlkfj.c","wt"))==NULL)/*這兒就是存在D盤*/
{
printf("Can't open the file!\nPress any key to exit!");
getchar();
}
fprintf(fp,"這兒就放你寫的main程序就可以了");
fclose(fp);
}
你先運行一下試下,然後就可以去D盤找sdlkfj.c這個文件了 一定新建了這個文件的!!goodluck!
⑶ C語言程序設計 (學生選修課程設計)
這是我做的,你看是否滿意?可能有點大,但也沒辦法呀,你的題目也比較大,呵呵!所以,如果滿意,多給我追加點分!
#include
"stdio.h"
#include
"stdlib.h"
#include
"string.h"
typedef
struct
course
{
char
number[15],name[25];
int
kind,time,lessontime,practicetime,credit,term;
}type;
FILE
*fp1;
void
overview();
//瀏覽函數,負責瀏覽整個課程信息
void
seek();
//查詢函數,負責查詢課程信息
void
choose_course();//選課函數,負責讓用戶選課
void
out(type
temp);
void
input();
int
main()
{
int
n,i;
if((fp1=fopen("course_information.txt","wb"))==NULL)
{printf("創建文件失敗!\n");exit(0);}
printf("請輸入要存儲的課程數目:\n");
scanf("%d",&n);
printf("開始創建文件,請輸入課程信息:\n\n");
for(i=0;i<n;i++)
{
printf("請輸入第%d門課程的信息:\n",i+1);
input();
printf("\n");
}
printf("如想瀏覽整個課程信息,請輸入1;如想查詢課程信息,請輸入2;
如想進行選課,請輸入3;如想結束選修課系統,請輸入0!\n");
while((scanf("%d",&n))!=EOF)
{
if(n==1)
overview();
if(n==2)
seek();
if(n==3)
choose_course();
if(n==0)
exit(0);
printf("\n\n如想繼續操作,只要按規則輸入你要進行的操作即可!\n規則:如想瀏覽整個課程信息,請輸入1;如想查詢課程信息,請輸入2;如想進行選課,請輸入3!\n");
}
printf("歡迎您使用此程序進行選課,謝謝!\n");
fclose(fp1);
return
0;
}
void
input()
{
course
c_a;
printf("請輸入課程編碼:
");
scanf("%s",c_a.number);
printf("請輸入課程名:
");
scanf("%s",c_a.name);
printf("請輸入課程性質:限選課,請輸入1;選修課,請輸入2;必修課,請輸入3!
");
scanf("%d",&c_a.name);
printf("請輸入課程總學時:
");
scanf("%d",&c_a.time);
printf("請輸入課程授課時間:
");
scanf("%d",&c_a.lessontime);
printf("請輸入課程實驗或實踐時間:
");
scanf("%d",&c_a.practicetime);
printf("請輸入課程學分:
");
scanf("%d",&c_a.credit);
printf("請輸入課程所在的學期,比如第二學期,就輸入2即可。");
scanf("%d",&c_a.term);
fwrite(&c_a,sizeof(struct
course),1,fp1);//將一個結構體元素寫入文件中
}
void
out(type
temp)
{
printf("課程代碼:
%s\n課程名:
%s\n",temp.number,temp.name);
printf("課程名:
%s\n",temp.name);
if(temp.kind==1)
printf("課程性質:
Limited
optional
course\n");
else
if(temp.kind==2)
printf("課程性質:
Optional
course\n");
else
if(temp.kind==3)
printf("課程性質:
Required
Courses\n");
else
printf("該編碼系統不認識,即無對應的課程性質存在!\n");
printf("課程總學時:
%d\n課程授課學時:
%d\n實驗或上機學時:
%d\n學分:
%d\n課程開課學期:
%d\n\n",temp.time,temp.lessontime,temp.practicetime,temp.credit,temp.term);
}
void
overview()
{
rewind(fp1);
course
temp;
printf("整個課程信息如下:\n");
while((fread(&temp,sizeof(type),1,fp1))!=0)
out(temp);
}
void
seek()
{
int
judge,credit=0,kind=0;
char
a='N';
course
temp;
printf("如想按學分查詢,請輸入1;如想按課程性質,請輸入2:\n");
scanf("%d",&judge);
rewind(fp1);
//將文件指針位置置為開頭
if(judge==1)
{
printf("請輸入要查詢的學分:\n");
scanf("%d",&credit);
while((fread(&temp,sizeof(type),1,fp1))!=0)
if(credit==temp.credit)
out(temp);
}
else
if(judge==2)
{
printf("請輸入你要查找課程的性質(限選課,請輸入1;選修課,請輸入2;必修課,請輸入3):");
scanf("%d",&kind);
while((fread(&temp,sizeof(type),1,fp1))!=0)
if(temp.kind==kind)
out(temp);
}
else
printf("不好意思,無此類查詢!\n");
}
void
choose_course()
{
rewind(fp1);
course
temp;
int
judge=1,n=0,time=0,credit=0;
char
choose[20][20];
r1:
printf("請開始填寫課程編號進行選課:\n");
while(judge==1)
{
printf("請輸入你所選課程的標號:
");
scanf("%s",choose[n]);
n++;
printf("如想繼續選課,請輸入1;如想提交,請輸入0!\n");
scanf("%d",&judge);
}
while((fread(&temp,sizeof(type),1,fp1))!=0)
{
for(int
i=0;i<n;i++)
if(strcmp(temp.number,choose[i])==0)
{time=time+temp.time;credit=temp.credit;break;}
}
if(time<270||credit<40)
goto
r1;
printf("你所選的課為:\n");
while((fread(&temp,sizeof(type),1,fp1))!=0)
{
for(int
i=0;i<n;i++)
if(strcmp(temp.number,choose[i])==0)
{out(temp);break;}
}
}
⑷ c語言程序設計
具體的設計方法,可以參考如下代碼:
#include <stdio.h>
#include <string.h>
#include <iostream.h>
#include <stdlib.h>
#include <windows.h>
typedef struct studentinfo //結構體定義
{
int num;//學號
char name[64];//姓名
int sex;//性別,1為男性,0為女性
float math;//數學
float english;//英語
float politic;//政治
float chinese;//語文
float total;//總成績
struct studentinfo *next;
}STUDENT;
#define FILENAME "D:\\1.txt"
//定義默認的資料庫文件
#define DELAYTIME 1500
//顯示信息,延時
void create_menu();
STUDENT * new_student();
STUDENT* create_linkbyfile(char *);
STUDENT *del_info(STUDENT *);
int save_info(char *,STUDENT *,int);
int find_infile_printf(char *);
int pri_whole_link(STUDENT *);
STUDENT* printf_sort(STUDENT *);
void free_link(STUDENT *);
void main() //主函數
{
create_menu();
}
void create_menu()
//功能:輸出功能菜單,提供人-機介面
{
int menu_Num;
STUDENT *head=NULL;
char ch;
char file_name[256];
while(1)
{
system("cls");
cout<<"\t\t學生成績管理系統\n";
cout<<"##########################################\n";
cout<<"#\t\t 1.新增學生信息\t\t #\n";
cout<<"#\t\t 2.載入資料庫\t\t #\n";
cout<<"#\t\t 3.刪除學生信息\t\t #\n";
cout<<"#\t\t 4.保存學生信息\t\t #\n";
cout<<"#\t\t 5.資料庫查詢\t\t #\n";
cout<<"#\t\t 6.原序輸出\t\t #\n";
cout<<"#\t\t 7.排序輸出\t\t #\n";
cout<<"#\t\t 8.退出\t\t\t #\n";
cout<<"##########################################\n";
cout<<"請輸入操作編號:";
cin>>menu_Num;
switch (menu_Num)
{
case 1:
free_link(head);//釋放鏈表空間
head=new_student();//新增學生信息
break;
case 2:
free_link(head);//釋放鏈表空間
cout<<"請輸入要載入的資料庫文件的路徑"<<endl;
cin>>file_name;
head=create_linkbyfile(file_name);//讀取數據文件
if(head!=NULL)
{
cout<<"資料庫"<<file_name<<"已載入"<<endl;
Sleep(DELAYTIME);
}
break;
case 3:
del_info(head);//刪除學生信息
break;
case 4://保存學生信息
if (head==NULL)
{
cout<<"請先生成學生信息"<<endl;
Sleep(DELAYTIME);
}
else
{
cout<<"想將學生信息保存到哪個資料庫文件?";
cin>>file_name;
cout<<"請選擇保存方式:0追加到文件末尾 1覆蓋文件\n";
cin>>menu_Num;
if(save_info(file_name,head,menu_Num)==0)//0表示追加,1表示覆蓋
{
cout<<"信息保存失敗\n";
}
else
{
cout<<"數據已保存到"<<file_name<<endl;
Sleep(DELAYTIME);
}
}
break;
case 5:
find_infile_printf(FILENAME);//資料庫查詢
break;
case 6://原序輸出信息
pri_whole_link(head);
cout<<"返回主菜單? Y/N\t";
do
{
cin>>ch;
}while(ch!='Y'&&ch!='y');
break;
case 7://排序輸出信息
do
{
if((head=printf_sort(head))==NULL)
{
cout<<"資料庫未載入"<<endl;
Sleep(DELAYTIME);
break;
}
else
{
cout<<"選擇其他方式排序? Y/N\t";
cin>>ch;
}
}while(ch=='Y'||ch=='y');
break;
case 8:
free_link(head);//釋放鏈表空間
exit(0);
break;
default:
cout<<"輸入有誤!請重新輸入!"<<endl;
break;
}
}
}
STUDENT * new_student()
//功能:創建學生信息(通過鏈表)
//返回值:頭結點指針
{
STUDENT *pnew,*p,*head;
float *pfloat;
char ch;
head=NULL;
do
{
system("cls");
pnew=(STUDENT *)malloc(sizeof(STUDENT)*1);
cout<<"請輸入學生的學號(0表示取消): ";
cin>>pnew->num;
if(0>=pnew->num)
{
break;
}
cout<<"請輸入學生的姓名:";
cin>>pnew->name;
while(1)
{
cout<<"請輸入學生的性別:0/1\t";
cin>>pnew->sex;
if(pnew->sex&&pnew->sex-1)
{
cout<<"性別輸入錯誤,0表示女性,1表示男性,請重新輸入"<<endl;
}
else
{
break;
}
}
cout<<"請依次輸入學生的數學、英語、政治、語文成績:"<<endl;
for(pnew->total=0,pfloat=&pnew->math;pfloat<&pnew->math+4;)
{
cin>>*pfloat;
if(*pfloat<0||*pfloat>150)
{
cout<<"成績輸入錯誤,只能為0~150"<<endl;
}
else
{
pnew->total+=*pfloat;
pfloat++;
}
}
if(head==NULL)
{
head=pnew;
}
else
{
p->next=pnew;
}
p=pnew;
pnew->next=NULL;
cout<<"##########################該學生信息已生成#########################\n";
cout<<"建立另一個學生的信息? Y/N\t";
cin>>ch;
}while(ch=='Y'||ch=='y');
return head;
}
STUDENT* create_linkbyfile(char *filename)
//功能:讀取文件,創建鏈表
//參數:如果filename不為空,則打開該文件,如果filename為空,要求輸入文件位置
//創建的鏈表的所有結點的next全部修改,指向物理地址上的下一個結點
{
system("cls");
FILE *fp;
STUDENT *head,*ptemp,*pnew;
head=NULL;//初始化head為空
if(filename==NULL)//若filename為空,要求輸入文件絕對地址
{
char file_name[256];
cout<<"請輸入資料庫文件的路徑:"<<endl;
cin>>file_name;
if(NULL==(fp=fopen(file_name,"rb")))
{
cout<<"資料庫連接失敗\n";
return 0;
}
}
else
{
if(NULL==(fp=fopen(filename,"rb")))
{
cout<<"資料庫連接失敗\n";
return 0;
}
}
for(ptemp=NULL;;)
{
pnew=(STUDENT *)malloc(sizeof(STUDENT)*1);
if(fread(pnew,sizeof(STUDENT),1,fp)!=NULL)
{
if(ptemp!=NULL)
{
ptemp->next=pnew;
}
else
{
head=pnew;
}
ptemp=pnew;
}
else
{
if(ptemp!=NULL)
{
ptemp->next=NULL;
}
else
{
head=NULL;
}
free(pnew);
break;
}
}
fclose(fp);
return head;
}
STUDENT *del_info(STUDENT *head)
//根據學號,刪除鏈表的結點
{
system("cls");
STUDENT *p1,*p2;
int num;
if (head==NULL)
{
cout<<"資料庫未載入"<<endl;
Sleep(DELAYTIME);
return 0;
}
cout<<"請輸入要刪除學生的學號:";
cin>>num;
for(p1=head;p1!=NULL;)
{
if(p1->num==num)/到
{
if(p1==head)//要刪除的結點是頭結點
{
head=p1->next;
}
else
{
p2->next=p1->next;
}
cout<<"成功刪除!!";
}
p2=p1;
p1=p1->next;
}
return head;
}
int save_info(char *filename,STUDENT *head,int flag)
//功能:將鏈表按Binary寫入文件末尾
//參數:
//1.filename文件名,絕對地址
//2.head指向鏈表的頭結點
//3.flag 0追加或1覆蓋數據
//返回值:失敗則返回0
{
system("cls");
FILE *fp;
STUDENT *p;
char openmethod[8];
if(flag==0)
{
strcpy(openmethod,"ab+");//追加
}
else
{
strcpy(openmethod,"w");//覆蓋
}
if(NULL==(fp=fopen(filename,openmethod)))//
{
cout<<"資料庫連接失敗"<<endl;
Sleep(DELAYTIME);
return 0;
}
else
{
for(p=head;p;p=p->next)
{
if((fwrite(p,sizeof(STUDENT),1,fp))==NULL)
{
cout<<"資料庫創建失敗"<<endl;
return 0;
}
}
}
fclose(fp);
return 1;
}
int find_infile_printf(char *filename)
//功能:根據學號和姓名來查詢某個學生
//參數:filename資料庫文件
//返回值:失敗返回0
//直接搜索文件,缺點是速度慢
//也可先根據文件創建鏈表,再搜索鏈表,缺點是如果文件較大,佔用內存多
{
system("cls");
FILE *fp;
STUDENT stu;
int num;
char stu_name[64];
char ch;
if(filename==NULL)
{
return 0;
}
do
{
memset(stu_name,0,sizeof(stu_name));
cout<<"查詢學號或查詢姓名? 1查詢學號 0查詢姓名";
//flag=1根據學號來查詢,flag=0根據姓名來查詢
cin>>num;
if(num==1)
{
cout<<"輸入要查詢的學號:";
cin>>num;
cout<<"正在為您查詢學號為"<<num<<"的學生……"<<endl;
}
else if(num==0)
{
cout<<"輸入要查詢的姓名:";
cin>>stu_name;
cout<<"正在為您查詢姓名為"<<stu_name<<"的學生……"<<endl;
}
else
{
cout<<"輸入有誤"<<endl;
return 0;
}
if(NULL==(fp=fopen(filename,"rw")))
{
cout<<"資料庫連接失敗\n";
return 0;
}
else
{
while(fread(&stu,sizeof(STUDENT),1,fp)!=NULL)
{
if(strcmp(stu.name,stu_name)==0||stu.num==num)
{
cout<<"學號\t姓名\t性別\t數學\t英語\t政治\t語文\t總成績\n";
//輸出該學生的所有信息
cout<<stu.num<<"\t"<<stu.name<<"\t"<<stu.sex<<"\t"<<stu.math<<"\t"<<stu.english<<"\t"<<stu.politic<<"\t"<<stu.chinese<<"\t"<<stu.total<<endl;
//不加break;可支持多個相同數據的索引
}
}
}
cout<<"##########################查詢完畢#########################\n";
cout<<"查詢另一個學生的信息? Y/N\t";
cin>>ch;
}while(ch=='Y'||ch=='y');
fclose(fp);
return 1;
}
int pri_whole_link(STUDENT *head)
//功能:顯示整條鏈表的學生信息
//參數:head 頭結點指針,如果head為空,返回空
{
system("cls");
STUDENT* p;
if (head==NULL)
{
cout<<"資料庫未載入"<<endl;
Sleep(DELAYTIME);
return 0;
}
cout<<"學號\t姓名\t性別\t數學\t英語\t政治\t語文\t總成績\n";
for(p=head;p;p=p->next)
{
cout<<p->num<<"\t"<<p->name<<"\t"<<p->sex<<"\t"<<p->math<<"\t"<<p->english<<"\t"<<p->politic<<"\t"<<p->chinese<<"\t"<<p->total<<endl;
}
return 1;
}
STUDENT* printf_sort(STUDENT *head)
//功能:根據學號|某科目成績|總成績對鏈表進行排序,然後輸出
//參數:head鏈表頭指針,如果head為空,返回空
//返回值:返回新的鏈表的頭結點指針
{
system("cls");
STUDENT *p1,*p2,*ptemp,*pfinished=NULL;
int num;
int flag;
if (head==NULL)
{
return 0;
}
cout<<"選擇排序依據 0.數學成績1.英語成績2.政治成績3.語文成績4.總成績\n";
cin>>num;
// cout<<"升序/降序輸出? 0.升序1.降序";
// cin>>flag;
for(p1=head;p1->next!=pfinished;)//對鏈表進行從大到小排序(這里用冒泡法)
//p1使之總是指向頭結點,pfinished使之總是指向已排序好的最前面的結點
//ptemp作為中介,保存p2的上一個結點
{
for(p2=p1;p2->next!=pfinished;)
{
if(*(&(p2->math)+num)<*(&(p2->next->math)+num))//p2的值小於p2->next的值,交換 ptemp p2 p2->next
{
if(p2==p1)//頭結點要交換
{
p1=p2->next;
p2->next=p1->next;
p1->next=p2;
ptemp=p1;
}
else
{
ptemp->next=p2->next;
ptemp=p2->next;
p2->next=ptemp->next;
ptemp->next=p2;
}
}
else//不需要交換,則p2、ptemp前進1位
{
ptemp=p2;
p2=p2->next;
}
}
pfinished=p2;
}
// if(flag==1)
// {
pri_whole_link(p1);
// }
// else
// {
// }
cout<<"##########################信息顯示完畢#########################\n";
return p1;
}
void free_link(STUDENT *head)
//釋放鏈表空間,如果head,什麼都不做
{
STUDENT *p1,*p2;
for(p1=head;p1;p1=p2)
{
p2=p1->next;//先保存,否則
free(p1);//free後 p1->next數據丟失
}
}
⑸ c語言程序設計
選 A. '\101' , 這是轉義字元八進制101。 字元常量 'A' 的數值是 八進制 101。
printf("%c %c\n",'A','\101'); //輸出 A A
(16進制是 0x41, 不是 0x65, 不是 0x77)
另外, 我們可以輸出字元常量 'A' 的 八進制,16進制 數值來看:
printf("%o %x\n",'A','A'); //輸出 101 41
⑹ C語言程序設計
1.scanf 一個數字 num 如果num<0 重新scanf
排序很簡單 自己隨便寫一個
2.結構體數組完全可以搞定了
⑺ C語言程序設計
這個也不是很全,但是大體功能有了,你改進一下嘛,我運行過的可以!
希望對你有所幫助!
#include <stdio.h>
#include <stdlib.h>
#define SIZE 10 /*定義常量SIZE便於以後的修改*/
struct student /*定義一個結構體數組存放學生的信息*/
{
int number; /*學號*/
char name[20];/*名字*/
float score[3];/*分數*/
float average;/*平均分*/
}stu[SIZE];
void menu();/*調用菜單函數*/
void write();/*讀入信息*/
void save();/*保存stud.dat文件函數*/
void open();/*檢查是否正確保存*/
void inturn (struct student c[]);/*用於對學生的信息按平均分排序的函數*/
void save2();/*將排序後的信息存入studsort.dat文件中*/
void read();/*讀取studsort.dat文件文件中第2 4 6 8 10個學生的信息*/
void main()
{
int choice;/*用戶選擇變數*/
printf("*******************************************************************************\n");
printf("* *\n");
printf("* Hwadee &學生成績文件管理& Hwadee *\n");
printf("* *\n");
printf("*******************************************************************************\n\n\n");
printf("******************************●●歡迎使用●●*********************************");
system("pause");
while (1)
{
menu();/*調用菜單函數形成操作界面*/
printf("請選擇:\t");
scanf("%d", &choice);
if ( choice == 0 )
{
system("cls");
printf("\n\n\t\t\t\t謝謝使用!!!\n\n\t\t\t\t\t\t\t\t指導老師: 梁凱\n\n\t\t\t\t\t\t\t\t 學生:萬超\n");
break;
}
switch(choice) /*多重選擇實現功能不同的功能*/
{
case 1:
write();
break;
case 2:
system("cls");
save();
break;
case 3:
system("pause");
system("cls");
open();
break;
case 4:
system("cls");
printf("排序前的學生信息:\n");
open();
inturn(stu);
save2();
break;
case 5:
system("cls");
read();
break;
default:
printf("\n無此項功能!\n請重新輸入\n");
}
}
}
void menu()
{
printf("\n1*****輸入學生信息\t\t2*****將信息存入文件stud.dat中\n");
printf("3*****檢查文件數據\t\t4*****將學生信息排序並存入文件studsort.dat中\n");
printf("5*****讀取文件studsort.dat中的第 2 4 6 8 10個學生的信息\n");
printf("0*****退出系統\n\n\n");
}
/**********************************************************************\
函數名稱:
write
功能描述:
完成將學生信息寫入
函數參數:
i stu
返回值:
無
模塊歷史:
\*********************************************************************/
void write()
{
int i;/*計數變數*/
stu[i].average = 0;/*初始化結構體成員 average*/
printf("請你輸入學生的信息\n");
printf("學號\t姓名\t語文\t數學\t英語\t\n");
for (i=0; i<SIZE;i++)
{
scanf("%d\t",&stu[i].number);
if (stu[i].number == 0)/*不需輸入信息時輸入0即可*/
break;
scanf("%s\t%f\t%f\t%f",&stu[i].name, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]);
stu[i].average = (stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3;/*計算平均成績*/
}
}
/**********************************************************************\
函數名稱:
save
功能描述:
將寫入的信息讀入文件中
函數參數:
FILE *fp i
返回值:
無
模塊歷史:
\*********************************************************************/
void save()
{
FILE *fp;/*定義文件指針用於向文件讀入數據*/
int i;
if ((fp=fopen("stud.dat","wb")) == NULL)
{
printf("cannot open file\n");
return;
}
for (i=0;i<SIZE;i++)
if (fwrite(&stu[i],sizeof(struct student),1,fp) != 1)
printf("file write error\n");
fclose(fp);
printf("\n信息保存成功!恭喜!!\n\n");
}
/**********************************************************************\
函數名稱:
open
功能描述:
用於檢查讀入文件的數據是否正確
函數參數:
FILE *cp i
返回值:
無
模塊歷史:
\*********************************************************************/
void open()
{
int i;
FILE *cp;
cp = fopen ("stud.dat","rb");
printf("保存在stud.dat文件中的信息:\n\n");
printf("學號\t姓名\t數學\t語文\t英語\t平均分\n\n");
for (i=0;i<SIZE;i++)
{
fread(&stu[i],sizeof(struct student),1,cp);
printf("%d\t%s\t%.1f\t%.1f\t%.1f\t%.1f\n\n\n",stu[i].number, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].average );
}
fclose (cp);
}
/**********************************************************************\
函數名稱:
inturn
功能描述:
用於對結構體數組中的元素排序
函數參數:
into i,j,k
struct student temp
返回值:
無
模塊歷史:
\*********************************************************************/
void inturn(struct student m[])
{
int i,j,k;/*計數變數*/
struct student temp;/*中間變數 類型為結構體*/
for(i=0; i<SIZE-1; i++) /*運用冒泡排序對結構體數組進行排序*/
for (j=i+1; j<SIZE; j++)
{
if( m[i].average < m[j].average )
{
temp = m[i];
m[i] = m[j];
m[j] = temp;
}
}
printf("\n排序後的學生信息:\n\n");
printf(" 學號\t姓名\t數學\t語文\t英語\t平均分\n");
for (i=0; i<SIZE; i++)
{
printf("第%d名 %d\t%s\t%.1f\t%.1f\t%.1f\t%.1f\n\n\n",i+1, stu[i].number, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].average );
}/*輸出排序後的學生信息*/
}
/**********************************************************************\
函數名稱:
save2
功能描述:
將排序後的學生信息讀入到另外的文件中
函數參數:
FILE *mp
i
返回值:
無
模塊歷史:
\*********************************************************************/
void save2()
{
FILE *mp;
int i;
if ((mp=fopen("studsort.dat","wb"))==NULL)
{
printf("cannot open file\n");
return;
}
for (i=0;i<SIZE;i++)
if (fwrite(&stu[i], sizeof(struct student), 1, mp) != 1)
printf("file write error\n");
fclose(mp);/*讀取完畢關閉文件*/
}
/**********************************************************************\
函數名稱:
read
功能描述:
讀出另外文件中的信息
函數參數:
FILE *tp
i
返回值:
無
模塊歷史:
\*********************************************************************/
void read()
{
int i=1;
FILE *tp;
tp = fopen ("studsort.dat", "rb" );
printf("studsort.dat文件中偶數號碼學生的信息如下:\n\n");
printf("學號\t姓名\t數學\t語文\t英語\t平均分\n\n");
for (i = 1;i<SIZE;i += 2)
{
fseek(tp,i*sizeof(struct student),0);/*fseek函數可以根據用戶所需對文件開頭的偏移量來讀取文件的數據。
k*sizeof(struct student)是指將位置指針移到當前位置k個位元組處*/
fread(&stu[i],sizeof(struct student),1,tp);
/*注意:必須使用fseek函數定位後才能根據自己所需讀出數據,但是只用fseek函數不用fread,
只是把數據列印到屏幕上而並沒有從文件中讀取。這是一個常見性問題*/
printf("%d\t%s\t%.1f\t%.1f\t%.1f\t%.1f\n", stu[i].number, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].average );
}
fclose (tp);/*讀取完畢關閉文件*/
}
⑻ 求:標准C語言程序設計(中文版)電子書
【原 書 名】 A First Book of ANSI C, Fourth Edition
【原出版社】 Thomson
【作 者】(美)Gary J.Bronson [同作者作品]
【譯 者】 單先余[同譯者作品] 陳芳 張蓉 等
【叢 書 名】 國外計算機科學教材系列
【出 版 社】 電子工業出版社 【書 號】 7121026597
【出版日期】 2006 年9月 【開 本】 16開 【頁 碼】 586 【版 次】4-1
【定價】49.0
我在網上搜了一下,沒有電子版的。
建議你學校圖書館借,這樣的書圖書館一般有,英文中文都有。
⑼ C語言程序設計 清華大學出版社 黃維通 馬力妮 編著
可以,但是還要學習許多別的知識,如數據結構,演算法,網路,硬體等等。
⑽ C語言程序設計
#include<stdio.h>
#include<stdlib.h>
intn;
typedefstructstudent{
intnum;
intmingci;
charname[20];
doublea[4];
doublesum;
doubleavreage;
structstudent*next;
}STU;
STU*creat();
voidadd_student(STU*);
voidshow(STU*);
STU*delete_student(STU*);
voidpaiming(STU*);
voidshow_one(STU*s);
intpanan(doublel);
intmain(){
intchoose;
STU*head=creat();
while(1){
printf("1錄入信息 ");
printf("2查詢學生信息 ");
printf("3刪除學生信息 ");
scanf("%d",&choose);
switch(choose){
case1:add_student(head);break;
case2:show(head);break;
case3:head=delete_student(head);break;
default:break;
}
}return0;
}
//創建鏈表表頭
STU*creat(){
n=0;
STU*head;
head=(STU*)malloc(sizeof(STU));
head->next=NULL;
returnhead;
}
//錄入學生信息
voidadd_student(STU*s){
STU*p=s;
STU*p1;
while(p->next!=NULL){
p=p->next;
}while(1){
printf("請輸入學號:學號為0表示輸入結束輸入!");
scanf("%d",&p->num);
if(p->num!=0){
n++;
printf("請輸入姓名:");
scanf("%s",p->name);
printf("請輸入成績格式C程序設計高等數學英語線性代數:");
scanf("%lf%lf%lf%lf",&p->a[0],&p->a[1],&p->a[2],&p->a[3]);
p->sum=p->a[0]+p->a[1]+p->a[2]+p->a[3];
p->avreage=p->sum/4;
p->mingci=0;
p1=(STU*)malloc(sizeof(STU));
p->next=p1;
p1->next=NULL;
p=p1;
}else
{
printf("錄入結束! ");
paiming(s);
break;
}
}
}
//根據學號刪除學生信息
STU*delete_student(STU*s){
intnum;
STU*p=s,*p1;
printf("請輸入要刪除學生的學號:");
scanf("%d",&num);
while(p->next!=NULL){
if(p->num==num&&s==p){
n--;
returnp->next;
}elseif(p->num==num){
n--;
p1->next=p->next;
paiming(s);
returns;
}p1=p;
p=p->next;
}
if(n==0){printf("資料庫目前為空,請錄入信息! ");}
else{
printf("沒有發現你輸入的學號! ");}
returns;
}
//顯示學生資料庫信息
voidshow(STU*s){
STU*head=s;
if(n==0){
printf("資料庫為空,請先錄入信息! ");
}
else{
while(s->next!=NULL){
printf("學號:%d姓名:%s成績:%.2lf%.2lf%.2lf%.2lf平均分:%.2lf名次:%d ",s->num,s->name,s->a[0],s->a[1],s->a[2],s->a[3],s->avreage,s->mingci);
s=s->next;
}
show_one(head);
}
}
//對學生按平均分排名
voidpaiming(STU*s){
doublescore[n];
intj,i=0;
STU*head=s;
while(s->next!=NULL){
score[i]=s->avreage;
s=s->next;
i++;
}
doubletemp;
for(i=0;i<n;i++){
for(j=i;j<n;j++){
if(score[i]<score[j]){
temp=score[i];
score[i]=score[j];
score[j]=temp;
}
}
}
for(i=0;i<n;i++){
if(score[i]!=0){
s=head;
while(s->next!=NULL){
if(s->mingci==0){
if(score[i]==s->avreage){
score[i]=0;
s->mingci=i+1;
break;
}
}
s=s->next;
}
}
}}
//單科平均分統計
voidshow_one(STU*s){
doublear[4]={0};
intb[4][4]={{0},{0},{0},{0}};
inti;
while(s->next!=NULL){
for(i=0;i<4;i++){
b[i][panan(s->a[i])]++;
ar[i]+=s->a[i];
}
s=s->next;
}
printf("各科平均分%.2lf%.2lf%.2lf%.2lf ",ar[0]/n,ar[1]/n,ar[2]/n,ar[3]/n);
printf("90-100分%d%d%d%d ",b[0][0],b[1][0],b[2][0],b[3][0]);
printf("80-89分%d%d%d%d ",b[0][1],b[1][1],b[2][1],b[3][1]);
printf("60-79分%d%d%d%d ",b[0][2],b[1][2],b[2][2],b[3][2]);
printf("60分以下%d%d%d%d ",b[0][3],b[1][3],b[2][3],b[3][3]);
}
intpanan(doublel){
if(l>=90&&l<=100)return0;
elseif(l>=80&&l<=89)return1;
elseif(l>=60&&l<=79)return2;
elsereturn3;
}