當前位置:首頁 » 編程語言 » 大一小學期c語言論文
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

大一小學期c語言論文

發布時間: 2023-07-10 20:24:35

A. c語言學生信息管理系統程序相映論文!!

#ifndef H_STUDENT_HH
#define H_STUDENT_HH

#include "stdio.h"
#include "string.h"
#include "malloc.h"

#define LEN sizeof(struct message_student) /*一個結構體數組元素的長度*/
#define numsubs 5 /*學科數目*/
typedef struct message_student /*結構體定義*/
{
char number[6];
char name[20];
char sex[4];
float subject[numsubs];
float score;
float average;
int index;
}student;

extern int numstus; /*學生數目*/
extern student *pointer; /*指向結構體數組*/
extern int lens;

int menu_select(); /*函數聲明*/
int openfile(student stu[]);
int findrecord(student stud[]);
int writetotext(student stud[]);
void welcome();
void display1();
void showtable();
void sort(student stu[]);
void deleterecord(student stu[],int i);
void addrecord(student stud[]);
void display(student stud[],int n1,int n2);
void amendrecord(student stud[]);
void count(student stud[]);
void sortnum(student stud[]);
void sortnum2(student stud[]);
void sortname(student stud[]);
void sortname2(student stud[]);
void sortcount(student stud[]);
void sortcount2(student stud[]);
void statistic(student stud[]);
void display1();

#endif

//#include "head.h"
int menu_select()
{
char c;
printf("\n\n");
printf(" | 1. 增加學生記錄 5.統計信息 |\n");
printf(" | 2. 查詢學生記錄 6.打開文件 |\n");
printf(" | 3. 修改學生記錄 7.保存文件 |\n");
printf(" | 4. 學生紀錄排序 8.顯示記錄 |\n");
printf(" | 0.退出系統 |\n");
printf("\n\n");
printf("請選擇(0-8):");
c=getchar();
getchar();
return (c-'0');
}

//#include "head.h"
int findrecord(student stud[]) /*查找信息*/
{
char str[2];
int i,num;
if(numstus==0)
{
printf("沒有可被查找的記錄\n");
return -1;
}
else
{
printf("以何種方式查找?\n1.學號\t2.姓名\t3.名次\n");
gets(str);
if(str[0]=='1') /*按學號查找*/
{
printf("請輸入學號:");
gets(str);
for(i=0;i<=numstus;i++)
if(strcmp(str,stud[i].number)==0)
{
display(stud,i,i);
break;
}
else continue;
}
else if(str[0]=='2') /*按姓名查找*/
{
printf("請輸入姓名:");
gets(str);
for(i=0;i<=numstus;i++)
if(strcmp(str,stud[i].name)==0)
{
display(stud,i,i);
break;
}
else continue;
}
else if(str[0]=='3') /*按名次查找*/
{
printf("請輸入名次:");
scanf("%d",&num);
getchar();
for(i=0;i<=numstus;i++)
if(num==stud[i].index)
{
display(stud,i,i);
break;
}
else continue;
}
if(i>numstus)
{
printf("沒有查找所要的信息。\n");
return -1;
}
return i;
}
}

