㈠ c語言程序設計實例教程的圖書目錄
第1章 C語言概述
1.1 C語言的發展及特點
1.1.1 C語言的發展
1.1.2 C語言的特點
1.2 C語言程序的結構及其基本要求
1.2.1 C語言程序的結構
1.2.2 C語言程序的基本要求
1.3 C語言程序上機調試步驟和方法
1.3.1 Turbo C2.0開發環境
1.3.2 Visual C++6.0開發環境
習題
第2章 數據類型、運算符與表達式
2.1 常量和變數
2.1.1 常量和符號常量
2.1.2 變數
2.2 運算符和表源茄核達式
2.2.1 算術運算符和算術表達式
2.2.2 賦值運算符和賦值表達式
2.3 數據類型轉換
2.3.1 不同數據類型的數據音的混合運算
2.3.2 強制類型轉換
2.4 位運算
習題
第3章 數據的輸入和輸出
3.1 數據的輸出
3.1.1 格式輸出函數printf()
3.1.2 字元輸出函數putchar()
3.2 數據的輸入
3.2.1 格式輸入函數scanf()
3.2.2 字元輸入函數getchar()
3.3 輸入輸出綜合應用舉例
習題
第4章 C程序控制結構
4.1 順序結構程序設計
4.1.1 C語言語句
4.1.2 順序結構
4.2 程序控制結構中的條件表示
4.2.1 關系運算符和關系表達式
4.2.2 邏輯運算符和邏輯表達式
4.2.3 條件運算符和條件表達式
4.3 選擇結構程序設計
4.3.1 if語句
4.3.2 switch語句
4.4 循環結構程序設計
4.4.1 while語句
4.4.2 do-while語句
4.4.3 for語句
4.4.4 循環的嵌套
4.4.5 break、continue和goto語句
4.5 綜合應用舉例
習題
第5章 數組
5.1 一維數組
5.1.1 一維數組的定義和初始化
5.1.2 一維數組的引用與賦值
5.1.3 一維數組的應用舉例
5.2 二維數組
5.2.1 二維數組的定義和初始化
5.2.2 二維數組的引用與賦值
5.2.3 二維數組的應用舉例
5.3 字元數組
5.3.1 字元數組的定義和初始化
5.3.2 字元數組的引用與賦值
5.3.3 字元串函數
5.3.4 字元數組的應用舉例
5.4 綜合應用舉例
習題
第6章 函數
6.1 函數的定義、聲明與調用
6.1.1 函數的定義
6.1.2 函數的聲明
6.1.3 函數的調用
6.2 變數和函數的作用域
6.2.1 變數的作用域
6.2.2 變數生命周期
6.3 函數的遞歸調用
6.4 預預處理命令
6.4.1 宏定義
6.4.2 文件包含
6.4.3 條件編譯
6.5 綜合應用舉例
習題
第7章 指針
7.1 指針變數的定義和引用
7.1.1 指針變數的定義
7.1.2 指針變數的引用
7.1.3 指針運算
7.2 指針與數組
7.2.1 指針與一維數組
7.2.2 指針與二維數組
7.2.3 指針與字元串
7.2.4 指針數組
7.3 指針與函數
7.3.1 指針變數作為函數的參數
7.3.2 函數的返回值為指針
7.3.3 指向函數的指針
7.3.4 帶參數的main函數和命令行參數
7.4 多級指針
7.5 綜合應用舉例
習題
第8章 結構體、共用體和枚舉類型
8.1 結構體
8.1.1 結構體類型的定義
8.1.2 結構體變數的定義
8.1.3 結構體變數的引用和初始化
8.1.4 結構體數組
8.1.5 結構體與指針
8.1.6 結構體與函數
8.2 共用體
8.2.1 共用體類型和變數的定義
8.2.2 共用體變數的引用
8.3 枚舉類型
8.3.1 枚舉類型的定義
8.3.2 枚舉變數的定義和引用
8.4 動態存儲分配
8.4.1 動態分配函數
8.4.2 鏈表簡介
8.5 用typedef定義類型
8.6 綜合應用舉例
習雹掘題
第9章 文件
9.1 文件概述
9.1.1 文件的基本概念
9.1.2 文件類型指針納者
9.1.3 文件的打開與關閉
9.2 文件的讀寫和定位
9.2.1 文件的讀寫
9.2.2 文件的定位
9.3 文件操作錯誤的檢測
9.4 綜合應用舉例
習題
附錄 1 ASCII碼表
附錄 2 運算符和結合性
附錄 3 常見庫函數(按函數類別排序)
㈡ C語言程序設計實例教程的2010年版圖書
C語言程序設計實例教程
作者: 朱家義,黃勇 主編
出 版 社: 清華大學出版社
出茄基版時間: 2010-1-1
開本: 16開
I S B N : 9787302193821
定價:¥29.00 本書以程序設計知識板塊為基礎,針對高級語言的知識體系結構,圍繞學習目標為相關內容設計出相應實例任務,通過與任務相關知識的學習,達到完成該章任務的目的。各章均安排具有針對性的拓展實例,以便於讀者迸一步理解和牢固掌握各章節的基本內容,體現了學以致用的原則。
全書共分11章,主要內容包括演算法基礎、c語言基礎、順序結構程序設計、選擇結構程序設旦納棗計、循環結構程序設計、數組與指針、函數、文件、編譯預處理、簡單圖形編程和綜合應用程序的開發等內容。
本書可作為高等學校計算機及相關專業程序設計的教材,也可作為計算機等級考試以及計算機愛好者自學用書和各類工程技術人員的參考書。 第1章程序設計基礎
1.1演算法
1.1.1演算法的定義
1.1.2演算法的描述方法
1.1.3演算法設計的要求
1.1.4演算法時間效率
1.1.5結構化程序設計
1.2問題求解的實現過程
1.3C語言程序結構
1.3.1C程序的結構
1.3.2標識符和關鍵字
本章小結
習題1
第2章C語言基礎知識
2.1數據類型簡介
2.2常量和變數
2.2.1常量
2.2.2符號常量
2.2.3變數
2.3基本數據類型
2.3.1整型
2.3.2實型
2.3.3模拆字元型
2.3.4枚舉類型
2.4構造類型
2.4.1數組
2.4.2結構體
2.4.3共用體
2.4.4用typedef定義類型
2.5指針
2.5.1指針與指針變數
2.5.2指針變數的定義
2.5.3指針變數的引用
2.6運算符與表達式
2.6.1算術運算
2.6.2關系和邏輯運算
2.6.3賦值運算
2.6.4位運算
2.6.5條件運算
2.6.6逗號運算
2.6.7表達式的其他說明
2.7數據類型轉換
2.7.1自動類型轉換
2.7.2賦值類型轉換
2.7.3強制類型轉換
2.8常用庫函數介紹
2.8.1數學函數
2.8.2字元函數
本章小結
習題2
第3章順序結構程序設計
3.1任務描述
3.2賦值語句
3.3數據輸入與輸出
3.3.1printf函數
3.3.2scanf函數
3.3.3字元數據的輸入與輸出
3.4程序實現
3.5實例拓展
本章小結
習題3
第4章選擇結構程序設計
4.1任務描述
4.2if語句
4.2.1單分支if語句
4.2.2雙分支if語句
4.2.3if語句的嵌套
……
第5章循環結構程序設計
第6章數組與指針
第7章函數與指針
第8章文件
第9章預處理命令
第10章簡單圖形編程
第11章C語言綜合程序設計
附錄A ASCII碼表
附錄B Turbo C集成開發環境
附錄C Turbo C2.0常用庫函數
附錄D Turbo C語言運算符表
參考文獻
㈢ C語言程序設計實例教程的內容簡介
本書作為C語言程序設計的入門與應用教材,共分9章,主要內容包括:C語言概述;數據類型、運算符與表達式;數據的輸入和輸出;C程序控制結構;數組;函數及預處理命令;指針;結構體、共用體和枚舉類型;文件操作等。本書注重基礎,突出應用。每章都有一節為「綜合應用舉羨埋例」,以便於讀者能汪橋夠綜合運用本章知識點提高實際編程能力。
本書易教易學、學以致用、注重能力,對困派猛初學者容易混淆的內容進行了重點提示和講解。本書適合作為普通高等院校應用型本科(含部分專科、高職類)各相關專業的程序設計教材,也適合編程開發人員培訓、自學使用。
㈣ c語言課程設計
字數受限,只能打這多了或看看這個http://wenku..com/view/92d3d138376baf1ffc4fad1a.html#include "stdio.h" #include "stdlib.h" #include "string.h" #include "conio.h" #include "mem.h" #include "ctype.h" /#include "alloc.h" #define N 3 typedef struct z1
{
char no[11];
char name[15];
int score[N];
float sum;
float average;
int order;
struct z1 *next;
}STUDENT;
STUDENT *init();
STUDENT *create();
STUDENT *delete(STUDENT *h);
void print(STUDENT *h); /* 顯示所有記錄*/
void search(STUDENT *h); /*查找*/
void save(STUDENT *h); /*保存*/
STUDENT *load(); /*讀入記錄*/
void computer(STUDENT *h); /*計算總分和均分*/
STUDENT *insert(STUDENT *h); /*插入記錄*/
void append(); /*追加記錄*/
void (); /*復制文件*/
STUDENT *sort(STUDENT *h); /*排序*/
STUDENT *index(STUDENT *h); /*索引*/
void total(STUDENT *h); /*分類合計*/
int menu_select(); /*菜單函數*/
/******主函數開始*******/
main()
{
int i;
STUDENT *head; /*鏈表定義頭指針*/
head=init(); /*初始化鏈表*/
clrscr(); /*清屏*/
for(;;) /*無限循環*/
{
switch(menu_select()) /*調用主菜單函數,返回值整數作開關語句的條件*/
{ /*值不同,執行的函數不同,break 不能省略*/
case 0:head=init();break;
case 1:head=create();break;
case 2:head=delete(head);break;
case 3:print(head);break; /*顯示全部記錄*/
case 4:search(head);break; /*查找記錄*/
case 5:save(head);break; /*保存文件*/
case 6:head=load(); break; /*讀文件*/
case 7:computer(head);break; /*計算總分和均分*/
case 8:head=insert(head); break; /*插入記錄*/
case 9:();break; /*復制文件*/
case 10:head=sort(head);break; /*排序*/
case 11:append();break; /*追加記錄*/
case 12:head=index(head);break; /*索引*/
case 13:total(head);break; /*分類合計*/
case 14:exit(0); /*如菜單返回值為14程序結束*/
}
}
}
/*菜單函數,返回值為整數*/
menu_select()
{
char *menu[]={"***************MENU***************", /*定義菜單字元串數組*/
" 0. init list", /*初始化*/
" 1. Enter list", /*輸入記錄*/
" 2. Delete a record from list", /*從表中刪除記錄*/
" 3. print list ", /*顯示單鏈表中所有記錄*/
" 4. Search record on name", /*按照姓名查找記錄*/
" 5. Save the file", /*將單鏈表中記錄保存到文件中*/
" 6. Load the file", /*從文件中讀入記錄*/
" 7. compute the score", /*計算所有學生的總分和均分*/
" 8. insert record to list ", /*插入記錄到表中*/
" 9. the file to new file", /*復制文件*/
" 10. sort to make new file", /*排序*/
" 11. append record to file", /*追加記錄到文件中*/
" 12. index on nomber", /*索引*/
" 13. total on nomber", /*分類合計*/
" 14. Quit"}; /*退出*/
char s[3]; /*以字元形式保存選擇號*/
int c,i; /*定義整形變數*/
gotoxy(1,25); /*移動游標*/
printf("press any key enter menu......\n"); /*壓任一鍵進入主菜單*/
getch(); /*輸入任一鍵*/
clrscr(); /*清屏幕*/
gotoxy(1,1); /*移動游標*/
textcolor(YELLOW); /*設置文本顯示顏色為黃色*/
textbackground(BLUE); /*設置背景顏色為藍色*/
gotoxy(10,2); /*移動游標*/
putch(0xc9); /*輸出左上角邊框┏*/
for(i=1;i<44;i++)
putch(0xcd); /*輸出上邊框水平線*/
putch(0xbb); /*輸出右上角邊框 ┓*/
for(i=3;i<20;i++)
{
gotoxy(10,i);putch(0xba); /*輸出左垂直線*/
gotoxy(54,i);putch(0xba);
} /*輸出右垂直線*/
gotoxy(10,20);putch(0xc8); /*輸出左上角邊框┗*/
for(i=1;i<44;i++)
putch(0xcd); /*輸出下邊框水平線*/
putch(0xbc); /*輸出右下角邊框┛*/
window(11,3,53,19); /* 製作顯示菜單的窗口,大小根據菜單條數設計*/
clrscr(); /*清屏*/
for(i=0;i<16;i++) /*輸出主菜單數組*/
{
gotoxy(10,i+1);
cprintf("%s",menu[i]);
}
textbackground(BLACK); /*設置背景顏色為黑色*/
window(1,1,80,25); /*恢復原窗口大小*/
gotoxy(10,21); /*移動游標*/
do{
printf("\n Enter you choice(0~14):"); /*在菜單窗口外顯示提示信息*/
scanf("%s",s); /*輸入選擇項*/
c=atoi(s); /*將輸入的字元串轉化為整形數*/
}while(c<0||c>14); /*選擇項不在0~14之間重輸*/
return c; /*返回選擇項,主程序根據該數調用相應的函數*/
}
STUDENT *init()
{
return NULL;
}
/*創建鏈表*/
STUDENT *create()
{
int i; int s;
STUDENT *h=NULL,*info; /* STUDENT指向結構體的指針*/
for(;;)
{
info=(STUDENT *)malloc(sizeof(STUDENT)); /*申請空間*/
if(!info) /*如果指針info為空*/
{
printf("\nout of memory"); /*輸出內存溢出*/
return NULL; /*返回空指針*/
}
inputs("enter no:",info->no,11); /*輸入學號並校驗*/
if(info->no[0]=='@') break; /*如果學號首字元為@則結束輸入*/
inputs("enter name:",info->name,15); /*輸入姓名,並進行校驗*/
printf("please input %d score \n",N); /*提示開始輸入成績*/
s=0; /*計算每個學生的總分,初值為0*/
for(i=0;i<N;i++) /*N門課程循環N次*/
{
do{
printf("score%d:",i+1); /*提示輸入第幾門課程*/
scanf("%d",&info->score[i]);
if(info->score[i]>100||info->score[i]<0)
printf("bad data,repeat input\n");
}while(info->score[i]>100||info->score[i]<0);
s=s+info->score[i];
}
info->sum=s;
info->average=(float)s/N;
info->order=0;
info->next=h;
h=info; }
return(h); /*返回頭指針*/
}
/*輸入字元串,並進行長度驗證*/
inputs(char *prompt, char *s, int count)
{
char p[255];
do{
printf(prompt); /*顯示提示信息*/
scanf("%s",p); if(strlen(p)>count)printf("\n too long! \n"); }while(strlen(p)>count);
strcpy(s,p); }
void print(STUDENT *h)
{
int i=0; /* 統計記錄條數*/
STUDENT *p; /*移動指針*/
clrscr(); /*清屏*/
p=h; /*初值為頭指針*/
printf("\n\n\n****************************STUDENT********************************\n");
printf("|rec|nO | name | sc1| sc2| sc3| sum | ave |order|\n");
printf("|---|----------|---------------|----|----|----|--------|-------|-----|\n");
while(p!=NULL)
{
i++;
printf("|%3d |%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n", i, p->no,p->name,p->score[0],p->score[1],
p->score[2],p->sum,p->average,p->order);
p=p->next;
}
printf("**********************************end*********************************\n");
}
/*刪除記錄*/
STUDENT *delete(STUDENT *h)
{
STUDENT *p,*q; /*p為查找到要刪除的結點指針,q為其前驅指針*/
char s[11]; /*存放學號*/
clrscr(); /*清屏*/
printf("please deleted no\n"); /*顯示提示信息*/
scanf("%s",s); /*輸入要刪除記錄的學號*/
q=p=h; /*給q和p賦初值頭指針*/
while(strcmp(p->no,s)&&p!=NULL) /*當記錄的學號不是要找的,或指針不為空時*/
{
q=p; /*將p指針值賦給q作為p的前驅指針*/
p=p->next; /*將p指針指向下一條記錄*/
}
if(p==NULL) /*如果p為空,說明鏈表中沒有該結點*/
printf("\nlist no %s student\n",s);
else /*p不為空,顯示找到的記錄信息*/
{
printf("*****************************have found***************************\n");
printf("|no | name | sc1| sc2| sc3| sum | ave |order|\n");
printf("|----------|---------------|----|----|----|--------|-------|-----|\n");
printf("|%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n", p->no,
p->name,p->score[0],p->score[1],p->score[2],p->sum,
p->average,p->order);
printf("********************************end*******************************\n");
getch(); /*壓任一鍵後,開始刪除*/
if(p==h) /*如果p==h,說明被刪結點是頭結點*/
h=p->next; /*修改頭指針指向下一條記錄*/
else
q->next=p->next; /*不是頭指針,將p的後繼結點作為q的後繼結點*/
free(p); /*釋放p所指結點空間*/
printf("\n have deleted No %s student\n",s);
printf("Don't forget save\n");/*提示刪除後不要忘記保存文件*/
}
return(h); /*返回頭指針*/
}
/*查找記錄*/
void search(STUDENT *h)
{
STUDENT *p; char s[15]; clrscr();
printf("please enter name for search\n");
scanf("%s",s); /*輸入姓名*/
p=h; /*將頭指針賦給p*/
while(strcmp(p->name,s)&&p!=NULL) /*當記錄的姓名不是要找的,或指針不為空時*/
p=p->next; /*移動指針,指向下一結點*/
if(p==NULL) /*如果指針為空*/
printf("\nlist no %s student\n",s); /*顯示沒有該學生*/
else /*顯示找到的記錄信息*/
{
printf("\n\n*****************************havefound***************************\n");
printf("|nO | name | sc1| sc2| sc3| sum | ave |order|\n");
printf("|----------|---------------|----|----|----|--------|-------|-----|\n");
printf("|%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n", p->no,
p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
printf("********************************end*******************************\n");
}
}
/*插入記錄*/
STUDENT *insert(STUDENT *h)
{
STUDENT *p,*q,*info; /*p指向插入位置,q是其前驅,info指新插入記錄*/
char s[11]; /*保存插入點位置的學號*/
int s1,i;
printf("please enter location before the no\n");
scanf("%s",s); /*輸入插入點學號*/
printf("\nplease new record\n"); /*提示輸入記錄信息*/
info=(STUDENT *)malloc(sizeof(STUDENT)); /*申請空間*/
if(!info)
{
printf("\nout of memory"); /*如沒有申請到,內存溢出*/
return NULL; /*返回空指針*/
}
inputs("enter no:",info->no,11); /*輸入學號*/
inputs("enter name:",info->name,15); /*輸入姓名*/
printf("please input %d score \n",N); /*提示輸入分數*/
s1=0; /*保存新記錄的總分,初值為0*/
for(i=0;i<N;i++) /*N門課程循環N次輸入成績*/
{
do{ /*對數據進行驗證,保證在0~100之間*/
printf("score%d:",i+1);
scanf("%d",&info->score[i]);
if(info->score[i]>100||info->score[i]<0)
printf("bad data,repeat input\n");
}while(info->score[i]>100||info->score[i]<0);
s1=s1+info->score[i]; /*計算總分*/
}
info->sum=s1; /*將總分存入新記錄中*/
info->average=(float)s1/N; /*計算均分*/
info->order=0; /*名次賦值0*/
info->next=NULL; /*設後繼指針為空*/
p=h; /*將指針賦值給p*/
q=h; /*將指針賦值給q*/
while(strcmp(p->no,s)&&p!=NULL) /*查找插入位置*/
{
q=p; /*保存指針p,作為下一個p的前驅*/
p=p->next; /*將指針p後移*/
}
if(p==NULL) /*如果p指針為空,說明沒有指定結點*/
if(p==h) /*同時p等於h,說明鏈表為空*/
h=info; /*新記錄則為頭結點*/
else
q->next=info; else
if(p==h) {
info->next=p; h=info; }
else
{
info->next=p; q->next=info;
}
printf("\n ----have inserted %s student----\n",info->name); printf("---Don't forget save---\n"); /*提示存檔*/
return(h); /*返回頭指針*/
}
/*保存數據到文件*/
void save(STUDENT *h)
{
FILE *fp; /*定義指向文件的指針*/
STUDENT *p; /* 定義移動指針*/
char outfile[10]; /*保存輸出文件名*/
printf("Enter outfile name,for example c:\\f1\\te.txt:\n"); /*提示文件名格式信息*/
scanf("%s",outfile);
if((fp=fopen(outfile,"wb"))==NULL) /*為輸出打開一個二進制文件,如沒有則建立*/
{
printf("can not open file\n");
exit(1);
}
printf("\nSaving file......\n"); /*打開文件,提示正在保存*/
p=h; /*移動指針從頭指針開始*/
while(p!=NULL) /*如p不為空*/
{
fwrite(p,sizeof(STUDENT),1,fp);/*寫入一條記錄*/
p=p->next; /*指針後移*/
}
fclose(fp); /*關閉文件*/
printf("-----save success!!-----\n"); /*顯示保存成功*/
}
/* 從文件讀數據*/
STUDENT *load()
{
STUDENT *p,*q,*h=NULL; /*定義記錄指針變數*/
FILE *fp; /* 定義指向文件的指針*/
char infile[10]; /*保存文件名*/
printf("Enter infile name,for example c:\\f1\\te.txt:\n"); scanf("%s",infile); /*輸入文件名*/
if((fp=fopen(infile,"rb"))==NULL) /*打開一個二進制文件,為讀方式*/
{
printf("can not open file\n"); /*如不能打開,則結束程序*/
exit(1);
}
printf("\n -----Loading file!-----\n");
p=(STUDENT *)malloc(sizeof(STUDENT)); /*申請空間*/
if(!p)
{
printf("out of memory!\n"); /*如沒有申請到,則內存溢出*/
return h; /*返回空頭指針*/
}
h=p; /*申請到空間,將其作為頭指針*/
while(!feof(fp)) /*循環讀數據直到文件尾結束*/
{
if(1!=fread(p,sizeof(STUDENT),1,fp))
break; /*如果沒讀到數據,跳出循環*/
p->next=(STUDENT *)malloc(sizeof(STUDENT)); /*為下一個結點申請空間*/
if(!p->next)
{
printf("out of memory!\n"); return h;
}
q=p; p=p->next; }
q->next=NULL; /*最後一個結點的後繼指針為空*/
fclose(fp); /*關閉文件*/
printf("---You have success read data from file!!!---\n");
return h; /*返回頭指針*/
}
/*追加記錄到文件*/
void append()
{
FILE *fp; /*定義指向文件的指針*/
STUDENT *info; /*新記錄指針*/
int s1,i;
char infile[10]; /*保存文件名*/
printf("\nplease new record\n");
info=(STUDENT *)malloc(sizeof(STUDENT)); /*申請空間*/
if(!info)
{
printf("\nout of memory"); /*沒有申請到,內存溢出本函數結束*/
return ;
}
inputs("enter no:",info->no,11); /*調用inputs輸入學號*/
inputs("enter name:",info->name,15); /*調用inputs輸入姓名*/
printf("please input %d score \n",N); /*提示輸入成績*/
s1=0;
for(i=0;i<N;i++)
{
do{
printf("score%d:",i+1);
scanf("%d",&info->score[i]); /*輸入成績*/
if(info->score[i]>100||info->score[i]<0)printf("bad data,repeat input\n");
}while(info->score[i]>100||info->score[i]<0); /*成績數據驗證*/
s1=s1+info->score[i]; /*求總分*/
}
info->sum=s1; /*保存總分*/
info->average=(float)s1/N; /*求均分*/
info->order=0; /*名次初始值為0*/
info->next=NULL; /*將新記錄後繼指針賦值為空*/
printf("Enter infile name,for example c:\\f1\\te.txt:\n"); scanf("%s",infile); /*輸入文件名*/
if((fp=fopen(infile,"ab"))==NULL) /*向二進制文件尾增加數據方式打開文件*/
{
printf("can not open file\n"); /*顯示不能打開*/
exit(1); /*退出程序*/
}
printf("\n -----Appending record!-----\n");
if(1!=fwrite(info,sizeof(STUDENT),1,fp)) /*寫文件操作*/
{
printf("-----file write error!-----\n");
return; /*返回*/
}
printf("-----append sucess!!----\n");
fclose(fp); /*關閉文件*/
}
/*文件拷貝*/
void ()
{
char outfile[10],infile[10];
FILE *sfp,*tfp; /*源和目標文件指針*/
STUDENT *p=NULL; /*移動指針*/
clrscr(); /*清屏*/
printf("Enter infile name,for example c:\\f1\\te.txt:\n");
scanf("%s",infile); /*輸入源文件名*/
if((sfp=fopen(infile,"rb"))==NULL) /*二進制讀方式打開源文件*/
{
printf("can not open input file\n");
exit(0);
}
printf("Enter outfile name,for example c:\\f1\\te.txt:\n"); /*提示輸入目標文件名*/
scanf("%s",outfile); /*輸入目標文件名*/
if((tfp=fopen(outfile,"wb"))==NULL) /*二進制寫方式打開目標文件*/
{
printf("can not open output file \n");
exit(0);
}
while(!feof(sfp)) /*讀文件直到文件尾*/
{
if(1!=fread(p,sizeof(STUDENT),1,sfp))
break; /*塊讀*/
fwrite(p,sizeof(STUDENT),1,tfp); /*塊寫*/
}
fclose(sfp); /*關閉源文件*/
fclose(tfp); /*關閉目標文件*/
printf("you have success file!!!\n"); /*顯示成功拷貝*/
}
/*排序*/
STUDENT *sort(STUDENT *h)
{
int i=0; /*保存名次*/
STUDENT *p,*q,*t,*h1; /*定義臨時指針*/
h1=h->next; /*將原表的頭指針所指的下一個結點作頭指針*/
h->next=NULL; /*第一個結點為新表的頭結點*/
while(h1!=NULL) /*當原表不為空時,進行排序*/
{
t=h1; /*取原表的頭結點*/
h1=h1->next; /*原表頭結點指針後移*/
p=h; /*設定移動指針p,從頭指針開始*/
q=h; /*設定移動指針q做為p的前驅,初值為頭指針*/
while(t->sum<p->sum&&p!=NULL) /*作總分比較*/
{
q=p; /*待排序點值小,則新表指針後移*/
p=p->next;
}
if(p==q) /*p==q,說明待排序點值大,應排在首位*/
{
t->next=p; /*待排序點的後繼為p*/
h=t; /*新頭結點為待排序點*/
}
else /*待排序點應插入在中間某個位置q和p之間,如p為空則是尾部*/
{
t->next=p; /*t的後繼是p*/
q->next=t; /*q的後繼是t*/
}
}
p=h; /*已排好序的頭指針賦給p,准備填寫名次*/
while(p!=NULL) /*當p不為空時,進行下列操作*/
{
i++; /*結點序號*/
p->order=i; /*將名次賦值*/
p=p->next; /*指針後移*/
}
printf("sort sucess!!!\n"); /*排序成功*/
return h; /*返回頭指針*/
}
/*計算總分和均值*/
void computer(STUDENT *h)
{
STUDENT *p; /*定義移動指針*/
int i=0; /*保存記錄條數初值為0*/
long s=0; /*總分初值為0*/
float average=0; /*均分初值為0*/
p=h; /*從頭指針開始*/
while(p!=NULL) /*當p不為空時處理*/
{
s+=p->sum; /*累加總分*/
i++; /*統計記錄條數*/
p=p->next; /*指針後移*/
}
average=(float)s/i;/* 求均分,均分為浮點數,總分為整數,所以做類型轉換*/
printf("\n--All students sum score is:%ld average is %5.2f\n",s,average);
}
/*索引*/
STUDENT *index(STUDENT *h)
{
STUDENT *p,*q,*t,*h1; /*定義臨時指針*/
h1=h->next; /*將原表的頭指針所指的下一個結點作頭指針*/
h->next=NULL; /*第一個結點為新表的頭結點*/
while(h1!=NULL) /*當原表不為空時,進行排序*/
{
t=h1; /*取原表的頭結點*/
h1=h1->next; /*原表頭結點指針後移*/
p=h; /*設定移動指針p,從頭指針開始*/
q=h; /*設定移動指針q做為p的前驅,初值為頭指針*/
while(strcmp(t->no,p->no)>0&&p!=NULL) /*作學號比較*/
{
q=p; p=p->next;
}
if(p==q) /*p==q, {
t->next=p; h=t; }
else {
t->next=p; /*t的後繼是p*/
q->next=t; /*q的後繼是t*/
}
}
printf("index sucess!!!\n"); /*索引排序成功*/
return h; /*返回頭指針*/
}
/*分類合計*/
void total(STUDENT *h)
{
STUDENT *p,*q; /*定義臨時指針變數*/
char sno[9],qno[9],*ptr; /*保存班級號的*/
float s1,ave; /*保存總分和均分*/
int i; clrscr(); /*清屏*/
printf("\n\n *******************Total*****************\n");
printf("---class---------sum--------------average----\n");
p=h; while(p!=NULL)
{
memcpy(sno,p->no,8); /*從學號中取出班級號*/
sno[8]='\0'; /*做字元串結束標記*/
q=p->next; /*將指針指向待比較的記錄*/
s1=p->sum; /*當前班級的總分初值為該班級的第一條記錄總分*/
ave=p->average; /*當前班級的均分初值為該班級的第一條記錄均分*/
i=1; /*統計當前班級人數*/
while(q!=NULL) /*內循環開始*/
{
memcpy(qno,q->no,8); /*讀取班級號*/
qno[8]='\0'; /*做字元串結束標記*/
if(strcmp(qno,sno)==0) /*比較班級號*/
{
s1+=q->sum; /*累加總分*/
ave+=q->average; /*累加均分*/
i++; /*累加班級人數*/
q=q->next; /*指針指向下一條記錄*/
}
else
break; }
printf("%s %10.2f %5.2f\n",sno,s1,ave/i);
if(q==NULL)
break; else
p=q; }
printf("---------------------------------------------\n");
}
㈤ c語言課程設計的課程介紹
通過學習C語言程序設計,掌握高級語言程序設計的基本知識,掌握面向過程程序設計和軟體開發的基本方法,學會用C語言解決本專業的實際問題,提高分析問題和解決問題的能力。
1、課程性質 ,
《C語言程序設計》是電子信息相關專業的專業能力模塊課程。
2、課程與系列產品或項目設計與開發流程的關聯
該課程是嵌入式系列產品程序設計的基礎。
3、課程目標
通過「籃球賽計時計分系統程序設計」等5個案例的學習與實踐,培養學生運用C語言程序設計的知識,解決常用嵌入式系統程序開發問題的能力。
4、與前後續課程的關系
後續課程:《模塊電路功能編程》、《機器人編程與控制》。
㈥ C語言程序設計教程的介紹
本書定鬧正位於將C語言作為計算機編程入門語言,以幫助讀者樹立計算機程序設計的思想,培養學生程序設計基本能力為目標的教材。全書以程序設計為主線,採用案例驅動模式展開講解,通過案例和問題引入主要教學內容,重點講解程序設計的思想和方法,並結合相關的語唯鋒法知識。全書主要包括3方面的內容:基本內容(數據表液山悔達、數據處理和流程式控制制)、常用演算法和程序設計風格以及C語言應用中的一些處理機制(編譯預處理和命令行參數等)。涉及數據類型、表達式、分支、循環、函數、數組、指針、結構、文件的概念、應用以及指針和各種構造類型的混合運用、基本演算法等內容。
㈦ 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語言程序設計教程
對於初學C語言的人來說,使用VC++6.0編寫簡單的程序再合適不過了,那麼我們一起來看一下怎麼使用VC++6.0來創建,編寫和運行一個簡單的C語言慎咐程序吧。
- 01
點擊電腦左下角開始,運行VC++6.0程序。
- 02
單擊”文件“菜單項,選擇子菜單”新建“,進入新建界面。
- 03
由於早期學習只需要控制台應用程序,我們選擇Win32 Console Application。
- 04
選擇空工程猜歷利於自己學習
- 05
再新建C++ Source File(C++ 源文件) 。
- 06
然後鍵入代碼:#include <stdio.h>int main ()<
printf ("Hello , world!n");return 0; - 07
最後按紅色的感嘆號或者按快捷鍵可直接編譯連接並運行
- 08
運行成功。
特別提示
常見小問題:can not open file debug/*.exe
問題:執行Link.exe時出錯,主要問題是計算機許可權不足。
解決方案:右鍵桌面的vc快捷方式,點“兼容性”,勾選“以管理員身份運行”並應用
如果穗孝搜怎麼都不能運行,那麼就是你的工作空間創建在了vc默認的MyProjects工作區,這樣會有很多問題。所以在創建工作空間的時候一定要選一個自己的文件夾,最好不要有中文。
㈨ C語言程序設計教程的目 錄
第1章C語言概述1
1.1簡單的C語言程序1
1.2C語言的發展歷史與特點3
1.2.1C語言的發展歷史3
1.2.2C語言的特點4
1.3C程序的開發步驟和上機調試流程5
1.3.1C程序的開發步驟5
1.3.2C程序的上機開發過程6
習題112
第2章基本數據類型的輸入/輸出13
2.1C語言的輸入/輸出13
2.2整型數據的輸入/輸出13
2.3浮點型數據的輸入/輸出14
2.4字元數據的輸入/輸出15
2.5字元串數據的輸入/輸出15
2.6格式化輸入/輸出舉例17
2.7閱讀材料18
2.7.1格式化輸出函數printf的格式說明和使用18
2.7.2格式化輸入函數scanf的格式說明和使用19
習題221
第3章流程式控制制22
3.1演算法22
3.1.1演算法的概念22
3.1.2演算法的表達方式23
3.1.3基本流程式控制制結構25
3.1.4案例3.1 求1+1/2+…+1/100的和26
3.2選擇語句26
3.2.1案例3.2 求三個整數的最大值(if語句)26
3.2.2案例3.3 百分製成績轉換成五分製成績(多分支if語句)29
3.2.3案例3.4 判斷所輸入的一個字元是數字、空白符還是其他字元(switch語句)31
3.2.4案例3.5 百分製成績轉換成五分製成績(switch語句)33
3.3循環語句34
3.3.1案例3.6 求1+1/2+…+1/100的和(while語句)34
3.3.2案例3.7 求1+1/2+…+1/100的和(do...while語句)35
3.3.3案例3.8 求1+1/2+…+1/100的和(for語句)37
3.4轉向語句39
3.4.1案例3.9 判斷所輸入的一個大於1的正整數是否是素數(break語句)39
3.4.2案例3.10 輸出100~200之間能被3整除的數(continue語句)41
3.5應用舉例42
3.5.1案例3.11 計算1! + 2! + … + 10!(並討論溢出問題)42
3.5.2案例3.12 計算級數1-1/3+1/5-1/7+…的和44
3.5.3案例3.13 統計輸入的數字字元、字母字元和其他字元的個數45
3.5.4案例3.14 求兩個正整數的最大公約數和最小公倍數45
3.5.5案例3.15 將一個正整數逆序輸出46
3.5.6案例3.16 輸入日期並檢查其合理性,直到輸入合理為止47
3.6閱讀材料48
3.6.1C語言的語句48
3.6.2goto語句簡介49
3.6.3exit()函數49
3.6.4程序調試簡介50
習題351
第4章函數54
4.1模塊化程序設計54
4.1.1模塊化程序設計的基本思想54
4.1.2C語言程序設計的基本結構55
4.2函數定義和調用55
4.2.1案例4.1 求3個整數的最大值(函數定義和調用)57
4.2.2案例4.2 驗證哥德巴赫猜想(在1000以內驗證)57
4.2.3案例4.3 計算1k+2k+…+nk(函數原型、函數的嵌套調用)59
4.3標識符的作用域60
4.3.1案例4.4 塊作用域60
4.3.2案例4.5 文件作用域61
4.3.3函數原型作用域61
4.3.4函數作用域62
4.4變數的存儲種類62
4.4.1自動變數62
4.4.2寄存器變數62
4.4.3案例4.6 外部變數63
4.4.4案例4.7 靜態變數64
4.5指針基礎64
4.5.1地址和指針的概念64
4.5.2指針變數65
4.5.3案例4.8 兩數交換(指針做參數)65
4.5.4案例4.9 輸入10個整數求它們的最大值、最小值和總和(指針做參數)66
4.5.5案例4.10 統計百分製成績各分數段的人數(指針做返回值)67
4.6遞歸函數68
4.6.1案例4.11 計算4!(遞歸函數的定義和遞歸調用過程分析)68
4.6.2案例4.12 計算整數各位數字之和69
4.6.3案例4.13 計算70
4.6.4案例4.14 漢諾塔問題70
習題471
第5章編譯預處理74
5.1宏74
5.1.1案例5.1 無參宏75
5.1.2案例5.2 有參宏75
5.2文件包含76
5.3條件編譯77
5.3.1條件編譯命令77
5.3.2案例5.3 頭文件設計78
5.4閱讀材料80
5.4.1程序的多文件組織方法80
5.4.2多文件程序的編譯和鏈接80
習題581
第6章數組83
6.1一維數組83
6.1.1一維數組的定義、初始化和使用83
6.1.2最大值、最小值和平均值86
6.1.3一維數組作為函數的參數88
6.1.4數組排序90
6.1.5數組查找95
6.2二維數組98
6.2.1二維數組的定義、初始化和使用98
6.2.2矩陣轉置100
6.2.3二維數組的本質101
6.3字元串104
6.3.1字元數組和字元串104
6.3.2字元串的輸入和輸出105
6.3.3字元串處理107
習題6111
第7章指針120
7.1簡介120
7.2什麼是指針120
7.2.1變數、變數的值與變數的地址120
7.2.2指針122
7.2.3定義指針變數123
7.2.4間接運算符123
7.2.5指針賦值125
7.2.6指針作為函數的參數126
7.2.7返回指針的函數130
7.3指針與一維數組131
7.3.1使指針指向數組131
7.3.2指針算術運算131
7.3.3指針關系運算138
7.3.4一維數組名與指針140
7.3.5向函數傳遞數組實際上是傳遞指針142
7.4指針與二維數組145
7.4.1二維數組的本質145
7.4.2指向數組的指針與二維數組名146
7.4.3用指向元素的指針訪問二維數組151
7.5指針數組153
7.6帶參數的main函數154
7.7指向指針的指針155
7.8指向函數的指針156
7.8.1指向函數的指針的定義和使用方法156
7.8.2指向函數的指針作函數參數157
7.9字元串處理函數159
7.9.1字元串的輸入輸出(gets和puts)159
7.9.2求字元串長度(strlen)160
7.9.3字元串復制(strcpy、strncpy)和字元串連接(strcat)160
7.9.4字元串比較(strcmp)163
7.9.5字元串中字元的大小寫轉換(strlwr和strupr)164
7.10動態內存分配164
7.10.1C語言的程序內存空間165
7.10.2用malloc函數分配一塊內存165
7.10.3用calloc函數分配連續的內存空間167
7.10.4用realloc函數改變內存塊的大小168
習題7170
第8章自定義數據類型178
8.1結構體178
8.1.1案例8.1 復數的四則運算183
8.1.2案例8.2 學生成績統計184
8.2單向鏈表186
8.2.1案例8.3 單向鏈表的建立和基本操作186
8.2.2案例8.4 猴子選大王189
8.3共用體192
8.3.1案例8.5 共用體類型及其變數的定義和使用192
8.3.2案例8.6 學生、教職工基本信息管理193
8.4枚舉200
8.4.1案例8.7 枚舉類型及其變數的定義和使用201
8.4.2案例8.8 枚舉類型數據的輸入和輸出201
8.5自定義數據類型舉例202
8.6閱讀材料204
8.6.1位域204
8.6.2無名共用體類型的使用205
8.6.3類型別名206
習題8206
第9章文件209
9.2文件概述209
9.1.1文件的概念210
9.1.2文本文件與二進制文件210
9.1.3緩沖文件系統211
9.1.4文件類型指針211
9.2文件的打開與關閉212
9.2.1打開文件(fopen()函數)212
9.2.2關閉文件函數(fclose函數)214
9.3文本文件的讀寫214
9.3.1案例9.1 復制文件(fputc函數和fgetc函數)214
9.3.2案例9.2 復制文件(fgets函數和fputs函數)216
9.3.3案例9.3 學生基本信息的順序讀/寫(fprintf函數和fscanf函數)218
9.4二進制文件的讀寫220
9.4.1案例9.4 學生基本信息的順序讀/寫(fread函數和fwrite函數)220
9.4.2案例9.5 學生基本信息的隨機讀/寫(fseek函數)222
9.5閱讀材料224
9.5.1ferror()函數224
9.5.2clearerr()函數224
9.5.3feof()函數224
習題9224
第10章課程設計226
10.1課程設計的目的和要求226
10.2課程設計舉例——學生成績管理系統226
10.3課程設計選題233
實驗一C語言編譯環境與程序開發235
實驗二輸入/輸出程序設計236
實驗三選擇結構238
實驗四循環結構241
實驗五函數244
實驗六遞歸245
實驗七數組的使用246
實驗八字元串處理248
實驗九指針與數組250
實驗十指針與函數251
實驗十一結構體與單向鏈表253
實驗十二文件255
附錄A常用字元與ASCII碼對照表257
附錄BC語言的32個關鍵字259
附錄CC語言常用標准庫函數260
附錄DTurbo C 2.0程序調試技術266
附錄EVisual C++ 6.0程序調試技術*270
附錄F推箱子游戲源代碼272
附錄G貪吃蛇游戲源代碼275
附錄H掃地雷游戲源代碼279
附錄I速算24源代碼288