程序課程設計
#include<stdio.h>
#include<conio.h>
#include <stdlib.h>
#include<string.h>
#define MAX 80
#define max 3
int nu=0;
struct classname
{
char name[20];
float score;
};
struct student
{
char no[20];
char std_name[20];
struct classname km[max];
float ave;
float sum;
int save;
};
struct student stu[MAX],*p;
void chushi()
{
int i,j;
for(i=0;i<MAX;i++)
{
for(j=0;j<20;j++)
{
stu[i].no[j]=NULL;
stu[i].std_name[j]=NULL;
stu[i].km[j].name[j]=NULL;
stu[i].km[j].score=0;
}
stu[i].ave=0;
stu[i].sum=0;
stu[i].save=0;
}
}
void av()/*求平均值*/
{
int i;
for(i=0;i<nu;i++)
{
stu[i].sum=stu[i].km[1].score+stu[i].km[2].score+stu[i].km[3].score;
stu[i].ave=stu[i].sum/3;
}
}
void first_check()
{
FILE *p;
int i,j;
struct classname frist[max];
for(i=0;i<max;i++)
{
for(j=0;j<20;j++)
frist[i].name[j]=NULL;
frist[i].score=0;
}
if ((p=fopen("c:\\kemu.txt","r"))==NULL)
{
printf("您好,歡迎使用學生成績管理系統\n\n因為您是第一次使用,請輸入科目名稱(三科)\n\n");
p=fopen("c:\\kemu.txt","w");
printf("輸入課程1名稱:");
scanf("%s",frist[0].name);
fprintf(p,"%s\n",frist[0].name);
printf("輸入課程2名稱:");
scanf("%s",frist[1].name);
fprintf(p,"%s\n",frist[1].name);
printf("輸入課程3名稱:");
scanf("%s",frist[2].name);
fprintf(p,"%s\n",frist[2].name);
}
system("cls");
fclose(p);
}
void save_nu()
{
FILE *p;
p=fopen("c:\\renshu.txt","w");
fprintf(p,"%d\n",nu);
fclose(p);
}
void Save_add(int n)
{
FILE * p;
int i;
p= fopen("c:\\cheji.txt","at");
if (p == NULL)
{
printf("文件不存在!!\n");
exit(0);
}
save_nu();
for (i = 0;i<n;i++)
if(stu[i].save==1)
{
stu[i].sum=stu[i].km[1].score+stu[i].km[2].score+stu[i].km[3].score;
stu[i].ave=stu[i].sum/3;
fprintf(p,"%s %s %2.1f %2.1f %2.1f %2.1f %2.1f \n",stu[i].no,stu[i].std_name,stu[i].km[0].score,stu[i].km[1].score,stu[i].km[2].score,stu[i].ave,stu[i].sum);
}
fclose(p);
}
void Save()
{
FILE * p;
int i;
p= fopen("c:\\cheji.txt","w");
if (p == NULL)
{
printf("文件不存在!!\n");
exit(0);
}
save_nu();
for (i = 0;i<nu;i++)
if(stu[i].save==1)
{
av();
fprintf(p,"%s %s %2.1f %2.1f %2.1f %2.1f %2.1f \n",stu[i].no,stu[i].std_name,stu[i].km[0].score,stu[i].km[1].score,stu[i].km[2].score,stu[i].ave,stu[i].sum);
}
fclose(p);
}
int read_nu()
{
FILE *p;
char ch,s[10]={'\0'};
int i=0;
p=fopen("c:\\renshu.txt","r");
if(p==NULL)
{
save_nu();
return 0;
}
ch=fgetc(p);
while(ch!='\n')
{
s[i]=ch;
ch=fgetc(p);
i++;
}
nu=atoi(s);
fclose(p);
return 0;
}
int read_km()
{
FILE *p;
int i,j=0;
char s[20]={'\0'};
chushi();
p=fopen("c:\\kemu.txt","r");
if(p==NULL)
{
printf("ERROR read_km");
return 0;
}
fgets(s,20,p);
while(strlen(s)!=0)
{
for(i=0;i<strlen(s);i++)
if(s[i]==10)
{
s[i]='\0';
break;
}
for(i=0;i<=nu;i++)
strcpy(stu[i].km[j].name,s);
for(i=0;i<20;i++)
s[i]='\0';
j++;
fgets(s,20,p);
}
}
void read()
{
FILE *p;
int i,j,n,k,z=0;
char s[50]={'\0'};
char o[10]={'\0'};
p=fopen("c:\\cheji.txt","r");
if(p==NULL)
printf("ERROR_read");
chushi();
read_km();
fgets(s,50,p);
while(strlen(s)!=0)
{
j=0;
for(i=0;i<50;i++)
{
if(s[i]!='\n')
{
n=0;
while(j==0)
{
if(s[i]!=' ')
{
stu[z].no[n]=s[i];
n++;i++;
}
else
break;
}
while(j==1)
{
if(s[i]!=' ')
{
stu[z].std_name[n]=s[i];
n++;i++;
}
else
break;
}
while(j==2)
{
if(s[i]!=' ')
{
o[n]=s[i];
n++;i++;
}
else
{
stu[z].km[0].score=atoi(o);
break;
}
}
while(j==3)
{
if(s[i]!=' ')
{
o[n]=s[i];
n++;i++;
}
else
{
stu[z].km[1].score=atoi(o);
break;
}
}
while(j==4)
{
if(s[i]!=' ')
{
o[n]=s[i];
n++;i++;
}
else
{
stu[z].km[2].score=atoi(o);
break;
}
}
while(j==5)
{
if(s[i]!=' ')
{
o[n]=s[i];
n++;i++;
}
else
{
stu[z].ave=atoi(o);
break;
}
}
while(j==6)
{
if(s[i]!=' ')
{
o[n]=s[i];
n++;i++;
}
else
{
stu[z].sum=atoi(o);
break;
}
}
for(k=0;k<10;k++)
o[k]='\0';
}
else
break;
j++;
}
for(i=0;i<50;i++)
s[i]='\0';
fgets(s,50,p);
z++;
}
}
void putin()
{
int n,i=0;
char ch;
read_km();
do
{
printf("\t\t\t\t錄入學員信息\n輸入第%d個學員的信息\n",i+1);
printf("\n輸入學生編號:");
scanf("%s",stu[i].no);
printf("\n輸入學員姓名:");
scanf("%s",stu[i].std_name);
printf("\n輸入課程%s的分數:",stu[0].km[0].name);
scanf("%f",&stu[i].km[0].score);
printf("\n輸入課程%s的分數:",stu[0].km[1].name);
scanf("%f",&stu[i].km[1].score);
printf("\n輸入課程%s的分數:",stu[0].km[2].name);
scanf("%f",&stu[i].km[2].score);
stu[i].save=1;
printf("\n\n");
i++;
n=i;
printf("是否繼續輸入?(Y/N)");
fflush(stdin);
ch=getch();
system("cls");
}
while(ch!='n'&&ch!='N');
system("cls");
if(nu==0)
{
nu=n;
Save();
}
else
{
nu=n+nu;
Save_add(n);
}
}
int putout()
{
int i;char s;
if(nu==0)
{
printf("學生信息為零!請錄入...");
return 0;
}
read();
do
{
printf("學生成績信息:\n\n");
for(i=0;i<nu;i++)
printf("學號:%s 姓名:%s\n%s分數:%2.1f\t%s分數:%2.1f\t%s分數:%2.1f\n平均分數:%2.1f\t總成績:%2.1f\n\n",stu[i].no,stu[i].std_name,stu[i].km[0].name,stu[i].km[0].score,stu[i].km[1].name,stu[i].km[1].score,stu[i].km[2].name,stu[i].km[2].score,stu[i].ave,stu[i].sum);
printf("\t\t按任意鍵返回主菜單");
fflush(stdin);
s=getch();
}
while(!s);
system("cls");
}
int sort()/*排序數據函數*/
{
struct student temp;
int i,j;
char s;
if(nu==0)
{
printf("學生信息為零!請錄入...");
return 0;
}
chushi();
read();
for(i=1;i<nu;i++)
{
for(j=1;j<=nu-i;j++)
{
if(stu[j-1].ave<stu[j].ave)
{
temp=stu[j];
stu[j]=stu[j-1];
stu[j-1]=temp;
}
}
}
do
{
printf("學生成績信息:\n\n");
for(i=0;i<nu;i++)
printf("學號:%s 姓名:%s 平均成績:%2.1f\n\n",stu[i].no,stu[i].std_name,stu[i].ave);
printf("\t\t按任意鍵返回主菜單");
fflush(stdin);
s=getch();
}
while(!s);
system("cls");
}
void find()/*查詢函數*/
{
int j,i=0;
int c=0;
char search[10]={'\0'};
char as;
if(nu==0)
{
printf("學生信息為零!請錄入...");
return 0;
}
chushi();
read();
do
{
printf("輸入要查詢課程名稱:");
scanf("%s",search);
for(j=0;j<max;j++)
if(!strcmp(stu[i].km[j].name,search))
{
c=1;
printf("\n該課程不及格學生姓名:\n");
for(i=0;i<nu;i++)
if(stu[i].km[j].score<60)
printf("%s\n",stu[i].std_name);
}
if(c==0)
printf("無此課程!");
printf("\n\t\t按任意鍵返回主菜單");
fflush(stdin);
as=getch();
}
while(!as);
system("cls");
}
void tongji()
{
int j,m,z,i=0;
char s;
if(nu==0)
{
printf("學生信息為零!請錄入...");
return 0;
}
chushi();
read();
for(z=0;z<max;z++)
{
m=stu[i].km[z].score;j=0;
printf("%s 最高分: ",stu[i].km[z].name);
for(i=0;i<nu;i++)
if(m<stu[i].km[z].score)
{
m=stu[i].km[z].score;
j=i;
}
printf("%s\t",stu[j].std_name);
j=0;i=0;m=stu[i].km[z].score;
printf("%s 最低分: ",stu[i].km[z].name);
for(i=0;i<nu;i++)
if(m>stu[i].km[z].score)
{
m=stu[i].km[z].score;
j=i;
}
printf("%s\t",stu[j].std_name);
m=0;j=0;i=0;
printf("%s 平均分: ",stu[i].km[z].name);
for(i=0;i<nu;i++)
m=m+stu[i].km[z].score;
printf("%d\n",m/nu);
m=0;i=0;
printf("%s 分數低於的60人數: ",stu[i].km[z].name);
for(i=0;i<nu;i++)
if(stu[i].km[z].score<60)
m++;
printf("%d\t",m);
m=0;j=0;i=0;
printf("%s 分數高於60的人數: ",stu[i].km[z].name);
for(i=0;i<nu;i++)
if(stu[i].km[z].score>60)
m++;
printf("%d\n\n",m);
}
do
{
printf("\t\t按任意鍵返回主菜單");
fflush(stdin);
s=getch();
}
while(!s);
system("cls");
}
void main()/*主函數*/
{
int as;
first_check();
start: printf("\n\t\t\t歡迎使用學生成績管理系統\n");
/*一下為功能選擇模塊*/
do
{
printf("\n\t\t\t\t1.錄入學員信息\n\t\t\t\t2.顯示學員信息\n\t\t\t\t3.成績排序信息\n\t\t\t\t4.查詢不及格學生\n\t\t\t\t5.統計信息\n\t\t\t\t6.退出\n");
printf("\t\t\t\t選擇功能選項:");
fflush(stdin);
read_nu();
scanf("%d",&as);
switch(as)
{
case 1:system("cls");putin();break;
case 2:system("cls");putout();break;
case 3:system("cls");sort();break;
case 4:system("cls");find();break;
case 5:system("cls");tongji();break;
case 6:system("exit");exit(0);
default:system("cls");goto start;
}
}
while(1);
/*至此功能選擇結束*/
}
❷ C語言程序設計課程設計!
圖書借閱管理,C語言編程的,只要設計部分的,,m
❸ 跪求!!!單片機課程設計程序編寫
題目:單片機課程設計報告目錄一、設計目的二、程設計具體要求三、單片機發展簡史四、8051單片機系統簡介五、8051單片機內部定時器/計數器簡介六、程序電路七、程序流程八、程序代碼九實驗總結-要求寫出完整的論文以及心得體會十參考資料及小結原文:一.目的1.進一步熟悉和掌握8051單片機的結構及工作原理。2.掌握單片機的介面技術及相關外圍晶元的外特性,控制方法。3.通過課程設計,掌握以單片機核心的電路設計的基本方法和技術,了解表關電路參數的計算方法。4.通過實際程序設計和調試,逐步掌握模塊化程序設計方法和調試技術。5.通過完成一個包括電路設計和程序開發的完整過程,使學生了解開發一單片機應用系統的全過程,為今後從事相應打下基礎。二.課程設計的體要求a)原理圖設計。1.原理圖設計要符合項目的工作原理,連線要正確,端了要不得有標號。2.圖中所使用的元器件要合理選用,電阻,電容等器件的參數要正確標明。3.原理圖要完整,CPU,外圍器件,擴器介面,輸入/輸出裝置要一應俱全。b)程序調計1.根據要求,將總體項能分解成若干個子功能模塊,每個功能模塊完成一個特定的功能。2.根據總體要求及分解的功能模塊,確定各功能模塊之間的關系,設直出完整的程序流程圖。c)程序調試將設計完的程序輸入,匯編,排除語法錯誤,生成*OBJ文件。1.按所設計的原理圖,在實驗平台上連線,檢查無誤。2.將匯編後生成的*OBJ文件傳送到實驗裝置的,執行該程序,檢查該程序、是否達到設計要求,若未達到,修改程序,直到達到要求為止,d)說明書1.原理圖設計說明簡要說明設計目的,原理圖中所使用的元器件功能及在圖中的作用,各器件的工作過程及順序。2.程序設計說明對程序設計總體功能及結構進行說明,對各子模塊的功能以及各子模塊之間的關系作較詳細的描述。3.畫出工作原理圖,程序流程圖並給出程序清單。目前,單片機已廣泛應用到圖民經濟建設和日常生活的許多領域,成為測控技術現代化必不可少的重要工具。下面介紹一本單片機課程設計的好書,介紹了很多實例有興趣者可以去買哦,價格不貴【圖書目錄】-8051單片機課程設計實訓教材第1章緒論1.1課程設計所需硬體工具1.2專題製作所需軟體使用工具1.38051程序開發測試平台1.4使用免費匯編編譯器1.589CXX燒錄模擬器操作實例1.6自製8051微電腦單板IO511.7IO51操作實例1.8以Windows98工作模式結合DOS模式來執行第2章8051單片機課程設計中的基本軟硬體設計2.18051各種基本的硬體設計2.2工作指示燈LED2.38051延遲時間計算2.4基本按鍵設計2.5建立8051通信介面2.6簡易8051調試界面2.7壓電喇叭測試2.8鍵盤掃描2.9掃描控制七段顯示器2.10LCD介面控制2.118051定時器模式的工作2.12定時器模式0測試2.13定時器模式1測試2.14定時器模式2測試2.15以定時器產生各種頻率的聲音2.16以定時器演奏—段旋律第3章帶單片機的LCD時鍾第4章定時鬧鈴第5章定時鬧鈴LCD第6章音樂倒數定時器第7章密碼鎖控制第8章可存儲式電子琴第9章8051八音盒第10章紅外線遙控器研究10.1紅外線遙控器動作原理10.2如何觀察紅外線遙控器信號10.3紅外線遙控器解碼功能說明第11章紅外線家電遙控第12章8051伺服機控制12.1伺服機工作原理及改裝第1.3章8051伺服車控制13.1功能說明13.2伺服車組裝及實驗第14章紅外線遙控伺服車14.1功能說明14.2遙控伺服車組裝及實驗14.3控制電路14.4控製程序第15章無線電家電遙控15.1功能說明15.2遙控編碼解碼控制第16章8051聲控設計16.1聲控基本知識介紹16.2系統組成16.3聲控模塊介紹16.4基本控制電路16.5基本控製程序16.6聲控課題設計附錄H如何使用KEIL8051開發系統匯編和編譯程序及調試附錄IEPM89890XX燒錄模擬器特性附錄J1051805110控制板特性附錄KVCMM聲控模塊特性附錄LIO51控制板完整電路圖附錄M需要從網站下載的相關資料的使用說明附錄N硬體介面板版權聲明及如何訂購附錄A簡易穩壓電源製作附錄B本書實驗所需軟硬體工具及零件附錄C8051內部控制寄存器介紹附錄D8051指令集附錄E如何自製8051單板附錄F課程設計報告參考內容附錄GIO51控制板窗口版驅動程序使用說明
❹ 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語言課程設計程序的修改
//自定義控制項,然後在工具箱拖過來用再把BackColor設置為Transparent
:ListBox
{
publicTransparentListBox()
{
this.SetStyle(ControlStyles.UserPaint,true);
this.SetStyle(ControlStyles.SupportsTransparentBackColor,true);
}
(EventArgse)
{
this.Invalidate();
base.OnSelectedIndexChanged(e);
}
protectedoverridevoidOnPaint(PaintEventArgse)
{
if(this.Focused&&this.SelectedItem!=null)
{
RectangleitemRect=this.GetItemRectangle(this.SelectedIndex);
e.Graphics.FillRectangle(Brushes.Green,itemRect);
}
for(inti=0;i<Items.Count;i++)
{
e.Graphics.DrawString(this.GetItemText(Items[i]),this.Font,newSolidBrush(this.ForeColor),this.GetItemRectangle(i));
}
base.OnPaint(e);
}
}
❻ C/C++程序設計課程設計員工管理系統
/////////////////////////////////////////////////////////////////////
///////////// List.h: 類的所有成員都在頭文件里聲明 //////////////////
/////////////////////////////////////////////////////////////////////
#include <iostream.h> // cin 及 cout
#include <malloc.h> // 用到申請內存函數 malloc() 和釋放內存函數 free()
#include <string.h> // 字元串處理
#include <stdio.h> // 文件操作(讀文件)
#include <stdlib.h> // system("cls")
struct address /*家庭地址*/
{
char city[10]; /*城市*/
char town[10]; /*縣城*/
char village[10]; /*鄉鎮*/
};
struct telephone /*聯系方式*/
{
char SJ[50]; /*手機*/
char JD[30]; /*家庭電話*/
char XD[30]; /*學校電話*/
};
struct person /*個人信息*/
{
char name[20]; /*名字*/
char sex[10] ; /*性別*/
char MZ[16]; /*民族*/
char GJ[17]; /*國籍*/
char XL[19]; /*學歷*/
};
struct score //成績
{
char num[20]; //學號
char english[20];
char chinese[20];
char math[20];
char physics[20];
};
typedef struct linknode //定義節點的類型
{
char address[100]; //地址
char birthday[100]; //出生日期
struct score sc; //成績
struct person pe; //個人信息
struct telephone te; //聯系方式
bool flag;
struct linknode* next;
}nodetype;
class List
{
nodetype* head;
public:
List();
List::~List();
linknode* creatlist(int); //創建鏈表
int listlen(); //返回鏈表長度
nodetype* findnode(int); //通過查找序號返回節點的指針
nodetype* find(char c[]); //通過查找姓名返回節點的指針
int find2(char c[]); //通過查找姓名返回節點的序號
nodetype* insnode(int); //插入節點
void delnode(int); //刪除節點
nodetype* load(); //初始化:從外部讀入數據
void readstr(FILE *f,char *string); //讀行函數
bool check(char *a, char *b); //對比兩個字元串是否相等
void help(); //顯示幫助菜單
void editperson(nodetype*); //編輯個人說明
void editscore(nodetype*); //編輯學科成績
void edittelephone(nodetype*); //編輯聯系方式
void dispname(); //顯示所有學生姓名
void dispnode(nodetype* p); //顯示一個學生的所有信息
void dispperson(nodetype*); //顯示一個學生的個人說明
void dispscore(nodetype*); //顯示一個學生的學科成績
void disptelephone(nodetype*); //顯示一個學生的聯系方式
};
class Operater
{
List L1;
public:
void Loop(); //主循環
void display(); //顯示菜單
};
List::List()
{
head = NULL;
}
bool List::check(char *a, char *b) //對比兩個字元串是否相等
{
int i;
int j=strlen(b);
for(i=0; i<j; i++)
{
if(*a==*b)
{
a++;
b++;
}
else
return 0;
}
return 1;
}
nodetype* List::creatlist (int n) //創建鏈表
{
nodetype *h=NULL, *s, *t;
int i=1;
for(int j=0; j<n; j++)
{
if(i==1) //創建第一個節點
{
h=(nodetype*)malloc(sizeof(nodetype));
h->next=NULL;
t=h;
}
else //創建其餘節點
{
s=(nodetype*)malloc(sizeof(nodetype));
s->next=NULL;
t->next=s;
t=s; //t 始終指向生成的單鏈表的最後一個節點
}
i++;
}
head=h;
return h;
}
/*
nodetype* List::creatlist (int n) //創建鏈表
{
nodetype *h=NULL;
int i=1;
for(int j=0; j<n; j++)
{
h=insnode(0);
}
head=h;
return h;
}
*/
void List::readstr(FILE *f,char *string)
{
do
{
//①: 先讀入一行文本
fgets(string, 255, f); //fgets(): 從文件 f 讀入長度為 255-1 的字元串
// 並存入到 string 中
} while ((string[0] == '/') || (string[0] == '\n'));
return;
}
nodetype* List::load()
{
FILE *fp;
nodetype *p;
char c[255];
int num;
if((fp=fopen("student.txt", "r"))==NULL)
{
cout<<"打開文件失敗"<<endl;
return 0;
}
readstr(fp, c);
sscanf(c, "The Length Of Link: %d", &num); //獲取鏈表長度
p=creatlist(num); //創建鏈表
for(int i=0; i<num; i++)
{
readstr(fp, c);
strcpy(p->address, c);
readstr(fp, c);
strcpy(p->birthday, c);
readstr(fp, c);
strcpy(p->sc.num, c);
readstr(fp, c);
strcpy(p->sc.chinese, c);
readstr(fp, c);
strcpy(p->sc.english, c);
readstr(fp, c);
strcpy(p->sc.math, c);
readstr(fp, c);
strcpy(p->sc.physics, c);
readstr(fp, c);
strcpy(p->pe.name, c);
readstr(fp, c);
strcpy(p->pe.sex, c);
readstr(fp, c);
strcpy(p->pe.GJ, c);
readstr(fp, c);
strcpy(p->pe.MZ, c);
readstr(fp, c);
strcpy(p->pe.XL, c);
readstr(fp, c);
strcpy(p->te.SJ, c);
readstr(fp, c);
strcpy(p->te.JD, c);
readstr(fp, c);
strcpy(p->te.XD, c);
p=p->next;
}
fclose(fp);
return p;
}
void List::dispnode(nodetype* p) //顯示一個學生的所有信息
{
if(p!=NULL)
{
dispperson(p);
dispscore(p);
disptelephone(p);
}
}
void List::dispname() //顯示所有學生姓名
{
nodetype* p=head;
cout<<"現有的學生: "<<endl;
if(p==NULL)
cout<<"沒有任何學生數據"<<endl;
while(p!=NULL)
{
cout<<"姓名: "<<p->pe.name;
p=p->next;
}
}
int List::listlen() //返回鏈表長度
{
int i=0;
nodetype* p=head;
while(p!=NULL)
{
p=p->next;
i++;
}
return i;
}
nodetype* List::findnode (int i) //通過查找序號返回節點的指針
{
nodetype* p=head;
int j=1;
if( i>listlen()||i<=0 ) // i 上溢或下溢
return NULL;
else
{
while( p!=NULL && j<i ) //查找第 i 個節點並由 p 指向該節點
{
j++;
p=p->next;
}
return p;
}
}
nodetype* List::find(char c[]) //通過查找姓名返回節點的指針
{
nodetype* p=head;
int j=1;
strcat(c, "\n"); //從外部讀入的字元串末尾都帶了一個換行符
while( p!=NULL && !(check(c, p->pe.name))) //查找第 i 個節點並由 p 指向該節點
{
j++;
p=p->next;
}
return p;
}
int List::find2(char c[]) //通過查找姓名返回節點的序號
{
nodetype* p=head;
int j=1;
strcat(c, "\n"); //從外部讀入的字元串末尾都帶了一個換行符
while( p!=NULL && !(check(c, p->pe.name))) //查找第 i 個節點並由 p 指向該節點
{
j++;
p=p->next;
}
return j;
}
nodetype* List::insnode(int i)
{
nodetype *h=head, *p, *s;
s=(nodetype*)malloc(sizeof(nodetype)); //創建節點 s
s->next=NULL;
if(i==0) //i=0 時 s 作為該單鏈表的第一個節點
{
s->next = h;
h=s; //重新定義頭節點
}
else
{
p=findnode(i); //查找第 i 個節點,並由 p 指向該節點
if(p!=NULL)
{
s->next=p->next;
p->next=s;
}
else cout<<"輸入的 i 值不正確"<<endl;
}
head=h;
return s;
}
void List::delnode(int i) //刪除第 i 個節點
{
nodetype *h=head, *p=head, *s;
int j=1;
if(i==1) //刪除第一個節點
{
h=h->next;
free(p);
}
else
{
p=findnode(i-1); //查找第 i-1 個節點,並由 p 指向這個節點
if(p!=NULL && p->next!=NULL)
{
s=p->next; // s 指向要刪除的節點
p->next=s->next;
free(s);
}
else
cout<<"輸入的 i 值不正確"<<endl;
}
head=h;
}
void List::editperson(nodetype* p)
{
char c[100];
cout<<"請輸入姓名: "<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->pe.name, c);
cout<<"請輸入性別:"<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->pe.sex, c);
cout<<"請輸入生日(格式舉例:1982-1-1): "<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->birthday, c);
cout<<"請輸入民族:"<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->pe.MZ, c);
cout<<"請輸入國籍:"<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->pe.GJ, c);
cout<<"請輸入學歷:"<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->pe.XL, c);
cout<<"請輸入家庭住址(例如:廣西玉林市解放路11號"<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->address, c);
cout<<"編輯個人信息完成!"<<endl;
dispperson(p);
}
void List::editscore(nodetype* p)
{
char a[50];
cout<<"請輸入學號: "<<endl;
cin>>a;
strcat(a, "\n");
strcpy(p->sc.num, a);
cout<<"請輸入大學語文成績: "<<endl;
cin>>a;
strcat(a, "\n");
strcpy(p->sc.chinese, a);
cout<<"請輸入英語成績: "<<endl;
cin>>a;
strcat(a, "\n");
strcpy(p->sc.english, a);
cout<<"請輸入數學成績: "<<endl;
cin>>a;
strcat(a, "\n");
strcpy(p->sc.math, a);
cout<<"請輸入物理成績: "<<endl;
cin>>a;
strcat(a, "\n");
strcpy(p->sc.physics, a);
cout<<"編輯學科成績完成!"<<endl;
dispscore(p);
}
void List::edittelephone(nodetype* p)
{
char c[50];
cout<<"請輸入手機號碼: "<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->te.SJ, c);
cout<<"請輸入家庭電話號碼: "<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->te.JD, c);
cout<<"請輸入學校電話號碼: "<<endl;
cin>>c;
strcat(c, "\n");
strcpy(p->te.XD, c);
cout<<"編輯聯系方式完成!"<<endl;
disptelephone(p);
}
void List::dispperson(nodetype* p)
{
cout<<"姓名: "<<p->pe.name;
cout<<"性別: "<<p->pe.sex;
cout<<"民族: "<<p->pe.MZ;
cout<<"國籍: "<<p->pe.GJ;
cout<<"學歷: "<<p->pe.XL;
cout<<"出生日期: "<<p->birthday;
cout<<"家庭住址: "<<p->address;
}
void List::dispscore(nodetype* p)
{
cout<<"學號: "<<p->sc.num;
cout<<"大學語文成績: "<<p->sc.chinese;
cout<<"英語成績: "<<p->sc.english;
cout<<"數學成績: "<<p->sc.math;
cout<<"物理成績: "<<p->sc.physics;
}
void List::disptelephone(nodetype* p)
{
cout<<"手機號碼是: "<<p->te.SJ;
cout<<"家庭電話是: "<<p->te.JD;
cout<<"學校電話是: "<<p->te.XD;
}
void List::help()
{
cout<<endl<<endl;
cout<<"*********************************************************"<<endl;
cout<<"1: 編輯個人信息"<<endl;
cout<<"2: 編輯學科成績"<<endl;
cout<<"3: 編輯聯系方式"<<endl;
cout<<"4: 顯示個人信息"<<endl;
cout<<"5: 顯示學科成績"<<endl;
cout<<"6: 顯示聯系方式"<<endl;
cout<<"7: 顯示該學生所有信息"<<endl;
cout<<"8: 幫助菜單"<<endl;
cout<<"9: 返回上一級菜單"<<endl;
cout<<"*********************************************************"<<endl;
}
List::~List()
{
nodetype *pa=head, *pb;
if(pa!=NULL)
{
pb=pa->next;
if(pb==NULL)
free(pa);
else
{
while(pb!=NULL)
{
free(pa);
pa=pb;
pb=pb->next;
}
free(pa);
}
}
}
void Operater::display()
{
cout<<endl<<endl;
cout<<"**************************** 學生管理系統 **************************"<<endl;
cout<<"1: 添加一個學生信息"<<endl;
cout<<"2: 刪除一個學生信息"<<endl;
cout<<"3: 顯示所有學生的姓名"<<endl;
cout<<"4: 根據姓名顯示單個學生所有信息"<<endl;
cout<<"5: 根據姓名對單個學生進行編輯"<<endl;
cout<<"6: 幫助菜單"<<endl;
cout<<"7: 保存數據"<<endl;
cout<<"0: 退出系統"<<endl;
cout<<"********************************************************************"<<endl;
}
void Operater::Loop()
{
List L1; //List 對象
char ch[20];
nodetype *p, *head;
int i; //存放節點序號
p=L1.load(); //初始化:從外部讀入數據創建鏈表
head=p;
display();
while(1)
{
cout<<endl<<endl;
cout<<"請輸入選擇(幫助選項--> 6 ): "<<endl;
cin>>ch;
system("cls");
if(L1.check(ch, "1"))
{
p=L1.insnode(0);
head=p;
system("cls");
cout<<endl;
cout<<"************** 添加一個學生信息 ******************"<<endl;
cout<<"下面輸入個人信息: "<<endl;
L1.editperson(p);
cout<<"下面輸入學科成績: "<<endl;
L1.editscore(p);
cout<<"下面輸入聯系方式: "<<endl;
L1.edittelephone(p);
}
if(L1.check(ch, "2"))
{
system("cls");
cout<<endl;
cout<<"************** 刪除一個學生信息 ******************"<<endl;
L1.dispname();
cout<<"請輸入學生姓名: "<<endl;
cin>>ch;
i=L1.find2(ch);
L1.delnode(i);
}
if(L1.check(ch, "3"))
{
system("cls");
cout<<endl;
cout<<"************** 顯示所有學生姓名 ******************"<<endl;
L1.dispname();
}
if(L1.check(ch, "4"))
{
system("cls");
cout<<endl;
cout<<"************** 根據姓名顯示單個學生所有信息 ******************"<<endl;
L1.dispname();
cout<<"請輸入學生姓名: "<<endl;
cin>>ch;
p=L1.find(ch);
L1.dispnode(p);
}
if(L1.check(ch, "6"))
{
display();
}
if(L1.check(ch, "7")) //保存數據
{
FILE *fp;
if((fp=fopen("student.txt", "w"))==NULL)
{
cout<<"打開文件失敗"<<endl;
return;
}
int i;
char t[255];
//將 L1.listlen() 賦予字元串中的數字
sprintf(t, "The Length Of Link: %d\n", L1.listlen());
fputs(t, fp);
strcpy(t, "\n");
fputs(t, fp);
p=L1.findnode(1); //將鏈表頭指針賦予 p
for(i=0; i<L1.listlen(); i++)
{
fputs(p->address, fp); //輸出地址
fputs(p->birthday, fp); //輸出生日
fputs(p->sc.num, fp); //輸出學號
fputs(p->sc.chinese, fp); //輸出語文成績
fputs(p->sc.english, fp); //輸出英語成績
fputs(p->sc.math, fp); //輸出數學成績
fputs(p->sc.physics, fp); //輸出物理成績
fputs(p->pe.name, fp); //輸出姓名
fputs(p->pe.sex, fp); //輸出性別
fputs(p->pe.GJ, fp); //輸出國籍
fputs(p->pe.MZ, fp); //輸出民族
fputs(p->pe.XL, fp); //輸出學歷
fputs(p->te.SJ, fp); //輸出手機
fputs(p->te.JD, fp); //輸出家庭電話
fputs(p->te.XD, fp); //輸出學校電話
fputs(t, fp);
p=p->next;
}
p=head;
fclose(fp);
}
if(L1.check(ch, "5"))
{
char c[20];
system("cls");
cout<<endl;
cout<<"************** 根據姓名對單個學生進行編輯 ******************"<<endl;
L1.dispname();
cout<<"請輸入學生姓名: "<<endl;
cin>>c;
p=L1.find(c);
system("cls");
cout<<endl<<endl;
cout<<"*********************************************************"<<endl;
cout<<"1: 編輯個人信息"<<endl;
cout<<"2: 編輯學科成績"<<endl;
cout<<"3: 編輯聯系方式"<<endl;
cout<<"4: 顯示個人信息"<<endl;
cout<<"5: 顯示學科成績"<<endl;
cout<<"6: 顯示聯系方式"<<endl;
cout<<"7: 顯示該學生所有信息"<<endl;
cout<<"8: 幫助菜單"<<endl;
cout<<"9: 返回上一級菜單"<<endl;
cout<<"*********************************************************"<<endl;
while(1)
{
cout<<endl<<endl;
cout<<"請輸入選擇(幫助選項--> 8 ): "<<endl;
cin>>c;
system("cls");
if(L1.check(c, "1"))
{
system("cls");
cout<<endl;
cout<<"************** 編輯個人信息 ******************"<<endl;
L1.editperson(p);
}
else if(L1.check(c, "2"))
{
system("cls");
cout<<endl;
cout<<"************** 編輯學科成績 ******************"<<endl;
L1.editscore(p);
}
else if(L1.check(c, "3"))
{
system("cls");
cout<<endl;
cout<<"************** 編輯聯系方式 ******************"<<endl;
L1.edittelephone(p);
}
else if(L1.check(c, "4"))
{
system("cls");
cout<<endl;
cout<<"************** 顯示個人信息 ******************"<<endl;
L1.dispperson(p);
}
else if(L1.check(c, "5"))
{
system("cls");
cout<<endl;
cout<<"************** 顯示學科成績 ******************"<<endl;
L1.dispscore(p);
}
else if(L1.check(c, "6"))
{
system("cls");
cout<<endl;
cout<<"************** 顯示聯系方式 ******************"<<endl;
L1.disptelephone(p);
}
else if(L1.check(c, "7"))
{
system("cls");
L1.dispnode(p);
}
else if(L1.check(c, "8"))
{
system("cls");
L1.help();
}
else if(L1.check(c, "9"))
{
display();
break; //用 break 跳出本循環,不要用 return ,return 是退出程序
}
}
}
else if(L1.check(ch, "0"))
return;
}
return;
}
void main()
{
Operater O1;
O1.Loop();
}
自己看看吧,改改就好了,我也不太會
❼ C語言程序課程設計
#include <stdio.h>
#define MAX 200
int main()
{
int a[MAX][MAX],n;
void initmatrix(int a[][MAX]);//初始化矩陣,將所有元素賦0
void creatematrix_2k1(int a[][MAX],int n);//生成2n+1階幻方
void creatematrix_4k(int a[][MAX],int n);//生成4n階幻方
void creatematrix_4k2(int a[][MAX],int n);//生成4n+2階幻方
void outputmatrix(int a[][MAX],int n);//輸出n階幻方
initmatrix(a);
printf("please input a interger number:");
scanf("%d",&n);
if(n%2) creatematrix_2k1(a,(n-1)/2);
else {if(n%4==0) creatematrix_4k(a,n/4);
else creatematrix_4k2(a,(n-2)/4);}
outputmatrix(a,n);
return 0;
}
void initmatrix(int a[][MAX])
{
for(int i=0;i<MAX;i++)
for(int j=0;j<MAX;j++)
a[i][j]=0;
}
void outputmatrix(int a[][MAX],int n)
{
for(int i=0;i<n;i++)
{
printf("第%-3d行的數依次為:",i+1);
for(int j=0;j<n;j++)
printf("%-5d",a[i][j]);
printf("\n");
}
}
void creatematrix_2k1(int a[][MAX],int n)
{
int col=-1,row=-1;
int *p,*q;
p=&col,q=&row;
void fillmatrix(int a[][MAX],int *p,int *q,int n,int i);//將i填入2n+1階幻方中
for(int i=1;i<=((2*n+1)*(2*n+1));i++)
fillmatrix(a,p,q,n,i);
}
void fillmatrix(int a[][MAX],int *p,int *q,int n,int i)
{
if(i==1)
{
a[0][n]=i;
*p=0,*q=n;
}
else
{
if((*p==0&&*q==2*n)||a[(*p+2*n)%(2*n+1)][(*q+1)%(2*n+1)])
{
a[(*p+1)%(2*n+1)][*q]=i;
*p=(*p+1)%(2*n+1);}
else{a[(*p+2*n)%(2*n+1)][(*q+1)%(2*n+1)]=i;
*p=(*p+2*n)%(2*n+1),*q=(*q+1)%(2*n+1);}
}
}
void creatematrix_4k(int a[][MAX],int n)
{
int temp;
for(int i=0;i<4*n;i++)
{ for(int j=0;j<4*n;j++)
a[i][j]=4*n*i+j+1;}
for(i=0;i<4*n;i++)
for(int j=0;j<4*n;j++)
if((i>j)&&((i-j)%4==0||(i+j+1)%4==0))
{temp=a[i][j];
a[i][j]=a[4*n-1-i][4*n-1-j];
a[4*n-1-i][4*n-1-j]=temp;}
for(i=0;i<2*n;i++)
{temp=a[i][i];
a[i][i]=a[4*n-1-i][4*n-1-i];
a[4*n-1-i][4*n-1-i]=temp;}
}
void creatematrix_4k2(int a[][MAX],int n)//構造4n+2階幻方
{
int col=-1,row=-1,i;
int exn=(2*n+1)*(2*n+1);
int *p,*q;
p=&col,q=&row;
void fillmatrix_2(int a[][MAX],int *p,int *q,int cs, int rs,int n,int i);/*將i填入以a[cs][rs]為起始的2n+1階幻方中,用p,q返回的i-1行列值*/
for(i=1;i<=exn;i++)
fillmatrix_2(a,p,q,0,0,n,i);
for(i=exn+1;i<=exn*2;i++)
fillmatrix_2(a,p,q,2*n+1,2*n+1,n,i);
for(i=2*exn+1;i<=3*exn;i++)
fillmatrix_2(a,p,q,0,2*n+1,n,i);
for(i=3*exn+1;i<=4*exn;i++)
fillmatrix_2(a,p,q,2*n+1,0,n,i);
void lastswap(int a[][MAX],int n);//對4n+2階幻方做最後的變換
lastswap(a,n);
}
void fillmatrix_2(int a[][MAX],int *p,int *q,int cs, int rs,int n,int i)
{
int exn=(2*n+1)*(2*n+1);
if(i%exn==1)
{
a[cs+0][rs+n]=i;
*p=0,*q=n;
}
else {if((*p==0&&*q==2*n)||a[(*p+2*n)%(2*n+1)+cs][(*q+1)%(2*n+1)+rs])
{
a[(*p+1)%(2*n+1)+cs][*q+rs]=i;
*p=(*p+1)%(2*n+1);
}
else{
a[(*p+2*n)%(2*n+1)+cs][(*q+1)%(2*n+1)+rs]=i;
*p=(*p+2*n)%(2*n+1),*q=(*q+1)%(2*n+1);
}
}
}
void lastswap(int a[][MAX],int n)
{
int temp,i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{temp=a[i][j];
a[i][j]=a[2*n+1+i][j];
a[2*n+1+i][j]=temp;}
for(i=1;i<=n;i++)
{temp=a[n][i];
a[n][i]=a[3*n+1][i];
a[3*n+1][i]=temp;}
for(i=n+1;i<2*n+1;i++)
for(j=0;j<n;j++)
{temp=a[i][j];
a[i][j]=a[2*n+1+i][j];
a[2*n+1+i][j]=temp;}
for(i=0;i<2*n+1;i++)
for(j=4*n+1;j>3*n+2;j--)
{temp=a[i][j];
a[i][j]=a[2*n+1+i][j];
a[2*n+1+i][j]=temp;}
}
求幻方的程序
#include <stdio.h>
#include <stdlib.h>
#define IO "%d"//和下面一行共同擴展數據成員的格式
typedef int ElemType;//同上
typedef struct LinkNode
{
ElemType data;
struct LinkNode *next;
}LinkNode,*Link;
Link creat();//建立帶頭結點的鏈表,並返回頭指針
void print(Link);//輸出鏈表所有結點
bool insert(Link,int ,ElemType);//向head為頭指針的鏈表中插入元素e使之成為鏈表第i個元素成功返回TRUE否則FALSE
bool del(Link,int );//在head為頭指針的鏈表中刪除第i個結點,成功返回TRUE否則返回FALSE
void operate(Link);//在本程序中進行鏈表的插入,刪除,輸出操作
Link creat()
{
Link head=(Link)malloc(sizeof(LinkNode));
Link pre=head,p;
int count=1;
char ch;
printf("是否終止建立鏈表(Y/N):");
scanf("%c",&ch);
while(ch=='n'||ch=='N')
{
p=(Link)malloc(sizeof(LinkNode));
printf("請輸入第%d個結點內的數據:",count);
scanf(IO,&(p->data));
fflush(stdin);
pre->next=p;
pre=p;
printf("是否終止建立鏈表(Y/N):");
scanf("%c",&ch);
count++;
}
pre->next=NULL;
return head;
}
void print(Link head)
{
printf("鏈表目前情況為:\n");
Link p=head->next;
int count=1;
while(p)
{
printf("第%d個結點中數據為"IO" ",count,p->data);
p=p->next;
if((count++)%3==0)printf("\n");
}
if(count%3!=1)printf("\n");
}
bool insert(Link head,int i,ElemType e)
{
Link pre,p;
int k;
for(k=0,pre=head;k<i-1&⪯k++,pre=pre->next);//尋找第i-1個元素的指針
if(k!=i-1||(!pre))return false;
p=(Link)malloc(sizeof(LinkNode));
p->data=e;
p->next=pre->next;
pre->next=p;
return true;
}
bool del(Link head,int i)
{ Link pre,p;
int k;
for(k=0,pre=head,p=head->next;k<i-1&&p;k++,pre=p,p=p->next);//尋找第i-1個元素的指針
if(k!=i-1||(!p))return false;
pre->next=p->next;
free(p);
return true;
}
void operate(Link head)
{
int n,i;
ElemType e;
do
{
printf("************************************************\n");
printf("請輸入想進行何種操作\n1============插入結點\n2============刪除結點\n3============輸出鏈表\n");
scanf("%d",&n);
switch(n)
{
case 1:printf("現在進行結點插入\n");
printf("請輸入欲插入到何位置:");scanf("%d",&i);
printf("請輸入欲插入的數據:");scanf(IO,&e);
if(insert(head,i,e))printf("插入成功!\n");else printf("插入失敗!\n");
break;
case 2:printf("現在進行結點刪除\n");
printf("請輸入欲刪除結點位置:");scanf("%d",&i);
if(del(head,i))printf("刪除成功!\n");else printf("刪除失敗!\n");
break;
case 3:print(head);break;
default:break;
}
}while(n<4&&n>0);
}
int main()
{
Link head=creat();
operate(head);
return 0;
}
鏈表的操作
#include <stdio.h>
#include <math.h>//求積分
int main()
{
double f1(double);
double f2(double);
double f3(double);
double f4(double);
double f5(double);
double (*p)(double);
double integral(double a,double b,double(*p)(double));
double a,b;//記錄積分區間
printf("請輸入積分區間:");
scanf("%lf %lf",&a,&b);
if(a>b){double temp=a;a=b;b=temp;}//確保a<b
printf("sin(x)在[%lf,%lf]上的積分值為%lf\n",a,b,integral(a,b,sin));
printf("cos(x)在[%lf,%lf]上的積分值為%lf\n",a,b,integral(a,b,cos));
printf("exp(x)在[%lf,%lf]上的積分值為%lf\n",a,b,integral(a,b,exp));
printf("x+1在[%lf,%lf]上的積分值為%lf\n",a,b,integral(a,b,f1));
printf("2x+3在[%lf,%lf]上的積分值為%lf\n",a,b,integral(a,b,f2));
printf("exp(x)+1在[%lf,%lf]上的積分值為%lf\n",a,b,integral(a,b,f3));
printf("(1+x)^2在[%lf,%lf]上的積分值為%lf\n",a,b,integral(a,b,f4));
printf("x^3在[%lf,%lf]上的積分值為%lf\n",a,b,integral(a,b,f5));
return 0;
}
double integral(double a,double b,double(*p)(double))
{
double sum=0,l=b-a,pl;//sum保存積分和,l保存積分區間的長度,pl保存積分區間細分後每個小區間的長度
int n=2,i;//n保存劃分的小區間數i用作累加指針
pl=l/n;
while(pl>1e-6)
{
sum=0;
for(i=0;i<n;i++)
sum+=(*p)(a+i*pl)*pl;
n*=2;
pl/=2;
}
return sum;
}
double f1(double x)
{
return x+1;
}
double f2(double x)
{
return 2*x+3;
}
double f3(double x)
{
return exp(x)+1;
}
double f4(double x)
{
return (1+x)*(1+x);
}
double f5(double x)
{
return x*x*x;
}
求積分
都是以前寫的 便宜樓主了!!
❽ C程序課程設計 大神快來幫幫忙啊😄
如果你想問怎麼復寫我可以告訴你,如制果你想要代碼,那麼RMB。
其實這人寫法很簡單,分三步,第一個主函數,它的任務就是調用一個主過程,在調用之前檢查程序一切可能會出現的異常並處理它們,(有時候只是異常退出)。第二步,確定主流程,也就是菜單處理程序(函數),這里首先查檢數據是否已經就緒,如果沒有可以創建一個新的。然後進入一個主循環,這個主循環就是菜單處理過程,之於如何顯示菜單如何選擇這些就看你對shell或dos窗口的了解了,最簡單就是輸出按1選擇什麼2什麼。。。然後根據不同的選擇調用不同的模塊。第三步實現模塊,對於每一個模塊的實現還有數據的設置,可以有很多方法,得自己根據自己的水平來做。
總的來說這是一個比較簡單的程序,也是一個難度中等的作業。盡量自己做。如果想找我做還是那三個字。就不說了。