//#include"head.h"
int openfile(student stu[])
{
int i=0,j;
FILE *fp;
char filename[20],str[2];
if(numstus!=0)
{
printf("已經有記錄存在,是否保存?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
writetotext(stu);
}
printf("請輸入文件名:");
gets(filename);
numstus=0;
if((fp=fopen(filename,"rb+"))==NULL)
{
printf("無法打開該文件\n");
return(-1);
}
fscanf(fp,"%d",&numstus);
fgetc(fp);
while(i<numstus)
{
fscanf(fp,"%s",stu[i].number);
fscanf(fp,"%s",stu[i].name);
fscanf(fp,"%s",stu[i].sex);
for(j=0;j<numsubs;j++)
fscanf(fp,"%f",&stu[i].subject[j]);
fscanf(fp,"%f",&stu[i].score);
fscanf(fp,"%f",&stu[i].average);
fscanf(fp,"%d",&stu[i].index);
i++;
}
fclose(fp);
printf("文件讀取成功\n");
printf("是否顯示紀錄?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
display(stu,0,numstus-1);
return(0);
}
//#include "head.h"
void sort(student stud[])
{
int i,j=0;
char str[5];
student *p;
p=stud;
if(numstus==0)
{
printf("沒有可供查詢的記錄!");
}
while(1)
{
for(i=0;;i++)
{
printf(" 請輸入查詢方式:");
printf("(直接輸入回車則結束查詢操作)\n");
printf("1.按照學號\t");
printf("2.按照姓名\t");
printf("3.按照名次\n");
gets(str);
if(strlen(str)==0) break;
if(str[0]=='1')
{
printf("請輸入排序次序:\n");
printf("1.升序排列\t");
printf("2.降序排列\n");
gets(str);
if(str[0]=='1')
sortnum2(p);
else
sortnum(p);
display(stud,0,numstus-1);
}
else if(str[0]=='2')
{
printf("請輸入排序次序:\n");
printf("1.升序排列\t");
printf("2.降序排列\n");
gets(str);
if(str[0]=='1')
sortname2(p);
else
sortname(p);
display(stud,0,numstus-1);
}
else if(str[0]=='3')
{
printf("請輸入排序次序:\n");
printf("1.升序排列\t");
printf("2.降序排列\n");
gets(str);
if(str[0]=='1')
sortcount2(p);
else
sortcount(p);
display(stud,0,numstus-1);
}
else printf("請輸入1~3");
printf("是否退出排序?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y') break;
}
return;
}
}
void sortnum(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(strcmp(stud[j+1].number,stud[j].number)>0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortnum2(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(strcmp(stud[j].number,stud[j+1].number)>0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortname(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(strcmp(stud[j+1].name,stud[j].name)>0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortname2(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(strcmp(stud[j].name,stud[j+1].name)>0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortcount(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(stud[j+1].index>stud[j].index)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortcount2(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(stud[j].index>stud[j+1].index)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
//#include"head.h"
void statistic(student stud[]) /*新增功能,輸出統計信息*/
{
int i,j=0,k=0;
char c1,str[2];
float average[numsubs],sum=0;
if(numstus==0)
printf("沒有可被查找的記錄\n");
else
{
while(1)
{
printf("下面將統計考試成績\n");
printf("請選擇你要統計哪科的成績 1.A\t2.B\t3.C\t4.D\t5.E\n");
c1=getchar();
printf("\t一共有個%d記錄\n",numstus); /*總共記錄數*/
switch(c1)
{
case '1':
for(i=0;i<numstus;i++) /*循環輸入判斷*/
{
sum+=stud[i].subject[0];
if(stud[k].subject[0]>stud[i].subject[0]) k=i;
if(stud[j].subject[0]<stud[i].subject[0]) j=i;
}
average[0]=sum/numstus;
printf("\t科目A的最高分:\n"); /*最高分*/
printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[0]);
printf("\t科目A的最低分是:\n"); /*最低分*/
printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[0]);
printf("\t科目A的平均分是 %5.2f\n",average[0]); /*平均分*/
break;
case '2':
for(i=0;i<numstus;i++) /*循環輸入判斷*/
{
sum+=stud[i].subject[1];
if(stud[k].subject[1]>stud[i].subject[1]) k=i;
if(stud[j].subject[1]<stud[i].subject[1]) j=i;
}
average[1]=sum/numstus;
printf("\t科目B的最高分:\n"); /*最高分*/
printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[1]);
printf("\t科目B的最低分是:\n"); /*最低分*/
printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[1]);
printf("\t科目B的平均分是 %5.2f\n",average[1]); /*平均分*/
break;
case '3':
for(i=0;i<numstus;i++) /*循環輸入判斷*/
{
sum+=stud[i].subject[2];
if(stud[k].subject[2]>stud[i].subject[2]) k=i;
if(stud[j].subject[2]<stud[i].subject[2]) j=i;
}
average[2]=sum/numstus;
printf("\t科目C的最高分:\n"); /*最高分*/
printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[2]);
printf("\t科目C的最低分是:\n"); /*最低分*/
printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[2]);
printf("\t科目C的平均分是 %5.2f\n",average[2]); /*平均分*/
break;
case '4':
for(i=0;i<numstus;i++) /*循環輸入判斷*/
{
sum+=stud[i].subject[3];
if(stud[k].subject[3]>stud[i].subject[3]) k=i;
if(stud[j].subject[3]<stud[i].subject[3]) j=i;
}
average[3]=sum/numstus;
printf("\t科目D的最高分:\n"); /*最高分*/
printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[3]);
printf("\t科目D的最低分是:\n"); /*最低分*/
printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[3]);
printf("\t科目D的平均分是 %5.2f\n",average[3]); /*平均分*/
break;
case '5':
for(i=0;i<numstus;i++) /*循環輸入判斷*/
{
sum+=stud[i].subject[4];
if(stud[k].subject[4]>stud[i].subject[4]) k=i;
if(stud[j].subject[4]<stud[i].subject[4]) j=i;
}
average[4]=sum/numstus;
printf("\t科目E的最高分:\n"); /*最高分*/
printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[4]);
printf("\t科目E的最低分是:\n"); /*最低分*/
printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[4]);
printf("\t科目E的平均分是 %5.2f\n",average[4]); /*平均分*/
break;
default:printf("輸入錯誤!請輸入1~5之間的數\n");
}
sum=0;
getchar();
printf("是否繼續進行統計?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y') ;
else break;
}
}
}

int writetotext(student stud[]) /*將所有記錄寫入文件*/
{
int i=0,j;
FILE *fp;
char filename[20];
printf("輸入文件名稱:");
gets(filename);
fp=fopen(filename,"w");
fprintf(fp,"%d\n",numstus);
while(i<numstus)
{
fprintf(fp,"%s %s %s ",stud[i].number,stud[i].name,stud[i].sex);
for(j=0;j<numsubs;j++)
fprintf(fp,"%f ",stud[i].subject[j]);
fprintf(fp,"%f %f %d ",stud[i].score,stud[i].average,stud[i].index);
i++;
}
fclose(fp);
printf("已成功存儲!\n");
display(stud,0,numstus-1);
numstus=0;
return 0;
}

void welcome()
{
printf("\t*************************************************************\n");
printf("\t\t\t\t這是一個學生成績管理系統\n\t\t\t\t 傾情奉獻 歡迎使用!\n");
printf("\t*************************************************************\n");

}

void showtable()
{
printf("---------------------------------------------------------------------------------------\n");
printf("學號\t姓名\t性別\tA\tB\tC\tD\tE\t總分\t平均分\t名次\n");
printf("---------------------------------------------------------------------------------------\n");
}

void display(student stud[],int n1,int n2)
{
int i;
showtable(); /*顯示表頭*/
for(i=n1;i<=n2;i++)
printf("%s\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%d\t\n",stud[i].number,stud[i].name,stud[i].sex,stud[i].subject[0],stud[i].subject[1],stud[i].subject[2],stud[i].subject[3],stud[i].subject[4],stud[i].score,stud[i].average,stud[i].index);
/*通過循環輸出數據*/

}
void display1()
{
printf("\t\t本系統由計應精英一組親情製作\n\n");
printf("\t\t製作人員列表: (按比劃)\n");
printf("\t\t王慶斌\t\t\t張威\n\t\t李智\t\t\t周在峰\n\t\t楊凱\t\t\t胡楊\n");
printf("\n\n");
getchar();
}

#include<string.h>
void amendrecord(student stud[])
{
char str[5]; /*供用戶輸入*/
int i=-1,j;

if(numstus==0) /*沒有記錄返回*/
printf("沒有可供修改的記錄!");
while(i<0)
{
i=findrecord(stud);
if(i>=0)
{
printf("要刪除這個學生的信息嗎?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
{
deleterecord(stud,i);
count(stud);
}
else
{
printf("確定要修改這個學生的信息嗎?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
{

printf("下面請重新輸入學生的信息:\n");
printf("請輸入學號:");
gets(stud[i].number);
printf("請輸入姓名:");
gets(stud[i].name);
printf("請輸入性別(男/女 1/0):");
gets(str);
if(str[0]=='0')
strcpy(stud[i].sex,"女");
else
strcpy(stud[i].sex,"男");
stud[i].score=0;
printf("請按順序輸入成績:");
for(j=0;j<numsubs;j++)
{
scanf("%f",&stud[i].subject[j]);
stud[i].score+=stud[i].subject[j];
}
getchar();
stud[i].average=stud[i].score/numsubs;
}
count(stud);
}
display(stud,0,numstus-1);
}
printf("是否繼續進行其他修改?(y/n)\n");
gets(str);
if(str[0]=='y'||str[0]=='Y')
i=-1;
else i=1;
}
}

void deleterecord(student stu[],int i) /*刪除信息*/
{
int j;

while(i>=0)
{
for(j=i;j<numstus;j++)
stu[j]=stu[j+1];
numstus--;
printf("刪除成功!\n");

}
}

void count(student stud[])
{
int i,j;
for(i=0;i<numstus;i++)
{
stud[i].index=1;
for(j=0;j<numstus;j++)
if(stud[j].score>stud[i].score)
stud[i].index++;
}
}

void addrecord(student stud[])
{
int i=0,j,num;
char str[5];
if(numstus!=0)
{
printf("已有記錄存在是否覆蓋?(y/n)\n");
gets(str);
if(str[0]=='Y'||str[0]=='y')
i=0;
else i=numstus;
}

printf("請輸入增加的學生信息條目數:");
scanf("%d",&num);
if(i==0)
numstus=num;
else numstus+=num;
if(numstus>lens)
{
lens+=50;
pointer=(student *)realloc(pointer,lens*LEN);
}
printf("請輸入學生信息:\n");
for(;i<numstus;i++)
{
getchar();
printf("請輸入學號:");
gets(pointer[i].number);
printf("請輸入姓名:");
gets(pointer[i].name);
printf("請輸入性別(男/女 1/0):");
gets(pointer[i].sex);
if(pointer[i].sex[0]=='0') strcpy(pointer[i].sex,"女");
else strcpy(pointer[i].sex,"男");
printf("請輸入各科成績:(按ABCDE的順序):");
stud[i].score=0;
for(j=0;j<numsubs;j++)
{
scanf("%f",&stud[i].subject[j]); /*計算總分*/
stud[i].score+=stud[i].subject[j];
}
stud[i].average=stud[i].score/numsubs; /*計算平均分*/
}
count(stud); /*附名次*/
display(stud,0,numstus-1);
getchar();
}
int numstus;
int lens;
student *pointer;
void main()
{
int i=1;
char str[2];
lens=100;
pointer=(student *)malloc(lens*LEN); /*分配內存*/
numstus=0;
welcome(); /*歡迎界面*/
while(i>0)
{
i=menu_select(); /*控制菜單*/
switch(i)
{
case 1:addrecord(pointer);break; /*增加學生信息*/
case 2:findrecord(pointer);break; /*查詢學生信息*/
case 3:amendrecord(pointer);break; /*修改學生信息*/
case 4:sort(pointer);break; /*學生信息排序*/
case 5:statistic(pointer);break; /*統計信息*/
case 6:openfile(pointer);break; /*打開文件*/
case 7:writetotext(pointer);break; /*保存文件*/
case 8:display(pointer,0,numstus-1);break; /*顯示記錄*/
case 0:
if(numstus!=0) printf("是否保存當前記錄?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
writetotext(pointer);
i=-1;break; /*退出系統*/
default:printf("請輸入數字0~8:\n");i=1; /*輸入錯誤*/
}
}
printf("\t\t歡迎再次使用本系統。\n\n");
display1();
}

B. 計算機專業C與C++程序設計研究論文

計算機專業C與C++程序設計研究論文

摘要 :首先介紹了目前高校計算機學院C族語言相關程序設計課程的建設狀況。然後從C族語言的相互衍生關系出發,提出了在高校計算機課程體系中去除C語言的基礎課程,將其綜合成一門C++程序設計課程來供學生學習,並對課程內容、參考教材和課時安排上給出了自己的建議。

關鍵詞 :C語言;C++語言;程序設計

高校的C族語言教學總是按照先學C語言,再學C++的順序進行,這種學習順序隨著C++標準的不斷升級改革後變得越來越不適用。早期的C++屬於多面性語言,即可以像C一樣進行模塊化的面向過程的編程設計,也可以像Java一樣進行抽象的面向對象程序設計。那時的教學者考慮的是學生應當從較為便於理解的面向過程的編程思路入門學習C語言編程,然後在熟練了面向過程的編程方式後再從C語言延伸到C++,轉而學習面向對象的程序設計。可是隨著面向對象的程序設計在應用市場上佔領了絕對的主導地位後,再讓學生從面向過程著手就等於是浪費學習時間。加上C++和C兩門語言的初級語法思想是完全一致的,開設兩門課程浪費了學時,也耽誤後續更重要的核心課程的學習。

1程序設計語言C與C++的比較

1.1C與C++的共性。一般簡要的介紹是把C++當作C的加強版,這種認知當然是錯誤的,C++語言的設計者在設計之初為了保障自家語言會受到開發者的關注,所以兼容了的C的語法,這就自然使得C++可以使用C的編程方式進行程序設計,所以也導致了很多人對這兩種語言的關系產生了錯誤的認知。同時由於C語言本身設定上的優越性,所以C++在進行自我定義的時候也沿用了C語言很多優良的性質。基礎數據結構一致,C與C++的基礎數據類型都是以變數和常量作為基本屬性劃分,類型上有字元型、整型、長整型、單精度浮點型和雙精度浮點型,不過C++額外增設了布爾型。復合型數據結構上也都同時具有數組、多維數組、結構體、枚舉類型和共同體,但是C++增設了字元串類型以替代C語言中的字元數組,功能上更加強大,也更加便捷。在語法方面,聲明、賦值、循環、選擇的結構和實現都是一致的,並且C++雖然提倡使用類和對象的概念去設計程序結構,可也同樣支持函數體結構的程序設計結構。並且C語言中函數的賦值都是間接調用,在使用C語言函數時總是會在指針上出現各種紕漏,但是C++的函數體可以使用引用參數,這就使得C++的函數體比之C的更加好用。總的說來就是,C++標准下用戶可以完全使用C語法進行編程而不會出現任何BUG,同時C++自身的優越設定和標准使得其設計能力比C要強大數倍,是目前市場上大型程序開發的首選語言。

1.2C與C++的不同。上一節介紹了C++和C的.基礎語法上的區別,這些區別都是C++的作者在C的基礎之上修訂而來的結果,是為了讓C++標准下得面向過程的程序設計比之單純的C更加便捷方便。但是C++的誕生伊始,就是一門向上使用面對對象的程序設計思想的高級編程語言。它的封裝性、繼承性、多態性和對象唯一性才是C++成為強大高級語言的重要原因,這些特性都是C語言不可能擁有的。所以C能夠實現的程序,C++能夠實現並且實現的更為方便,C不能實現的程序,C++同樣可以實現。

1.3C++的特色。承接上一節,C++和C之間最大的不同,也是C++自身最值得誇耀的特性,就是面向對象程序設計思想。這種思想使得C++語言設計出來的程序,變成了類和對象的有機結合,這種結合的代碼比之面向過程的函數體架構的代碼更加易讀,共同開發起來容易上手,後續的維護者也不用費更多的腦筋去理解前人的代碼含義。而類和對象的設計思路,使得開發者合作時相互之間的工作變的更為獨立,雙方之間只需要知道對方所寫的類實現的功能和包含的數據就行。這種特性我們稱之為良好的封裝性,開發者之間不需要去知道對方的代碼是如何實現,甚至在此之上還可以保證良好的代碼健壯性。因為類的引入,更先進的作用域機制也被引入進來,類的書寫者往往會將自己類中的數據進行嚴格的作用域限定,防止其他合作者擅自去修改和使用自己類中的數據。合作者想要知道類中的數據或者使用類中的數據,只能通過類的書寫者定義的帶有檢查機制的方法才行。這樣會使得很多人合作開發的大型項目的穩定性和安全性比之用C語言開發時再上一個台階。同時類的概念中還有一個先進的設定就是繼承性,並且由這個繼承性還延伸出了介面的概念。有了可以繼承的介面和類,那麼開發者在對程序進行迭代的瀑布開發流程時,就可以很好的使用自己曾經開發的源代碼,或者借用其他項目的源代碼,因為只要學會科學的使用繼承機制,就不僅僅是節約程序員的代碼時間,也減少了程序員在回顧曾經代碼時發生的錯誤和歧義。而與繼承機制配合使用的是多態性,曾經C語言中定義的函數,其靈活度非常差,特定的函數只能滿足特定程序定義的需求,想要重用曾經的源代碼是幾乎不可能的事情。我們剛才提到的繼承機制使得C++開發者復用源代碼成為了一種習慣,但是復用時不可避免的修改問題又擺到了檯面上,多態機制順應而生了。多態機制使得類不僅可以繼承其他類,將父類的數據和方法都在本類體中自如的使用,同時還可以用本類中新的定義和代碼去覆蓋父類中的數據定義和方法。這就讓程序員變的更加自由,想用父類的數據和方法時就去繼承,但是不想全部使用時就加上多態機制去覆蓋。這樣代碼之間的重復利用率變得十分客觀,節約了大量的開發時間和開發成本。

2程序設計語言C與C++開設建議

C++課程的內容應當如下安排:第一部分,教授C++的基礎語法,讓學生可以編寫出在DOS命令行下輸入輸出的程序,了解編程的基本概念和思想。並且這時應當同時進行C和C++的雙向語法教學,為日後學生進入高年級後的方向選擇打下基礎。此部分使用半個學期最為適宜,並且此時並不灌輸學生何為面向對象何為面向過程,而主在讓學生使用基礎語法進行最基本的編程探索。第二部分,在學生有了基礎編程知識後,將數據結構的內容放入課程中去,用半學期的時間教授學生用C++實現的各類常見數據結構。並且結合實際開發項目中的代碼作為閱讀補充,讓學生明白數據結構的知識對程序開發的意義,然後將簡化後的小項目作為課堂的主要內容,用實際的代碼讓學生去理解那些枯燥的數學定理和概念。而且在實現數據結構的過程中,必然會面對一些更為高級的C++語法和概念。總的來說,用大一上的一個學期讓學生對於基礎編程有了良好的認知和深入,是十分值得和有效的。第三部分,在學生有了數據結構的基礎和C++的基本語法掌握後,應當面對一些實際的開發項目和問題。當然實際的問題還是需要老師進行簡化,其主要目的是讓學生掌握C++的高級特性和實際軟體開發的過程與思路,並且想學生傳授基礎的演算法。這一部分較為困難,應當使用一個學期讓學生慢慢的掌握和熟悉。第四部分,在學生算是對C++語言和數據結構與演算法都有了基礎的入門後,再進行課堂教學意義就不大了,應當再大二上學期開設一門課程設計實驗課,讓學生完成幾個難度從小到大的項目,循序漸進的掌握基本的實際開發技巧和思維。

參考文獻

[1]羅莉.計算機程序設計的多應用型開發與實現[J].產業與科技論壇,2015(14):54-55.

[2]鄧薇,何錇,錢俊彥,等.深度優先的多基因表達式程序設計[J].模式識別與人工智慧,2013(9):819-828.

[3]宛西原,汪霞.非計算機本科專業計算機程序設計課程的改革思考[J].計算機工程與科學,2014(z1):56-59.

;

C. C語言的用途,定位及特點(論文)

1.2 C 語言的特點
C 語言發展如此迅速, 而且成為最受歡迎的語言之一, 主要因為它具有強大的
功能。許多著名的系統軟體, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 語言編寫的。
用C 語言加上一些匯編語言子程序, 就更能顯示C 語言的優勢了, 象PC- DOS 、
WORDSTAR等就是用這種方法編寫的。歸納起來C 語言具有下列特點:
1. C是中級語言
它把高級語言的基本結構和語句與低級語言的實用性結合起來。C 語言可以象
匯編語言一樣對位、位元組和地址進行操作, 而這三者是計算機最基本的工作單元。
2. C是結構式語言
結構式語言的顯著特點是代碼及數據的分隔化, 即程序的各個部分除了必要的
信息交流外彼此獨立。這種結構化方式可使程序層次清晰, 便於使用、維護以及調
試。C 語言是以函數形式提供給用戶的, 這些函數可方便的調用, 並具有多種循
環、條件語句控製程序流向, 從而使程序完全結構化。
3. C語言功能齊全
C 語言具有各種各樣的數據類型, 並引入了指針概念, 可使程序效率更高。另
外C 語言也具有強大的圖形功能, 支持多種顯示器和驅動器。而且計算功能、邏輯
判斷功能也比較強大, 可以實現決策目的。
4. C語言適用范圍大
C 語言還有一個突出的優點就是適合於多種操作系統, 如DOS、UNIX,也適用於
多種機型。

D. C語言的論文如何寫呀

論文寫作,先不說內容,首先格式要正確,一篇完整的畢業論文,題目,摘要(中英文),目錄,正文(引言,正文,結語),致謝,參考文獻。學校規定的格式,字體,段落,頁眉頁腳,開始寫之前,都得清楚的,你的論文算是寫好了五分之一。
然後,選題,你的題目時間寬裕,那就好好考慮,選一個你思考最成熟的,可以比較多的閱讀相關的參考文獻,從裡面獲得思路,確定一個模板性質的東西,照著來,寫出自己的東西。如果時間緊急,那就隨便找一個參考文獻,然後用和這個參考文獻相關的文獻,拼出一篇,再改改。
正文,語言必須是學術的語言。一定先列好提綱,這就是框定每一部分些什麼,保證內容不亂,將內容放進去,寫好了就。
參考文獻去中國知網搜索,校園網免費下載。

合適採納

E. 求一篇1000字左右c語言之猜數游戲論文~!!!急用。。希望大家幫幫

我們現在來做一個<猜數字>游戲...
游戲規則參照文曲星里的猜數字:

輸入四入不重復的數字(中間用空格隔開)按<回車>後結果顯示在後邊,
形式為 " ? A ? B", 四個數中位置和數字都正確為 A,數字相同位置不同為 B,
當 4 A 0 B 時為猜對,每一局有8次機會.

如:原四個數為1234,則
1234 4 A 0 B
5678 0 A 0 B 沒有一個對.
1243 2 A 2 B 3,4雖對但位置錯.

明白了規則後,下手就容易了,也許你還沒頭緒,沒關系,一步一步來.

1.首先明白自己的游戲要做什麼?
由玩家輸入四個數字,驗證這四個數和正確答案的關系,提供一個" X A X B"的
提示給玩家,再輸入...直至玩家猜對或到達八次.

2.游戲需要什麼資源?
這個游戲並不需要什麼特別的,只要一個printf,和scanf獲得輸入.

所以程序開頭:

#include <stdio.h>
加入標准輸入輸出,沒有它Turbo C不知道printf和scanf在哪來.

好,程序設計開始...

main(){
}

先把這個函數寫下來,這個叫主函數,一個程序就只有一個,也稱為程序入口函數,
你的程序就是從這里開始執行的.(是不是有點廢話?)

(以下操作都在main()中)
設定四個變數儲存正確答案:(也可以結個初值)
int a1,a2,a3,a4;
再設定四個變數諸存玩家的輸入:
int b1,b2,b3,b4;
設定一個變數諸存猜的次數並賦初值:
int n = 0;
設定兩個變數諸存結果A,B的個數:
int cA,cB;

准備工作完成,設定正確答案:
a1 = 3;
a2 = 5;
a3 = 9;
a4 = 7;
(當然你會抱怨正確答案是固定的,不要緊,下面會告訴你怎麼產生隨機的效果,慢慢來.)

仔細想一想整個游戲流程...
大概是這樣的:

循環執行:
輸入;
對比正確答案;
輸出提示;
判斷是否猜對;
是:顯示勝利並退出循環,否:不理會;
次數加1;
判斷次數是否超出;
是:顯示失敗並退出循環;
循環結束;

那麼,為了更容易理解,我們使用死循環,但要注意一點:裡面必須有使循環結束的語句!
break;就是這個語句.

那麼:

while(1){
...
break;
...
}

就寫下吧.while(XX){YYYY}是這樣工作的:
XX是不是0 (真)
不是:
執行 YYYY
是:退出循環
再檢查XX是不是不為0
...
不過你必須明確:break;會強制退出循環.

好,就這樣:

printf("\n\t Guess Numbers!\n\n"); /*列印一點提示信息*/
while(1){ /*開始用戶的輸入和程序輸出*/
printf("%d: ",n+1); /*列印當前是第幾次輸入*/
scanf("%d %d %d %d",&b1,&b2,&b3,&b3);
/*先不要知道為什麼要在b1,b2這前加&,先認為,scanf就要這樣*/
cA=0;
cB=0; /*對比就要開始,先把結果置0*/

/*對比開始,我們用一堆if來為我們做事*/
/*雖然這有點累贅,但誰叫我們是初學者呢?不過告訴你,這種表達效率是最高的*/
if(a1 == b1) cA++;
if(a2 == b2) cA++;
if(a3 == b3) cA++;
if(a4 == b4) cA++; /*逐個檢查增加A的數量*/

if(a1 == b2 || a1 == b3 || a1 == b4) cB++;
if(a2 == b1 || a2 == b3 || a2 == b4) cB++;
if(a3 == b1 || a3 == b2 || a3 == b4) cB++;
if(a4 == b1 || a4 == b2 || a4 == b3) cB++;
/*窮舉檢查得到B的數量*/
/*當然,你必須保證玩家輸入的都不一樣,不然就會鬧出笑話*/
/*檢查對比結束*/

/*列印提示*/
printf("\t\t%d A %d B\n",cA,cB);
/*判斷是否勝利*/
if(cA == 4){
printf("\n\tWell Done!\n");
getch(); /*getch()的功能是輸入一個字元,不需要回車,也不會顯示到屏幕*/
/*通常用來暫停程序*/
break; /*退出循環*/
}
/*次數加一*/
n++;
/*判斷次數*/

F. 求一篇基於C語言的計算機畢業論文,要求有源程序

機頂盒上游戲開發可以么,也是用C語言寫的
目 錄

第一章 緒論 1
1.1機頂盒的產生背景 1
1.2機頂盒的發展及其現狀 1
1.3游戲模塊設計的必要性 2
1.4模塊設計需要解決的問題 3
第二章 系統開發環境及相關技術介紹 4
2.1 XX-XX硬體平台 4
2.2 XX操作系統 4
2.2.1 內核 4
2.2.2 任務機制 5
2.2.3 消息隊列 6
2.2.4 信號量 7
2.3 C語言的特點 7
第三章 開發流程 9
3.1 功能需求分析 9
3.2 可行性分析 9
3.3 模塊設計 10
3.4 編碼 10
3.5 測試 11
第四章 系統設計 12
4.1游戲模塊介面設計 12
4.1.1游戲的初始化 12
4.1.2游戲的按鍵讀取和轉化 12
4.1.3游戲的暫停、恢復和退出 12
4.2 游戲演算法設計 13
4.2.1推箱子游戲設計 13
4.2.2 俄羅斯方塊游戲設計 14
4.2.3 黑白棋游戲設計 14
結 論 16
謝 辭 17
參 考 文 獻 18
附錄 推箱子游戲源程序 19

G. 球一份關於單片機或c語言的論文!2000字左右的

一·基於MSP430 單片機的電源監控管理系統(單片機論文)

引言
大功率直流開關電源由PFC 和DC-DC 變換器組成,為了提高可靠性,並能夠對其進行離線或遠程監控管理,在開關電源模塊內設置監控管理系統。該系統對電源故障類進行監控,對電源輸出的電壓電流進行自動設定和調節,通過串列通信介面,與遠程中心監控站進行遠程監控和管理,這一功能在通信系統基站供電系統中尤為重要。本文提出了一種基於MSP430單片機的電源監控管理系統的設計和實現。

1 系統結構和硬體電路設計
系統的整體設計結構如圖1所示。本系統採用的核心晶元為TI公司推出16位系列單片機MSP430。MSP430具有集成度高,外圍設備豐富,超低功耗等優點。單片集成了多通道12bit的A/D轉換、片內精密比較器、多個具有PWM功能的定時器、片內USART、看門狗定時器、片內數控振盪器(DCO)、大量的I/O埠以及大容量的片內存儲器,採用串列在線編程方法,單片可以滿足絕大多數的應用需要。 MSP430的這種高集成度使應用人員不必在介面、外接I/O及存儲器上花太多的精力,而可以方便的設計真正意義上的單片系統,在許多領域得到了廣泛的應用。下面介紹該系統可以實現的功能和基於MSP430F149的電控系統的設計。

1.1 系統功能:
a.開機控制。上電後,單片機開始工作,按下電源鍵,點亮指示燈後,將電網220V接入PFC,開關電源啟動工作,然後接於負載。
b.電壓設定和調節。用單片機A/D口採集開關電源的輸出電壓值,並顯示於液晶屏上,通過單片機控制數字電位計調節輸出電壓值,實現自動調節;或者通過鍵盤的左右鍵選出電壓調節頁面,用上下鍵進行手動調節;也可以通過通信介面實現遠程調節。

c.電流調節。多台開關電源並聯使用時,要求各台電源的負載電壓相等。單片機A/D口採集轉換成電壓值的負載電流值,通過通信口得到各台電流值,取電流平均值,控制數字電位計調節輸出電壓,使輸出負載電流達到平均值;或者通過鍵盤的左右鍵選出電流調節頁面,用上下鍵進行手動調節。

d.故障報警。單片機通過光電耦合器檢測到各項輸入輸出故障時,揚聲器產生蜂鳴,相應的報警燈閃爍,並在液晶屏上顯示故障類型及處理方法。

e.監測。單片機A/D口對電網電壓,輸出電壓,輸出電流進行採集測量,當出現超限時進行報警。

f.通信。包括單片機與各台開關電源間的通信和單片機與中心監控站的通信。

1.2 電壓調節電路
電壓調節電路由單片機、數字電位計X9313和可調分流基準晶元TL431組成,其電路原理圖如圖2所示。Xicor9313是固態非易失性電位器,可用作數字控制的微調電位器。TL431是TI生產的一個有良好的熱穩定性能的三端可調分流基準源,它的輸出電壓用兩個電阻就可以任意地設置到從VREF(2.5V)到36V范圍內的任何值。工作時,單片機的一個IO控制INC計數輸入腳,為其提供計數脈沖,此輸入端為下降沿觸發。另一個IO控制U/D升降輸入端,當U/D為高電平時,X9313內部計數器進行加法計數,VW端的輸出電壓上升,由於VW接地,使VH端電壓降低,而TL431的REF輸出端電壓為恆定的2.5V,從而使Vcc處輸出電壓升高;同理當U/D為低電平時,Vcc處輸出電壓降低,這樣就實現了電壓輸出調節。

1.3 模擬數據採集
MSP430F149內嵌入一個高精度的,具有采樣與保持功能的12位ADC轉換模塊,內部提供各種采樣與保持時鍾源。MSP430有8個外部輸入通道可選, 最高采樣速度可達200KHZ,並且還內置溫度感測器,可以測量晶元內的溫度,如果測量溫度高於或低於預設的溫度是,可以通過外接部件顯示告警信息,同時具有6種可編程選擇的內部參考電壓。該轉換模塊為一些需要模擬量採集的場合提供了便利。我們選擇的參考電壓是0~2.5V,這樣MSP430F149的AD解析度就是2.5/4096 = 0.61V左右。由於輸入的模擬電壓量較高,不能直接與單片機的ADC采樣埠相連,因此用串聯一個滑動變阻器的方法進行了降壓處理,成功解決了上述問題。

1.4 人機對話設計
系統的人機操作界面由液晶顯示屏、指示燈和鍵盤組成。液晶選用的是基於T6963C 的液晶模塊YM12864。鍵盤採用的是3×3 的陣列接法,系統採用了圖形用戶界面,操作簡單易行,顯示實用美觀。工作時,液晶屏可以實時顯示採集到的電網電壓、輸出電壓、輸出電流及各種報警信息,操作相應鍵盤可以進行顯示頁面的切換,對輸出電壓,輸出電流進行自動、手動及遠程式控制制調節。當有報警信息產生時,相應得指示燈會閃爍警示,同時與單片機連接的揚聲器會產生報警蜂鳴聲,以提醒操作人員做出相應的處理。

2 系統軟體設計
430 支持匯編語言和C 語言兩種語言編程,因此可以在一個工程文件中同時用兩種語言,使用匯編語言,便於在調試時尋找邏輯和指令的聯系及地址的定位正確與否。使用C 語言進行編程大大減少了工作量,編好後的程序可讀性好,易於修改和維護。開發工具使用IARSystems 公司的IAR Embedded Workbench,它集成了編輯、編譯、鏈接、下載與在線調試(Debug)等多種功能,使用方便,並具備高效的C 語言編譯能力。

考慮到軟體開發效率及可維護性,系統軟體設計遵循模塊化的編程思想,將系統功能劃分為幾個相對獨立的功能模塊。它們包括:液晶顯示模塊、AD 轉換模塊、按鍵監測響應模塊、報警監測響應模塊、電壓電流調節模塊、數據處理模塊、通信模塊。每個模塊都要進行獨立的測試,最後結合到一起。整個系統的軟體流程圖如圖3 所示。

按鍵監測模塊是其中的重要組成部分,它控制著AD轉換的啟動,顯示頁面的切換,及電壓電流的自動調節,手動調節,遠程調節的啟動和切換。報警監測模塊對開關電源的保護起著至關重要的作用,它實時的監測著開關電源是否出現故障,當發生輸入電壓過壓,輸入電壓欠壓,PFC故障時應切斷總電源,當發生輸出電壓過壓,輸出電壓欠壓,模塊過熱,及IPM保護故障時應關斷DC-DC變換器。
在對各模塊進行整合時,要注意各中斷之間的沖突。由於在MSP430 的中斷優先順序中,ADC12 采樣轉換中斷優先順序高於TIMERA 中斷,因此當在響應TIMERA 中斷的過程中會執行ADC12 采樣轉換中斷,或者TIMERA 的中斷響應被迫延遲,這樣就會影響在TIMERA中斷中執行的報警監測響應程序,不能達到對開關電源故障類的實時檢測。在本系統中,利用按鍵控制ADC12 采樣轉換中斷的啟動和關閉,從而解決中斷沖突。

3 結論
本文在基於MSP430F149電源監控管理系統的設計和實現的基礎上對MSP430的系統設計做了討論,提出並解決了在設計中出現的問題。本文作者的創新點:利用MSP430的系統結構簡單,外圍電路少,效率高的特點,設計實現了簡潔直觀、使用方便、操作全程漢字提示、監控能力強、運行穩定、安全可靠的電源監控管理系統,大大降低了成本,取得了相當可觀的經濟效益,滿足實際需求。

二·C語言論文:

嵌入式以門檻高,入門難的方式攔截了無數的學者。然而單片機作為嵌入式的入門課,如何以一種正確的方法學習單片機將關繫到是否能學習好嵌入式。
縱所周知,學習嵌入式先玩ptotel,再做單片機。Protel簡單的來說就是一個做PCB板的純英文的軟體。學習ptotel前必需具備一定的電路基礎和英語能力,電路基礎我想大部分同學都是有的,而英語這一塊卻是許多人所頭疼的。這對英語基礎差的同學是一種打擊,再者如果毅力不強,我想你是自學不下去的。毅力是學任何東西所必需的一種能力、素質,是一種遇挫折而不言敗的決心。
不管學的是protel還是單片機,首先要找一個能夠指導你的人。何謂指導,指導並不是說他要一步一步地教你去做,而是一個在關鍵時刻能夠為你指出一條道路的人。
我認為學習嵌入式方法最重要,在學protel和單片機之前應該想辦法了解關於學習它們的方法。比如說protel吧,許多人理科的學生都是以一種純理解的角度去學的,畫一個導線、元件問一下為什麼要這樣畫,生成網路表也追根溯源地問個網路表的由來。其實許多東西只是懂用就行,理論的東西懂得再多不懂用也是枉然的。
所以學習protel有地方不懂你就問你的指導員,有許多的東西是規定死了的,不是你想半天一夜就可以為你而改變的。這不同於軟體設計,軟體設計在你的苦思之下也許可以找到另一種更好的方法。

單片機嘛,不得不承認中國沒一本單片機好書。我學習單片機的時候看過的單片機書有七本,大多數都是不盡人意的。在這里我冒昧地說:中國人寫書確實缺乏一點「讀者至上」的原則。我所看過的單片機書我想有很多都是以他的角度去寫的,沒有幾個人是站穩在讀者的角度上寫的。書上的章節注釋極不清楚,許多重要的地方都是沒有說明的,說句不好聽的話,作者似乎以為讀者的水平也像他一樣高。而外國人的書呢,同樣的書,同樣的知識點,有同樣的中國人的書的兩三倍那麼厚,這是為什麼。這是因為外國人的書點點滴滴都是面向著讀者的。注釋、說明、總結應有盡有。所以,我在這里發表一個也許同胞會扔雞蛋到我身上的觀點,那就是:不管學什麼,優先選擇外文翻譯書,或是純英文書。得到一本好書對我們的影響極為巨大。這一部分我用一句話來總結就是:中國人的書適合教學,而外國人的書不僅適合教學還適合自學。

中國人的單片機書往往都是先介紹單片機的內部結構、中斷,定時器,然後再到I/O口。一開始就讓我們學習單片機內部結構,中斷、定時器的內部結構和原理,把我們弄得一塌糊塗的時候再和我們講例子,怎樣去操作實驗板。如果自學的話我想許多同學是學不下去的,幹嘛要把非得把單片機的內部結構像解剖學一樣弄個徹底才實踐去應用它呢?即使你把單片機全解剖清楚了還是不會用你手中的這塊實驗板的。我覺得如果在學單片機之前沒有學過匯編語言就直接用C語言學的話,即使學完了單片機,對單片機的內部結構和單片機的工作原理也是不清楚的。學了匯編之後再學單片機的話效果將會好得多,所以不要心急,有些東西是急不來的。
所以我認為學習單片機要在實踐中學習,先實踐再去了解它的結構和原理,如果你實在不能了解它的結構和原理那也無所謂的,只要你懂得用就可以了!(沒學過匯編的只能這么說了)
我們可以先從 I/O口學習,看一些例子燒錄些程序,再看一下現象,之後再嘗試了解一下所要用到的單片機的內部結構,最後在這個現象的知識基礎上,編一個自己想要的程序、現象出來。這樣學習的話既不無聊,成就感也有了。為什麼有些人可以把學習當一種快樂,而許多人在唉聲嘆氣,我想有一部分是出自這個原因。
不同的實驗板有不同的PCB圖,所以I/O的操作也是有所不同的。不過操作的原理都是一樣的,有些同學可能會抱怨教程里的實驗板和自己手中的實驗板不同,這是大可不必多慮的。I/O這一步在調試中看現象的理念很重要,比如改變一個語句會產生何種現象,為什麼會產生,這些都是要在調試中掌握的。
中斷的學習方法也是類似的,先實踐發現有陌生的地方就去查看相應的寄存器,等實現了自己想要的現實再慢慢地解剖一下單片機的寄存器,這樣學起來會更有意義,記得更牢。中斷也沒復雜的東西的,只不過學幾個中斷函數,優先順序之類的。有一定C語言基礎的同學在優先順序這一塊可以聯系C語言中運算符的優先順序,我相信有了C語言基礎定義一兩個中斷函數也不是什麼問題了的。
我學過的單片機的內容在我文檔的實例之中,實例的數量不多,但這些都是直接點擊單片機知識點的。隨著我的學習漸漸地深入後我再把我實現過的東西寫入實例之中吧。

希望對你有所幫助,祝成功!