A. c語言程序設計
第一章 程序設計的基本概念
第一節 C語言的發展歷史與特點
第二節 程序與程序設計
第三節 演算法與演算法的描述
第四節 C語言的上機操作
思考題與習題
第二章 C語言程序設計基礎
第一節 C語言的程序結構
第二節 數據類型
第三節 運算符與表達式
思考題與習題
第三章 C程序控制結構
第一節 C程序的三種基本控制結構
第二節 順序結構
第三節 選擇結構
第四節 循環結構
思考題與習題
第四章 數組
第一節 數組與數組元素的概念
第二節 一維數組
第三節 二維數組及多維數組
第四節 字元串與字元數組
思考題與習題
第五章 指針
第一節 指針與指針變數的概念
第二節 指針變數的定義和引用
第三節 指針變數與數組
思考題與習題
第六章 函數
第一節 函數的定義
第二節 函數的嵌套調用
第三節 數組作為函數參數
第四節 指針與函數
第五節 變數的使用范圍與存儲類別
第六節 不同文件中的函數使用
思考題與習題
第七章 編譯預處理
第一節 宏定義
第二節 文件包含
第三節 條件編譯
思考題與題
第八章 結構體與共用體
第一節 結構體基礎
第二節 結構體數組
第三節 結構體指針
第四節 鏈表
第五節 位段
第六節 共用體
第七節 枚舉類型與自定義類型
思考題與習題
第九章 文件
第一節 文件概述
第二節 文件的打開與關閉
第三節 文件的讀/寫
第四節 文件的定位
思考題與習題
第十章 程序設計方法
第一節 程序設計的基本概念
第二節 結構化程序設計方法
第三節 程序效率
第四節 程序設計風格
思考題與習題
附錄
附錄A C語言實驗
附錄B 標准ABSII碼表
附錄C C語言中的關鍵字
附錄D 運算符的優先順序與結合性
B. c語言程序設計編程題目:請 :編寫完成對學生相關信息的要求:1.定義一個結構體類型student,其中包括三個成
#include <stdio.h>
#include <stdlib.h>
#define STU_NUM 10 /*宏定義學生的數量*/
struct student /*定義一個結構體用來存放學生學號、三門課成績、總分及平均成績*/
{
char stu_id[20]; /*學生學號;*/
float score[3]; /*三門課成績;*/
float total; /*總成績;*/
float aver; /*平均成績;*/
};
/*排序用一個函數來實現*/
void SortScore(student *stu,int n)
{
student stud;
for(int i = 0; i < n-1; i++)
for(int j = i+1 ; j < n; j++)
{
if(stu[i].total < stu[j].total)
{
stud = stu[i];
stu[i] = stu[j];
stu[j] = stud;
}
}
}
int main( )
{
student stu[STU_NUM]; /*創建結構體數組中有10個元素,分別用來保存這10個人的相關信息。*/
/*輸入這十個學生的相關信息*/
for(int i = 0; i<STU_NUM; i++)
{
printf("請輸入第%d個學生的學號:",i+1);
scanf("%s",&stu[i].stu_id);
printf("輸入第%d個學生的數學成績:",i+1);
scanf("%f",&stu[i].score[0]);
printf("輸入第%d個學生的英語成績:",i+1);
scanf("%f",&stu[i].score[1]);
printf("輸入第%d個學生的計算機成績:",i+1);
scanf("%f",&stu[i].score[2]);
stu[i].total = stu[i].score[0]+stu[i].score[1]+stu[i].score[2];
stu[i].aver = stu[i].total/3;
}
printf("\n");
SortScore(stu,STU_NUM);/*調用排序函數*/
/*輸出排序後的各學生的成績*/
for(i = 0 ; i < STU_NUM; i++)
{
printf("序號: %d\t",i);
printf("學號:%s\t",stu[i].stu_id);
printf("數學:%f\t",stu[i].score[0]);
printf("英語:%f\t",stu[i].score[1]);
printf("計算機:%f\t",stu[i].score[2]);
printf("平均成績:%f\t",stu[i].aver);
printf("總分:%f\t",stu[i].total);
printf("\n\n");
}
return 0;
}
註:(源程序中主要標識符含義說明)
#define STU_NUM 10 /*宏定義學生的數量*/
struct student /*定義一個結構體用來存放學生學號、三門課成績、總分及平均成績*/
{
char stu_id[20]; /*學生學號;*/
float score[3]; /*三門課成績;*/
float total; /*總成績;*/
float aver; /*平均成績;*/
}
C. c語言程序設計
剛好最近也做了這個課程設計
參考一下吧 但是不要完全照搬哦 自己思考一下吧```~~
#include "stdio.h"
void menu();
void tongji();
void list();
void add();
void del();
void update();
void select();
void high();
void highest();
void sumt();
void allt();
typedef struct
{ char number[10];
char name[10];
int point;
char teacher[10];
} CLASS;
char filename[]="class.db";
main()
{ int i;
FILE *fp;
fp=fopen(filename,"rb");
if(fp==NULL)
{printf("打開文件失敗 \n\n");
printf("鍵入數字 1 創建課程資料庫文件\n");
printf("其它任意鍵離開\n");
scanf("%d",&i);
if(i==1)
{fp=fopen(filename,"wb");
menu();
}
}
else menu();
}
void menu()
{ int ks;
printf("1. 統計課程數量 \n");
printf("明返豎2. 列出課程信息 \n");
printf("3. 添加課程信息 \n");
printf("4. 刪除課程信息 \n");
printf("5. 修改課程名稱 \n");
printf("6. 查詢課程信息激大 \n");
printf("7. 高分課程數量 \n");
printf("8. 最高課程置尾 \n");
printf("9. 統計教師學分 \n");
printf("0. 各教師課程數 \n");
printf("請選擇所需要的功能 :");
scanf("%d",&ks);
if(ks==1)tongji();
else if(ks==2)list();
else if(ks==3)add();
else if(ks==4)del();
else if(ks==5)update();
else if(ks==6)select();
else if(ks==7)high();
else if(ks==8)highest();
else if(ks==9)sumt();
else if(ks==0)allt();
else printf("輸入有誤!!!!");
}
void tongji()
{ int num=0,key;
FILE *fp;
CLASS ac;
fp=fopen(filename,"rb");
if(fp==NULL)
{printf("打開文件失敗 ");
return;
}
while(!feof(fp))
{
fread(&ac,sizeof(CLASS),1,fp);
num++;
}
printf("\n共有世塌%d門課程\n\n",num-1);
fclose(fp);
printf("0. 退出 \n");
printf("其他任意數字鍵返回主菜單 \n");
scanf("%d",&key);
if(key==0);
else menu();
}
void list()
{ int num=0,n,key;
FILE *fp;
CLASS ac;
fp=fopen(filename,"rb");
if(fp==NULL)
{printf("打開文件失敗 ");
return;
}
while(!feof(fp))
{
fread(&ac,sizeof(ac),1,fp);
num++;
}
fclose(fp);
fp=fopen(filename,"rb");
for(n=0;n<num-1;n++)
{
fread(&ac,sizeof(CLASS),1,fp);
printf("\n%10s%10s%5d%10s\n",ac.number,ac.name,ac.point,ac.teacher);
}
fclose(fp);
printf("0. 退出 \n");
printf("其他任意數字鍵返回主菜單 \n");
scanf("%d",&key);
if(key==0);
else menu();
}
void add()
{ int num=0,n,key=0;
FILE *fp;
CLASS ac[100],ab;
fp=fopen(filename,"rb");
if(fp==NULL)
{
printf("打開文件失敗 ");
return;
}
printf("\n輸入所要添加的課程代號,課程名稱,學分,任課老師:\n");
scanf("%s %s %d %s",ab.number,ab.name,&ab.point,ab.teacher);
while(!feof(fp))
{
fread(&ac[num],sizeof(CLASS),1,fp);
if(strcmp(ab.name,ac[num].name)==0||strcmp(ab.number,ac[num].number)==0)
{
printf("\n\n此課程號或名已經存在,請重新添加\n\n");
key++;
break;
}
num++;
}
fclose(fp);
fp=fopen(filename,"ab");
if(key==0)
{
fwrite(&ab,sizeof(CLASS),1,fp);
printf("添加成功! \n");
}
fclose(fp);
printf("1. 繼續添加 \n");
printf("0. 退出 \n");
printf("其他任意數字鍵返回主菜單 \n");
scanf("%d",&key);
if(key==0);
else if(key==1)add();
else menu();
}
void del()
{ int num=0,n,key;
char c[10];
FILE *fp;
CLASS ac[100];
fp=fopen(filename,"rb");
if(fp==NULL)
{printf("打開文件失敗 ");
return;
}
while(!feof(fp))
{
fread(&ac[num],sizeof(CLASS),1,fp);
num++;
}
fclose(fp);
fp=fopen(filename,"wb");
printf("\n輸入想刪除課程的代號: ");
scanf("%s",c);
for(n=0;n<num-1;n++)
{
if(strcmp(c,ac[n].number)!=0)
fwrite(&ac[n],sizeof(CLASS),1,fp);
}
printf("\n刪除成功 \n");
fclose(fp);
printf("1. 繼續刪除 \n");
printf("0. 退出 \n");
printf("其他任意數字鍵返回主菜單 \n");
scanf("%d",&key);
if(key==0);
else if(key==1)del();
else menu();
}
void update()
{ int num=0,k=-1,key;
char c[10];
FILE *fp;
CLASS ac[10];
fp=fopen(filename,"rb");
if(fp==NULL)
{printf("打開文件失敗 ");
return;
}
printf("\n輸入想修改課程的代號: ");
scanf("%s",c);
while(!feof(fp))
{
fread(&ac[num],sizeof(CLASS),1,fp);
if(strcmp(c,ac[num].number)==0)k=num;
num++;
}
fclose(fp);
if(k==-1)
{
printf("\n無此課程號!!!!\n");
update();
}
fp=fopen(filename,"wb");
printf("新的課程名稱: ");
scanf("%s",c);
strcpy(ac[k].name,c);
for(k=0;k<num-1;k++)
fwrite(&ac[k],sizeof(CLASS),1,fp);
printf("\n修改成功 \n\n");
fclose(fp);
printf("1. 繼續修改 \n");
printf("0. 退出 \n");
printf("其他任意數字鍵返回主菜單 \n");
scanf("%d",&key);
if(key==0);
else if(key==1)update();
else menu();
}
void select()
{ int num=0,k=0,key;
char c[10];
FILE *fp;
CLASS ac;
fp=fopen(filename,"rb");
if(fp==NULL)
{printf("打開文件失敗 ");
return;
}
printf("\n輸入想要查詢的課程名稱 :");
scanf("%s",c);
while(!feof(fp))
{
fread(&ac,sizeof(CLASS),1,fp);
if(strcmp(c,ac.name)==0)
{
printf("\n%10s%10s%5d%10s\n",ac.number,ac.name,ac.point,ac.teacher);
k++;
break;
}
num++;
}
if(k==0)printf("\n無所要查詢的信息\n\n");
fclose(fp);
printf("1. 繼續查詢 \n");
printf("0. 退出 \n");
printf("其他任意數字鍵返回主菜單 \n");
scanf("%d",&key);
if(key==0);
else if(key==1)select();
else menu();
}
void high()
{ int num=0,n=0,key;
FILE *fp;
CLASS ac[100];
fp=fopen(filename,"rb");
if(fp==NULL)
{printf("打開文件失敗 ");
return;
}
while(!feof(fp))
{
fread(&ac[num],sizeof(CLASS),1,fp);
if(ac[num].point>=2) n++;
num++;
}
printf("\n共有%d門高學分課程\n\n",n);
fclose(fp);
printf("0. 退出 \n");
printf("其他任意數字鍵返回主菜單 \n");
scanf("%d",&key);
if(key==0);
else menu();
}
void highest()
{ int num=0,n,i,max,key;
FILE *fp;
CLASS ac[100],ab;
fp=fopen(filename,"rb");
if(fp==NULL)
{printf("打開文件失敗 ");
return;
}
while(!feof(fp))
{
fread(&ac[num],sizeof(CLASS),1,fp);
num++;
}
fclose(fp);
max=ac[0].point;
for(n=0;n<num-1;n++)
if(ac[n].point>max)
{max=ac[n].point;
i=n;
}
ab=ac[num-2];
ac[num-2]=ac[i];
ac[i]=ab;
fp=fopen(filename,"wb");
for(key=0;key<num-1;key++)
fwrite(&ac[key],sizeof(CLASS),1,fp);
printf("\n成功的放置到了尾端\n\n");
fclose(fp);
printf("0. 退出 \n");
printf("其他任意數字鍵返回主菜單 \n");
scanf("%d",&key);
if(key==0);
else menu();
}
void sumt()
{ int num=0,sum=0,key=0;
char c[10];
FILE *fp;
CLASS ac[100];
fp=fopen(filename,"rb");
if(fp==NULL)
{printf("打開文件失敗 ");
return;
}
printf("\n輸入所要查詢教師的姓名\n");
scanf("%s",c);
while(!feof(fp))
{
fread(&ac[num],sizeof(CLASS),1,fp);
if(strcmp(c,ac[num].teacher)==0)
{sum+=ac[num].point;
key++;
}
num++;
}
if(key!=0)printf("\n教師 %s 所授課程的總學分為: %d \n\n",c,sum);
else printf("\n輸入的教師姓名無效!!\n\n");
fclose(fp);
printf("0. 退出 \n");
printf("其他任意數字鍵返回主菜單 \n");
scanf("%d",&key);
if(key==0);
else menu();
}
void allt()
{ int num=0,n,s,i,key;
FILE *fp;
CLASS ac[100],ab;
fp=fopen(filename,"rb");
if(fp==NULL)
{printf("打開文件失敗 ");
return;
}
printf("\n");
while(!feof(fp))
{
fread(&ac[num],sizeof(CLASS),1,fp);
num++;
}
fclose(fp);
for(n=0;n<num-1;n++)
{
ab=ac[n];
i=0;
s=0;
for(key=0;key<n;key++)
{
if(strcmp(ab.teacher,ac[key].teacher)==0)
{
i=1;
break;
}
}
for(key=n;key<num-1;key++)
{
if(i==1) break;
if(strcmp(ab.teacher,ac[key].teacher)==0)
s++;
}
if(i!=1) printf(" %s 所授課程數為 %d\n",ab.teacher,s);
}
printf("0. 退出 \n");
printf("其他任意數字鍵返回主菜單 \n");
scanf("%d",&key);
if(key==0);
else menu();
}
D. C語言:輸入\之類的話 for語句會一直往下循環輸出,如何終止
輸入之類的話 for語句會一直往下循環輸出,是因為程序需要讀入一個整數,但是輸入的非法字元會一直停留在輸入緩沖區中,要想終止,可以按下Ctrl+Break終止循環。
正面的程序已經幫你改好了:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{ int a, b,i;
srand((unsigned)time(NULL));//使用時間作為參數來生成隨機數
a = rand() % 100 + 1;
printf("《C語言程序設計》翻轉課堂—猜數游戲 歡迎來到猜數游戲 游戲說明:該程序將會生成1~100之間的整數,然後就由您負責猜數,同樣也要輸入1~100之間的整數,不許耍賴哦! ");//對游戲進行說明
for (i =1; i >0; i++)
{ fflush(stdin);
printf(" 請輸入你想要猜的數字:");
scanf("%d", &b);
if (b == 0)
{ printf(" 感謝您的遊玩,期待下次能再與你相遇^O^ ");
break;
}
if (b > 100 || b < 1)
{ printf(" 不許耍賴亂輸數字,你到底想不想贏 ̄へ ̄ ");
fflush(stdin);
}
else
{ if (a == b)
printf(" 恭喜您猜對啦!!!o(^▽^)o 本次程序的隨機數就是%d ", a);
else
printf(" 抱歉您沒有猜對(╥╯^╰╥) 本次程序的隨機數是%d ", a);
printf("本次游戲結束啦,喜歡的話可以繼續^O^,如果不想玩了輸入0就可以退出哦 ");
}
}
printf(" 編寫成員:楊天晟、付京華");
return 0;
}
E. c語言程序設計李紅豫第五版有沒有相對應的練習冊
有。根據編程網資料顯示,李紅豫所著的《c語言程序設賀握計》第五版的配套練習冊名為禪高慶《c語言程序設計(第5版)習題解答》,由高等教育出版社出版。這本練習冊包括了書中所有章節的習題解答,其中又分為兩個部分。「編程實踐」部分包含了各個章節的編程練習題的解答,而「掌握技念晌能」部分則提供了一些與課堂上講解相關的考點解析和小測驗以幫助讀者檢驗所學知識,並提供參考答案。
F. 求C語言程序設計!
《C語言程序設計》網路網盤資源免費下載
鏈接:https://pan..com/s/1poC6JALVnvOfunlWOnN6nQ
0100C語言程序設計譚浩強版全30講曾怡石油大學|各學科學習視頻目錄|1-15講|[C語言程序設計視頻教程(曾怡)].15.csf|[C語言程序設計視頻教程(曾怡)].14.csf|[C語言程序設計視頻教程(曾怡)].13.csf|[C語言程序設計視頻教程(曾怡)].12.csf|[C語言程序設計視頻教程(曾怡)].11.csf|[C語言程序設計視頻教程(曾怡)].10.csf|[C語言程序設計視頻教程(曾怡)].09.csf|[C語言程序設計視頻教程(曾怡)].08.csf|[C語言程序設計視頻教程(曾怡)].07.csf|[C語言程序設計視頻教程(曾怡)].06.csf|[C語言程序設計視頻教程(曾怡)].05.csf|[C語言程序設計視頻教程(曾怡)].04.csf
G. C語言程序設計
在介紹C語言的宏定義之前,需要介紹一下預處理。
什麼是預處理呢?所謂預處理是指在進行編譯的第一遍掃描(詞法掃描和語法分析)之前所做的工作。預處理是C語言的一個重要的功能,它由預處理程序負責完成。當對一個源文件進行編譯時,系統將自動引用預處理程序對源程序中的預處理部分作處理,處理完畢後自動進入對源程序的編譯。
程序中以「#」開頭的預處理命令,如包含命令#include,宏定義命令#define等。在源程序中這些命令都放在函數之外,一般放在源文件的前面,稱為預處理部分。宏定義就是預處理的一種。
C語言中允許用一個標識符來表示一個字元串,稱為「宏」。被定義為「宏」的標識符稱為「宏名」。在預編譯處理時,對程序中所有出現的「宏名」,都用宏定義中的字元串去代換,這稱為「宏代換」或「宏展開」。
C語言的「宏」分為有參數和無參數兩種,下面對這兩種「宏」分別進行討論。
1、無參宏定義
無參宏的宏名後不帶參數。
其定義的一般形式為:#define 標識符 字元串
「標識符」為所定義的宏名,「字元串」可以是常數、表達式、格式串等。
例如:
#define M (x*x+2*x+1)
它的作用是指定標識符M來代替表達式(x*x+2*x+1)。在編寫源程序時,所有的(x*x+2*x+1)都可以由M代替。而對源程序作編譯時,將先由預處理程序進行宏代換,即用(x*x+2*x+1)表達式去置換所有的宏名M,然後再進行編譯。
例如:
#include <stdio.h>
#define M (x*x+2*x+1)
main()
{
int sum,x;
printf("input a number: ");
scanf("%d",&x);
sum=3*M+4*M+5*M;
printf("sum=%d\n",sum);
}
上常式序先用宏定義M來替代表達式(x*x+2*x+1),在sum=3*M+4*M+5*M中作了宏調用。在預處理時經宏展開後該語句變為sum=3*(x*x+2*x+1)+4*(x*x+2*x+1)+5*M(x*x+2*x+1)。
對於宏定義需要注意一下幾點:
1)宏定義是用宏名來表示一個字元串,在宏展開時,又以該字元串取代宏名,這只是一種簡單的代換,字元串中可以包含任何字元,可以是常數,也可以是表達式,預處理程序不對它作任何檢查。如有錯誤,只能在編譯已被宏展開後的的源程序時發現。
2)宏定義不是說明或語句,在行末不需加分號,若加了分號則連分號一起置換。
3)宏定義必須寫在函數之外,其作用域為宏定義命令起到源程序結束。如要終止其作用域可使用#undef命令。
例如:
#define PI 3.1415926
main()
{
...
}
#undef PI
f1()
{
...
}
表示PI只在main函數中有效,在f1中無效。
4)宏名若在程序中用引號括起來,則預處理程序不對其作宏代換。
5)宏定義允許嵌套,在宏定義的字元串中可以使用已定義的宏名。在宏展開時,由預處理程序層層代換。
6)習慣上宏名用大寫字母表示,以區分變數。當然也可以用小寫字母表示。
7)可以用宏定義表示數據類型,使書寫方便。
例如:
#define U8 unsigned int
注意宏定義表示數據類型和用typedef定義數據說明符的區別:宏定義只是簡單的字元串代換,是在預處理完成的;而typedef是在編譯時處理的,它不是做簡單的代換,而是對類型說明符重新命名,被命名的標識符具有類型定義說明的功能。
2、帶參宏定義
在宏定義中的參數稱為形式參數,在宏調用中的參數稱為實際參數。
對帶參的宏,在調用中,不僅要宏展開,而且要用實參去代換形參。
帶參宏定義的一般形式為:
#define 宏名(形參表) 字元串
在字元串中含有各個形參。
帶參宏調用的一般形式為:
宏名(實參表);
例如:
#define M(y) y*y+3y /*宏定義*/
...
k=M(5) /*宏調用*/
...
在宏調用時,用實參5去替代形參y,經預處理宏展開後的語句為:
k=5*5+3*5
例如:用帶參宏來獲取較大數
#define MAX(a,b) (a>b)?a:b
對於帶參宏需要注意以下幾點:
1)帶參宏定義中,宏名和形參表之間不能有空格出現。
2)在帶參宏定義中,形式參數不分配內存單元,因此不必作類型定義。而宏調用中的實參由具體的值,要用它們去代換形參,因此必須作類型聲明。這只是符號代換,不存在值傳遞的問題。
3)在宏定義中形參是標識符,而宏調用中的實參可以是表達式。
4)在宏定義中,字元串內的形參通常要用括弧括起來以免出錯。