c语言课程设计

2022-05-26 来源:其他范文收藏下载本文

推荐第1篇:C语言课程设计

C语言课程设计总结报告

学院:电气学院

专业:电子信息科学与技术 学号: 姓名:

一目的:课程设计为我们提供了一个既动手又动脑,独立实践的机会,让我们将课本上的理论知识和实际有机的结合起来,锻炼我们分析、解决较复杂问题的能力,提高我们独立编写大编程的能力。能够基本掌握程序设计的基本思路与方法,达到熟练掌握C语言的基本知识和技能,能够利用所学的基本知识和技能,解决简单的程序设计问题。

二题目:本程序设计要求一个公司职员的数据结构,并使用结构指针数组存储职员信息,统计公司员工工资总额和平均工资。

三思路:1先用一个结构指针数组设计公司职员的数据结构。

构造一个指针数组company并用函数update给指针数组赋值。 3设计一个reading函数调用update进行赋值

4用total函数对工资求和,并在一年龄段求总工资,定义age1和age2决定范围,用循环结构计算工资和。

5设计一个mean函数,求平均工资,并要求在某一年龄以上的工资,若秋总体员工的平均工资就输入y或Y。 6主函数调用total和mean函数。

四源程序:

#include #include #include typedef struct employee {int age; char *name; double salary;}*PEMP; /*使用结构指针数组* #define num 4 PEMP company[num];

void update(PEMP company[],int id,int age,char *name,double salary)*为赋值* {PEMP emp; if((emp=(PEMP)malloc(sizeof(struct employee)))==NULL)*开辟内存空间* return; emp=company[id]; emp->age=age; emp->name=name; emp->salary=salary; printf(\"company,%d%d%c%lf\\n\",id,age,name,salary);}*输出职工信息*

void reading(company) PEMP company[]; {update(company,1,20,\"zw\",3000.0); update(company,2,33,\"ww\",4000.0); update(company,3,25,\"zl\",3500.0); update(company,4,24,\"ll\",4500.0);} double total(PEMP company[]) {double sum=0.0; int i,age1,age2,id; printf(\"the limited age is:\\n\"); while(1) {scanf(\"%d%d\",&age1,&age2);

if(age1>age2) {i=age1; age1=age2; age2=i;}

if((age1>=0)&&(age1=0)&&(age2age1))break;}

for(id=1;id

if(company[id]->age>=age1&&company[id]->age

sum=sum+company[id]->salary;

return(sum);}

double mean(PEMP company[]) {double sum=0.0,ave;char ch;int n=0,age1,id; printf(\"the average salary of some employees\\n\"); printf(\"the limited age:\\n\"); scanf(\"%d\",&age1); for(id=1;idage>age1)

sum=sum+company[id]->salary;

n++;}

ave=sum/n;

printf(\"%lf\",ave);

sum=0.0;

printf(\"the average salary of total employees,input Y or y:\\n\");

getchar();

ch=getchar();

if(ch==\'Y\'||ch==\'y\')

for(id=0;id

sum=sum+company[id]->salary;

ave=sum/num;

return(ave);} main() {PEMP company[num]; double sum=0.0,ave=0.0; reading(company); sum=total(company); ave=mean(company); printf(\"%lf,%lf\",sum,ave);}

五心得体会:课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握计算机开发技术是十分重要的。

回顾起此次课程设计,还是有些感慨颇的,从拿到题目到完成整个编程,从理论到实践,在将近两个星期的日子里,从一开始的无从入手到后来的逐渐深入,从中学到了不少东西,同时亦巩固了以前所学过的知识。通过这次课程设计也使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中也遇到了不少问题,发现自己还存在着不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体……通过这次课程设计之后,在一定程度上把以前所学过的知识重新温故了一下。

不论如何,最后通过自己的努力完成了这次的课程设计,我想这次会成为我们生命中共同的美好回忆,虽然过程不顺了些,遇到的问题也不少,但结果是好的,也学到了不少东西,这就可以了。

推荐第2篇:CC语言课程设计

1,/*100-999内的水仙花数的个数*/ #include main() {

int a,b,c,d,s,i=0;

for(a=100;a

{

b=a/100;

c=a%100/10;

d=a%10;

s=b*b*b+c*c*c+d*d*d;

if(a==s)

i++;

}

printf(\"%d\",i);

getch(); } 2, /*x^2+y^2+z^2=55^2,则(x,y,z)称为方程的整数解的个数*/ #include main() { int x,y,z,t=0,a,s; for(x=-55;x

for(y=-55;y

for(z=-55;z

{

a= x*x+y*y+z*z;

s=55*55;

if(a==s&&x>y&&x>z&&x>y)

t++;

}

printf(\"%d\",t);

getch();

} 3/*100-400内的水仙花数的个数*/ #include main() {

int a,b,c,d,s,i=0;

for(a=100;a

{

b=a/100;

c=a%100/10;

d=a%10;

s=b*b*b+c*c*c+d*d*d;

if(a==s)

i++;

}

printf(\"%d\",i);

getch();

}

4, /* 0-60内每位数的乘积大于和的数个数*/

#include main() {

int a,b,c,d,e,i=0;

for(a=0;a

{

b=a/10;c=a%10;

d=a*b; e=a+b;

if(d==e )

i++;

}

printf(\"%d\",i);

getch();

}

5/*满足1/A^2+1/B^2=1/C^2关系时,称为倒勾股数

*/

#include main() {

int a,b,c ,t=0;

float x,y,z;

for(a=1;a

{ for(b=1;b

for(c=1;c

x=1/(a*a);

y=1/(b*b);

z=1/(c*c);

if(x+y==z&&a+b+c130&&a>b&&a>c&&b>c)

t++;

}

printf(\"%d\",t);

getch();

} 6, /*爱因斯坦走台阶 */ #include main() {

int s ;

for(s=0; ;s++)

{

if(s%2==1&&s%3==2&&s/4==3&&s/5==4&&s/6==5&&s%7==0 ) break;

}

printf(\"%d\",s);

getch();

} 7./*121-140内弦数的个数*/ #include main() {

int a=0,b=0,c=121 ,i=0;

for(c=121;c

{

for(a=0;a

for(b=0;b

if(c*c==a*a+b*b)

i++;

continue;

printf(\"%d\",i);

}

getch(); } 8/*1000内其十位数是6能被8整除数的个数*/ #include main() {

int a,i=0;

for(a=10;a

{

if(a%100/10==6&&a%8==0)

i++;

}

printf(\"%d\",i);

getch();

}

9/* 0-60内每位数的乘积大于和的数个数*/

#include main() {

int a,b,c,d,e,i=0;

for(a=0;a

{

b=a/10;c=a%10;

d=c*b; e=c+b;

if(d>e )

i++;

}

printf(\"%d\",i);

getch();

}

10./* 1-5000内能被5整除偶数之和大于500和的值*/

#include main() {

int a, b=0;

for(a=2;a

{

if(a%5==0)

b=b+a;

while( b>500 );

printf(\"%d\",b);

}

getch();

}

11./* 100-500内能被3整除余2和能被5整除余3的个数*/ #include main() {

int a, b=0;

for(a=100;a

{

if(a%3==2&&a%5==3)

b++;

}

printf(\"%d\",b);

getch();

} 12/* 1-7000内能被3或者能被7整除的个数*/ #include main() {

int a, b=0;

for(a=1;a

{

if(a%3==0||a%7==0)

b++;

}

printf(\"%d\",b);

getch();

} 13./*3-100内非偶数非素数之和*/ #include main() {

int a,i,k, b=0;

for(a=3 ;a

{

k=sqrt(a);

for(i=2;i

{if(a%i==0) break;

if(i>k+1)

b=b+a;}

}

printf(\"%d\",b);

getch();

}

14/*求满足ijk+kji=1534,且i

#include main() {

int j,i,k, b=0;

for(j=0 ;j

for(k=0 ;k

for(i=0 ;i

if( 100*i+10*j+k+100*k+10*j+i==1534)

b++;

printf(\"%d\",b);

getch();

}

15/*有四位数ABCD的个数,该四位数是11的倍数,且A=B+C,即第2位数加上第3位数等于第1位数。 4 */

#include main() {

int j,i,k,a, b=0;

for(j=1000;j

{

i= j/1000;

k=j%1000/100;

a=j%100/10;

if(j%11==0&&i==k+a)

b++;

}

printf(\"%d\",b);

getch();

} 16/*求三位数的偶数中,所有各位数字之和是15的倍数的数的个数*/ #include main() {

int j,i,k,a,s, b=0; for(j=100;j

{

i= j/100 ;

k=j%100 /10 ;

a=j%10 ;

s=i+k+a;

if(s%15==0 )

b++;

}

printf(\"%d\",b);

getch();

} 17/*四位数的奇数中,所有各位数字之积是125的倍数的数的和*/ #include main() {

int j,i,k,a,c,s, b=0; for(j=1111;j

{

i= j/1000 ;

k=j%1000 /100 ;

a=j%100/10;

c=j%10;

s=i*k*a*c;

if(s%125==0 )

b=b+j;

}

printf(\"%d\",b);

getch();

}

18/*5000以内能被17或者23整除的正整数的个数 */

#include main() {

int j,i,k,a,c,s, b=0; for(j=1;j

{

if(j%17==0||j%23==0 )

b++;

}

printf(\"%d\",b);

getch();

}

19/*四位数的偶数中,所有各位数字之和是30的倍数的数的和

*/

#include main() {

int j,i,k,a,c,s, b=0; for(j=1000;j

{

i=j/1000;

k=j%1000/100;

a=j%100/10;

c=j/10;

s=i+k+a+c;

if(s%30==0 )

b=b+j;

}

printf(\"%d\",b);

getch();

} 21/*统计1000~9999之间的所有满足以下条件的四位数的个数。该数是一个完全平方数*/ #include #include main() {

int a,b,c ,d,s,x,y,t=0;

for(s=1000;s

{

a=s/1000;

b=s%1000/100;

c=s%100/10;

d=s%10;

x=sqrt(s);

y=x*x;

if(a+b==12&&c*d==24&&y==s )

t++;

}

printf(\"%d\",t);

getch();

} 22/*S=1+3+5+7+9+…,求S不大于9000的最大值*/ #include main() {

int j ,s=0; for(j=1; ;j+=2 )

{

s+=j; if(s>9000) break;

}

s=s-j;

printf(\"%d\",s);

getch();

} 23/*S=2+4+8+16+32+…,求S不大于1500的最大值*/

#include main() {

int j ,s=0; for(j=2; ;j=2*j )

{

s+=j;

if(s>1500) break;

}

s=s-j;

printf(\"%d\",s);

getch();

}

25 /*m的值为50时,计算下列公式的值T=1-1/2-1/3-1/4-…-1/m*/

#include main() {

float n,m,s,T;

s=0;

for(n=2;n

m=-1/n;

s=s+m;

}

T=1+s;

printf(\"%0.4f\",T);

getch();

}

26, /*当n的值为25时,计算下列公式的值: s=1+1/1!+1/2!+1/3!+…+1/n*/

#include main() {

float s,T;

int m=1,n=1;

s=0;

for(n=1;n

m=m*n ;

s=s+1/m;

}

T=1+s;

printf(\"%0.4f\",T);

getch();

} 27/*斐波那契数列,10000000以内最大的斐波那契数*/ #include main() { long int f1,f2 ,n; f1=1;f2=1;

do

{

f1=f1+f2;

f2=f1+f2;

}while(f1>10000000);

printf(\"%ld\\n%ld\",f1,f2);

getch();

} 28/*计算y=1+2/3+3/5+4/7+.....+n/(2*n-1)的值,n=50*/ #include main() { float y=0,m,s; int t,n; for(n=1;n

t=2*n-1;

m=1.0/t;

s=m*n;

y+=s;

}

printf(\"%.2f\",y);

getch();

} 29/*计算y=x/1!-x^3/3!+x^5/5!-x^7/7!...前20项的值x=2*/

#include main() {

float y=0,m,s,x; int t,n;

for(n=1;n

x=-4*x;

m=2*n+1;

t=t*m*(m-1);

s+= x/t;

}

printf(\"%.2f\",y);

getch();

}

30/*梅森尼数2^n-1是素数,【2-21】内的梅森尼数个数 */

#include #include

main() {

int n,m,i,j,k,x=0; for(n=2;n

i=m-1;

k=sqrt(i);

for (j=3;j

if (i%k==0) break; if (j>=k+1) x++;

}

printf(\"%d\",x);

getch();

}

31/*两位数分子分母各个数之和的比等于原来的值*/

#include

main() {

int n,m,a,b,c,d,s; float x,y; for(n=10;n

{ a=n/10;

b=n%10;

c=m/10;

d=m%10;

x=n/m;

y=(a+b)/(c+d);

if (m>n&&x==y )

s+=a+b+c+d;

}

printf(\"%d\",s);

getch();

} 32/* 1-50内构成直角三角形的组数 */ #include

main() {

int x,y,z,n=0,t;

for(x=1;x

{

for(y=1;y

for(z=1;z

if(x+y>z&&x*x+y*y==z*z)

n++; }

t=n/3;

printf(\"%d \",t);

getch();

} 33/*一正整数递减,每次减半后减一,10次后剩一 */ #include

main() {

int n, s=0,m=1;

for(n=2;n

{

m= 2*(m+1);

}

printf(\"%d\\n\",m);

getch();

}

34./* 2/1,3/2,5/3,.....前50项和*/ #include

main() {

int x1=1,x2=2, n ; float t,s=0;

for(n=1;n

{ t=x2/x1;

s+=t;

x2=x1+x2;

x1=x2;

}

printf(\"%.2f \",s);

getch();

}

35,/*求五位数各个位数平方和为100的最大五位数*/

#include

main() {

int x,a,b,c,d,e,m,n,max;

for(x=10000;x

{

a=x/10000;

b=x%10000/1000;

c=x%1000/100;

d=x%100/10;

e=x%10;

m=a*a+b*b+c*c+d*d+e*e;

if(m==100) break;

max=x;

}

for(n=x;n

{

a=n/10000;

b=n%10000/1000;

c=n%1000/100;

d=n%100/10;

e=n%10;

m=a*a+b*b+c*c+d*d+e*e;

if(m==100)

max=n;

}

printf(\"%ld \",max);

getch();

} 36,#include main() {

long int y,k;

int x,i=0;

for(x=2;x

{ y=x*x;

k=y-x;

if(x

i=i+x;

if(x>=10&&x

i=i+x;

if(x>=100&&x

i=i+x;

if(x==1000&&k%10000)

i=i+x;

}

printf(\"%d\",i);

getch(); } 37/*求50-150之间的友对数*/

#include main() { int x,y,z, i,t=0; for(x=50;x

y=x+1;

z=x*y-1;

for(i=2;x

{

if (z%i==0) break;

if(z%i!=0)

{

if (i==z-1)

t++; }

}

}

printf(\"%d\",t);

getch();

}

38/* 求[1,30000]之内E数的个数,E(1)=E(2)=1;E(n)=(n-1)*E(n-1)+(n-2)*E(n-2)*/

#include main() {

int i,j=2,n;

long int a[]={0,1,1};

for(n=3;;n++)

{ a[n]=(n-1)*a[n-1]+(n-2)*a[n-2];

for(i=1;i

{

if(a[n]==i)

{j++;break;}

if(a[n]>=30000)

break;

}

if(a[n]>=30000)

break;

}

printf(\"%d\",j);

getch(); }

39./*试求所有两位绝对素数的和,绝对素数是交换位子后仍为素数*/

#include main() {

int i,j,a,b,x,k,s=0;

for(i=11;i

for(j=2;j

{if(i%j==0)

break;

if(i%j!=0)

{if(j==i-1)

{a=i/10;

b=i%10;

x=10*b+a;

for(k=2;k

{if(x%k==0)

break;

if(x%k!=0)

{if(k==x-1)

s=s+i;}}

}

}

}

printf(\"%d\",s);

getch(); } 40./*f(0)=f(1)=1,f(2)=0f(n)=f(n-1)-2*f(n-2)+f(n-3),(n>2)求f(0)到f(50)中的最大值*/ #include main() {

long int a[50]={1,1,0},max;

int i;

for(i=3;i

{ max=a[1];

a[i]=a[i-1]-2*a[i-2]+a[i-3];

if(max

max=a[i];

else

max=max;

}

printf(\"%ld\",max);

getch(); } 41,/*f(n)=f(n-1)+2*f(n-2)-5*f(n-3),f(0)=1,f(1)=2,f(2)=3,求f(0)+f(1)+…f(30)*/

#include main() {

long int a[31]={1,2,3},s=a[0]+a[1]+a[2];

int i;

for(i=3;i

{

a[i]=a[i-1]+2*a[i-2]-5*a[i-3];

s=s+a[i];

}

printf(\"%ld\",s);

getch(); }

42./*A1=1, A2=1/(1+A1), A3=1/(1+A2), A4=1/(1+A3), ……, 求A50*/

#include main() {

float a[51]={0,1};

int i;

for(i=2;i

{

a[i]=1.0/(1+a[i-1]);

}

printf(\"%.3f\",a[50]);

getch(); }

43./*A,B为正整数, A

#include main() {

int A,B,d,min=2699;

long int c;

for(B=2;B

for(A=1;A

{c=A*B;

if(c==2698)

{ d=A+B;

if(min>d)

min=d;}

}

for(B=2;;B++)

{for(A=1;A

{min=A+B;

c=A*B;

if(c==2698)

break; }

if(c==2698)

break;}

printf(\"%d\",B);

getch(); } 44/*A main() {

int A,B,d,min=2699;

long int c;

for(B=2;B

for(A=1;A

{c=A*B;

if(c==2698)

{ d=A+B;

if(min>d)

min=d;}

}

printf(\"%d\",min);

getch(); } 45/*的自然数对中B之和求所有小于或等于100*/

#include main() {

int a,b,A,B,j,i,s=0;

for(A=1;A

for(B=1;B

{ a=A+B;

b=A-B;

for(i=1;i

if(a==i*i)

{for(j=1;j

if(b==j*j)

s=s+B;}

}

printf(\"%d\",s);

getch(); }

46./*问大、中、小学生的人数分配共有多少种不同的解*/

#include main() {

int i,j,k,s,y=0;

for(i=1;i

for(j=1;j

for(k=1;k

{s=4*i+3*j+2*k;

if(s==120)

y++;

}

printf(\"%d\",y);

getch(); }

推荐第3篇:语言_课程设计1

汇编语言课程实验报告

实验名称

课程设计1 实验环境

硬件平台:Intel Core i5-3210M 操作系统:DOSBox 0.74 in Windows 8.1 软件工具:Turbo C 2.0, Debug, MASM 实验内容

将实验7中的Power idea公司的数据按照下图所示的格式在屏幕上显示出来。

实验步骤

1.要完成这个实验,首先我们需要编写三个子程序。第一个子程序是可以显示字符串到屏幕的程序,其汇编代码如下: ;名称:show_str ;功能:在屏幕的指定位置,用指定颜色,显示一个用0结尾的字符串 ;参数:(dh)=行号,(dl)=列号(取值范围0~80),(cl)=颜色,ds:si:该字符串的首地址 ;返回:显示在屏幕上 show_str:

push ax

push cx

push dx

push es

push si

push di

mov ax,0b800h

mov es,ax

mov al,160

mul dh

add dl,dl

mov dh,0

add ax,dx

mov di,ax

mov ah,cl

show_str_x:

mov cl,ds:[si]

mov ch,0

jcxz show_str_f

mov al,cl

mov es:[di],ax

inc si

inc di

inc di

jmp show_str_x

show_str_f:

pop di

pop si

pop es

pop dx

pop cx

pop ax

ret 2.第二个程序是将word型数据转换为字符串,这样我们才能调用第一个程序将其打印出来。第二个程序汇编代码如下: ;名称:dtoc_word ;功能:将一个word型数转化为字符串 ;参数:(ax)=word型的数据,ds:si指向字符串的首地址 ;返回:ds:[si]放此字符串,以0结尾 dtoc_word:

push ax

push bx

push cx

push dx

push si

mov bx,0

dtoc_word_x:

mov dx,0

mov cx,10

div cx

mov cx,ax

add dx,\'0\'

push dx

inc bx

jcxz dtoc_word_f

jmp dtoc_word_x

dtoc_word_f:

mov cx,bx

dtoc_word_x1:

pop ds:[si]

inc si

loop dtoc_word_x1

pop si

pop dx

pop cx

pop bx

pop ax

ret 3.除了以上两个程序,我们还需要考虑一个问题,即有些数据已经大于65535,应该编写一个新的程序,将一个double word型数转化为字符串。汇编代码如下: ;名称:dtoc_dword ;功能:将一个double word型数转化为字符串 ;参数:(dx)=数的高八位,(ax)=数的低八位 ;返回:ds:[si]放此字符串,以0结尾 ;备注:会用到divdw函数 dtoc_dword:

push ax

push bx

push cx

push dx

push si

mov bx,0

dtoc_dword_x:

mov cx,10

call divdw

push cx

inc bx

cmp ax,0

jne dtoc_dword_x

cmp dx,0

jne dtoc_dword_x

mov cx,bx

dtoc_dword_x1:

pop ds:[si]

add byte ptr ds:[si],\'0\'

inc si

loop dtoc_dword_x1

pop si

pop dx

pop cx

pop bx

pop ax

ret 4.考虑到div指令除法溢出的问题,我们还需要写一个程序,进行不会产生溢出的除法运算,如下: ;名称:divdw ;功能:除法,被除数32位,除数16位,商32位,余数16位,不会溢出 ;参数:(dx)=被除数高16位,(ax)=被除数低16位,(cx)=除数 ;返回:(dx)=商高16位,(ax)=商低16位,(cx)=余数 divdw:

push bx

push ax

mov ax,dx

mov dx,0

div cx

mov bx,ax

pop ax

div cx

mov cx,dx

mov dx,bx

pop bx

ret 5.将这四个子程序整合起来,并编写主程序。主程序代码如下:

aume cs:code

;Ps:函数中的标号为防止冲突,都加了本函数名为前缀

data segment

db \'1975\',\'1976\',\'1977\',\'1978\',\'1979\',\'1980\',\'1981\',\'1982\',\'1983\'

db \'1984\',\'1985\',\'1986\',\'1987\',\'1988\',\'1989\',\'1990\',\'1991\',\'1992\'

db \'1993\',\'1994\',\'1995\'

;以上是表示21年的21个字符串

dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514

dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000

;以上是表示21年公司总收的21个dword型数据

dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226

dw 11542,14430,45257,17800

;以上是表示21年公司雇员人数的21个word型数据 data ends

agency segment

db 8 dup(0) agency ends

code segment

start: mov ax,0b800h

mov es,ax

mov di,0

mov cx,80*24

x: mov byte ptr es:[di],\' \' ;将屏幕清空

mov byte ptr es:[di+1],0

inc di

inc di

loop x

mov ax,data

mov es,ax

mov di,0

mov bx,0

mov ax,agency

mov ds,ax

mov si,0

mov dh,2

mov cx,21

x1: push cx

mov ax,es:[di]

mov ds:[si],ax

mov ax,es:[di+2]

mov ds:[si+2],ax

mov byte ptr ds:[si+4],0 ;显示年份

mov dl,0

mov cl,7

call show_str

mov ax,es:[84+di]

push dx

mov dx,es:[84+di+2]

call dtoc_dword

;显示收入

pop dx

mov dl,20

mov cl,7

call show_str

mov ax,es:[84+84+bx]

call dtoc_word

mov dl,40

;显示雇员数

mov cl,7

call show_str

mov ax,es:[84+di]

push dx

mov dx,es:[84+di+2]

div word ptr es:[84+84+bx] ;计算人均收入并显示

call dtoc_word

pop dx

mov dl,60

mov cl,7

call show_str

add di,4

add bx,2

add dh,1

pop cx

loop x1

mov ah,0

int 16h ;加上按任意键继续功能,可以直接双击运行

mov ax,4c00h

int 21h 编译链接程序,其运行效果如下:

实验总结

这个题目实际是前几个题目代码的整合,难点还是在于如何计算显示的行和列,如果错位了1个字节,显示的时候就可能出现重叠之类的情况。还有要再写个dword型数据转ASCII字符的程序,不过有之前的经验,应该也不难。通过此次的程序设计训练,基本上对之前所学的所有知识都有了一个系统性的掌握。

推荐第4篇:语言课程设计要求

汇编语言课程设计要求

1.设计的目的和任务

(1)目的:课程设计是本科教学全过程中重要环节。其目的是培养计算机专业学生运用所学知识解决计算机应用领域内实际问题能力,进一步提高学生汇编语言综合编程能力,程序调试技能。

(2)任务:能够按照设计题目完成相应设计;撰写设计报告。

2.设计要求

完成设计任务,撰写设计报告,上交源程序和可执行程序,源程序加注释

3.设计地点

学院计算机实验室或自己的计算机

4.主要仪器设备(实验用的软硬件环境)

普通微机一台;汇编语言环境(基于DOS环境:EDIT、MASM、LINK、DEBUG;基于Windows环境)

5.设计内容

5.2 汇编程序设计的内容 题目自拟(每人单独一题),但必须有一定的难度和一定的设计工作量,可参考课本内容和设计辅导书内容,也可参考其它参考书。

6.问题讨论与分析

根据自己设计和调试过程出现的问题进行分析的讨论,并进行小结。

参考文献

1、詹仕华等编.《汇编语言程序设计》.北京:中国电力出版社.2008.2

2、詹仕华等编.《汇编语言程序设计习题解答及课程实验、设计辅导》.北京:中国电力出版社.2008.2

3、王爽编.《汇编语言》.北京:清华大学出版社,2003.5

4、曹加恒等编.《新一代汇编语言课程设计》.北京:高等教育出版社,2003.6

5、杨路明等编.《汇编语言程序设计》.长沙:中南大学出版社,2005.8

实验室观看设计结果时间和上交设计报告时间:6月24日,地点:学院机房。

附课程设计大纲

《汇编语言》课程设计

课程名称(中文):汇编语言

课程名称(英文):Aembly Language

总周数:1周

学分数:1分

1.目的及任务

(1)目的:课程设计是本科教学全过程中重要环节。其目的是培养电子信息专业学生运用所学知识解决计算机应用领域内实际问题能力,进一步提高学生汇编语言综合编程能力,程序调试技能。

(2)任务:能够按照设计题目完成相应设计;撰写设计报告。 2.要求

完成设计任务,撰写设计报告,上交源程序和可执行程序,源程序加注释。 3.面对专业

电子信息工程、计算机科学与技术 4.成绩评定

设计过程和结果自述占50%,课程设计报告占50%。 5.主要仪器设备、工具书、参考文献资料 主要仪器设备:通用PC机

工具书:课程教材

参考文献资料:

沈美明、温冬蝉编著,《IBM-PC汇编语言程序设计》清华大学出版社;

王爽编著《汇编语言》 清华大学出版社

推荐第5篇:C语言课程设计

C语言课程设计

一、课程设计目的

1.复习、巩固C语言的基础知识,进一步加深对C语言的理解和掌握。

2. 提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力。 3.培养学生在项目开发中团队合作精神,创新意识及能力。

4.本课程设计主要以学生独立思考解决问题为主,教师指导为辅,结合上机操作,完成指定的任务,作出设计报告。

二、课程设计内容

第一题:背单词软件开发 (学号为单号的必须作)

1.录入单词

China 中国 Japan 日本

…….

使用文件存放。

2.随机测试

系统随机显示单词(用户可以选择中译英,或英译中),对回答错误的单词应该可再回答一次。能够统计回答的正确单词的个数。 3.顺序测验

4.查找单词的汉语或英语意思(输入中文查对应的英语意思,输入英文查对应汉语意思)

第二题:小学数学四则运算(学号为双号的必须作) 12+56=?

1.要求系统随机生成0~100之内的整数。 2.对回答错误的题目应该可重新回答一次。 3.能够统计回答的正确题目的个数。

4.回答错误的题目写入“error_record.txt”文件中。

第三题:学生成绩管理系统

要求:1.学生的信息用结构体来表示。

struct stu{ int

sno;

//学号

char name[8];

//姓名

char sex[3];

//性别

char incla[8];

//班级

float math;

//数学成绩

float English;

//英语成绩

float computer;

//计算机成绩 }

2.能够按学号、按性别、按班级查询。查询方式可以自己补充。 3.能够统计每个学生的平均成绩、总成绩、并可以按平均成绩和总成绩进行排序,并在屏幕上打印排序结果。

4.能够修改、删除、添加学生的信息。

5.系统的各个功能模块要求用函数的形式实现。 6.在主函数里通过菜单来调用各个函数。

7.用链表或数组来存储班级学生(思考用数组和链表的异同)。

8.学生的信息能够保存在文件里(思考用二进制文件和文本文件的异同)。 如果用文本文件存储,则文件格式如下: 学号 姓名

性别

班级

数学

英语

计算机 1001 王鹏

一班

68.5 58

96 1002 李云

一班

68.5 88

98 1003

王海

一班

78.5 98

68 …….2001 赵亚男

二班

58.5 48

96 2002 刘飞

二班

68.5 78

58 提示:

文本文件读写------fscanf,fprint 二进制文件读写----fread,fwrite 9.能够对文件进行读写、修改、删除。

第四题:中文分词器软件(选做题—加分)

与英文的以空格作为分界符不同,在中文中词与词之间没有明显的区分标记,中文信息处理中的一个重要的基础就是词的切分,也称中文分词。本题目是开发一个简单的中文分词器软件。

提示算法:

基于字符串匹配的分词方法这种方法又叫做机械分词方法,它是按照一定的策略将待分析的汉字串与一个“充分大的”词典中的词条进行匹配,若在词典中找到某个字符串,则匹配成功(识别出一个词)。按照扫描方向的不同,字符串匹配分词方法可以分为正向匹配和逆向匹配;按照不同长度优先匹配的情况,可以分为最大(最长)匹配和最小(最短)匹配。

建议采用最大正向匹配算法。

例如:对一个字符串S,从前到后扫描,对扫描的每个字,从词库中寻找最长匹配.比如假设S=\"我是中华人民共和国公民\",词库中有\"中华人民共和国\",\"中华\",\"公民\",\"人民\",\"共和国\"......等词.当扫描到\"中\"字,那么从中字开始,向后分别取1,2,3,......个字(\"中\",\"中华\",\"中华人\",\"中华人民\",\"中华人民共\",\"中华人民共和\",\"中华人民共和国\",,\"中华人民共和国公\"),词库中的最长匹配字符串是\"中华人民共和国\",那么就此切分开,扫描器推进到\"公\"字。

S的分词结果为:我/是/中华人民共和国/公民

提供的词典是7个文件:chivoc2.txt,chivoc3.txt,„„,chivoc8.txt,分别存储2字词,3字词,„„,8字词。

三、课程设计要求: 1.对系统进行功能模块分析,控制模块分析正确,符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善,合理。 2.系统设计要实用,编程简练、可用、功能全面。 3.说明书、流程图要清楚。

4.记录设计情况(备查,也为编写设计说明书作好准备)。

5.设计成果:设计说明书一份(包含源代码的详细注释说明)。

四、补充

1.程序=算法+数据结构

一个好的程序应该有好的算法和好的数据结构。

指导教师:潘惠勇

李国伟

2012.4.23

推荐第6篇:C语言课程设计

华 北 水 利 水 电 学 院

环 节 名 称:专 业 班 级:姓

:学

:院、系

:指 导 教 师:

2012——2013学年

第 二 学期

高级语言课程设计(C语言)

信息与计算科学专业165班

孙志攀

201216511

数学与信息科学学院

必做题

1.输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写3个函数:①求最小数、最大数的位置

;②进行对换处理③主函数

程序源代码:

#include void ptin(int*p,int n) { int i;

printf(\"请输入%d个整数:\",n); for(i=0;i

if(*max

if(*min>*(p+i))min=p+i; } i=*min;*min=*p;*p=i; i=*max;*max=*(p+n-1);*(p+n-1)=i; } void ptout(int*p,int n) { int i; printf(\"输出%d个数:\\n\",n); for(i=0;i

2.将一组字符串按字典顺序输出。(通过函数调用完成)

程序源代码:

#include #include void paixu(char *a[],int n) { int i,j;

char *b;

for (i=0;i

for (j=i+1;j

if(strcmp(a[i],a[j])>0)

{

b=a[i];

a[i]=a[j];

a[j]=b;

} } } void main () {

int i,n=10;

char c[10][20];

char *t[10]; printf(\"请输入十个字符串:\");

for(i=0;i

{

scanf(\"%s\",c[i]);

t[i]=c[i];

}

paixu (t,n); printf(\"按字典顺序排列,结果为:

for(i=0;i

printf(\"%s \",t[i]);

\");

printf(\"\\n\"); }

3.有两个链表a和b,结点中包含学号和姓名。编写函数delete,从a链表中删

去与b链表中有相同学号的结点。 程序源代码:

#include #include #define N 3

typedef struct student {

int num;

char name[20];

struct student *next; }STU;

STU *create() {

int i;

STU *p,*head=NULL,*tail=head;

for (i=0;i

{

p=(STU *)malloc(sizeof(STU));

scanf(\"%d%s\",&p->num,p->name);

p->next=NULL;

if (p->num

{

free(p); break;

}

if(head==NULL)

head=p;

else

tail->next=p;

tail=p;

}

return head; }

void output(STU *p) {

while (p!=NULL)

{

printf(\"%d\\t%s\\n\",p->num,p->name);

p=p->next;

} }

STU *del(STU *a,STU *b)

{

STU *head,*p1,*p2;

p1=p2=head=a; //让p

1、p

2、head结点指向链表a的头部

while (b!=NULL)

{

p1=p2=head; //每次循环前让p

1、p2始终指向删除后链表的头部

while (p1!=NULL)

{

if (b->num==p1->num) //学号相同,删除结点信息

if(p1==head) //如果删除的是头结点,则头结点位置要后移

{

head=p1->next;

free(p1);

p1=p2=head;

}

else //如果删除的是中间结点

{

p2->next=p1->next;

free(p1);

p1=p2->next;

}

else //学号不同,则p1,p2指针依次后移

{

p2=p1;

p1=p1->next;

}

}

b=b->next;

}

return head; }

int main(int argc, char *argv[]) {

STU *a,*b,*c;

printf(\"\\n请输入链表a的信息格式(学号 姓名):\\n\");

a=create();

printf(\"\\n请输入链表b的信息格式(学号 姓名):\\n\");

b=create();

c=del(a,b);

printf(\"\\n经过删除后,a链表信息为:\\n\");

output(c);

return 0; } 程序的运行结果(I/O窗口截图)

选做题

(任选其一)

1、电话簿管理系统

一、需求分析

设计一个电话簿管理系统,使之提供以下功能:

(1) 新建信息功能

(2) 查询信息功能

(3) 添加信息功能

(4) 修改信息功能

(5) 删除信息功能

需求说明:

(1) 电话信息包括姓名(规定字节数为15)、电话号码(规定字节数为15)和工作单位(最大字节数为30)等信息。

(2) 录入的信息要求存入文件,并可以通过读取数据文件进行查询、修改、删除等基本操作。

(3) 对电话簿中的信息应能够分别按序号和姓名两种方式进行查询,并返回所有符合条件的信息。

(4) 修改、删除、添加等操作要求可以按照序号和姓名两种方式进行,并返回操作后的信息。

(5) 所设计的通讯系统要求以菜单方式工作,为用户提供清晰的使用提示,根据用户的选择进行各种处理。

(6) 需设计主控制菜单程序(menu()函数),实现菜单选择模块。 (7) 该系统中的各个子功能均需通过相应的自定义函数进行实现。

二、总体设计

初步提出解决方案,以及系统的体系结构和数据结构的设计方案,并写出书面总体设计说明书。

(1)设计主控制菜单程序(menu()函数),实现菜单选择模块。

①输出功能菜单(包括新建、读取文件、添加、查询、修改、删除、浏览、排序等)。 ②按提示信息选择功能菜单,并输出返回值。 (2)设计New()函数,实现新建数据文件功能。

(3)设计Load()函数,实现文件读取功能,若文件不存在,则返回New(),进入新建数据文件。

(4)设计Add()函数,实现信息添加功能,分别录入序号、姓名、电话和工作单位。若序号已存在,则重新输入。

(5)设计Qur()函数,实现信息查询功能,通过设计提示菜单,实现按序号和姓名两种方式查询。

(6)设计Modify()函数,实现信息修改功能,在修改前,首先显示所有信息,然后通过序号实现修改。

(7)设计Del()函数,实现信息删除功能,通过设计提示菜单,实现序号和姓名两种方式进行删除。

(8)设计Sort()函数,实现信息排序功能,通过设计提示菜单,实现按序号和姓名两种方式进行排序。

(9)设计Disp()函数,实现信息浏览功能。

(10)设计Save()函数,实现信息保存功能,将新建或读取的文件,在退出程序后进行保存。

三、详细设计给出主要流程图

(1)系统功能模块图: 主菜单 新建文件 读取文件 添加通讯录 查询通讯录 修改通讯录 删除通讯录 排序通讯录 浏览通讯录

新建:可以新建文件,新建文件自己输入文件名字.txt。 读取:通过成功读取可以在文件中实现以下功能。

添加:可以添加通讯录,依次输入序号、姓名、电话、工作单位,会提示推出。 查询:可以选择用序号、姓名的方式查询。

修改:输入欲修改的那个人的信息,通过输入序号和姓名来修改通讯录信息。 删除:输入欲删除的那个人的序号或姓名,来删除信息。 排序:可以通过序号排序,或者通过姓名的拼音排序来排序。 浏览:可以通过序号、姓名浏览通讯录。 (2)工作流程图

1、添加通讯录

开始

i=0 Sign!=’n’&&sign!=’N’ 输入信息 return(n+1)

结束

2.查询通讯录

开始

输入查询的姓名

判断通讯录中是否有此人 输出“通讯录中没有此人” 显示该人所有记录

结束

3.删除通讯录 4.修改通讯录

开始

输入查询的姓名

判断通讯录中是否有此人 输出“通讯录中没有此人”

依次输入修改的内容

结束 开始

输入查询的姓名

判断通讯录中是否有此人 输出“通讯录中没有此人”

显示该人所有记录

结束

5.浏览通讯录

开始 int i:i=1 i

输入一个记录

i++ 结束

四、编写代码

程序源代码:

#include #include #include #define N 200 #define HEADER1 \"*********************电话簿***********************\\n\" #define HEADER2 \"| 序号 | 姓名 | 电话 | 工作单位 |\\n\" #define HEADER3 \"|--------|--------|--------|------------|\\n\" #define FORMAT \"| %-8d|%-14s|%-17s|%-22s|\\n\" #define DATA p->num,p->name,p->telnumber,p->units #define END \"-----------------------\\n\"

typedef struct teldir { int num; char name[15]; char telnumber[15]; char units[30]; }TEL; typedef struct pointer_info { TEL *pHead; int count; char fname[15]; int saveflag; }PI; void menu() { system(\"cls\"); printf(\" 通讯录管理系统\\n\"); printf(\"**************MENU*********************\\n\"); 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(\"**** 0.退出 ***\\n\"); printf(\"***************************************\\n\"); printf(\"\\n\"); } void Swap(TEL *p1,TEL *p2) { TEL stmp; stmp=*p1; *p1=*p2; *p2=stmp; } void printheader() { printf(HEADER1); printf(HEADER2); printf(HEADER3); } void Load(PI *pi) {

FILE *fp; TEL *p=pi->pHead; char fname[15]; printf(\"请输入要加载的文件名:\"); scanf(\"%s\",fname); strcat(fname,\".txt\"); strcpy(pi->fname,fname); fp=fopen(pi->fname,\"rb\"); if(fp==NULL) { printf(\"\\n==>无法打开文件!请新建数据文件!\\n\"); return; } pi->count=0; pi->saveflag=0; while(!feof(fp)) { if(fread(p,sizeof(TEL),1,fp)) { pi->count++; p++; } } printf(\"成功读取数据文件!\",fname); printf(\"\\n请选择(0-8):\"); fclose(fp); } void Disp(PI *pi) { int i; TEL *p; FILE *fp=NULL; fp=fopen(pi->fname,\"r\"); if(fp==NULL)

{ printf(\"\\nError!\\n\"); return; } menu(); p=pi->pHead; if(pi->count==0) { printf(\"无记录!\"); printf(\"\\n请选择(0-8):\"); return; } printheader(); for(i=1;icount;i++) { printf(FORMAT,DATA); printf(HEADER3); p++; }

} void Sort(PI *pi) { int i,j; int sel; TEL *p; FILE *fp=NULL; fp=fopen(pi->fname,\"rb+\"); if(fp==NULL) { printf(\"\\nError!\\n\"); return;} system(\"cls\"); printf(\" **************************\\n\"); printf(\" ** 1.按序号排序 **\\n\"); printf(\" ** 2.按姓名排序 **\\n\"); printf(\" ** 按任意键返回主菜单 **\\n\"); printf(\"\\n请选择(1 or 2):\"); scanf(\"%d\",&sel); if(sel!=1&&sel!=2) { system(\"cls\"); menu(); printf(\"请选择(0-8):\"); return; } if(sel==1) { for(i=1;icount-1;i++) { p=pi->pHead; for(j=1;jcount-i;j++,p++) { if(p->num>(p+1)->num)

Swap(p,p+1); } } pi->saveflag=1; } else if(sel==2) { for(i=1;icount-1;i++) { p=pi->pHead; for(j=1;jcount-i;j++,p++) { if(strcmp(p->name,(p+1)->name)>0) Swap(p,p+1); } } } Disp(pi); printf(\"请选择(0-8):\"); } void Del(PI *pi) { int sel; int num;

char name[15]; TEL *p; int i; FILE *fp=NULL; fp=fopen(pi->fname,\"rb+\"); if(fp==NULL) { printf(\"\\nError!\\n\"); return; } p=pi->pHead; menu(); Disp(pi); printf(\" **************************\\n\"); printf(\" *** 1.按序号删除 ***\\n\"); printf(\" *** 2.按姓名删除 ***\\n\"); printf(\" *** 按任意键返回主菜单 ***\\n\"); printf(\"\\n请选择(1 or 2):\"); scanf(\"%d\",&sel); if(sel!=1&&sel!=2) { system(\"cls\"); menu(); printf(\"请选择(0-8):\"); return; } if(sel==1) { printf(\"请输入要删除记录的序号:\"); scanf(\"%d\",&num); for(i=1;icount;i++)

{ if(num==p->num) break; p++; } if(i>pi->count) { printf(\"无此人!\\n\"); printf(\"请选择(0-8):\"); return; } else if(i==pi->count) { pi->count--; pi->saveflag=1; printf(\"记录成功删除!\\n\"); } else { memcpy(p,p+1,(pi->pHead+pi->count-p)*sizeof(TEL)); pi->count--; pi->saveflag=1; printf(\"记录成功删除!\\n\"); } }

else if(sel=2) { printf(\"请输入要删除的姓名:\"); scanf(\"%s\",name); for(i=1;icount;i++) { if(!strcmp(name,p->name)) break; p++; } if(i>pi->count) { printf(\"无此人!\\n\"); menu(); printf(\"请选择(0-8):\"); return; } else if(i==pi->count) { pi->count--; pi->saveflag=1; printf(\"记录成功删除!\\n\"); } else { memcpy(p,p+1,(pi->pHead+pi->count-p)*sizeof(TEL)); pi->count--; pi->saveflag=1; printf(\"记录成功删除!\\n\"); } } fclose(fp); printf(\"请选择(0-8):\"); } void Modify(PI *pi) { int num,i; TEL *p; FILE *fp=NULL; fp=fopen(pi->fname,\"r\"); if(fp==NULL) { printf(\"\\nError!\\n\"); return; } p=pi->pHead; menu(); Disp(pi); printf(\"请输入要修改的序号:\"); scanf(\"%d\",&num); for(i=1;icount;i++) { if(num==p->num) break; p++;

} if(i>pi->count) { printf(\"无此人!\\n\"); printf(\"请选择(0-8):\"); return; } else { printf(\"请输入正确的序号:(输入0返回菜单)\"); scanf(\"%d\",&num); if(num!=0) p->num=num; else { menu(); printf(\"请选择(0-8):\"); return; } printf(\"请输入正确的姓名:\"); scanf(\"%s\",p->name); printf(\"请输入正确的电话:\"); scanf(\"%s\",p->telnumber); printf(\"请输入正确的工作单位:\");

scanf(\"%s\",p->units); pi->saveflag=1; } printf(\"请选择(0-8):\"); fclose(fp); } void Qur(PI *pi) { int sel,i,num; TEL *p; char name[15]; FILE *fp=NULL; fp=fopen(pi->fname,\"r\"); if(fp==NULL) { printf(\"\\nError!\\n\"); return; } p=pi->pHead; menu(); printf(\" **************************\\n\"); printf(\" *** 1.按序号查询 ***\\n\"); printf(\" *** 2.按姓名查询 ***\\n\"); printf(\" *** 按任意键返回主菜单 ***\\n\"); printf(\"\\n请选择(1 or 2):\"); scanf(\"%d\",&sel); if(sel!=1&&sel!=2) { system(\"cls\");

menu(); printf(\"请选择(0-8):\"); return; } if(sel==1) { printf(\"请输入要查询记录的序号:\"); scanf(\"%d\",&num); for(i=1;icount;i++) { if(num==p->num) break; p++; } if(i>pi->count) { printf(\"无此人!\\n\"); printf(\"请选择(0-8):\"); return; } else { printheader(); printf(FORMAT,DATA);

printf(END); } } else if(sel==2) { printf(\"请输入要查询的姓名:\"); scanf(\"%s\",name); for(i=1;icount;i++) { if(!strcmp(name,p->name)) break; p++; } if(i>pi->count) { printf(\"无此人!\\n\"); printf(\"请选择(0-8):\"); return; } else { printheader(); printf(FORMAT,DATA); printf(END); } } fclose(fp); printf(\"请选择(0-8):\"); } void Add(PI *pi) { int num; int i,numRepeatFlag=0;

TEL *pstu,*p; FILE *fp=NULL; fp=fopen(pi->fname,\"a\"); if(fp==NULL) { printf(\"\\nError!\\n\"); return; } do { pstu=pi->pHead+pi->count; p=pi->pHead; printf(\"请输入序号((1-200),0返回菜单):\"); scanf(\"%d\",&num); for(i=0;icount;i++) { if(num==p->num) { printf(\"这个序号已存在,请重新输入另一个序号!\\n\"); numRepeatFlag=1;

break; } p++; } if(numRepeatFlag) { numRepeatFlag=0; continue; } if(num!=0) pstu->num=num; else { menu(); printf(\"请选择(0-8):\"); break; } printf(\"请输入姓名:\"); scanf(\"%s\",pstu->name); printf(\"请输入电话:\"); scanf(\"%s\",pstu->telnumber); printf(\"请输入工作单位:\"); scanf(\"%s\",pstu->units); fprintf(fp,\"%-8d %-14s %-17s %-22s\\n\",pstu->num,pstu->name,pstu->telnumber,pstu->units); pi->count++; pi->saveflag=1; }while(1); fclose(fp); } void New(PI *pi) { FILE *fp; char fname[15]; printf(\"请输入新建数据文件名:\");

scanf(\"%s\",fname); strcat(fname,\".txt\"); fp=fopen(fname,\"wb\"); if (fp==NULL) { printf(\"\\n=====>无法打开文件!\\n\"); return; } strcpy(pi->fname,fname); printf(\"请选择(0-8):\"); fclose(fp); }

void Save(PI *pi) { FILE *fp; int numwriten; if (!strlen(pi->fname)) New(pi); fp=fopen(pi->fname,\"wb\"); if (fp==NULL) { printf(\"\\n====>打开文件失败!\\n\"); fclose(fp); return; } if(pi->count) { numwriten=fwrite(pi->pHead,pi->count*sizeof(TEL),1,fp); pi->saveflag=0; printf(\"\\n文件保存成功!\\n\"); } else printf(\"\\n没有记录保存!\"); fclose(fp); } void main() { int sel; TEL *pstu; PI pi; pstu=(TEL*)malloc(N *sizeof(TEL)); pi.pHead=pstu; pi.count=0; pi.fname[0]=\'\\n\'; pi.saveflag=0; menu(); printf(\"请选择(0-8):\"); do { scanf(\"%d\",&sel); if(sel==0) { if(pi.saveflag==1) { if(strlen(pi.fname)) Save(&pi);

else { New(&pi); Save(&pi); } } break; } switch(sel) { case 1: New(&pi); break; case 2: Load(&pi); break; case 3: Add(&pi); break; case 4: Qur(&pi); break; case 5: Modify(&pi); break; case 6: Del(&pi); break; case 7: Sort(&pi); break; case 8: { Disp(&pi); printf(\"请按任意键继续:\"); getchar(); getchar(); menu(); printf(\"请选择(0-8):\"); break; } default: printf(\"\\n输入错误!重新选择(0-8)!\\n\"); break; } }while(1); pstu=pi.pHead; free(pstu); } 程序的运行结果(I/O窗口截图)

注意:

截 图 见 下 页

五、调试总结 心得体会:

通过这次课程设计,我越来越发现了计算机编程的重要作用,也渐渐的对C语言产生了兴趣。在这个信息社会,科技不断进步,计算机编程将成为一个无可取代的行业,并在高新科技产业中起到支柱作用,掌握程序设计是未来大学生就业的必要技能。在上机程序编译过程中,我发现一种算法可以有多种编译源代码,只有牢固的掌握专业知识和技巧才能在编译过程中行云流水。程序设计过程中我们必须注意细节,否则会出现各种各样的错误。最后我想说,我会继续努力,勤加练习,争取学好这门科目,以便为将来的生活和工作打下基础.

推荐第7篇:C语言课程设计

#include #include int N1,N2,kk1,kk2,kk3; struct couse * head1,*head2,*emp1; struct student * head3,*head4,*emp2; struct couse//课程信息结构体 {

int num1;

char name1[20];

int score;

int nelepeo;//课程已选人数

int Melepeo;//课程人数上限

struct couse * next; };

int student();

//学生登陆 int teacher();

//教师登陆 struct student//学生信息结构体 {

int num2;

char name2[20];

int nelenum[50];//已选课程编号

int nelen;//已选课程数量

struct student * next; };

void Ms() {

for(kk1=0;kk1

for(kk2=0;kk2

for(kk3=0;kk3num1); printf(\"\\n课程名称:\"); scanf(\"%s\",p1->name1); printf(\"\\n学分:\"); scanf(\"%d\",&p1->score); printf(\"\\n课程人数上限:\"); scanf(\"%d\" ,&p1->Melepeo); printf(\"\\n\\t\\t\\t\\t输入成功!\"); p1->nelepeo=0; head1=NULL; while(p1->num1!=0) {

N1=N1+1;

if(N1==1)head1=p1;

else p2->next=p1;

p2=p1;

p1=(struct couse * )malloc(sizeof(struct couse));

printf(\"\\n-----------------------------\");

printf(\"\\n课程编号:(输入0结束)\"); scanf(\"%d\",&p1->num1); printf(\"\\n课程名称:\"); scanf(\"%s\",p1->name1); printf(\"\\n学分:\"); scanf(\"%d\",&p1->score); printf(\"\\n课程人数上限:\"); scanf(\"%d\" ,&p1->Melepeo);

p1->nelepeo=0;

printf(\"\\n\\t\\t\\t\\t输入成功!\"); } p2->next=NULL; intoc(); }

void filec()//录入键盘子函数(从文件录入) { void intoc();

FILE * fp;

char filepath[20];

struct couse *p1,*p2;

N1=0;

printf(\"输入要读入的文件路径:\");

getchar();

gets(filepath);

if((fp=fopen(filepath,\"r\"))==NULL)

{

printf(\"找不到%s文件!\\n\",filepath);

exit(0);

}

p1=p2=(struct couse*)malloc(sizeof(struct couse));

fscanf(fp,\"%d%s%d%d%d\",&p1->num1,p1->name1,&p1->score,&p1->nelepeo,&p1->Melepeo);

head1=NULL;

while(!feof(fp))

{

N1=N1+1;

if(N1==1)head1=p1;

else p2->next=p1;

p2=p1;

p1=(struct couse * )malloc(sizeof(struct couse));

fscanf(fp,\"%d%s%d%d%d\",&p1->num1,p1->name1,&p1->score,&p1->nelepeo,&p1->Melepeo);

}

p2->next=NULL;

intoc(); }

void inputc()//录入课程主函数 {

int i;

printf(\"\\t\\t\\t录入课程信息\\n\");

printf(\"\\n1.从键盘录入\\n\");

printf(\"2.从文件录入\\n\");

printf(\"3.返回主菜单\\n\");

printf(\"请选择(1~3):\\n\");

scanf(\"%d\",&i);

switch(i)

{

case(1):keyboardc();break;

case(2):filec();break;

case(3):system(\"cls\");return;break;

//return

} }

void insertc(struct couse *incouse)//课程管理子函数(增加课程) { void intoc();

struct couse *p0,*p1,*p2;

p1=head1;

p0=incouse;

if(head1==NULL)

{

head1=p0;

p0->next=NULL;

}

else

{

while((p0->num1 >p1->num1) && (p1->next!=NULL))

{

p2=p1;

p1=p1->next;

}

if(p0->num1 num1)

{

if(head1==p1) head1=p0;

else p2->next=p0;

p0->next=p1;

}

else

{

p1->next=p0;

p0->next=NULL;

}

}

N1=N1+1;

intoc(); }

void delc(int num1)//课程管理子函数(删除课程) { void intoc();

struct couse *p1,*p2;

if(head1==NULL)

{

printf(\"\\n没有课程,无法删除!\\n\");

goto end;

}

p1=head1;

while(num1!=p1->num1 && p1->next!=NULL)

{

p2=p1;

p1=p1->next;

}

if(num1==p1->num1)

{

if(p1==head1) head1=p1->next;

else p2->next=p1->next;

printf(\"已删除该编号课程!\\n\");

N1=N1-1;

}

else printf(\"无该编号的课程!\\n\");

end:;

intoc(); }

void managementc()//课程管理主函数 {

struct couse * incouse;

struct couse *p1;

int i,num1;

printf(\"\\t\\t\\t课程管理\\n\");

printf(\"1.新增课程\\n\");

printf(\"2.删除课程\\n\");

printf(\"3.返回主菜单\\n\");

printf(\"请选择(1~3):\\n\");

scanf(\"%d\",&i);

switch(i)

{

case(1):

{

incouse=(struct couse *)malloc(sizeof(struct couse));

printf(\"\\n课程编号:\");

fflush(stdin);

scanf(\"%d\",&p1->num1);

printf(\"\\n课程名称:\");

scanf(\"%s\",p1->name1);

printf(\"\\n学分:\");

scanf(\"%d\",&p1->score);

printf(\"\\n课程人数上限:\");

scanf(\"%d\" ,&p1->Melepeo);

printf(\"\\n\\t\\t\\t\\t输入成功!\");

incouse->nelepeo=0;

insertc(incouse);

break;

}

case(2):

{

printf(\"请输入要删除课程的编号:\\n\");

scanf(\"%d\",&num1);

delc(num1);

break;

}

case(3):system(\"cls\");return;break;

} }

void keyboards()//录入学生信息子函数(从键盘录入) {

void intos();

int i;

struct student *p1,*p2;

N2=0;

p1=p2=(struct student *)malloc(sizeof(struct student));

printf(\"\\n学生学号:\");

scanf(\"%d\",&p1->num2);

printf(\"\\n学生姓名:\");

scanf(\"%s\",p1->name2);

p1->nelen=0;

for(i=0;inelenum[i]=0;

head3=NULL;

while(p1->num2!=0)

{

N2=N2+1;

if(N2==1)head3=p1;

else p2->next=p1;

p2=p1;

p1=(struct student * )malloc(sizeof(struct student));

//return

printf(\"\\n学生学号:(输入0结束!)\");

scanf(\"%d\",&p1->num2);

printf(\"\\n学生姓名:\");

scanf(\"%s\",p1->name2);

p1->nelen=0;

for(i=0;inelenum[i]=0;

}

p2->next=NULL;

intos();return; } void files()//录入学生信息子函数(从文件录入) {

int i=0;

FILE * fp;

char filepath[20];

struct student *p1,*p2;

N2=0;

printf(\"输入要读入的文件路径:\");

getchar();

gets(filepath);

if((fp=fopen(filepath,\"r\"))==NULL)

{

printf(\"找不到%s文件!\\n\",filepath);

exit(0);

}

p1=p2=(struct student*)malloc(sizeof(struct student));

fread(p1,sizeof(struct student),1,fp);

head3=NULL;

while(!feof(fp))

{

i=0;

N2=N2+1;

if(N2==1)head3=p1;

else p2->next=p1;

p2=p1;

p1=(struct student * )malloc(sizeof(struct student));

fread(p1,sizeof(struct student),1,fp);

}

p2->next=NULL; }

void inputs()//录入学生信息主函数 {

int i;

printf(\"\\n\\t\\t\\t录入学生信息\\n\");

printf(\"\\n1.从键盘录入\\n\");

printf(\"2.从文件录入\\n\");

printf(\"3.返回主菜单\\n\");

printf(\"请选择(1~3):\\n\");

scanf(\"%d\",&i);

switch(i)

{

case(1):keyboards();break;

case(2):files();break;

case(3):system(\"cls\");return;break;

}

return 0; }

void inserts(struct student * incouse)//学生信息管理子函数(填加学生信息) { void intos();

struct student *p0,*p1,*p2;

p1=head3;

p0=incouse;

if(head3==NULL)

{

head3=p0;

p0->next=NULL;

}

else

{

while((p0->num2 >p1->num2) && (p1->next!=NULL))

{

p2=p1;

p1=p1->next;

}

if(p0->num2 num2)

{

if(head3==p1) head3=p0;

else p2->next=p0;

p0->next=p1;

}

else

{

//return

p1->next=p0;

p0->next=NULL;

}

}

N2=N2+1;

intos(); }

void dels(int num2)//学生信息管理子函数(删除学生信息) { void intos();

struct student *p1,*p2;

if(head3==NULL)

{

printf(\"\\n没有该学生信息,无法删除!\\n\");

goto end;

}

p1=head3;

while(num2!=p1->num2 && p1->next!=NULL)

{

p2=p1;

p1=p1->next;

}

if(num2==p1->num2)

{

if(p1==head3) head3=p1->next;

else p2->next=p1->next;

printf(\"已删除该学生信息!\\n\");

N2=N2-1;

}

else printf(\"无该学号的学生!\\n\");

intos();

end:; }

void managements()//学生信息管理主函数 {

struct student * incouse;

int i,num2;

printf(\"\\t\\t\\t学生信息管理\\n\");

printf(\"1.新增学生信息\\n\");

printf(\"2.删除学生信息\\n\");

printf(\"3.返回主菜单\\n\");

printf(\"请选择(1~3):\\n\");

scanf(\"%d\",&i);

switch(i)

{

case(1):

{

incouse=(struct student *)malloc(sizeof(struct student));

incouse->nelen=0;

incouse->nelenum[0]=0;

printf(\"学生学号\\t学生姓名\\n\");

scanf(\"%d%s\",&incouse->num2,incouse->name2);

inserts(incouse);

break;

}

case(2):

{

printf(\"请输入要删除学生的学号:\\n\");

scanf(\"%d\",&num2);

dels(num2);

break;

}

case(3):system(\"cls\");return;break;

//return

} }

void elect(struct student * s)//选课 {

void intos();

struct couse * p;

int num1,i;

printf(\"请输入要选课的编号:\\n\");

scanf(\"%d\",&num1);

for(i=0;s->nelenum[i]!=0;i++);

s->nelenum[i]=num1;

(s->nelen)++;

p=head1;

while(p->num1!=num1) p=p->next;

(p->nelepeo)++;

intos(); } void cheak()//学生选课子函数(查询可选课程) {

char e;

struct couse * c;

struct student * s;

int num2,i,j=0,t=0;

printf(\"请输入你的学号:\");

scanf(\"%d\",&num2);

s=head3;

while((s->num2!=num2 )&&( s->next!=NULL)) s=s->next;

if(s->num2!=num2)

{

printf(\"不存在你的信息,请进入主菜单录入你的信息!\\n\");

goto end;

}

c=head1;

printf(\"你的可选课程编号:\\n\");

while(c!=NULL)

{

for(t=0,i=0;s->nelenum[i]!=0;i++)

{

if(c->num1==s->nelenum[i]) t=1;

}

if(t==0 && (c->nelepeo!=c->Melepeo))

{

printf(\"%d\\n\",c->num1);

j++;

}

c=c->next;

}

if(j==0)

{

printf(\"你已选完所有课程,无法再多选!\\n\");

goto end;

}

printf(\"选课(y/n)?:\\n\");

getchar();

e=getchar();

i=0;

while((e==\'y\')||(e==\'Y\'))

{

elect(s);

printf(\"继续选课(y/n)?:\\n\");

getchar();

e=getchar();

}

end:; } void back(struct student * p)//退课 {

void intos();

struct couse * p1;

int num1,i,j;

printf(\"请输入你要退掉的课程编号:\\n\");

scanf(\"%d\",&num1);

p1=head1;

while(p1->num1!=num1) p1=p1->next;

for(i=0;p->nelenum[i]!=num1;i++);

for(j=i;p->nelenum[j]!=0;j++) p->nelenum[j]=p->nelenum[j+1];

p->nelenum[--j]=0;

(p1->nelepeo)--;

printf(\"退课成功!\\n\");

intos(); } void hcheak()//学生选课子函数(查询已选课程) {

char c;

struct couse * p0;

struct student * p;

int num2,i,f=0;

printf(\"请输入学号:\\n\");

scanf(\"%d\",&num2);

p=head3;

while(p->num2!=num2 && p!=NULL) p=p->next;

if(p==NULL)

{

printf(\"不存在你的信息,请回主菜单录入信息:\\n\");

goto end;

}

printf(\"已选课程编号:\\n\");

if(p->nelenum[0]==0)

{

printf(\"你还没选课!\\n\");

goto end;

}

for(i=0;p->nelenum[i]!=0;i++)

{

printf(\"%d\\n\",p->nelenum[i]);

p0=head1;

while(p0->num1!=p->nelenum[i]) p0=p0->next;

f=f+p0->score;

}

printf(\"总学分:%d\\n\",f);

printf(\"是否进行退课(y/n)?\");

getchar();

c=getchar();

while((c==\'y\')||(c==\'Y\'))

{

back(p);

printf(\"继续退课(y/n)?\");

getchar();

c=getchar();

(p->nelen)--;

}

end:; } void elective()//学生选课主函数 {

int i;

printf(\"\\t\\t\\t学生选课\\n\");

printf(\"1.查询可选课程\\n\");

printf(\"2.查询已选课程\\n\");

printf(\"3.返回主菜单\\n\");

printf(\"请输入(1~3):\\n\");

scanf(\"%d\",&i);

switch(i)

{

case(1):cheak();break;

case(2):hcheak();break;

case(3): system(\"cls\");return;break;

// return

} } void listc()//输出课程信息 {

struct couse * p;

p=head1;

printf(\"课程编号

课程名称

学分

课程已选人数

课程人数上限\\n\");

while(p!=NULL)

{

printf(\"%-8d%10s%6d%8d%12d\\n\",p->num1,p->name1,p->score,p->nelepeo,p->Melepeo);

p=p->next;

} }

void lists()//输出学生信息 {

struct student * p;

p=head3;

printf(\"学生学号

学生姓名

已选课程数量\\n\");

while(p!=NULL)

{

printf(\"%-4d %10s %6d\\n\",p->num2,p->name2,p->nelen);

p=p->next;

} } void intoc()//存储课程信息 {

FILE * fp;

struct couse * p;

char filepath[30];

if((fp=fopen(\"课程信息.dat\",\"a+\"))==NULL)

{

printf(\"\\n保存失败!\");

exit(0);

}

p=head1;

while(p!=NULL)

{

fprintf(fp,\"%d %s %d %d %d\\n\",p->num1,p->name1,p->score,p->nelepeo,p->Melepeo);

p=p->next;

}

fclose(fp);

printf(\"课程信息已保存成功!\\n\"); } void intos()//存储学生信息 { int i;

FILE * fp;

struct student * p;

char filepath[30];

if((fp=fopen(\"学生信息.dat\",\"a+\"))==NULL)

{

printf(\"\\n保存失败!\");

exit(0);

}

p=head3;

while(p!=NULL)

{

fwrite(p,sizeof(struct student),1,fp);

p=p->next;

}

fclose(fp);

printf(\"学生信息已保存成功!\\n\");

printf(\"\\n\\t\\t\\t\\t选择菜单:\");

printf(\"\\n\\t\\t\\t\\t1.继续添加\\n\\t\\t\\t\\t2.返回主菜单:\");

printf(\"请选择:\");

scanf(\"%d\",&i);

switch(i)

{

case 1:inputs();break;

case 2:teacher();break;

default:printf(\"\\n输入有误!\\n\"); } }

void store()//信息主函数 {

int i;

printf(\"\\t\\t系统信息查看及存储\\n\");

printf(\"1.查看课程信息\\n\");

printf(\"2.查看学生信息\\n\");

printf(\"3.返回主菜单\\n\");

printf(\"请输入(1~3):\\n\");

scanf(\"%d\",&i);

switch(i)

{

case(1):listc();break;

case(2):lists();break;

case(3):system(\"cls\");return;break;

} }

int main()//主函数

//retuen

{

int i;

FILE *fp;

printf(\"\\n\\t\\t\\t欢迎使用学生选课系统!\\n\");

printf(\"\\n请选择菜单:\");

printf(\"\\n\\t\\t\\t\\t1.教师登陆\\n\\t\\t\\t\\t2.学生登陆\\n\");

printf(\"请选择:\");

scanf(\"%d\",&i);

switch(i)

{

case 1:teacher();break;

case 2:student();break;

default:printf(\"输入有误!\");

} }

int student()

{

int i;

printf(\"\\n\\t\\t\\t\\t1.学生选课\\n\");

printf(\"\\n\\t\\t\\t\\t2.系统信息查看及存储\\n\");

printf(\"\\n\\t\\t\\t\\t3.退出系统\\n\");

printf(\"请选择:\");

scanf(\"%d\",&i);

switch(i)

{

case 1:

{

system(\"cls\");

elective();

break;

}

case 2:

{

system(\"cls\");

store();

break;

}

default:printf(\"输入有误!\");

}

}

int teacher()

{

FILE *fp;

int i;

printf(\"菜单:\\n\");

printf(\"1.录入课程信息\\n\");

printf(\"2.课程管理\\n\");

printf(\"3.录入学生信息\\n\");

printf(\"4.学生信息管理\\n\");

printf(\"5.系统信息查看\\n\");

printf(\"6.退出系统\\n\");

if((fp=fopen(\"课程信息.dat\",\"rb\"))==NULL)

{

printf(\"\\n打开系统文件失败!

\\n\");

//fp=fopen(\"信息.dat\",\"rb\"));

// }

// if(feof(fp))

// {

printf(\"\\n还未添加课程信息,请添加课程信息!\\n\");

inputc();

}

while(!feof(fp))

{

emp1=(struct couse*)malloc(sizeof(struct couse));

if(emp1==NULL)

{

printf(\"\\n分配内存失败!\\n\");

return;

}

fread(emp1,sizeof(struct couse),1,fp);

if(feof(fp)) break;

if (head1==NULL)

{

head1=emp1;

head2=emp1;

}

else{

head2->next=emp1;

head2=emp1;

}

head2->next=NULL;

}

fclose(fp);

fp==NULL;

if((fp=fopen(\"学生信息.dat\",\"rb\"))==NULL)

printf(\"\\n打开系统文件失败!\\n\");

//

//if(feof(fp)==1)

// {

printf(\"还未添加学生信息,请添加学生信息!\");

inputs();

while(!feof(fp))

{

emp1=(struct student*)malloc(sizeof(struct student));

if(emp2==NULL)

{

printf(\"\\n分配内存失败!\\n\");

return;

}

fread(emp2,sizeof(struct student),1,fp);

if(feof(fp)) break;

if (head3==NULL)

{

head3=emp2;

head4=emp2;

}

else{

head4->next=emp2;

head4=emp2;

}

head4->next=NULL;

}

fclose(fp);

fp==NULL;

printf(\"\\n请输入菜单选项(1~6):\\n\");

scanf(\"%d\",&i);

switch(i)

{

case(1):

{

system(\"cls\");

inputc();

break;

}

case(2):

{

system(\"cls\");

managementc();

break;

}

case(3):

{

system(\"cls\");

inputs();

break;

}

case(4):

{

system(\"cls\");

managements();

break;

}

case(5):

{

system(\"cls\");

store();

break;

}

case(6):

{

system(\"cls\");

printf(\"感谢使用本系统!\\n\\n再见!\\n\");

}

}

return 1;

}

推荐第8篇:语言课程设计任务书

河南工程学院

《汇编语言》 课程设计任务书

适用专业:

计算机科学与技术

适用班级: 本科

2014年12月20日

《汇编语言》课程设计任务书

一、课程设计目的与任务

汇编语言课程设计是本科教学过程中重要环节。通过课程设计,培养计算机专业学生,运用所学知识,进一步提高学生汇编语言综合编程能力和程序调试技能。并能够使学生更加熟练运用汇编程序设计语言,来解决计算机应用领域实际问题的能力,以及为设计其它应用软件提供帮助,进而提高学生的软件设计能力。

二、课程设计环境要求

1、硬件配置:586以上电脑

2、操作系统:WINDOWS 98/XP/2000等

3、软件需求:MASM 6.15

三、课程设计基本要求

要求通过查阅与设计课题相关的文献资料,自学与其相关内容,掌握MASM 6.15集成开发环境的使用。根据题目要求,自由分组,自选一个题目完成,根据各小组每个学生的出勤情况、负责部分完成情况、最后答辩情况及报告撰写是否规范,形成个人成绩。 具体要求如下:

1、在整个设计期间,无违纪现象(迟到、早退、逃课),态度认真;

2、整体架构正确合理、流程图清晰无误;

3、设计尽可能完成题目所要求的功能;

4、程序代码清晰,便于阅读;

5、报告书写规范;

6、提供可运行的课程设计系统,并参加上机面试答辩;

7、在课程设计结束时,上交实习报告和程序清单。

四、课程设计内容

1、计算比赛成绩。编制一个程序,要求完成以下功能: (1) 9名评委,每个评委给分范围为0~10(整数);

(2) 9名评委给分中,去掉一个最高分和一个最低分,剩余7名评委的平均分

即为参赛者的得分(精确到小数点后1位);

(3) 并将得分输出显示。

2、成绩评定。编制一个程序,要求完成以下功能: (1)以十进制形式从键盘随机输入成绩(不多于50个);

(2)显示成绩评定的等级(90-100为优,80-90为良,70-80为中,60-70为及格,60分以下为不及格);

(3)统计出各个等级的人数并以十进制形式显示输出; (4)当输入Q时,退出程序。

3、成绩排序。编制一个程序,要求完成以下功能:

(1)以十进制形式从键盘随机输入成绩(不多于50个),并用逗号或空格分隔各学生成绩;

(2)对该班的成绩进行递减排序,并以十进制形式显示排序结果并用逗号或空格分隔;

(3)计算全班的平均分并以十进制形式显示输出; (4)当输入Q时,退出程序。

4、代码转换程序设计。编制一个程序,要求完成以下功能:

完成一个字母或数制之间的转化,主程序分别具有6种可选择的子功能,按相应的字符可分别进入相应的子功能并在屏幕上显示结果,按“Q”键退出。6种可选择的子功能分别为:

(1)实现小写字母向大写字母的转换; (2)实现大写字母向小写字母的转换; (3)实现大写字母与小写字母的互换; (4)实现二进制数向十六进制数的转换; (5)实现十六进制数向二进制数的转换; (6)实现十六进制数向十进制数的转换。

5、信息检索。编制一个程序,要求完成以下功能:

(1)完成一个信息检索系统,在数据区,有9个不同的信息,编号为0~8,每个信息包括50个字符;

(2)从键盘输入0~8之间的一个编号,然后在屏幕上显示相应编号的信息内容;(3)当输入Q时,退出程序。

6、字符统计。编制一个程序,要求完成以下功能: (1)从键盘输入一个字符串(串长不大于100); (2)以十进制输出字符串中非字母字符的个数;

(3)输出原字符串;

(4)找出字符串中ASCII 码值最大的字符,在字符串中用红色显示; (5)字符串的输入和结果的输出都要有必要的提示,且提示独占一行。

7、奇偶数判断。编制一个程序,要求完成以下功能: (1)从键盘输入两个四位十六进制数; (2)将这两个数以二进制形式输出;

(3)找出这两个数中的偶数,若有则以十进制输出,若无,输出“NO”; (4)计算这两个数的平方和,并以十进制形式输出;

(5)数据的输入和结果的输出都要有必要的提示,且提示独占一行。

8、十进制数字串处理。编制一个程序,要求完成以下功能: (1)从键盘输入一个以回车结束的十进制数字串(不超过20 个)。 (2)按 ASCII 码值降序显示这个数字串中最大和最小的两个数字。 (3)以十进制形式显示数字串中所有数字的和。

(4)以十进制形式显示数字串中最大数与最小数的乘积。 (5)对数字串进行处理,使每个字符在字符串中只出现一次。

(6)数据的输入和结果的输出都要有必要的提示,且提示独占一行。

五、课程设计报告

课程设计报告主要包含以下内容:

1、课程设计的题目,本设计所实现的功能简述;

2、主要的设计思想简述;

3、主要程序的框图;

4、源程序代码(要求在关键的位置注释,从而增加程序的可读性);

5、程序调试结果及分析;

6、课程设计的总结,主要包括以下内容: (1)课程设计中所遇到的主要问题和解决方法。 (2)创新和得意之处。

(3)课程设计中存在的不足,需要进一步改进的设想。 (4)课程设计的感想和心得体会。

7、参考文献(不少于5篇)。

六、课程设计时间、地点及辅导教师

1、时间:2014-2015学年第1学期第19周

2、班级:计算机科学与技术12

41、1242

3、地点:计算机学院机房

4、辅导教师:王雪瑞

前4个题目,每组不超过两个人;第5个题目一人,

6、

7、8三个题目每组不超过3人。

推荐第9篇:C语言课程设计

- 1

1 前言

让自己所学的知识应用于实际生活中,理论联系生活,学以致用,我们将更好服务于民。我们是新一代的年轻人,要想将来在社会上更好的立足,就必须让自己强大起来,努力的学习新东西,了解新事物,跟上时代的步伐,这样我们才能与时俱进,不被社会所淘汰。C语言在大学里是一门很重要的课程,也是一门很实用的课程,学好C语言在当今的信息时代是一个很好的敲门砖。而且,我们是电子信息工程专业的,更应该学好C语言,这对我们以后走向社会有很大的帮助,为我们以后大学毕业去求职提升竞争力。从C语言产生到现在,它已经成为最重要和最流行的编程语言之一。在各种流行编程语言中,都能看到C语言的影子,如Java的语法与C语言基本相同。学习、掌握C语言是每一个计算机技术人员的基本功之一。C语言具有高级语言的强大功能,却又有很多直接操作计算机硬件的功能(这些都是汇编语言的功能),因此,C语言通常又被称为中级语言。学习和掌握C语言,既可以增进对于计算机底层工作机制的了解,又为进一步学习其他高级语言打下了坚实的基础。

2 需求分析

当今社会是信息社会,谁的信息越快速越准确,谁就会更好的生活在这个社会上,他的人生也将走向成功。信息业正在21世纪扮演着越来越重要的角色,也是中国十二五规划中的重要一环,因此,我们应该努力的去学习好这门课程,力争在以后的生活工作中大展身手。现在的社会日新月异,各种信息在不断的传递交流,谁最先获取了信息谁就会成功。所以,作为我们这类专业的人才,在毕业以后一定会大显身手,实现自己的人生价值。

2.1 课程设计目的

本课程设计为信息类公共课《计算方法与程序设计》配套的课程设计。是该课程的理论学习的延伸。通过本课程设计有助于锻炼综合运用C语言相关知识设

- 3为1;若n大于1,则开始循环运算(见图3.22流程图),直到i小于n不成立时结束循环。在循环运算的过程中,要调用两个函数即函数pit1和函数pit2(见图3.23流程图)。在调用函数pit1和函数pit2中,这两个函数进行相互递归调用。最后将调用函数pit1和pit2的值返回主函数main函数中,再输出高能质子数目t3和低能质子数目t4。

3.1 系统流程图

程序一系统流程图(如图3.11所示):

开始输入nt1=3,t2=1,i=1否n==0否是n==1是否i

- 5

3.2主要模块的流程图

程序一模块流程图如图3.21所示:

否i

图3.21流程图

程序二模块流程图如图3.22和图3.23所示:

i=1否i

图3.22流程图

- 7

} {t3=3*t1+2*t2; t4=t1+t2; t1=t3; t2=t4;} printf(\"\\n the high=%d the low=%d\\n\",t3,t4);

程序代码4.1

程序二代码如下所示:

#include \"stdio.h\" int pit1(int a) { if(a==1)

} int pit2(int b) { if(b==1)

} main() { int n,i,t3,t4; printf(\"\\n input n\"); scanf(\"%d\",&n); if(n==0) { return (1); return(pit1(b-1)+pit2(b-1)); else return(3); return(3*pit1(a-1)+2*pit2(a-1)); else

- 9

图5.11 程序二运行结果:如图5.12(程序运行时,当输入时间变量n是3时,输出高能粒子是41,低能粒子是15。)

图5.12

- 11

参考文献

[1 ]张福祥.C语言程序设计[M].辽宁大学出版社,2008.[2] 张福祥,王萌.C语言程序设计习题解答与实验实训.沈阳:辽宁大学出版社,2008. [3] 牛莉,刘远军等.计算机等级考试辅导教程[M].北京:中国铁道出版社,2008. [4]李勇帆,谢兵.大学计算机应用教程.北京:中国铁道出版社,2009. [5]田淑清.全国计算机等级考试二级教程.北京:高等教育出版社,2011. [6]杨振山,龚沛曾.大学计算机基础.北京:高等教育出版社,2006. [7]卢湘鸿.信息技术应用基础.北京:高等教育出版社,2004.

致 谢

在这次课程设计的撰写过程中,我得到了许多人的帮助。首先我要感谢我的老师在课程设计上给予我的指导、提供给我的支持和帮助,这是我能顺利完成这次报告的主要原因,更重要的是老师帮我解决了许多技术上的难题,让我能把系统做得更加完善。在此期间,我不仅学到了许多新的知识,而且也开阔了视野,提高了自己的设计能力。其次,我要感谢帮助过我的同学,他们也为我解决了不少我不太明白的设计商的难题。同时也感谢学院为我提供良好的做毕业设计的环境。最后再一次感谢所有在设计中曾经帮助过我的良师益友和同学。

推荐第10篇:C语言课程设计

C语言程序设计课程设计

设计题目:专业:计算机科学与技术班级:2010级计算机二班组长姓名:马得才【P101712944】成员姓名:孙丽欣【P101712927】

赵广峰【P101712926】

迟成凯【P101712928】

冶成意【P101712930】

2010年5月20日

题目:

指导教师:普措才仁

一、案例需求

二、案例分析

三、案例设计

四、案例实现

五、参考文献

第11篇:C语言课程设计

C语言课程设计

飞机空战小游戏

一、实验环境

运行系统 WINDOWSXP 编程工具C++6.0 地点 程序设计与仿真实验室

桌号19电脑IP地址221.12.10.218

二、实验目的和要求 实验目的:

(1)使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作算法。

(2)使学生进一步掌握程序设计、编写、调试能力。 (3)使学生了解软件开发的基本步骤和内容。

实验要求::飞机空战小游戏。 功能要求:

1)有主菜单界面,能让用户选择开始、退出、难度等级、查看用户积分功能;

2)飞机能通过A、S、D、W或上下左右键控制移动方向,使用空格键发射子弹;

3)屏幕随机出现从上到下的敌方子弹; 4)当打中敌方子弹时,积分加1;

5)当敌方子弹打正飞机时,游戏结束,并提示用户是否保存记录(记录包括用户名及积分值),保存后退回到主菜单;

6)当选择主菜单中的“查看用户积分”选项时,进入第二级菜单,用户可查看全部用户积分记录,也可仅查看积分最高者,也可根据用户输入的用户名查看;(此处要求使用到链表,用于临时存储用户积分数据);(对链表的查找操作)

7)所有用户积分信息使用文件进行永久性保存; 8)用户选择“难度等级”,可设定游戏不同难度,难度越高,出现敌方子弹数目及间隔将增加。

三、实验内容和结果

系统总体设计:编写出c语言代码,运行程序,并调试程序,最终实现游戏的功能。本程序主要包含游戏控制函数、设置是否继续游戏函数、输出函数、子弹移动函数、敌机移动函数、设置函数、菜单函数等7个主要函数,包含了不同的功能,对原来的程序作出了很大的改进,用到的主要语句有if语句,for语句、while语句、printf语句、switch语句等等,添加了颜色函数。

系统模块设计:包含游戏控制函数、设置是否继续游戏函数、输出函数、子弹移动函数、敌机移动函数、设置函数、菜单函数等7个主要函数,其中是否继续游戏函数,菜单函数主要运用了SWITCH语句和If语句,子弹移动函数,敌机移动函数通过数组内各数值的变化来完成,设置函数主要用PRINTF和SCANF语句进行各项数值的设置,游戏控制函数使用if函数,kbhit()函数,switch函数组合控制数组中飞机进行的移动和图案的变换。最后用打印数组的方式打印出数组变换。最后运用SWITCH函数进行各项菜单内容的操作。

实验的测试和结果:

四、实验中的问题及心得

通过本次试验,使我对c语言有了更深一层次的了解,对for语句、while语句、printf语句、switch语句、颜色函数等等的了解及使用更加详细了一些,明白了这些语句的用法,明确了c语言的使用环境,功能。同时我了解到了一些方法来实现一些C语言作为一个基础性编程语言是我们在以后编程中不可或缺的语言,使用率肯定会进一步增高。掌握了c语言就相当于掌握了一门技术,同时c语言相对而言简单一些,更容易理解。自己虽然对这个小游戏进行一部分的改造,但是我也感觉这只是其中的很很小的一部分,肯定会有更加强大的功能等待着我们去改善。

同时,我也发现了自己很多的不足,需要进一步加强这一方面的学习,在数据结构链表的使用上还很欠缺,无法使用链表进行数据的读取和输入,还有在两个程序的连接上还有困难,对于头文件的理解不到位,链表的结构,定义,使用指针的方式„„这些都需要提高。这些技能的欠缺导致了在 这个小游戏中无法顺利完成有关用户名和记录的一些要求。 „„

附录:程序清单

#include #include #include #include #define N 50 void run();//游戏控制函数 void continuegame();//设置是否继续游戏函数 void print(int [][N]);//输出函数

void movebul(int [][N]);//子弹移动函数 void movepla(int [][N]);//敌机移动函数 void setting(void);//设置函数 void menu();//菜单 int scr[50][N]={0},pl=9,width=15,speed=16,density=40,score=0,death=0,length=18,y=0,x=5,z=15,life=1,max=0; //全局变量:界面、我机初始位、界面宽度、敌机速度、敌机密度、得分、死亡,子弹,飞机,敌机初始图案,生命

char name[N]; char first[N]; void main() { menu(); getch(); }

void print(int a[][N])//输出函数 { int i,j; system(\"cls\"); for(i=0;i

a[i][width-1]=4;

for(j=0;j

{

if(a[i][j]==0)printf(\" \");

if((a[i][j]==1)&&(x

if((a[i][j]==2)&&(z

if((a[i][j]==3)&&(y

if(i==1&&j==width-1)printf(\"总积分:%d\",score);//显示得分

if(i==2&&j==width-1)printf(\"已经死亡了%d 次,剩余 %d 条命\",death,life-death);//右上角显示死亡次数

if(i==3&&j==width-1)printf(\"普通按键:AD控制左右飞行\");

if(i==4&&j==width-1)printf(\" W 发射子弹\"); if(i==5&&j==width-1)printf(\"特殊按键:+-号加减敌机速度\"); if(i==6&&j==width-1) printf(\" /*号单列敌机密度减小增大(均有限制)\");

if(i==7&&j==width-1) printf(\"VIP按键:X键变化飞机图案,Y键变化敌机图案\");

if(i==8&&j==width-1) printf(\"\\tZ键变化子弹图案,P键增加生命(均有限制)\");

if(i==9&&j==width-1) printf(\"注意:向下移动后按其他方向键飞机显现\");

} printf(\"\\n\"); } }

void movebul(int a[][N]) {

int i,j; for(i=0;i

{

if(i==0&&a[i][j]==2)

a[i][j]=0;

if(a[i][j]==2)

{

if(a[i-1][j]==3)//加分

{

score+=1;

printf(\"\\7\");

}

a[i][j]=0,a[i-1][j]=2;

}

} } void movepla(int a[][N]) { int i,j; for(i=length-1;i>=0;i--)//从最后一行往上是为了避免把敌机直接冲出数组。

for(j=0;j

if(i==length-1&&a[i][j]==3)

a[i][j]=0;//消除敌机,在最低层

if(a[i][j]==3)a[i][j]=0,a[i+1][j]=3;//敌机移动

}

if(a[length-2][pl]==3&&a[length-1][pl]==1)death++;//死亡 }

void continuegame()//继续游戏

{ printf(\"用户%s\",name); printf(\"你的得分是%d\\n\",score); if (score==0) printf(\"\\t\\t\\t\\t 恭喜你刷新了最低记录\\n\\a\",score); if((score>0)&&(score

printf(\"\\t\\t\\t\\t 回家再练 练吧\\n\\a\",score); if(score>19)

printf(\"\\t\\t\\t\\t 你真厉害 \\n\\a\",score); printf(\"游戏结束\\n\"); printf(\"按y键继续游戏,空格键退出游戏(y/n)?\\n\"); printf(\"\\t\\t\\t\"); switch(getch())//是否要继续游戏

{ case \'y\': case \'Y\':system(\"cls\"),death=0,score=0,life=1,x=5,y=0,z=15;menu();break; } }

void setting(void)//设置函数 { system(\"cls\");//清屏

printf(\"\\n 输入游戏界面的大小(默认3):1-10 \"); scanf(\"%d\",&width); width=(width+1)*5; printf(\"\\n 请输入敌机密度大小(默认3):1-5 \"); scanf(\"%d\",&density); density=(7-density)*10; printf(\"\\n 输入敌机的飞行速度大小(默认3):1-10 \"); scanf(\"%d\",&speed); speed=(11-speed)*2; printf(\"\\n 输入我机的生命(默认1):1-100 \"); scanf(\"%d\",&life); printf(\"\\n 输入飞机的图案(默认1):1-2 \"); scanf(\"%d\",&x); x=x+4; printf(\"\\n 输入子弹的图案(默认1):1-10 \"); scanf(\"%d\",&z); z=z+14; printf(\"\\n 输入敌机的图案(默认1):1-3 \"); scanf(\"%d\",&y); y=y-1; } void run() { int i=0,j=0,k=0,b=0; printf(\"请输入用户名:\"); scanf(\"%s\",name); printf(\"您的用户名是:%s\",name); if(getch()==27)setting(); printf(\"游戏说明:按AWSD控制我机左右飞行,空格键发射子弹\\n特殊按键:-号敌机减速,+号敌机加速\\n特殊按键:/号单列敌机密度减小,*号单列敌机密度增大\\n\"); printf(\"VIP按键:X键变化飞机图案,Y键变化敌机图案\\n\\tZ键变化子弹图案,P键增加生命\\n\"); printf(\"任意键开始游戏,esc键进入游戏设置\\n\"); printf(\"游戏时也可更改游戏设置任意键开始\\n\\n\"); system(\"color a\");//设置背景颜色

if(getch()==27)setting(); scr[length-1][pl]=1; //我方飞机初始位置

scr[0][5]=3; while(death

{ if(kbhit())

switch(getch())//控制设置按键 {

case \'a\':

case \'A\':if(pl>0)

scr[length-1][pl]=0,scr[length-1][--pl]=1;break;

case \'d\':

case \'D\':if(pl

scr[length-1][pl]=0,scr[length-1][++pl]=1;break; case \'W\':

case \'w\':if(length>10)

{

scr[length-1][pl]=0,scr[length-2][pl]=1;

length=length-1;

};break;

case \'+\':if (speed>2)

{

speed=speed-2;

}; break;

case \'-\':speed=speed+1;break; case \'*\':if(density>5)

{

density=density-5;

}; break;

case \'/\':density=density+10;break;

case \'l\':if (width

{

width=width+2;

};break;

case \'s\':if (length

{

scr[length-1][pl]=0;

length=length+1;

scr[length-1][pl]=\'\\5\';

}; break;

case \' \':scr[length-2][pl]=2;break;

case \'y\':y=(y+1)%4;break;

case \'x\':x=(x)%2+5; break;

case \'z\':if(z

{

z=z+1;

}

else z=15; break;

case \'p\':life=life+1;break; } if(++j%density==0)//控制生产敌机的速度

{

j=0;

srand(time(NULL));//产生随机数

scr[0][rand()%width]=3;

scr[rand()%3][rand()%(width+2)]=3;

scr[rand()%2][rand()%(width+1)]=3;

scr[rand()%4][rand()%(width+4)]=3;//生成随机敌方飞机

} if(++i%speed==0)//控制敌机移动速度,相对于子弹移动速度

movepla(scr);//飞机移动

movebul(scr);//子弹移动

print(scr);//绘制游戏画面

} if (score>=max) {

max=score;

for (i=0;i

{

name[i]=first[i];

} } if (score

score=score; } continuegame(); getch(); }

void menu() { printf(\"\\n1:游戏设置\\n2:游戏说明\\n3:开始游戏\\n4:查看用户信息\\n5:退出游戏\\n\");

switch(getch()) {

case \'1\': setting();menu();break;

case \'2\':printf(\"游戏说明:按AWSD控制我机左右飞行,空格键发射子弹\\n特殊按键:-号敌机减速,+号敌机加速\\n特殊按键:/号单列敌机密度减小,*号单列敌机密度增大\\n\"); printf(\"VIP按键:X键变化飞机图案,Y键变化敌机图案\\n\\tZ键变化子弹图案,P键增加生命\\n\"); printf(\" 任意键开始游戏,esc键进入游戏设置\\n\"); printf(\" 游戏时也可更改游戏设置\");menu();break;

case \'3\':run();menu();break;

case \'4\':seerecord();menu();break;

case \'5\':exit(0);break; default:menu();break; }

} seerecord() { printf(\"最高纪录为%s,%d\",first[N],max); }

第12篇:C语言课程设计黑白棋

第一章 绪论

1.1 C语言概述

C语言是国际上广泛流行且很有发展前途的计算机高级语言,不仅用来编写应用软件,也用来编写系统软件。C语言功能丰富,使用灵活,可移植性好,深受广大用户欢迎。C语言的数据类型丰富,既具有高级程序设计语言的优点,又具有低级程序设计语言的特点;既可以用来编写系统程序,又可以用来编写应用程序。(例如,著名的UNIX操作系统就是用C语言编写的)因此,C语言正在被迅速地推广和普及。

1 .2 C语言出现的历史背景

在C语言诞生以前,操作系统及其他系统软件主要是用汇编语言实现的。由于汇编语言程序设计依赖于计算机硬件,其可读性和可移植性都很差,而一般的高级语言又难以实现对计算机硬件的直接操作,因此人们需要一种兼有汇编语言和高级语言特性的语言。C语言就是在这种环境下产生的。它最早是由Dennis Richie于1973年设计并实现。它的产生同UNIX系统之间具有非常密切的联系——C语言是在UNIX系统上开发的。而无论UNIX系统本身还是其上运行的大部分程序,都是用C语言编写实现。同时,它同样适合于编写不同领域中的大多数程序。

C语言已经成为全球程序员的公共语言,并且由此产生了当前两个主流的语言C++和Java——它们都建立在C语言的语法和基本结构的基础上,而且现在世界上的许多软件都是在C语言及其衍生的各种语言的基础上开发而成。

目前,在微机上广泛使用的C语言编译系统有Turbo C、Borland C++、Microsoft Visual C++等。虽然它们的基本部分都是相同的,但还是有一些差异,本程序的设计采用Turbo C作为上机编程调试环境。

C语言特点和用途

①语言简洁、紧凑,使用方便、灵活。共有32个关键字, 1 9种控制语句。

②运算符丰富,公有34种运算符。

③数据结构丰富,数据类型有:整型、实型、字符型、数组、指针、结构体、共用体等。

④具有结构化的控制语句(如if„else、while、do„while、switch、for)

⑤语法限制不太严格,程序设计自由度大。

⑥允许直接访问物理地址,能进行位(bit)操作,可以直接对硬件操作。

⑦生成目标代码质量高,程序执行效率高。 ⑧可移植性好。 C语言的用途

C虽不擅长科学计算和管理领域,但对操作系统和系统实用程序以及对硬件进行操作方面,C有明显的优势。现在很多大型应用软件也用C编写。

C语言程序一般用小写字母,而仅在一些宏定义中,将常量名用大写字母表示,或对一些有特殊意义的变量,偶尔也用大写字母表示。C语言中对大小写字母看作两个变量。

在C语言的程序设计中,用户程序的功能快都是一些函数,而函数在定义时,可选用省略号来表示参数类型和个数的不确定性。如function(F1,„)的函数的第一个参数F1表示为某种类型的变量,而后的其它参数无论是类型还是参数个数都不确定。在c函数调用时,参数或参数的指针都被压入堆栈,并且最后一个参数最先进入堆栈,第一个参数最后进入堆栈。如果小系统模式编译,变量的指针为2字节,如果用大系统模式编译,变量的指针为4字节,如果我们求得第一个参数指针在堆栈内的地址,加上变量指针的字节数,再取相应内存的内容,即求出其它各参数指针在堆栈内的地址,从而可引用用省略号说明的参数。

2 第二章 开发环境及相关技术的介绍

2 .1开发环境介绍

TURBO C是DOS上的一个C语言系统,它也能以全屏幕方式或窗口方式运行在各种Windows环境中。TURBO C符合ANSI C标准。TURBO C的组成部分包括C语言编译系统,连接系统,ANSI C的标准函数库和一批扩充库函数等。另一重要组成部分是一个集成化程序开发环境,用户可方便地在其中编辑、编译、调试和运行自己的程序。

今天微机上的C语言系统很多,有些新系统的功能更强大。但TURBO C环境有许多特点,在基本的C程序设计课程教学中被广泛使用。本系统既简单且功能完整,开始使用需要理解的概念少,容易入门,特别适合初学者。TURBO C系统对计算机要求低,在任何微机上都能很好运行,编译加工速度快,对于做程序练习和一般的程序开发都很合适。另外,TURBO C的编程和调试环境也很完整,反映了集成化开发环境的特点。掌握了这个程序开发工具的使用方法,不但掌握了一个实用的程序开发工具,也能为进一步学习使用其他编程工具打下很好的基础

C语言对操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它解释型高级语言,有一些大型应用软件也是用C语言编写的

在C语言中,函数是一种构件(程序块),是完成程序功能的基本构件。函数允许一个程序的诸任务被分别定义和编码,使程序模块化。可以确信,一个好的函数不仅能正确工作且不会对程序的其它部分产生副作用。 C语言的特点 第一部分

1.简洁紧凑、灵活方便

C语言一共只有32个关键字9种控制语句,程序书写自由,主要用小写字母表示。它把高级语言的基本结构和语句与低级语言的实用性结合起来。 C 语言可以像汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。 2.运算符丰富

C的运算符包含的范围很广泛,共有种34个运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理。从而使C的运算类型极其丰富表达式类型多样化,灵活使用各种运算符可以实

3 现在其它高级语言中难以实现的运算。 3.数据结构丰富

C的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据类型的运算。并引入了指针概念,使程序效率更高。另外C语言具有强大的图形功能, 支持多种显示器和驱动器。且计算功能、逻辑判断功能强大。

4.C是结构式语言

结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调试。C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。

5.C语法限制不太严格,程序设计自由度大

虽然C语言也是强类型语言,但它的语法比较灵活,允许程序编写者有较大的自由度。

6.C语言允许直接访问物理地址,可以直接对硬件进行操作

因此既具有高级语言的功能,又具有低级语言的许多功能,能够像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元,可以用来写系统软件。 7.C语言程序生成代码质量高,程序执行效率高

一般只比汇编程序生成的目标代码效率低10へ20%。 8.C语言适用范围大,可移植性好

C语言有一个突出的优点就是适合于多种操作系统, 如DOS、UNIX,也适用于多种机 C源程序的结构点特

1.一个C语言源程序可以由一个或多个源文件组成。2.每个源文件可由一个或多个函数组成。

3.一个源程序不论由多少个文件组成,都有一个且只能有一个main函数,即主函数。

4.源程序中可以有预处理命令(include 命令仅为其中的一种),预处理命令通常应放在源文件或源程序的最前面。

5.每一个说明,每一个语句都必须以分号结尾。但预处理命令,函数头和花括号“}”之后不能加分号。 6.标识符,关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,也可不再加空格来间隔。

本软件主要应用了二维数组﹑Switch语句﹑do—while语句等。

4 数组:C语言可以提供构造类型的数据,他们有数组类型﹑结构体类型和共用体类型。数组是有许多数据的集合,数组中的每一个元素都属于同一个数据类型。用一个统一的数组名和下标来唯一地确定数组中的元素。

5 第三章 开发环境的关键技术

科技的飞速发展,将人类带入了信息时代, 计算机越来越贴近人的生活,速度成为人们成功的前提条件,以致于人们必须不断尝试着使用各种手段来提高自身的工作效率,其手段之一就是对键盘的充分利用和相应游戏软件的开发.智能型的游戏越来越深受广大游戏爱好者的喜欢.方便而快捷. 黑白棋的游戏是要在一个8*8的网格中进行,而数组属于构造体类型,数组是具有相同数据类型的变量序列,序列中的每个变量成为元素,数组元素由一个统一标识的数组名和顺序好“下标”来表示。顾需要在游戏中定义一个二维数从而实现游戏的走棋、落棋、判断棋盘的变化等。

游戏不同于基于C语言的其他程序(如学生成绩管理系统、教务工作管理系统、图书管理系统等)由于游戏本身的问地就在于缓解压力,所以基于C语言设计的游戏需要一个良好的游戏界面,给游戏者以轻松和愉快的感觉。TURBO C提供了70多个图形函数,这些函数包括在图形库文件graphics.LIB中,他们被定义在graphics.h中。有如此强大的图形处理能力,去设计一个良好的人机交流界面是可行的。

由于此游戏采用的是“人人对战”的模式,所以在游戏时,需要俩个游戏者轮流下棋,棋手1走棋完毕后,经过判断棋盘变化过程后棋手2走棋,游戏过程需要在俩棋手间不断进行转化。在C语言中,提供了包括if„„else,switch„„case等分支语句,综合运用这些分支语句,可以完成上述转化。

黑白棋游戏双方共需要走棋60手,每次走棋后,都需要根据相同的标准判断棋盘变化,来判断旗子颜色的变化情况。显然需要运用循环语句来简化编程的长度。C语言中提供了while \\for等循环语句可以实现上述功能。

游戏需要操作和输出显示游戏的结果,游戏的操作要由计算机的外部设备在人的操作下完成。C语言本身并不提供输入和输出语句,输入和输出的操作都是由函数来完成的,在C语言的标准库函数中提供了一些输入和输出的函数,这些函数的指针都是针对系统隐含指定的输入和输出设备的。综合运用这些输入和输出的函数可以实现上述的功能。

6 第四章 程序的总体设计与实现和使用说明

程序的总体设计

1黑白棋,又叫反棋(Reversi)、奥赛罗棋(Othello),苹果棋,翻转棋。黑白棋的棋子和围棋类似。但它的下法与围棋的很不相同。它的规则是当所下的子与自己现有的子之间夹有对方的棋子时,可以将所夹的对方棋子全部反转成自己的棋子。最后棋盘上面看自己棋子最多的一方获胜。所以,在设计程序时要考虑的关键问题就是如何实现计算机自动选择落子的最佳位置。

2 概要设计由于黑白棋程序需要跟人进行对战,自动的选择最佳的位置。因此,这就要求设计的黑白棋程序具有人工智能。实现人工智能有很多种方法,经过分析后决定采用编写估值函数的方法让计算机具有人工智能。具体就是当轮到计算机走棋时,计算机对当前棋盘局面进行估值,找出最优位置然后落子。程序还应该提供人与人对战的功能。这部分不设计到什么算法问题,完全可以通过对流程的控制来实现。通过流程控制可以实现人与人对战和人与计算机对战两种模式之间的切换。程序还应该具有保存用户下棋数据的功能。这部分功能可以通过建立并操作数据库来实现。另外为了增加程序的可玩性,所以增加了多媒体部分。准备调用WINDOWS的某些相关API来实现。 3 棋盘的表示

黑白棋的棋盘为一个8*8的正方格,如左图所示。最初黑棋和白棋各两颗子占据一个方格的对角线。

在计算机中我用一个8*8的二维数组来表示当前棋局的形势,通过搜索比较,让电脑知道当前的棋局状态,寻找合适的落子点。 4 运行环境(软、硬件环境)

(1) 硬件环境要求:配置相当于486或以上处理器;建议128MB内存( 至少64MB);建议1GB硬盘空间(至少500MB);真彩色800×600或者更高分辨率的显示器;

(2) 软件环境要求:MS Windows 98/2000/XP等中文操作系统。。 游戏的使用说明 1.规则 (1)用上下左右键来分别控制棋子的移动,移动到所定的位置后,按Enter表示下棋。棋子只能出现8*8的棋盘内,除了那些已经有了棋子的地方不能走以外,不能吃子的地方也不能下子。每个棋手下棋时,摆子的位置必须是以自己的棋子能包围住对方一个

7 或多个棋子,被包围住的对方棋子将成为自己的棋子。包围的方向可以是上下左右以及斜线8个方向,只要能连成一线即可。 (2) 当轮到某一个棋手下子,但是他没有可以包围对方棋子的位置时,他必须停步,让对方走棋,直到他可以走为止。

(3) 下子要求下在与对方棋子相邻的空位上,要求所下的棋子和原有的已方棋子夹住对方的至少一个棋子(横竖斜夹均可),然后把被夹住的子变成己方的颜色。下棋过程中,任何棋子既不会从棋盘上拿走,也不会从一个格子移到另一个格子,吃子时,不会发生连锁反应,吃进的棋子不能再夹吃其他的子。当双方都无棋可下,或者方格全部占满后,棋局结束,棋子少者输,子多的一方为胜方。

(4) ESC 退出总游戏。

第五章 总结

课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,当今计算机应用在是生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握计算机开发技术十分重要的。

我的题目是文章处理系统的设计,对于我们这些新手来说,这是很大的考验,我一千次一万次的问自己,怎么才能找到课堂所学与实际应用的最佳结合点?怎么才能让自己的程序在篇幅上简单,在使用价值上丰富?怎样让自己的业余更靠近专业?怎样让自己的计划更具有序性,而不会忙无一用?机会是老师,学校,以及无数代教育工作者给的,而能力是自己的,耐性是需要的。经过自己的琢磨,听取了师姐,师兄们的建议,还查阅了很多书籍,才做到了心中有数,才了解了C语言课程设计的真正用意——培养自学能力,养成程序编辑的好习惯。我从来不相信车到山前必有路的说法,认为那只是懒惰者自寻懒惰的借口,我要积极,要把握,要努力。

回顾起此次课程设计,至今我仍感慨颇多,的确,从从拿到题目到完成整个编程,从理论到实践,在整整半个学期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体„„通过这次课程设计之后,一定把以前所学过的知识重新温故。

这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在郭老师的辛勤指导下,终于游逆而解。同时,在郭老师的身上我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢

在课程设计过程中,我学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪,黑夜过去了,我们收获的是黎明。

9 在本次实践中,给我印象最为深刻的是在文件删除程序的编译过程中,先有我的各个子程序都已经编辑成功,那么这最后的程序就将是我成功的关键。老天不会让我太过顺利,他在这最后的时刻设置的障碍,是要考验我的能力,他要置我于死地?在这个问题的解决上,我打了退堂鼓,我不能忍受长时间的无功而反,时间正在消磨我的意志。没有了柳暗花明的一天,那么我怎么能说经受住了考验?谢谢老师的那句话,她说:人力有所不能及,然而,人的精神是不会败倒的。我鼓起勇气,到处问,到处查资料,黄天不负有心人,在一篇文章上,终于看到了我所特别要求的函数,我实现了组合是关键的理论。不得不说这是精神的胜利,是永不言败的精神让我的程序重见天日。谢谢给我指点迷津的老师。

6月11日,我们的课程设计结束了,但是它留给我的印象是不可磨灭的。无论我以后会不会涉及到C语言程序编译的研究,我想,我至少掌握了一种系统的研究方法,我们学习的目的就在于运用,我们运用这种研究方法的时候会很多,我最后要感谢课程设计,它的确教会我很多。

附录 源代码

#include \"graphics.h\" #define LEFT 0x4b00 #define RIGHT 0x4d00 #define DOWN 0x5000 #define UP 0x4800 #define ESC 0x011b #define ENTER 0x1c0d int a[8][8]={0},key,score1,score2; char playone[3],playtwo[3]; void playtoplay(void); void DrawQp(void); void SetPlayColor(int x); void MoveColor(int x,int y); int QpChange(int x,int y,int z); void DoScore(void); void PrintScore(int n); void playWin(void); void main(void) { int gd=DETECT,gr; initgraph(&gd,&gr,\"c: c\"); DrawQp(); playtoplay(); getch(); closegraph(); } void DrawQp() { int i,j; score1=score2=0; setbkcolor(BLUE); for(i=100;i

11 } setcolor(0); setfillstyle(SOLID_FILL,15); fillellipse(500,200,15,15); setfillstyle(SOLID_FILL,8); fillellipse(500,300,15,15); a[3][3]=a[4][4]=1; a[3][4]=a[4][3]=2; setfillstyle(SOLID_FILL,WHITE); fillellipse(120+3*40,120+3*40,15,15); fillellipse(120+4*40,120+4*40,15,15); setfillstyle(SOLID_FILL,8); fillellipse(120+3*40,120+4*40,15,15); fillellipse(120+4*40,120+3*40,15,15); score1=score2=2; DoScore(); } void playtoplay() { int x,y,t=1,i,j,cc=0; while(1) { x=120,y=80; while(1) { PrintScore(1); PrintScore(2); SetPlayColor(t); fillellipse(x,y,15,15); key=bioskey(0); if(key==ESC) break; else if(key==ENTER) { if(y!=80&&a[(x-120)/40][(y-120)/40]!=1 &&a[(x-120)/40][(y-120)/40]!=2)

12 { if(t%2==1) a[(x-120)/40][(y-120)/40]=1; else a[(x-120)/40][(y-120)/40]=2; if(!QpChange(x,y,t)) { a[(x-120)/40][(y-120)/40]=0; cc++; if(cc>=64-score1-score2) { MoveColor(x,y); fillellipse(x,y,15,15); break; } else continue; } DoScore(); break; } else continue; } else if(key==LEFT&&x>120) { MoveColor(x,y); fillellipse(x,y,15,15); SetPlayColor(t); x-=40; fillellipse(x,y,15,15); } else if(key==RIGHT&&x80) { MoveColor(x,y);

13 fillellipse(x,y,15,15); SetPlayColor(t); x+=40; fillellipse(x,y,15,15); } else if(key==UP&&y>120) { MoveColor(x,y); fillellipse(x,y,15,15); SetPlayColor(t); y-=40; fillellipse(x,y,15,15); } else if(key==DOWN&&y

14 if(t%2==1) setfillstyle(SOLID_FILL,15); else setfillstyle(SOLID_FILL,8); } void MoveColor(int x,int y) { if(y

15 fillellipse(120+i*40,120+kk*40,15,15); } if(kk!=j+1) yes=1; } } if(j>1) { for(k=j-1;k>=0;k--) if(a[i][k]==a[i][j]||!a[i][k]) break; if(a[i][k]!=0&&k>=0) { for(kk=j-1;kk>k&&k>=0;kk--) { a[i][kk]=a[i][j]; fillellipse(120+i*40,120+kk*40,15,15); } if(kk!=j-1) yes=1; } } if(i

16 } if(i>1) { for(k=i-1;k>=0;k--) if(a[k][j]==a[i][j]||!a[k][j]) break; if(a[k][j]!=0&&k>=0) { for(kk=i-1;kk>k&&k>=0;kk--) { a[kk][j]=a[i][j]; fillellipse(120+kk*40,120+j*40,15,15); } if(kk!=i-1) yes=1; } } if(i>1&&j=0&&kk=0&&kkk&&k>=0;ii--,jj++) { a[ii][jj]=a[i][j]; fillellipse(120+ii*40,120+jj*40,15,15); } if(ii!=i-1) yes=1; } } if(i1) { for(k=i+1,kk=j-1;k=0;k++,kk--) if(a[k][kk]==a[i][j]||!a[k][kk])

17 break; if(a[k][kk]!=0&&k=0) { for(ii=i+1,jj=j-1;ii1&&j>1) { for(k=i-1,kk=j-1;k>=0&&kk>=0;k--,kk--) if(a[k][kk]==a[i][j]||!a[k][kk]) break; if(a[k][kk]!=0&&k>=0&&kk>=0) { for(ii=i-1,jj=j-1;ii>k&&k>=0;ii--,jj--) { a[ii][jj]=a[i][j]; fillellipse(120+ii*40,120+jj*40,15,15); } if(ii!=i-1) yes=1; } } if(i

18 a[ii][jj]=a[i][j]; fillellipse(120+ii*40,120+jj*40,15,15); } if(ii!=i+1) yes=1; } } return yes; } void DoScore() { int i,j; score1=score2=0; for(i=0;i

19 sprintf(playtwo,\"%d\",score2); outtextxy(550,300,playtwo); } setcolor(0); } void playWin() { settextstyle(0,0,4); setcolor(12); if(score2>score1) outtextxy(100,50,\"black win!\"); else if(score2

第13篇:课程设计报告 C语言

课 程 报 告 课 程 名 称: 专 业 班 级 : 学 生 姓 名 : 学 号 : 程序设计实践 ****** 20104683**** 任 课 教 师 : 学 2010期 :2010-2011 学年第二学期 课程报告任务书 课程报告任务书 报告 题 目 图书信息管理系统 开发一个图书信息管理系统,图书信息包括:图书编号、书名、作者、出版社、类别、出版时间、价格等基本信息(也可以根据自己情况进行扩充,比如是否借出、库存量 等) 。使之能提供以下基本功能 基本功能 基本功能: (1)图书信息录入功能(图书信息用文件保存)--输入? (2)图书信息浏览功能--输出 主要 内容 (3)查询功能(至少一种查询方式)、排序功能(至少一种排序方式): ? ①按书名查询 ②按作者名查询 ③ 按照价钱排序 ④按出版时间排序等等 (4)图书信息的删除与修改 扩展功能:可以按照自己的程度进行扩展。比如(1)简单的权限处理 (2)报表打 功能 印功能(3)甚至根据自己情况,可以加上学生信息,并扩充为图书借阅系统。 (4) 模糊查询 (5)综合查询 (6)统计功能 比如统计处某一类别的图书信息 或 筛 选出小于指定数量库存的图书信息等等,总之,可以根据自己需求进行分析功能。

一、提交材料应包括: (1)系统源代码 (2)课程报告

二、整个设计过程具体要求 (1)需求分析 需求分析 任务 要求 要求学生对案例系统进行分析,设计出需要完成的功能,完善 各个模块的调用关系; (2)设计过程 要求学生进一步明确各模块调用关系,进一步完善模块函数细节 设计过程 (函数名、参数、返回值等) (3)实现过程 要求学生养成良好的编码习惯、完成各个模块并进行测试,最终 实现过程 完成系统整体测试; (4)总结阶段 按照要求完成系统设计和实现报告,并进行总结、答辩。 总结阶段 报告撰写情况( 报告撰写情况(30 分) 内容 规范程度 程序测试 20 分 5分 5分 系统完成情况 ( 答辩情况( 系统完成情况 30 分) 答辩情况(40 分) 完成 基本功能 扩展功能 自述情况 答辩情况 20 分 10 分 10 分 30 分 成绩 评定 总分 成绩评定教师: 成绩评定教师: 教师 1 需求分析 经过大一上学期的理论学习,在基础实验的基础上,本学期我们继续开设了 C 语言程序 设计实践课。课程要求我们对已经学习的基础实验进行整合与衔接处理,并最终形成一个系 统性质的规模较大的程序。 本次课程设计要求我们达到能独立完成一个图书管理系统,完成后要求实现的功能有对 图书信息的录入、删除、修改,浏览(即输出) 按某种方式查询(要求至少一种查询方式) , , 按某种方式排序(要求至少一种排序方式) 。当然,我们可以根据自己的能力对系统进行完善 性的拓展,例如自己加入简单的权限处理,统计功能,模糊查询等,甚至可以拓展为图书借 阅系统。 通过整个程序的开发过程,最终使我们掌握利用计算机解决实际问题的基本方法,熟悉 C 语言开发的全过程,提高综合应用 C 语言的能力、编程和调试能力,为学习计算机和通信 专业的后续课程打好专业基础。 2 概要设计 (1) 图书信息及数据格式 图书信息: 图书信息包括图书编号、图书类别、图书书名、作者、出版社、出版时间、图 书价格。 数据格式: 本系统采用单向链表来对图书信息进行各项操作。其中图书的编号为整型数 据,价格为双精度浮点型,其余的类别、书名、作者、出版社与出版时间均为字符 串类型 struct tushu_node{ int num; char leibie[20]; char name[30]; char author[20]; char pre[20]; char time[20]; double price; struct tushu_node*next; }; 一个结点的示意图如下图所示: num leibie name author pre time price next (2)程序的整体框架 主菜单 录 入 (删 除 修改) 按 不 同方 式 查询 浏览 按 不 同方 式 排序 统 计 图书 数 目 帮助 退出 创 建 删 除 修 改 编 书 价 号 名 格 价 格 出版 时间 子菜单 (3)模块划分

1、int quanxian();

2、int inputchioce();

3、void save();

4、void save1(); 核查权限的函数 显示主菜单的函数 保存链表为文件的函数 覆盖以前的信息 保存链表为文件的函数 不覆盖以前的信息 只在创建时调用

5、struct tushu_node* wjtolb();从文件中读取数据并建立图书信息的链表的函数

6、int luruxinxi(); 录入学生信息的函数 创建图书信息的函数 插入图书信息的函数

7、struct tushu_node * luruxinxi_chuangjian();

8、struct tushu_node * luruxinxi_charu();

9、struct tushu_node * luruxinxi_shanchu();

10、struct tushu_node * luruxinxi_xiugai(); 删除图书信息的函数 修改图书信息的函数

11、int liulantushu(); 浏览图书信息的函数

12、int chaxuntushu();

13、void chaxuntushu_num();

14、void chaxuntushu_name();

15、void chaxuntushu_price(); 查询图书信息的函数 按编号查询图书 按书名查询图书 按价格查询图书

16、void paixutushu();

17、struct tushu_node* paixutushu_price();

18、struct tushu_node* paixutushu_time();

19、void sfjx() ; 为图书排序的函数 为图书按价格排序的函数 为图书按出版时间排序的函数 写个函数 判断是否继续 排序中使用 20、int tongjitushu_shumu(); 统计图书数目的函数

21、void shiyongshuoming(); 使用说明的函数 3 详细设计 程序的主体设计思想是根据结构化程序设计思想分模块进行设计, 有一个主函数和多个 自定义函数构成。 主函数 对于本程序来说,主函数很简单,就是定义了一个变量 chioce 用来接受核查用户是否 有使用该管理系统的权限的函数 quanxian()函数返回的值, 若为 1 即用户获得了使用权限) ( , 则调出显示主菜单的函数进行具体操作 int { int chioce; chioce=quanxian(); 核查用户是否有使用该管理系统的权限的函数 main() if(chioce==1) { system(\"cls\"); inputchioce(); } exit(0); } 权限函数 若取得权限 则返回值为 1 用来显示主菜单的函数 核查用户权限的函数使用 do-while 语句来限制用户输入密码的次数仅为三次, 并且为了 使界面更具亲切感,会在用户输入密码错误时进行提示引起用户注意及提示剩余输入次数。 int quanxian() { int m=1,n=3,flag=0; char mima[20]; do{ printf(\"\\n\\n 你 好 , 欢 迎 使 本 图 书 信 息 管 理 系 统 ! \\n\"); printf(\"\\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\\n\"); printf(\"【现在进行权限核查】 次输入密码的机会!\\n\"); printf(\"\\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\\n if(n==2||n==1){printf(\"注意:你已输入错误%d 次 密码:\",3-n,n);} if(n==3) printf(\"剩余输入次数: %d 请输入密码:\",n); 剩余输入次数: %d \"); 请输入 \\n--------------------友情提醒:你共有 3 scanf(\"%s\",mima); //第一次输入和输错密码后再次输入显示的也卖弄不同 if(strcmp(mima,\"chenbo0916\")==0) { flag=1; return flag; } m++; n--; system(\"cls\"); }while(strcmp(mima,\"chenbo0916\")!=0&&mnum p->leibie p->name p->author p->pre p->time p->price Head 为空 Head=p Head 不 为 空 Tail->next=p 保存为文件 Save() 将链表数据保存为文件的函数 首先打开文件以可读写 (也可以只写的方式打开 区别在于是否覆盖以前的信息) 的方式, p1 作为形参来接受实参 head,只要不为空,写入 p1 后,下移一个节点 void save1(struct tushu_node* p1){ /*将链表保存为文件的函数 不覆盖前面信息 if( (fpp=fopen(\"1.txt\",\"a\"))==NULL ) { printf(\"打开文件失败!\"); exit(0); } while(p1!=NULL) { */ fprintf(fpp,\" %d %s %s %s %s %s %lf\\n\",p1->num,p1->leibie,p1->name,p1->author,p1->pre,p1->time,p1->price); p1=p1->next; } if(fclose(fpp)) { printf(\"关闭文件失败!\\n\"); exit(0); } } 从文件中读出数据并创建链表的函数 在调用从文件读取数据创建链表的函数前, 先定义 head 链表指针并赋值为空作为实参 。 打开文件后,从文件中读取一组数据赋给已经被动态分配内存的结点指针 p 第一次 head 为空时 Head P next p1 第二次以后 head head P1->next p2 P next p1 head P1->next P next p2 p1 删除函数 删除函数执行流程图及算法如下图所示: 调浏览函数浏览 全部图书方便看 需要删除那一本 输入需要删除图 书编号 numm 调用读取文件并 形成链表的函数 具体删除过程 Head Head=NULL Return Head!=NULL Head->num 相等(即删除头结点) Numm 比较 head=head->next 不相等(删除其他结点) Ptr1=head Ptr2=head->next Ptr2!=NULL (即不是链表结尾 循环结束条件) Ptr2->next=ptr1->next 重新保存 覆盖 原来文件中数据 选择是否继续操 作返回主菜单 While 循环 Ptr2->num Numm 比较 相等 不相等 Ptr1=ptr2 Ptr2=ptr1->next Save()函数 重新保存文件 修改函数 修改函数执行流程图如下: 先遍历所有图书信息 方便选择要修改编号 调用文件到链表函数 输出一个显示选择修 改具体成分的界面 输入需要修改的图书 编号 If (Head!=Null) Head->num Numm 比较 不相等 相等 选 择 具体 修 改成分 while(p!=NULL&&p->n um!=numm) { p=p->next; } 直到相等 Swith 语句 输入新的成分替 换原有图书信息 的成分 Save() 保存至文件 是 询 问 是否 继 续 否 返回主菜单 浏览遍历函数 重新定义一组变量 num、leibie、name、author、pre、time、price,将从文件中读 取一组数据后赋给这组变量并输出它们,使用 while(!feof(fp)),一直执行上述过程实现 遍历浏览全部文件中的图书信息。浏览完成后,同样有对是否继续其他操作的询问,如果选 择继续,则会返回主菜单。 int liulantushu() { int num; char leibie[10]; char name[30]; char author[20]; char pre[20]; char time[20]; double price; int x=-1; /* 浏览图书信息的函数 */ if( (fpp=fopen(\"1.txt\",\"r\"))==NULL ) { printf(\" exit(0);} else{ printf(\"\\n\\n 编号 while(!feof(fpp)){ fscanf(fpp,\"%d%s%s%s%s%s%lf\",&num,leibie,name,autho r,pre,time,&price); printf(\"%d %s %s %s %s %s %lf\\n 类别 书名 作者 出版社 出版时间 价格\\n\"); 打开文件失败 ! \"); ”,num,leibie,name,author,pre,time,price);} } if(fclose(fpp)) { printf(\"关闭文件失败!\\n\"); exit(0); } printf(\"\\n\\n 是否继续操作? 请选择(继续-1/退出-0)\"); scanf(\"%d\",&x); if(x==1) { system(\"cls\"); inputchioce();} if(x==0) { printf(\"\\n\\n 谢谢你的使用! exit (0);} if(x!=1&&x!=0) { system(\"cls\"); printf(\"选择有误,默认返回主菜单,请重新选择:\\n\"); inputchioce();} } 统计图书数目的函数 统计函数简单的实现了对图书数目的统计,其实现思路可以看做在浏览函数的基础上去 掉一些不必要的输出而是另外加上一个变量 n 用在 while 中执行一次循环就 n++一次,就能 统计出图书的数目了,不再具体叙述。由于 feof()函数本身的原理,如果每次写入一行数据 到文件中时最后有换行符号,则会出现 n 多加一问题或输出时最后一行复制,只要将 n 减一 即为图书实际上的数目。 查询函数 再见\\n\"); 查询函数算法如下图所示: found=0 p=head flag=0 输入要查询的图书 的编号/书名/价格 P P!=NULL 比较 P 中相应的部分 与要查询的是否相 等 不相等 相等 输出查询到的信息 found=1 P=p->next 如果 found 依然为 0 ,则输出“未找到某图书” 是 询问是否继续 否 返回主菜单 排序函数 排序函数算法叙述如下: 排序函数使用冒泡排序的算法,定义了 i j 两个变量来控制实现双层循环, for(i=1;inext head A B C 辅助 P3 p1 p2 比较 p1 与 p2 的排序项,如 p1 比 p2 小,上图所有指针的指针均后移一位 相反 ,若上图中 p1 比 p2 大,则变为 P3 A B C P3->next P2->next p1 p2 简单的说———始终是 p1 与 p2 比较,其中一个为前一次比较中的的大的一个, 另一个向 后移动 内循环源程序 p4=(struct tushu_node*)malloc(size); p4->next=head; p3=p4; p1=head; p2=head->next; for(j=0;jprice>p1->price) { p3=p1; p1=p2; p2=p2->next; } else { p1->next =NULL; p1->next=p2->next; p3->next=p2; p2->next =p1; p3=p2; p2=p1->next; } } head=p4->next;free(p4); 4 调试分析 程序的编写过程中调试时遇到的问题及如何解决: 问题一 界面不美观,进入一次系统只能进行一项操作的问题 ) 解决方法 通过将主菜单的显示作为一个独立的函数(inputchoice(),结合函数的嵌套调 用实现,与清屏函数(system( “cls”)一起,在每次进行完一次具体操作都有以下询问 ) printf(\"\\n\\n 是否继续操作? 请选择(继续-1/退出-0)\"); scanf(\"%d\",&x); if(x==1) { system(\"cls\"); inputchioce(); } if(x==0) { printf(\"\\n\\n 谢谢你的使用! 再见\\n\"); exit (0); } if(x!=1&&x!=0) { system(\"cls\"); printf(\"选择有误,默认返回主菜单,请重新选择:\\n\"); inputchioce(); } 实现了每次操作完成后,使只显示主菜单可继续进行其他操作 问题二 权限系统以前是输入学号后三位(int)进行验证并且只有一次输入机会,一次输入错 误就退出系统 解决方法 在权限函数中使用字符串变量(char)来作为密码,使用 do-while 语句来实现对 输入次数的控制 问题三 录入时以前的思路是想在输入的同时写入文件只有一组数据想存入文件 解决方法 将保存文件作为一个独立的函数。在创建函数中有一组另外的参数来接收用户输 入的数据,然后再调用保存函数将数据存入文件 问题四 文件的保存与读取问题 解决方法 由于系统要求结合文件的知识使用户的数据在一次输入之后即使关闭退出系统后 在次进入系统时原有数据依然能继续使用。并且在对数据进行创建、删除、修改、排序等相 关的操作之后要重新保存,所以将将链表保存到文件和从文件读取数据建立链表都重新写作 单独的函数,在进行完相关的操作后都调用 save()重新保存,在再次进行操作前就先调用 wjtolb()函数从文件中读取数据创建链表,实现了对数据更及时的保存与利用 问题五 保存数据时覆盖不覆盖原有数据的问题 解决问题 由于以前没有注意细节问题导致虽然数据被修改或是删除后保存成功,但数据不 覆盖原来的数据从而出现文件中数据重复保存的问题,解决方法很简单,只要将打开文件的 方式由可读可写(a)改为只写方式打开(w)就行 问题六 输入时无法结束输入的问题 解决方法 由于在输入时时先输入图书的编号,所以在输入时除了输入第一本图书的信息, 即在输入第一本图书之后在输入时先输入图书的编号,加上一个判断循环 while(num!=0)才 继续输入完这本图书的其他信息,即 0 可以作为输入结束标志 问题七 程序漏洞,只有第二本图书信息无法修改的问题 解决方法 程序设计思路有问题及对 do-while 语句了解不充分导致了问题。 修改函数的思路 是先让用户先输入要修改的图书编号再依次查询,先看头结点的图书编号与要修改的编号是 否相等,如果相等继续选择要修改的图书信息成分修改,如果不相等,有个循环语句来使结 点后移只带相等再选择要修改的图书信息成分修改。有问题的写法是使用了 do { p=p->next; } while(p!=NULL&&p->num!=numm) 从而导致了如果要修改的图书不是第一本而是第二本时, 先执行了后移一个结点直接到第三 个结点即无法修改第二本图书的信息。解决后是用 while 循环 while(p!=NULL&&p->num!=numm) { p=p->next; } 就不存在上述问题 问题八 要对图书的信息进行删除后修改前必须先浏览图书不然不知道要选择哪本图书进行 操作的问题 解决方法 由于上述修改与删除的操作是通过用户对图书编号的选择来完成的所以在浏览前 不知道图书对于的编号就使操作具有盲目性即对图书的信息进行删除后修改前必须先浏览图 书。解决时时让修改于删除函数中让用户输入编号前默认直接输出所有图书(遍历所有图书) 5 测试结果 编号 类别 4 2 传记 英语 书名 让世界因你而不同 四级词汇 作者 李开复 俞敏洪 出版社 北京工业出版社 群言出版社 出版时间 价格 2008.3 2008.9 28.000000 32.000000 5 3 1 6 7 8 漫画 营销 杂志 教材 教材 教材 我兔斯基你 哈佛市场营销策略 电脑爱好者 思修 大学英语 高等数学 王卯卯 宋海峰 无 罗国杰 王大伟 蒋青 动漫出版社 内蒙古出版社 cfan 杂志社 高等教育出版社 外研社 高等教育出版社 2009.3 2010.4 2010.9 2006.8 2005.1 2007.6 32.000000 28.000000 6.000000 15.50 34.9 25.9 现在给出一组测试数据来全程展示本图书管理系统的所有功能 功能一之核查用户权限: 功能一之核查用户权限: 首先进入系统,你会发现要求对用户使用权限进行核查的界面: (效果图如下) 若密码为错误密码,那么你会看到提醒“注意”的界面 上图密码正确,则仍然可以顺利进入系统见到主菜单 如下图 若三次输入错误 将无法进入系统 功能二之浏览全部图书: 功能二之浏览全部图书: 在主菜单界面选择 3 则可遍历现有全部图书信息 功能三之创建或添加图书: 功能三之创建或添加图书: 选择 1 后进入录入(删除 修改)子菜单 继续选择 1 进入创建添加图书功能 以 0 结束输入 结束后自动返回主菜单 再次选择 3(浏览)可查看添加效果(浏览时刚才上图添加的图书信 息“9 IT FLASH8 尹浩琼 电子工业出版社 2006.9 41”显示在最后一行说明程序已经实现了 添加功能) 功能四之为图书按规则排序: 功能四之为图书按规则排序: 选择 4 后进入排序子菜单进一步选择按何种规则排序(报告只演示按出版时间排序) 当选择 2—按出版时间排序 然后回车键你会看到 选 1 继续返回浏览看到图书已经按出版时间的先后排序完成 功能五之按规则查询图书: 功能五之按规则查询图书: 同排序一样你可以在子菜单选择按何种方式查询(报告只演示按书名查询) 选择按书名查询后你可以输入书名 查询图书《当代大学生》的结果是“没有找到这本书” 选择 1 继续按书名查找其他图书 查找到图书《让世界因你而不同》时,这本图书的信息将被全部输出,如图: 功能六之修改已有图书信息: 功能六之修改已有图书信息: 从录入子菜单 1 进入后选择 3 可以进入修改功能 方便你选择要修改哪本图书 首先你会看到目前文件中所有图书的信息 上图选择了修改编号为 1 的图书 现在编号为 1 的图书的信息单独显示出来 提示界面选择修改图书 1 的哪一项成分 你可以再次根据 我们看到图书 1 的作者为“无” 决定将它改为“陈波” (如下图) 完成后可以利用浏览函数同样可以查看到修改后的效果 修改成功 功能七之按编号删除某本图书: 功能七之按编号删除某本图书: 选择要删除图书的编号前你也会看到目前所有图书的信息 现在选择删除编号为 8 的图书 浏览看到编号为 8 的图书已被成功删除 功能八之简单的统计功能(统计图书总数目) 功能八之简单的统计功能(统计图书总数目) : 主菜单中选择 5 即可统计出图书总数目(上图看出还剩余编号为

1、

2、

3、

4、

5、

6、

7、9) 八本图书 i 统计正确 现在基本功能演示完毕 选择 0 退出系统 为了完善 系统也设计了一个帮助功能对系统的使用方法做了简单的介绍 6 课程心得总结 经历了几个星期的课程设计, 从设计前期的不知如何下手到开始设计时的各种错误的困 扰再到一个个的攻破各个问题,最后到对程序的进一步完善与课程报告的撰写。这一段时间 我们由被程序困扰到几乎崩溃到最后成就感的油然而生;从一整天的坐在电脑屏幕面前到现 在的带着喜悦一遍一遍运行着程序;一遍遍的互相探讨解决大家遇到的问题到越来越发现编 程的有意思,我到现在真的感觉认真自己做完这样一个系统收获颇大: (1) 对结构化程序设计与函数的嵌套调用有了更清晰具体的认识 (2) 对链表的操作更加熟练, 更清晰的认识到链表与其他我们前面学习的数据类型 (如 结构体)的区别与联系,及使用方法上的异同 (3) 明确认识到链表的循环操作要注意到的是前一部分对某某进行操作处理,而后要 分析好对于如何实现对某某重新赋值等变化来实现继续循环 (4) 引入了文件知识可以对电脑硬盘上的数据操作,改变了对 C 语言的狭义认识,认 识 到 C 语言实际上还可以实现更复杂丰富的功能来利用开发的软件来进一步实现 对现实中的问题的解决 (5) 学习到C语言的学习一定不不能忽视一个很小很小的细节,因为完全会导致不同 的结果 (6) 对如何用C语言来完成一个较大的系统的整体思路有清晰的认识

第14篇:C语言课程设计程序

#include #include #include struct student { int num; char name[15];

//定义学生结构体,st数组。

int score[5]; float jqave; int rank; }st[27];

struct kecheng { int num; char kcname[20];

//定义课程结构体,course数组. float xuefen; float biaozhuncha; int youxiu; int lianghao; int zhongdeng; int jige; int bujige;

}course[5];

void readdata1() {

int i,j;

char str1[100];

FILE *f1;

f1=fopen(\"c:\\xinji110213.txt\",\"r\");

fgets(str1,100,f1); // printf(\"%-s\",str1);

for(i=0;i

{

fscanf(f1,\"%d%s\",&st[i].num,st[i].name);

// printf(\"%-4d%-10s\",st[i].num,st[i].name);

for(j=0;j

{

fscanf(f1,\"%d\",&st[i].score[j]); // printf(\"%-9d\",st[i].score[j]); }

// printf(\"\\n\"); }

fclose(f1); }

void readdata2() {

int k;

char str2[100];

FILE *f2;

f2=fopen(\"c:\\xj02kc.txt\",\"r\");

fgets(str2,100,f2); // puts(str2);

for(k=0;k

{

fscanf(f2,\"%d%s%f\",&course[k].num,course[k].kcname,&course[k].xuefen);

// printf(\"%-8d%-10s%2.1f\\n\",course[k].num,course[k].kcname,course[k].xuefen);

}

fclose(f2); } void jqave() { int i,j; float s=0,sum=0; for(i=0;i

{

for(j=0;j

{

s+=course[j].xuefen;

sum+=st[i].score[j]*course[j].xuefen ;

}

st[i].jqave =sum/s;

} }

void ranking()

{ int i,j;

for(i=0;i

st[i].rank=1;

for(j=0;j

if(st[i].jqave

st[i].rank=st[i].rank+1; } }

void paiminghoudechengji() { int i,j; FILE *fp; fp=fopen(\"c:\\MC110213.txt\",\"w\"); printf(\" 名次 学号

姓名

数学分析

高等代数

C语言

大学物理

大学艺术

加权平均分 \\n\"); fprintf(fp,\" 名次 学号

姓名

数学分析

高等代数

C语言

大学物理

大学艺术

加权平均分 \\n\");

for(i=0;i

{

printf(\"%3d%5d%8s\",st[i].rank,st[i].num,st[i].name);

fprintf(fp,\"%3d%5d%8s\",st[i].rank,st[i].num,st[i].name);

for(j=0;j

{

printf(\"%10d\",st[i].score[j]);

fprintf(fp,\"%10d\",st[i].score[j]);

}

printf(\"%12.2f\\n\",st[i].jqave);

fprintf(fp,\"%12.2f\\n\",st[i].jqave); } fclose(fp); }

void xiechengji() { int j; FILE *fp; fp=fopen(\"c:\\xj1110213.txt\",\"w\"); fprintf(fp,\" 编号

课程名称

课程学分

标准差

优秀

良好

中等

及格

不及格

\\n\"); printf(\" 编号

课程名称

课程学分

标准差

优秀

良好

中等

及格

不及格

\\n\"); for(j=0;j

{

printf(\"%3d%15s%10.2f\",course[j].num,course[j].kcname,course[j].xuefen); fprintf(fp,\"%3d%15s%10.2f\",course[j].num,course[j].kcname,course[j].xuefen);

printf(\"%10.1f%8d%8d%8d%8d%6d\\n\",course[j].biaozhuncha,course[j].youxiu,course[j].lianghao,course[j].zhongdeng,course[j].jige,course[j].bujige);

fprintf(fp,\"%10.1f%8d%8d%8d%8d%6d\\n\",course[j].biaozhuncha,course[j].youxiu,course[j].lianghao,course[j].zhongdeng,course[j].jige,course[j].bujige);

} fclose(fp); }

void pingjunfen() { int i,j;

for(j=0;j

{

float zongfen=0,pingjunfen=0;

for(i=0;i

zongfen+=st[i].score[j];

pingjunfen=zongfen/27;

} }

void biaozhuncha() {

int i,j;

for(j=0;j

float zongfen=0,pingjunfen=0,x=0;

for(i=0;i

zongfen+=st[i].score[j];

pingjunfen=zongfen/27;

for(i=0;i

x+=(st[i].score[j]-pingjunfen)*(st[i].score[j]-pingjunfen);

course[j].biaozhuncha=(float)sqrt((x/27));

} }

void count() {

int i,j;

for(i=0;i

{

course[i].youxiu=0,course[i].lianghao=0,course[i].zhongdeng=0,course[i].jige=0,course[i].bujige=0;

for(j=0;j

{

if(st[j].score[i]

course[i].bujige++;

else if(st[j].score[i]

course[i].jige++;

else if(st[j].score[i]

course[i].zhongdeng++;

else if(st[j].score[i]

course[i].lianghao++;

else

course[i].youxiu++;

} } }

void chengjitiao() {

int i,j; FILE *fp; fp=fopen(\"c:\\cjt110213.txt\",\"w\"); do

{ printf(\"请输入你要查询的编号

退出请按零\");

scanf(\"%d\",&i);

fprintf(fp,\" 编号

姓名

数学分析

高等代数

C语言

大学物理

大学艺术

加权平均分

名次\\n\"); printf(\" 编号

姓名

数学分析

高等代数

C语言

大学物理

大学艺术

加权平均分

名次\\n\"); if(i>=0&&i

printf(\"%3d%10s\",st[i-1].num,st[i-1].name); for(j=0;j

printf(\"%9d\",st[i-1].score[j]);

fprintf(fp,\"%9d\",st[i-1].score[j]); } printf(\"%12.2f%8d\\n\",st[i-1].jqave,st[i-1].rank); fprintf(fp,\"%12.2f%8d\\n\",st[i-1].jqave,st[i-1].rank); fclose(fp); } while(i>0&&i

}

void bujigexueshengmingdan() {

int i,j;

printf(\"不及格学生名单如下:\\n\"); printf(\" 学号

姓名

不及格课程

分数

\\n\"); for(i=0;i

for(j=0;j

if(st[i].score[j]

{printf(\"%3d%12s\",st[i].num,st[i].name);

printf(\"%15s%8d\\n\",course[j].kcname,st[i].score[j]);

// printf(\"

平均分\");

// printf(\"%10.2f

名次%8d\\n\",st[i].jqave,st[i].rank);

}

} }

void youdeng() { int i,k; printf(\" 优等生名单如下\\n\"); printf(\"编号

姓名

数学分析

高等代数

C语言 大学物理 大学艺术 加权平均分

名次\\n\"); for(i=0;i

if(st[i].jqave>=90||st[i].rank

{

printf(\"%2d%10s\",st[i].num,st[i].name);

for(k=0;k

printf(\"%9d\",st[i].score[k]);

printf(\"%10.2f%8d\\n\",st[i].jqave,st[i].rank);

}

else ;

} }

void caidan()

{ loop: printf(\"

&&简易教学管理系统&&\\n\");

printf(\"pre 1 for

排名后的成绩表

!\\n\");

printf(\"pre 2 for

各科成绩情况! \\n\");

printf(\"pre 3 for

成绩条!\\n\");

printf(\"pre 4 for

不及格学生名单!\\n\");

printf(\"pre 5 for

优等生名单!\\n\");

printf(\"pre 0 for

退出\\n\");

int t;

scanf(\"%d\",&t);

switch(t)

{

case 1:

paiminghoudechengji();break;

case 2:

xiechengji();break;

case 3:

chengjitiao();break;

case 4:

bujigexueshengmingdan();break;

case 5:

youdeng();break;

case 0:

exit(0);

}

goto loop;

}

void main() {

readdata1();

readdata2();

jqave();

ranking();

pingjunfen();

biaozhuncha(); count();

caidan(); }

第15篇:C语言课程设计选题

C语言课程设计选题

一、《学生成绩管理系统》

1、写一个“学生成绩管理”程序,要求程序如下功能:

(1) 成绩录入,(2)成绩修改(按学号修改),(3)成绩查询(至少提供按学号、按姓名、按班级、按课程等4种查询方式)(4)统计汇总(总分、平均分、最高分、最低分等)

2、一条学生的成绩记录结构如下:

学号(主键,无重复,数据类型可用长整型,编码位数及含义自定) 姓名(字符型数据,长度自定) 班级(整型数据,长度自定)

课程成绩(包括至少4门课程成绩,课程名自定,每门课程数据类型为实型数据,长度5位,小数1位)

3、学生成绩以文件形式存放

要求用链表实现数据的输入、查询、修改和删除操作。 4.作业提交方式:

(1)设计报告:在程序运行界面突出显示设计者的班级、学号和姓名。 内容包括:设计思路、功能模块划分、系统结构图、程序清单。 设计报告一律用A4纸打印,封面要统一,装订线在左侧,双面打印。

(2)光盘:每个班统一制作一张光盘,每人一个文件夹,命名为:学号和姓名。

光盘内含:源程序文件;可执行程序文件;测试用例;课程设计报告WORD文档。

二、《工资管理系统》

三、《图书管理系统》

1、主要的数据表

图书基本信息表,借书卡信息表,借阅信息表,图书分类信息表,代码表等.

2、主要功能模块

图书基本情况的录入,修改,删除等基本操作.办理借书卡模块.实现借书功能.实现还书功能.

1 能方便的对图书进行查询.对超期的情况能自动给出提示信息.具有数据备份和数据恢复功能.

3、设计要求

图书编号可参考国家统一的图书编码方法,再完成基本功能模块的情况下,尽量使系统能具有通用性.

四、《仓库管理系统》

五、《票务管理系统》

六、《通讯录管理系统》等等„„

作业要求和提交方式: 同题一。

七、《学生学籍管理系统》

1、主要的数据表

学生基本情况数据表,学生成绩数据表,课程表,代码表等.

2、主要功能模块

实现学生基本情况的录入,修改,删除等基本操作.对学生基本信息提供灵活的查询方式.完成一个班级的学期选课功能.实现学生成绩的录入,修改,删除等基本操作.能方便的对学生的每个学期成绩进行查询.具有成绩统计,排名等功能.具有留级,休学等特殊情况的处理功能.能输出常用的各种报表.具有数据备份和数据恢复功能.

3、设计要求

学生成绩表的设计,要考虑到不同年级的教学计划的变化情况.对于新生班级,应该首先进行基本情况录入,选课,然后才能进行成绩录入.

2 题

八、《地铁站售票机售票过程的模拟》

1. 本题内容为:用C语言编写一个模拟广州市地铁一号线某车站自动售票机售单程票的过程的程序。要求可以选择输入起点站。

2. 要求按“选到达站”→“投币“→“出票”的过程准确无误地完成一次购票操作。

选到达站:用显示菜单方式显示各车站名,然后按相应的车站编号选择;

投币:按到达站的票价,可用按下一次空格键代表投入一枚一元硬币。(不要直接按数字键);

出票:用给出文字信息表示出票操作(包括退还多投的硬币信息)。

3. 要求能对乘客购票步骤给予提示,对错误操作给予提醒。(如在规定的时间快到时未能投入足够的币额则显示催促信息,而规定的时间到后未能投入足够的币额者则取消本次购票操作并退还已投款项)。

4. 操作简便、可靠性好(不能遇误操作就出现退出运行程序或死机)。 5. 作业提交方式:同题一。

3 题

九、《银行储蓄管理系统》

1、主要的数据表

定期存款单,活期存款帐,存款类别代码表等.

2、功能模块

实现储户开户登记.办理定期存款帐.办理定期取款手续.办理活期存款帐,办理活期取款手续.实现利息计算.输出明细表.具有数据备份和数据恢复功能.

3、设计要求

要进行实际调研,系统功能在实现时参照实际的储蓄系统的功能.同时要考虑银行系统数据的安全与保密工作.数据要有加密功能.

十、《设备管理系统》

1、主要数据表

设备明细帐表,设备使用单位代码表,国家标准设备分类表等.

2、功能模块

实现设备的录入,删除,修改等基本操作.实现国家标准设备代码的维护.能够对设备进行方便的检索.实现设备折旧计算.能够输出设备分类明细表.具有数据备份和数据恢复功能.

3、设计要求

具体设备编码参考国家统一编码方法,功能实现也要考虑通用性.

题十

一、《医院药品进销存管理系统》

1、主要的数据表

药品分类代码表,药品库存表,供货商信息表,采购信息表等.

2、功能模块

4 新药品的入库.过期药品的出库登记,处理记录.药品库存检索.供货商信息检索.药品采购记录管理.药品用药说明信息管理.输出相应的数据报表.具有数据备份和数据恢复功能.

3、设计要求

具体项目内容去医院进行调研,药品编码也应参考国家统一编码方法.

题十

二、《英语学习助手系统》

1、主要的数据表

英语分级单词表,常用单词例句表,短文分级表等.

2、功能模块

实现英语单词的录入,修改,删除等基本操作.实现常用英语单词例句的录入,修改,删除等基本操作.实现英语单词检索,翻译等.常用英语单词例句检索.根据难度随机生成一份单词测试题目.能够检索出短文极其翻译对照表.具有数据备份和数据恢复功能.

3、设计要求

系统要考虑实用性,尽量实现英汉互译.英语单词和短语可以考虑加上声音.

题十

三、《大学生就业咨询系统》

1、主要数据表

用人单位基本信息表,专业信息表,地区代码表等

2、功能模块

对用人单位的基本信息进行录入,修改,删除等.实现毕业生专业信息的维护.定时发布用人单位的毕业生需求信息.方便的实现对人才需求信息的检索.对用人单位的级别能够自动进行变更.

5 能够对历年的毕业需求信息进行统计,分析.具有数据备份和数据恢复功能.

3、设计要求

方便毕业生进行就业信息检索,可考虑将就业信息在网上进行发布.

题十

四、《教务辅助管理系统》

1、主要的数据表

教师基本信息表,课程表,教室资源表等

2、功能模块

对上课教师基本信息进行管理.对全院开设的课程进行管理.录入教师基本上课信息.实现自动排课功能.计算工作量 能够进行各种数据统计.能够输出相应的报表.具有数据备份和数据恢复功能.

3、设计要求

软件功能主要考虑实用,具体功能模块一定要先进行调研.

如果有下列情况,则视情节严重程度,成绩下降若干档次,直至不及格:  光盘文件含有病毒或者内容不能正确读出;  抄袭、复制别人程序或文档;  未能按时提交实验报告和光盘。

本学期第X周要到机房演示运行程序。

第16篇:C语言课程设计任务书

《C语言程序设计》课程设计

任务书及指导书

自动化学院 2011年

C语言课程设计任务书及指导书1 题目:学院教学信息管理系统

功能:学院教学信息管理系统,每一条记录包括教师的职工号、姓名、职称、性别、3门讲授课程的名称,教学效果综合评分。系统要求实现以下功能:

1、输入:输入每一位教师记录,将其信息写入文件中。

2、显示:显示每位教师记录。

3、排序:按职工号或教学效果综合评分进行排序,并显示。

4、查找:完成按姓名或课程查找教师的相关记录,并显示。

5、保存:将相关数据写入磁盘文件,便于存、取操作。分步实施:

1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数。

2、完成信息的录入和显示(即通过编程创建文件,输入教师信息并可将文件内容显示出来)

3、完成排序功能。

4、完成查找功能(可按职工号、姓名、讲授课程进行查找) 要求:

1、用C语言实现程序设计;

2、利用结构体来实现教师信息的处理;

3、系统的各个功能要求用函数实现;

4、界面友好(良好的人机交互),程序必须有注释。课程设计实验报告要求:

1、预习报告:仔细分析客户需求、进行模块划分、设计每个模块的算法和数据结构。

2、实验总结报告:按照模板的格式。(任务书和报告模板在http://3e.xaut.edu.cn/c下载)。

C语言课程设计任务书及指导书2 题目:酒店房间登记与计费管理系统

功能:

1、屏幕上出现一个界面,让操作员能够方便的选择所需要进行的操作,包括登记入住、查询房间的入住情况、查询当前费用、结账退房等操作。

登记入住的信息主要有:客人姓名、房间号、入住时间、计费方式(按天或小时)、单价、押金

房间信息:房间号、是否有人入住、房间标准、每天单价、小时单价

2、对不同标准的房间实施不同的收费标准,也可以按天收费或按小时收费,可根据顾客需要在登记的入住的时候进行选择。

3、在结账退房时,根据入住的时间,计费方式和房间单价计算出总费用。

4、保存:将相关数据写入磁盘文件,便于存、取操作。分步实施:

1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;

2、完成最低要求:建立房间列表,完成登记入住、查询房间入住情况等功能。

3、进一步要求:完成计费和费用查询功能;每次登录时读取保存在磁盘文件中的入住情况。 要求:

1、用C语言实现系统;

2、系统的各个功能模块要求用函数实现;

3、界面友好(良好的人机交互),程序加必要的注释。课程设计实验报告要求:

1、预习报告:仔细分析客户需求、进行模块划分、设计每个模块的算法和数据结构。

2、实验总结报告:按照模板的格式。(任务书和报告模板在http://3e.xaut.edu.cn/c下载)。 C语言课程设计任务书及指导书3 题目:学生成绩管理系统

功能:学生成绩管理系统,每个学生信息为一个记录,包括学号,姓名,性别,3门课程成绩。

系统要求实现以下功能:

1、信息录入:录入成绩学生信息(包括学生学号、姓名、性别、3门课程的成绩等);

2、信息查询:可以按照姓名或学号查询学生各门课程的成绩,并显示。

3、排序:按平均成绩或各门课程成绩按由高到低进行排序,并显示。

4、信息删除与修改——输入学号,可删除或修改该学生的成绩信息。

5、保存:将相关数据写入磁盘文件,便于存、取操作。分步实施:

1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数。

2、完成信息的录入和显示(即通过编程创建文件,输入学生信息并可将文件内容显示出来)

3、完成上述信息查询、排序、信息删除与修改功能。

要求:

1、用C语言实现程序设计;

2、利用结构体数组实现学生信息的数据结构设计;

3、系统的各个功能模块要求用函数的形式实现;

4、界面友好(良好的人机交互),程序要有必要的注释。课程设计实验报告要求:

1、预习报告:仔细分析客户需求、进行模块划分、设计每个模块的算法和数据结构。

2、实验总结报告:按照模板的格式。(任务书和报告模板在http://3e.xaut.edu.cn/c下载)。

C语言课程设计任务书及指导书4 题目:职工档案管理系统设计

功能:职工档案管理系统设计,每个职工信息是一条记录,包括编号,姓名,性别,出生年月,所在部门,职称,工资级别、电话等。系统可实现以下功能:

1、输入功能:输入每一位职工的信息并将信息存入文件中。

2、显示功能:完成全部职工记录的显示。

3、查找功能:完成按编号或姓名查找职工的相关信息,并显示。

4、保存:将相关数据写入磁盘文件,便于存、取操作。分步实施:

1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数。

2、完成信息的录入和显示(即通过编程创建文件,输入职工信息并可将文件内容显示出来)

3、完成上述查找功能

4、完成修改功能,即输入编号,可修改该职工的信息

5、进一步要求,在使用修改功能时要求输入密码,密码正确才能修改信息否则不行。

要求:

1、用C语言实现程序设计;

2、利用结构体进行职工信息的处理;

3、系统的各个功能模块要求用函数的形式实现;

4、界面友好(良好的人机交互),程序必须加注释。课程设计实验报告要求:

1、预习报告:仔细分析客户需求、进行模块划分、设计每个模块的算法和数据结构。

2、实验总结报告:按照模板的格式。(任务书和报告模板在http://3e.xaut.edu.cn/c下载)。 C语言课程设计任务书及指导书5 题目:学生管理系统设计

功能:学生管理系统设计,每个学生信息作为一条记录,包括姓名、学号、性别、出生年月、专业、班级、家庭地址、宿舍号码等。 系统要求实现以下功能:

1、输入功能:录入学生信息(包括学生学号、姓名、性别、出生年月、专业等);

2、显示功能:完成学生记录的显示。

3、查找功能:完成按学号或姓名查找学生的相关记录,并显示。

4、保存:将相关数据写入磁盘文件,便于存、取操作。分步实施:

1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数。

2、完成信息的录入和显示(即通过编程创建文件,输入学生信息并可将文件内容显示出来)

3、完成修改功能,即输入学号,可修改该学生的信息

4、进一步要求,在使用修改功能时要求输入密码,密码正确才能修改信息否则不行。要求:

1、用C语言实现程序设计;

2、利用结构体数组实现学生信息的数据结构设计;

3、系统的各个功能模块要求用函数的形式实现;

4、界面友好(良好的人机交互),程序要有注释。课程设计实验报告要求:

1、预习报告:仔细分析客户需求、进行模块划分、设计每个模块的算法和数据结构。

2、实验总结报告:按照模板的格式。(任务书和报告模板在http://3e.xaut.edu.cn/c下载)。

C语言课程设计任务书及指导书6 题目:银行存取款管理设计

功能:

1、能够输入和查询客户存款取款记录。在客户文件中,每个客户信息是一条记录,包括编号、客户姓名、支取密码、客户地址、客户电话、账户总金额;在存取款文件中,每次存取款是一条记录,包括编号、日期、类别、存取数目、经办人。类别分为取款和存款两种。本系统能够输入客户存款或取款记录;根据客户姓名查询存款和取款记录。

2、保存:将相关数据写入磁盘文件,便于存、取操作。分步实施:

1、初步完成总体设计,搭好框架,确定人机对话界面,确定函数个数;

2、完成信息的录入(即通过编程创建文件,输入客户信息并可将文件内容显示出来)

3、完成存取款功能(即通过编程创建文件,用来记录存取款信息并可将文件内容显示出来)

4、完成修改功能,输入客户编号可以修改该客户的信息

5、进一步要求:完成客户姓名查询存款和取款记录,并可显示帐户余额。要求:

1、用C语言实现系统;

2、利用结构体进行相关信息处理;

3、系统的各个功能模块要求用函数的形式实现;

4、界面友好(良好的人机交互),程序要有注释。课程设计实验报告要求:

1、预习报告:仔细分析客户需求、进行模块划分、设计每个模块的算法和数据结构。

2、实验总结报告:按照模板的格式。(任务书和报告模板在http://3e.xaut.edu.cn/c下载)。 C语言课程设计任务书及指导书7 题目:院职工工资管理系统设计

功能:

1、院职工工资管理系统应包含职工的全部信息。每个职工信息是一条记录,包括编号、姓名、性别、出生年月、年龄、婚姻状况、家庭住址、职称、工资级别情况等。本系统重点进行工资管理,系统登陆后可计算职工工资总额和平均工资,可按工资进行排序,并能够找出工资级别相同的职工名单。

2、保存:将相关数据写入磁盘文件,便于存、取操作。分步实施:

1、初步完成总体设计,搭好框架,确定人机对话界面,确定函数个数;

2、完成信息的录入(即通过编程创建文件,输入职工信息并可将文件内容显示出来)

3、计算职工工资总额和平均工资,可按工资进行排序,并能够找出工资级别相同的职工名单。要求:

1、用C语言实现程序设计;

2、利用结构体进行相关信息处理;

3、系统的各个功能模块要求用函数的形式实现;

4、界面友好(良好的人机交互),程序要有注释。课程设计实验报告要求:

1、预习报告:仔细分析客户需求、进行模块划分、设计每个模块的算法和数据结构。

2、实验总结报告:按照模板的格式。(任务书和报告模板在http://3e.xaut.edu.cn/c下载)。

C语言课程设计任务书及指导书8 题目:通讯录管理系统

功能:录入联系人信息(包括姓名、电话号码、地址、备注等);通讯录管理系统要求实现以下功能:

1、输入每一位联系人记录,将其信息存入文件中。

2、查询所有联系人的信息,并按可选的自定义规则进行排序;

3、记录修改,将修改的记录信息保存于文件中。

4、保存:将相关数据写入磁盘文件,便于存、取操作。分步实施:

1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数。

2、完成信息的录入和显示(即通过编程创建文件,输入学生信息并可将文件内容显示出来)

3、完成查询功能(可按姓名、电话号码等进行查询)

4、完成信息删除与修改功能,输入联系人姓名后可删除或修改该条信息。

5、进一步要求,在使用修改功能时要求输入密码,密码正确才能修改信息否则不行。要求:

1、用C语言实现程序设计;

2、利用结构体进行相关信息处理;

3、系统的各个功能模块要求用函数的形式实现;

4、界面友好(良好的人机交互),程序要有注释。课程设计实验报告要求:

1、预习报告:仔细分析客户需求、进行模块划分、设计每个模块的算法和数据结构。

2、实验总结报告:按照模板的格式。(任务书和报告模板在http://3e.xaut.edu.cn/c下载)。

C语言课程设计任务书及指导书9

题目:计算机辅助教学(CAI)软件开发:教小学生学算术。

功能:

1、可做个位数,十位数的加,减,乘和除,减法不能得负数,除法要除尽,屏幕上随机出现两个数,提示小学生给出答案,答错了要提示重新输入,直到答对为止。要统计给分,且累计,够一定分数后可进级,即从个位进到十位。同样,也可降级。

(rand( ),#include)

2、保存:将相关数据写入磁盘文件,便于存、取操作。分步实施:

1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;

2、完成基本要求:能进行个位数的加法和减法,并有统计晋级功能,即一次答对的成功率为

90%上后可晋级,继续进行十位数的加减运算;

3、进一步要求:将当前晋级等级保存在磁盘文件,学生下次按这个等级开始做题。要求:

1、用C语言实现程序设计;

2、系统的各个功能模块要求用函数的形式实现;

3、界面友好(良好的人机交互),程序要有注释。课程设计实验报告要求:

1、预习报告:仔细分析客户需求、进行模块划分、设计每个模块的算法和数据结构。

2、实验总结报告:按照模板的格式。(任务书和报告模板在http://3e.xaut.edu.cn/c下载)。

C语言课程设计任务书及指导书10 题目:学生考勤系统设计

功能:

1、学生考勤系统应包含各班学生的全部信息。每个学生是一条记录,包括姓名、性别、学号、日期、节次、出勤情况等。本系统可模拟考勤过程,记录考勤结果,并能够在课程结束后按照设定的考勤评分标准自动给出每个学生的考勤分数。

2、保存:将相关数据写入磁盘文件,便于存、取操作。分步实施:

1、初步完成总体设计,搭好框架,确定人机对话界面,确定函数个数;

2、完成考勤录入功能(即通过编程创建文件,输入学生信息并可将文件内容显示出来)

3、完成查询功能(可以按照学号或姓名进行查询)

4、完成修改功能,输入学号、日期、节次信息后可修改该条信息的内容。

4、进一步要求:自动给出每个学生的考勤分数 要求:

1、用C语言实现程序设计;

2、利用结构体进行相关信息处理;

3、系统的各个功能模块要求用函数的形式实现;

4、界面友好(良好的人机交互),程序要有注释。课程设计实验报告要求:

1、预习报告:仔细分析客户需求、进行模块划分、设计每个模块的算法和数据结构。

2、实验总结报告:按照模板的格式。(任务书和报告模板在http://3e.xaut.edu.cn/c下载)。

C语言课程设计任务书及指导书11 题目:学生选修课程系统设计

功能:

1、假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息。试设计一选修课程系统。

2、保存:将相关数据写入磁盘文件,便于存、取操作。分步实施:

1、初步完成总体设计,搭好框架,确定人机对话界面,确定函数个数;

2、完成课程信息的录入和显示(即通过编程创建文件,输入课程信息并可将文件内容显示出来)

3、完成查询功能(可以按照课程编号、课程名称、课程性质等进行查询)

4、完成修改功能输入课程编号后可以修改该课程信息。

5、进一步要求:实现学生选修课程功能

要求:

1、用C语言实现程序设计;

2、利用结构体进行相关信息处理;

3、系统的各个功能模块要求用函数的形式实现;

4、界面友好(良好的人机交互),程序要有注释。

课程设计实验报告要求:

1、预习报告:仔细分析客户需求、进行模块划分、设计每个模块的算法和数据结构。

2、实验总结报告:按照模板的格式。(任务书和报告模板在http://3e.xaut.edu.cn/c下载)。

C语言课程设计任务书及指导书12 题目:商品订购系统设计。

功能:

1、屏幕上出现一个界面,让顾客或者输入商品名称,或者输入商品型号,或者给出商品选择列表供用户选择让用户输入所选商品编号,如查到所选商品,则列出商品编号、商品名称、商品型号、商品价格、商品产地、库存数量和已订购数量;然后给出选购流程:所选商品编号—列出对应商品的信息—要求顾客输入邮寄地址信息—确认订购,是否继续选购其它商品,列出所有选订商品,再次确认订购。建立两个文件,分别存放商品信息与订购信息。

2、保存:将相关数据写入磁盘文件,便于存、取操作。

分步实施:

1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;

2、完成最低要求:建立一个小系统,包括10种产品能供顾客选择。

3、进一步要求:完成全部功能的系统。要求:

1、用C语言实现程序设计;

2、利用结构体进行相关信息处理;

3、系统的各个功能模块要求用函数的形式实现;

4、界面友好(良好的人机交互),程序要有注释。课程设计实验报告要求:

1、预习报告:仔细分析客户需求、进行模块划分、设计每个模块的算法和数据结构。

2、实验总结报告:按照模板的格式。(任务书和报告模板在http://3e.xaut.edu.cn/c下载)。 C语言课程设计任务书及指导书13 题目:设备管理系统设计

功能:

1、设备管理系统应包含各种设备的全部信息,每台设备信息为一条记录,包括设备号、设备名称、领用人、所属部门、数量、购买时间、价格等。能够显示和统计各种设备的信息。

2、保存:将相关数据写入磁盘文件,便于存、取操作。

分步实施:

1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;

2、完成信息的录入和显示(即通过编程创建文件,输入设备信息并可将文件内容显示出来)

2、能对文件进行追加、修改、删除,能统计所有设备的总价值。

3、进一步要求:完成设备按种类、按所属部门进行统计。

要求:

1、用C语言实现程序设计;

2、利用结构体进行相关信息处理;

3、系统的各个功能模块要求用函数的形式实现;

4、界面友好(良好的人机交互),程序要有注释。

课程设计实验报告要求:

1、预习报告:仔细分析客户需求、进行模块划分、设计每个模块的算法和数据结构。

2、实验总结报告:按照模板的格式。(任务书和报告模板在http://3e.xaut.edu.cn/c下载)。

C语言课程设计任务书及指导书14

题目:学生计算机机房管理系统设计

功能:

1、该计算机房共有100台计算机,分为20排,每排5台。管理系统应包含每台计算机一周内的使用全部信息,包括计算机序号、配置、位置、状态、使用情况的历史记录(包括使用者姓名、学号、使用时间段)等。本系统可以模拟学生上机和离开的登记过程,查询机房计算机的使用情况。

2、保存:将相关数据写入磁盘文件,便于存、取操作。分步实施:

1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;

2、完成信息的录入和显示(即通过编程创建文件,输入计算机信息并可将文件内容显示出来)

3、能实现学生上机的登记过程模拟;

4、进一步要求:查询机房计算机的使用情况。要求:

1、用C语言实现程序设计;

2、利用结构体进行相关信息处理;

3、系统的各个功能模块要求用函数的形式实现;

4、界面友好(良好的人机交互),程序要有注释。

课程设计实验报告要求:

1、预习报告:仔细分析客户需求、进行模块划分、设计每个模块的算法和数据结构。

2、实验总结报告:按照模板的格式。(任务书和报告模板在http://3e.xaut.edu.cn/c下载)。 C语言课程设计任务书及指导书15 题目:商店销售管理系统。

功能:

1、屏幕上出现一个界面,让售货员输入商品编号或者商品名称,可以进货,进货后商品库存同时增加。顾客买走商品后,售货员输入商品编号或者商品名称,可以生成销售清单,统计本次销售总的价钱,同时库存数量相应减少。完成前面的基本功能后,还可以完成增加新的商品或删除不需要的商品的功能,以及每天销售统计功能等。

2、保存:将相关数据写入磁盘文件,便于存、取操作。分步实施:

1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;

2、完成信息的录入和显示(即通过编程创建文件,输入商品信息并可将文件内容显示出来)

3、能按商品编号进货和销售;

4、进一步要求:完成增加新的商品或删除不需要的商品的功能,以及每天销售统计功能等。要求:

1、用C语言实现程序设计;

2、利用结构体进行相关信息处理;

3、系统的各个功能模块要求用函数的形式实现;

4、界面友好(良好的人机交互),程序要有注释。课程设计实验报告要求:

1、预习报告:仔细分析客户需求、进行模块划分、设计每个模块的算法和数据结构。

2、实验总结报告:按照模板的格式。(任务书和报告模板在http://3e.xaut.edu.cn/c下载)。

C语言课程设计任务书及指导书16

题目:计算机辅助教学(CAI)软件开发:教小学生学英语。

功能:

1、屏幕上随机出现一个汉语单词,英语单词,汉语词组,英语词组或一短句提示小学生给出相应答案,答错了要提示要求重新输入,直到答对为止。要统计给分,且累计,够一定分数后可进级,即从单词到词组,从词组到短句。同样,也可降级。起步阶段可各选30个,软件可扩充,即扩大词库的容量。

(rand(),#include 结构体、文件或数组)

2、保存:将相关数据写入磁盘文件,便于存、取操作。

分步实施:

1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;

2、完成最低要求:能教单词,并有统计功能,即一次答对的成功率为90%以上后可晋级;

3、进一步要求:将词库、当前晋级等级保存在磁盘文件,每次登录时读取。要求:

1、用C语言实现程序设计;

2、利用结构体进行相关信息处理;

3、系统的各个功能模块要求用函数的形式实现;

4、界面友好(良好的人机交互),程序要有注释。课程设计实验报告要求:

1、预习报告:仔细分析客户需求、进行模块划分、设计每个模块的算法和数据结构。

2、实验总结报告:按照模板的格式。(任务书和报告模板在http://3e.xaut.edu.cn/c下载)。

C语言课程设计任务书及指导书17 题目:飞机订票系统设计

功能:

1、本飞机共有80个坐位,分20排,每排4个位子。编号为A,B,C,D。如10D表示10排D座。A和D靠窗,19到20排为吸烟区。本系统可让乘客自己选座号和区域,直到乘客满意为止,无法满足的话,只能改乘另一个航班。定上票的乘客需给出姓名和身份证号,最后要打印出乘客清单。

2、保存:将相关数据写入磁盘文件,便于存、取操作。分步实施:

1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;

2、完成最低要求:建立一个小系统,包括5排座位,两个区域,能供乘客选择;

3、进一步要求:每次登录时读取上次保存在磁盘文件中的订票记录。要求:

1、用C语言实现程序设计;

2、利用结构体进行相关信息处理;

3、系统的各个功能模块要求用函数的形式实现;

4、界面友好(良好的人机交互),程序要有注释。课程设计实验报告要求:

1、预习报告:仔细分析客户需求、进行模块划分、设计每个模块的算法和数据结构。

2、实验总结报告:按照模板的格式。(任务书和报告模板在http://3e.xaut.edu.cn/c下载)。

C语言课程设计任务书及指导书18 题目:高速公路计费系统设计

功能:

1、在某高速公路出口收费处,对三种类型的车辆计费,大型车每公里0。5元,中型车每公里0。4元,小型车每公里0。3元,来车验条,乘公里数即得该收的款项。在交班时要统计出总金额数。

2、保存:将相关数据写入磁盘文件,便于存、取操作。分步实施:

1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;

2、完成最低要求:建立一个只有三个入口的计费系统,并能进行统计计算,打印出报表;

3、进一步要求:1)每次登录时读取上次保存在磁盘文件中的收费总额。

2)完成任意多个入口的通用系统。

要求:

1、用C语言实现程序设计;

2、利用结构体进行相关信息处理;

3、系统的各个功能模块要求用函数的形式实现;

4、界面友好(良好的人机交互),程序要有注释。课程设计实验报告要求:

1、预习报告:仔细分析客户需求、进行模块划分、设计每个模块的算法和数据结构。

2、实验总结报告:按照模板的格式。(任务书和报告模板在http://3e.xaut.edu.cn/c下载)。

第17篇:语言程序设计课程设计指导书

汇编语言程序设计课程设计指导书

一、课程设计的目的

本课程设计是《汇编语言程序设计》课程的后继教学环节,其宗旨是使学生通过对一个较大型的、综合性的应用程序进行阅读、修改、添加功能等工作,对汇编语言程序设计有更进一步的认识,提高编程技巧和阅读理解复杂程序的能力。

二、课程设计的任务要求

根据所给的“Reader.asm”应用程序框架,在此基础上修改和添加功能。 1.基本任务: 

   认真阅读“Reader.asm”源程序,理解程序每一条指令在程序中的作用; 用→、←键在窗口内左右移动文本;

用PgDn,PgUp键上下快速移动文本(每次移半帧); 设计专用键放大、缩小窗口,改变窗口位置。

2.扩展任务:   对文本内的Tab字符(ASCII码09H)进行处理:遇到Tab键,下一个字符显示在下一个表站开始处(每个6个字符一个表站);

设置状态行,显示当前文件名、文本位置(仿垂直滚动条)。

3.自行设计的其它任务:

三、课程设计报告的内容

1.课程设计题目名称、班级号、学号、学生姓名和课程设计起止日期(封面);

2.上海应用技术学院课程设计任务书(下发) 3.课程设计目的和要求;

4.课程设计任务内容;5.详细设计说明; 6.软件使用说明; 7.课程设计总结;

8.附录:1 参考文献 2 程序清单(电子版)。

四、课程设计详细设计说明及其它要求

1.

2.3.4.5.6.分析原“Reader.asm”程序结构:每个模块说明,较大模块程序流程图;对你已经实现的功能做详细的说明,并附上流程图及部分程序清单; 自己对该“文件阅读器”的进一步设想;

对于有设想但最终未实现的功能的大致编程思路的阐述; 论述在设计过程中遇到的并且对你具有启发性的问题; 交课程设计报告手写版,源程序交电子版。

五、评分标准

1.根据平时出勤情况和设计时的工作情况;

2.根据课程设计程序的完成情况,必须有可运行的软件。3.根据课程设计报告的质量。课程设计报告不能抄袭,抄袭判为不及格。 4.在题目要求之外附加具有实用性的功能。

六、课程设计工作进度计划

星期一:课程设计介绍,源程序阅读理解,功能设计,程序编写。 星期二:功能设计,程序编写。

星期三:程序编写与调试,课程设计报告撰写。 星期四:程序编写与调试,课程设计报告撰写。

星期五:程序最终修改,课程设计报告撰写,提交报告并答辩。

七、主要参考资料

[1]杨文显.汇编语言程序设计简明教程.北京:电子工业出版社,2005

八、附录

《文本阅读器》汇编语言源程序清单

; Title: Aemble Program “Reader.asm”

; Read a file from disk, display it‟s contents on screen ; Move the content on screen by up/down arrow keys ; ========================== MYDAT SEGMENT MAXLEN DW 1000 ; 最大行数 INDEX DW 1000 DUP(?) ; 行索引 LENCT DW 0 ; 实际行数 CURLINE DW 0 ; 当前页第一行行数 CCOUNT DW ? ; 文件总字符数

TOP DB 5 ; 窗口左上角行数 LEFT DB 5 ; 窗口左上角列数 WS DW 60 ; 窗口宽度 HS DW 15 ; 窗口高度 FG DB 17H ; 文字属性 FGB DB 1FH ; 窗口边框属性

MSG1 DB \'File:$\' ; 输入文件名提示 MSG2 DB \'File open error!$\' ; 打开文件出错时提示 MSG3 DB \'File read error!$\' ; 读文件出错时提示 FILENA DB 80,?,80 DUP(?) ; 输入文件名缓冲区

; 定义功能键和相应的处理程序

; 每个功能定义两个数据:扫描码,处理程序入口地址 ; 该数据由DOSUB子程序使用

KEYSUB DW 48H, SUB1 , 50H, SUB2, 0

MYDAT ENDS

; ==========================

BUFFER SEGMENT PARA DB 65535 DUP(?) ; 文件缓冲区,文件最大为64K BUFFER ENDS

; ==========================

SSEG SEGMENT STACK „STACK‟ ; 堆栈段

DW 100 DUP(?) SSEG ENDS

; ==========================

; 宏定义 DISPINIT: 设置显示器显示方式 DISPINIT MACRO MOV AX,0003H ; 文本方式 25x80 INT 10H ENDM ; ---------- ; 宏定义 PROMPT: 显示字符串 PROMPT MACRO OUTMSG LEA DX, OUTMSG MOV AH, 09H ; INT 21H ; ENDM ; -------- ; 宏定义KRYIN: 从键盘读入一个字符 KEYIN MACRO MOV AH,0 ; 读键

INT 16H ; AH中为扫描码

ENDM ; ========================== ; 代码段开始 CODE SEGMENT

ASSUME CS: CODE, DS: MYDAT, ES: BUFFER, SS: SSEG

START: MOV AX, MYDAT ; 装载DS,ES MOV DS, AX MOV AX, BUFFER MOV ES, AX

DISPINIT ; 显示方式初始化

CALL READFILE ; 读入文件

JC DONE

CALL CLIST ; 初始化索引行

CALL CLSCREEN ; 清屏

CALL CREWIN ; 创建窗口

CALL SHOWCUR ; 显示当前页

NEXT: KEYIN ; 进入主程序: 读键盘

CALL COMMAND ; 命令分析与处理

JNC NEXT ; 非x键继续循环

DONE: CALL CLSCREEN ; 清屏

MOV AX, 4C00H INT 21H ; 退出

; ------- ; 子程序READFILE: 提示并读入文件名,将文件读入缓冲区 READFILE PROC PROMPT MSG1 ; CALL SIN ; 读入文件名

MOV AX, 3D00H MOV DX, OFFSET FILENA+2 INT 21H ; 打开文件(读) JC GETERR1 ; 打开文件出错转GETERR1 PUSH DS PUSH ES POP DS ; 将DS指向文件缓冲区段

MOV BX, AX ; BX=文件号

MOV AH, 3FH ; 读文件 MOV CX, 0FFFFH ; 读入最多64K-1 MOV DX, 0 ; DS: DX指向文件缓冲区

INT 21H POP DS JC GETERR2 ; 读入文件出错转GETERR2 MOV CCOUNT, AX ; 实际读入字符数存入CCOUNT中

CLC JMP GETFILEXIT

GETERR1: PROMPT MSG2 ; 读入文件出错处理

KEYIN STC JMP GETFILEXIT ;

GETERR2: PROMPT MSG3 ; 打开文件出错处理

KEYIN STC

GETFILEXIT: RET

READFILE ENDP ; ------- ;输入文件名子程序 SIN PROC MOV AH, 0AH MOV DX, OFFSET FILENA INT 21H ; 输入文件名

XOR CH, CH MOV CL, FILENA+1 ; 取文件名长度

LEA BX, FILENA+2 ADD BX, CX ; 计算字符串结尾地址

MOV BYTE PTR [BX], 0 ; 在字符串尾部加0 RET SIN ENDP ; ------- ; 索引行初始化子程序 CLIST PROC MOV CX, CCOUNT JCXZ CSTX ; 文件为空结束

MOV SI,0 ; 文件缓冲区字符指针

MOV DI,0 ; 索引行指针

MOV DX,0 ; 行数计数

MOV INDEX[DI], 0 INC DX ; 假设文件至少有一行 CST1: CMP WORD PTR ES:[SI], 0A0DH ; 判断是否为回车换行符

JNZ CST2 ; 不是行结束,转CST2 INC DX ; 行数加一

ADD SI, 2 ; 跳过回车换行符

ADD DI, 2 ; 索引行指针加一

MOV INDEX[DI], SI ; 指向本行开始地址

CMP DX, MAXLEN JNC CST4 ; 是否超过最大行,超过转CST4,结束

JMP CST3 ; CST2: INC SI ; 文件缓冲区字符指针指向下一字符 CST3: LOOP CST1 ; CST4: MOV LENCT, DX ; 保存行数到LENCT中 CSTX: RET CLIST ENDP ; ------- ;清屏子程序

CLSCREEN PROC MOV AX, 0600H ; 清屏

MOV CX, 0 MOV DH, 50 MOV DL, 79 MOV BH, 07H INT 10H RET CLSCREEN ENDP ; ------ ;显示当前页子程序 SHOWCUR PROC MOV DH, 0 ; 窗口最顶行

MOV SI, CURLINE ; 取当前页第一行行数

MOV CX, HS ; 窗口的第一行和最后一行为边框,

SUB CX, 2 ; 所以能够显示内容的高度为窗口高度减二 SC1:

CALL SHOWLINE ; 显示一行

INC DH ; 窗口下一行

INC SI ; 文件下一行

MOV AX, LENCT ; CMP SI, AX ; 文件是否显示完

JNC SC2 ; 显示完则转SC2 LOOP SC1 JMP SC1X SC2: JCXZ SC1X ; 该页显示满则结束

;该页没有显示满,则用空行填满该页 SC3: PUSH CX PUSH DX CALL SHOWSPLINE ; 显示空行

POP DX POP CX INC DH LOOP SC3 SC1X: RET SHOWCUR ENDP ; ------ ;显示一行子程序

;输入:SI=显示行行号 ; DH=窗口中的行号 SHOWLINE PROC PUSH CX PUSH SI PUSH DX PUSH AX

ADD DH, TOP ; INC DH ; 实际行数=窗口左上角行数+DI+1 MOV DL, LEFT ; INC DL ; 实际列数=窗口左上角列数+1 CALL VADD ;

MOV CX, WS ; 窗口的第一列和最后一列是边框,

SUB CX, 2 ; 所以能够显示内容的宽度为窗口宽度减二

SHL SI, 1 ; 行索引为字类型,所以乘二

MOV SI, INDEX[SI] ; 取该行第一个字符在文件缓冲区的地址

PUSH DS MOV AX, 0B800H MOV DS, AX ; DS指向显示缓冲区段地址 SL1: MOV AX, ES:[SI] CMP AX, 0A0DH JZ SL2 ; 如果是回车换行,则该行结束

MOV DS: [DI], AL ; 显示一个字符 ADD DI, 2 ; INC SI ; 取下一个字符

LOOP SL1 ; JCXZ SLX ; 该行正好显示完,则结束,否则用空格填满

SL2: MOV BYTE PTR DS:[DI], \' \' ; 该行没有显示满,则用空格填满

ADD DI, 2 LOOP SL2

SLX: POP DS

POP AX POP DX POP SI POP CX

RET SHOWLINE ENDP ; -------- ;显示空行子程序

;输入:DI=窗口中的行号 SHOWSPLINE PROC ;

MOV AX, HS ; SUB AX, 2 ; CMP DH, AL ; 显示的空行是否超出最低行

JNC SSLX ; 如果是,则转SSLX ADD DH, TOP ; INC DH ; 实际行数=窗口左上角行数+DI+1 MOV DL, LEFT ; INC DL ; 实际列数=窗口左上角列数+1 CALL VADD ;

MOV CX, WS ; 窗口的第一列和最后一列是边框,

SUB CX, 2 ; 所以能够显示内容的宽度为窗口宽度减二

PUSH DS MOV AX, 0B800H MOV DS, AX SSL1: MOV BYTE PTR DS:[DI], \' \' ADD DI, 2 LOOP SSL1 POP DS SSLX: RET SHOWSPLINE ENDP ; ------- ;创建窗口子程序 CREWIN PROC PUSH ES MOV AX, 0B800H ; 显示缓冲区地址为B800:0 MOV ES, AX ;

MOV DH, TOP MOV DL, LEFT ; 窗口左上角行列数

MOV CX, HS ; 窗口高度(行数) CW1: PUSH DX ; CALL VADD ; 计算地址

PUSH CX ; MOV CX, WS ; 窗口宽度(列数)

MOV AL, FG ; 取属性 CW2: MOV BYTE PTR ES:[DI], \' \' ; 送空白字符

INC DI ; MOV BYTE PTR ES:[DI], AL ; 送属性

INC DI ; LOOP CW2 ;

POP CX POP DX INC DH ; 行数加一

LOOP CW1

CALL DRAWB ; 画边框

POP ES RET CREWIN ENDP ; - ;画边框子程序 DRAWB PROC PUSH DX PUSH CX PUSH BX PUSH AX MOV BL, FGB MOV DH, TOP MOV DL, LEFT CALL VADD

;画左上角角框

MOV BYTE PTR ES:[DI], 0C9H INC DI MOV BYTE PTR ES:[DI], BL INC DI

;画第一行边框

MOV CX, WS SUB CX,2 DB1: MOV BYTE PTR ES:[DI], 0CDH INC DI MOV BYTE PTR ES:[DI], BL INC DI LOOP DB1

;画右上角角框

MOV BYTE PTR ES:[DI], 0BBH INC DI MOV BYTE PTR ES:[DI], BL

;画第二行到倒数二行左右边框

MOV DH, TOP MOV DL, LEFT INC DH MOV CX, HS SUB CX, 2 DB2: PUSH DX CALL VADD MOV BYTE PTR ES:[DI], 0BAH INC DI MOV BYTE PTR ES:[DI], BL DEC DI MOV AX, WS DEC AX SHL AX, 1 ADD DI, AX MOV BYTE PTR ES:[DI], 0BAH INC DI MOV BYTE PTR ES:[DI], BL POP DX INC DH LOOP DB2 ; 取边框属性 ; 窗口左上角行列数 ; 计算地址 ; 角框╔ ; 因为去掉了左右角框,所以宽度减二; 上下边框═ ; 角框╗ ; 从第二行开始 ; 第一行和最后一行没有左右边框, ; 所以高度减二 ; ; 计算左边框地址 ; 左右边框║ ; ; ; ; 计算右边框地址 ; ;下一行 ;

; 画左下角角框

MOV DH, TOP ; MOV DL, LEFT ; MOV AX, HS ; DEC AX ; ADD DH, AL ; 左下角行数=右上角行数+窗口高度-1 CALL VADD MOV BYTE PTR ES:[DI], 0C8H ; 角框╚

INC DI MOV BYTE PTR ES:[DI], BL INC DI

; 画最低行边框

MOV CX, WS ; SUB CX, 2 ; 因为去掉了左右角框,所以宽度减二 DB3: MOV BYTE PTR ES:[DI], 0CDH ; 上下边框═

INC DI MOV BYTE PTR ES:[DI], BL INC DI LOOP DB3

; 画右下角角框

MOV BYTE PTR ES:[DI], 0BCH ; 角框╝

INC DI MOV BYTE PTR ES:[DI], BL

POP AX POP BX POP CX POP DX

RET DRAWB ENDP ; ------ ; 计算窗口内某行列位置对应显存地址 ; 输入:DH=行 DL=列 ; 输出:DI为显存地址 VADD PROC MOV AL, 80 ; MUL DH ; XOR DH, DH ; ADD AX, DX ; 行数×80+列数

SHL AX, 1 ; 乘2,因为每个字符占两个字节

MOV DI, AX RET VADD ENDP ; -------- ;命令分析子程序 COMMAND PROC CMP AH, 2DH ; 2DH为x键的扫描码

JNZ COM1 ; 不是x键,转COM1 STC ; 值x键标志

RET COM1: CALL DOSUB ; 转命令散转子程序

CLC RET COMMAND ENDP ; -- ;命令散转子程序 DOSUB PROC MOV AL, AH MOV AH, 0 ; 将键扫描码放入AX中

MOV BX, OFFSET KEYSUB ; BX指向KEYSUB DOSUB1: CMP WORD PTR [BX], 0 JZ DOSUBX ; KEYSUB表查完,即没有找到转DOSUBX CMP AX, [BX] JZ DOSUB2 ; 找到扫描码转DOSUB2 ADD BX, 4 JMP DOSUB1 ; DOSUB2: ADD BX, 2 MOV BX, [BX] ; 取处理程序入口地址

JMP BX ; 转处理程序 DOSUBX: RET

; SUB1和SUB2均为功能键处理程序 ; 处理完后应使用JMP DOSSUBX结束

; 上箭头键处理程序 SUB1: CMP CURLINE, 0 JZ SUB1X ;已到第一行,结束

DEC CURLINE ;向上一行

CALL SHOWCUR ;显示当前页 SUB1X: JMP DOSUBX

;下箭头键处理程序 SUB2: MOV AX, LENCT DEC AX DEC AX ;至少显示一行

CMP AX, CURLINE ;已到最后一行

JZ SUB2X INC CURLINE ;向下一行

CALL SHOWCUR ;显示当前页 SUB2X: JMP DOSUBX

DOSUB ENDP ; --------

CODE ENDS

; ========================= END START

第18篇:C语言课程设计(推荐)

一、题目的分析和程序说明:

第一个问题是对学生成绩的管理。关于学生的一些信息和科目的学分应该建成结构体,处理起来方便!因为其中要处理30个学生,5门科目,所以多次用到FOR的双重循环!该问题还要求对文件的打开和新建比较熟悉!在CASE1下面调用SECTION1,再在其内调用FUNCTION1—I分别完成七个不同的功能!第一小问题很简单,定义文件类型的指针并正确地打开文件是关键,其次是FOR循环的运用,30个同学,5门课都要多次运用FOR循环!第二个小问题:平均分易算,关键是排名次。定义结构件变量中有一项RANK(开始是0)用来存放第I个学生是多少名,算法是把第I个学生的平均成绩与其他所有学生的相比,只要小于,就使RANK+1,这样就使30个学生都有自己的一个名次,而且可以随序号的变动而变动。第三个小问题:二重FOR循环分别统计第J科处于各分数段的总人数。总共5趟,每一趟出现一科5个分数段的总人数。第四个小问题:与第二个小问题类似,只是这次是把列加起来,除以总人数!第五个小问题:检查每一个人的每一科成绩,只要有〈60分的,就打出来。本次算法妙用K=0,使得有两门及以上不及格的学生分别打出,保证没有一个漏网之鱼。第六个小问题:凡是符合优秀学生条件的都打出,用逻辑或(| |)表示,之前还要统计每个学生等于100的科目有几个,〉90的有几个,循环条件要用。第七个小问题画饼状图,在FUNCTION1-7()里调用函数FENBUTU()。在这个函数里用SWITCH(……)CASE……,分别选择5门课各自的饼状图。

第二个问题解齐次线性方程组。本题主要是FOR循环的应用!运用高斯消元法,大体上分四步,分别对应四列。第一次处理第一列,把第一元化成1,其他全为0。第二次处理第二列,把第二元化成1,其他全为0。第三次处理第三列,把第三元化成1,其他全为0。第四次处理第四列,把第四元化成1,其他全为0。这个过程就是矩阵化行最简形的过程,最终得到的一个4行5列的矩阵的第五列就是方程组的解。算法容易理解,需注意顺序不能乱!

第三个问题是破解密码。本问题主要用了:函数的定义和声明,调用函数以及各子函数之间只能嵌套调用,不能嵌套定义!问题虽然比较麻烦,但是分解成小问题就好办了。在FUNCTION3-1()内调用函数POJIEMIMA(),再在该函数内调用6个子函数!分别用来:打开文件,判别素数,处理密码文件(把字母依次加上素数的个位,十位,百位),存放结果,保证加后在26个字母之内,判别是否在26个字母之内。其中第三个函数又调用了后面二个函数。

二、源程序清单

#include #include struct student {

int num;

char name[10];

int score[5];

float average;

int rank; }std[30]; struct xuefen {

int num;

char subject[20];

float xuefen; }xf[5]; struct studnt2

{

char name[10];

int num[5];

}stud2[5]={{">=90",0,0,0,0,0},{">=80",0,0,0,0,0},{">=70",0,0,0,0,0},{">=60",0,0,0,0,0},{"

/*主菜单*/ {

char ch1;

do

{

printf("\n\n\n\n\n\n");

printf("*****************************C语言程序设计上机实习******************************\n");

printf("------------------\n\n");

printf("

1.

学生成绩管理\n\n");

printf("

2.

解线性方程组\n\n");

printf("

3.

破解密码\n\n");

printf("

4.

退

出\n\n");

printf("

输入选择序号\n");

while(ch1=getchar(),ch1!='1'&&ch1!='2'&&ch1!='3'&&ch1!='4');

switch(ch1)

{

case '1': section1();break;

case '2': section2();break;

case '3': section3();break;

case '4': exit(0);

}

}while(1); } section1()

/*第'1'个'''''2'''''级菜单*/

{

char ch21;

do

{

printf("\n\n\n\n\n\n\n");

printf("****************************学 生 成 绩 管 理 系 统****************************\n");

printf("-----------------\n\n");

printf("

1.

读入原始数据并显示

2. 计算平均分级名次\n\n");

printf("

3.

计算分数段人数

4. 输出课程平均分

\n\n");

printf("

5.

统计不及格情况

6. 输出优秀学生\n\n");

printf("

7.

作分布图

8. 返回上级菜单\n\n");

printf("

输入选择序号\n\n");

while((ch21=getchar(),ch21!='1'&&ch21!='2'&&ch21!='3'&&ch21!='4'&&ch21!='5'&&ch21!='6'&&ch21!='7'&&ch21!='8'));

switch(ch21)

{

case '1': function1_1();break;

case '2': function1_2();break;

case '3': function1_3();break;

case '4': function1_4();break;

case '5': function1_5();break;

case '6': function1_6();break;

case '7': function1_7();break;

case '8': return(0);

}

}while(1); } section2()

/*第'''''2'''''个'''''2'''''级菜单*/ {

char ch22;

do

{

printf("\n\n\n\n\n\n\n\n\n\n");

printf("**********************************解线性方程组*********************************\n");

printf("-----------------\n\n");

printf("

1.

解方程组\n\n");

printf("

2.

返回上级菜单\n\n");

printf("

输入选择序号\n");

while((ch22=getchar(),ch22!='1'&&ch22!='2'));

switch(ch22)

{

case '1': function2_1();break;

case '2': return(0);

}

}while(1); } section3()

/*第3个'''''2'''''级菜单*/ {

char ch23;

do

{

printf("\n\n\n\n\n\n\n\n\n\n");

printf("***************************************破解密********************************\n");

printf("---------------\n");

printf("

1.

破解密码\n\n");

printf("

2.

返回上级菜单\n\n");

printf("

输入选择序号\n");

while((ch23=getchar(),ch23!='1'&&ch23!='2'));

switch(ch23)

{

case '1': function3_1();break;

case '2': return(0);

}

}while(1); } function1_1() {

int i,j;

FILE *fp1,*fp2,*fp3;

char title[100],title1[100];

printf("加入读原始数据并显示的程序内容\n");

clrscr();

fp=fopen("C:\cjd.txt","r");

fp1=fopen("C:ý.txt","r");

fp2=fopen("成绩.txt","w");

fp3=fopen("学分.txt","w");

fgets(title,130,fp);

fgets(title1,130,fp1);

for(i=0;i

{

fscanf(fp,"%d %s",&std[i].num,std[i].name);

for(j=0;j

fscanf(fp,"%d",&std[i].score[j]);

}

for(j=0;j

fscanf(fp1,"%d%s%f",&xf[j].num,&xf[j].subject,&xf[j].xuefen);

printf("序号

姓名

英语

数学

大学物理

机械制图

C语言设计\n"); fprintf(fp2,"序号

姓名

英语

数学

大学物理

机械制图

C语言设计\n"); for(i=0;i

{

printf("%-2d

%-8s",std[i].num,std[i].name);

fprintf(fp2,"%2d

%-8s",std[i].num,std[i].name);

for(j=0;j

{printf(" %-8d

",std[i].score[j]);

fprintf(fp2," %8d

",std[i].score[j]);}

printf("\n");

fprintf(fp2,"\n");

} printf("\n\n"); printf("编号

课程名称

课程学分\n");

fprintf(fp3,"编号

课程名称

课程学分\n"); for(j=0;j

{printf("%-6d%-8s

%-.2f",xf[j].num,xf[j].subject,xf[j].xuefen); fprintf(fp3,"%-6d%-8s

%-.2f",xf[j].num,xf[j].subject,xf[j].xuefen); printf("\n"); fprintf(fp3,"\n");}

fclose(fp);

fclose(fp1);

fclose(fp2);

fclose(fp3);

getch();

printf("

**************按Enter键继续**************\n");

getchar();getchar();} function1_2() { float sum1,sum2;

clrscr();

for(i=0;i

{

for(j=0,sum1=0,sum2=0;j

{

sum1+=std[i].score[j]*xf[j].xuefen;

sum2+=xf[j].xuefen;

}

std[i].average=sum1/sum2;

std[i].average=(int)(std[i].average*10+0.5)/10.0;

}

for(i=0;i

{

std[i].rank=1;

for(j=0;j

{

if(std[i].average

std[i].rank++;

}

}

fp=fopen("名次表.txt","w+");

fprintf(fp," 序号 姓名

英语

数学

大学物理

机械制图

平均分

名次\n");

printf( " 序号 姓名

英语

数学

大学物理

机械制图

平均分

名次\n");

for(i=0;i

{

fprintf(fp,"%6s%12d",std[i].name,std[i].num);

printf("%11d%7s",std[i].num,std[i].name);

for(j=0;j

{

fprintf(fp,"%12d",std[i].score[j]);

printf("%8d",std[i].score[j]);

}

fprintf(fp,"%8.1f%8d\n",std[i].average,std[i].rank);

printf("%12.1f%6d\n",std[i].average,std[i].rank);

}

fclose(fp);

printf("*********************************按Enter键********************************\n");

getchar();

getchar(); } function1_3() {

clrscr();

for(i=0;i

for(j=0;j

if(std[i].score[j]>=90)

stud2[0].num[j]++;

else if(std[i].score[j]>=80)

stud2[1].num[j]++;

else if(std[i].score[j]>=70)

C语言设计C语言设计继续

stud2[2].num[j]++;

else if(std[i].score[j]>=60)

stud2[3].num[j]++;

else stud2[4].num[j]++;

fp=fopen("成绩分布表.txt","w+");

fputs("范围

英语

数学

大学物理

机械制图

C语言设计\n",fp);

printf("范围

英语

数学

大学物理

机械制图

C语言设计\n");

for(i=0;i

{

fprintf(fp,"%4s",stud2[i].name);

printf("%4s",stud2[i].name);

for(j=0;j

{

fprintf(fp,"%10d",stud2[i].num[j]);

printf("%12d",stud2[i].num[j]);

}

fputs("\n",fp);

printf("\n");

}

fclose(fp);

printf("*********************************按Enter键继续********************************\n");

getchar();

getchar();} function1_4() { int t;clrscr();

fp=fopen("课程平均分.txt","w+");

fputs("课程

英语

数学

大学物理

机械制图

C语言设计\n平均分",fp);

printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");

printf("课程

英语

数学

大学物理

机械制图

C语言设计\n平均分");

for(j=0;j

{

sum=0;

for(i=0;i

{

t=std[i].score[j];

sum+=t;

average[j]=sum/(30*1.0);

average[j]=(int)(average[j]*10+0.5)/10.0;}

fprintf(fp,"%10.1f",average[j]);

printf("%10.1f",average[j]);}

fclose(fp);

printf("\n*********************************按Enter键继续*********************************\n");

getchar();

getchar();} function1_5() { int k;clrscr();

fp=fopen("不及格表单.txt","w+");

fputs("序号 姓名

不及格课程名称

课程学分

成绩\n",fp);

printf("序号 姓名

不及格课程名称

课程学分

成绩\n");

for(i=0;i

{

k=0;

for(j=0;j

if(std[i].score[j]

{

if(k==0)

{fprintf(fp,"%d

%s %s %10.1f %d\n",std[i].num,std[i].name,xf[j].subject,xf[j].xuefen,std[i].score[j]);

printf("%d

%s

%s

%10.1f

%d\n",std[i].num,std[i].name,xf[j].subject,xf[j].xuefen,std[i].score[j]);

k++;}

else

{fprintf(fp,"%d %s %s %10.1f %d\n",std[i].num,std[i].name,xf[j].subject,xf[j].xuefen,std[i].score[j]);

printf("%d

%s

%s

%10.1f

%d\n",std[i].num,std[i].name,xf[j].subject,xf[j].xuefen,std[i].score[j]);}

}

}

fclose(fp);

printf("*********************************按Enter键继续********************************\n");

getchar();getchar();} function1_6() { int m=0,n=0;clrscr();

fp=fopen("优秀学生表单.txt","w+");

fprintf(fp,"序号 姓名

英语

数学

大学物理

机械制图

C语言设计平均分

名次\n");

printf( " 序号 姓名 英语

数学 大学物理 机械制图 C语言设计平均分

名次\n");

for(i=0;i

{ m=0;n=0;

for(j=0;j

{

if(std[i].score[j]==100) m++;

if(std[i].score[j]>=90) n++;

}

if(std[i].average>=90||std[i].rank=85&&(m>=1||n>=2)))

{

fprintf(fp,"%d %s",std[i].num,std[i].name);

printf("%d

%s",std[i].num,std[i].name);

for(j=0;j

{

fprintf(fp,"

%d",std[i].score[j]);

printf("

%d",std[i].score[j]);

}

fprintf(fp,"

%8.1f

%d\n",std[i].average,std[i].rank);

printf("

%12.1f

%d\n",std[i].average,std[i].rank);

}

}

fclose(fp);

printf("*********************************按Enter键********************************\n");

getchar();getchar();} #include #include #define pi 3.1415926 #define m 2 #define n 150 #define r 160 void fenbutu(int b,int c,int d,int e,int f) { char a[5][10]={">=90",">=80",">=70",">=60","

继续

setfillstyle(1,i+1); rectangle(500,80+60*i,540,100+60*i); floodfill(501,81+60*i,4); outtextxy(560,90+60*i,a[i]); floodfill((int)(290+n*cos(-(stangle-m)*pi/180)),(int)(240+n*sin(-(stangle-m)*pi/180)),4); } getch(); closegraph();} function1_7() { char ch17;

do

{

printf("\n\n");

printf("****************************各科成绩分布图****************************\n");

printf("-----------------\n\n");

printf("

1.英语\n\n");

printf("

2.数学\n\n");

printf("

3.大学物理\n\n");

printf("

4.机械制图\n\n");

printf("

5.C程序设计\n\n");

printf("

6.返回上一级菜单\n\n");

printf("

输入选择序号\n\n");

while((ch17=getchar(),ch17!='1'&&ch17!='2'&&ch17!='3'&&ch17!='4'&&ch17!='5'&&ch17!='6'));

switch(ch17)

{

case '1': fenbutu(stud2[0].num[0],stud2[1].num[0],stud2[2].num[0],stud2[3].num[0],stud2[4].num[1]);break;

case '3': fenbutu(stud2[0].num[2],stud2[1].num[2],stud2[2].num[2],stud2[3].num[2],stud2[4].num[2]);break;

case '4': fenbutu(stud2[0].num[3],stud2[1].num[3],stud2[2].num[3],stud2[3].num[3],stud2[4].num[3]);break;

case '5': fenbutu(stud2[0].num[4],stud2[1].num[4],stud2[2].num[4],stud2[3].num[4],stud2[4].num[4]);break;

case '6': return(0);

}

}while(1);

}

#include "stdio.h" void jiefangcheng() {

double a[4][5]={{5,7,6,5,23},{7,10,8,7,32},{6,8,10,9,33},{5,7,9,10,31}};

int i,j;

clrscr(); printf("输入的四阶线性方程组为:\n"); printf("

%f*x1 + %f*x2 + %f*x3+ %f*x4 = %f\n",a[0][0],a[0][1],a[0][2],a[0][3],a[0][4]); printf("

%f*x1 + %f*x2 + = %f\n",a[1][0],a[1][1],a[1][2],a[1][3],a[1][4]); printf("

%f*x1 + %f*x2 + = %f\n",a[2][0],a[2][1],a[2][2],a[2][3],a[2][4]); printf("

%f*x1 + %f*x2+ = %f\n",a[3][0],a[3][1],a[3][2],a[3][3],a[3][4]); for(i=1;i

a[1][0]=0; for(i=1;i

a[2][0]=0; for(i=1;i

a[3][i]=a[3][i]-a[0][i]*a[3][0];

a[3][0]=0; for(i=2;i

a[1][i]=a[1][i]/a[1][1];

a[1][1]=1; for(i=2;i

a[0][i]=a[0][i]-a[1][i]*a[0][1];

a[0][1]=0; for(i=2;i

a[2][i]=a[2][i]-a[1][i]*a[2][1];

a[2][1]=0; for(i=2;i

a[3][i]=a[3][i]-a[1][i]*a[3][1];

a[3][1]=0; for(i=3;i

a[2][i]=a[2][i]/a[2][2];

a[2][2]=1; for(i=3;i

a[0][i]=a[0][i]-a[2][i]*a[0][2];

%f*x3 + %f*x3 + %f*x3 + %f*x4 %f*x4 %f*x4

a[0][2]=0; for(i=3;i

a[1][i]=a[1][i]-a[2][i]*a[1][2];

a[1][2]=0; for(i=3;i

a[3][i]=a[3][i]-a[2][i]*a[3][2];

a[3][2]=0;

for(i=4;i

a[3][i]=a[3][i]/a[3][3];

a[3][3]=1;

for(i=4;i

a[0][i]=a[0][i]-a[3][i]*a[0][3];

a[0][3]=0;

for(i=4;i

a[1][i]=a[1][i]-a[3][i]*a[1][3];

a[1][3]=0;

for(i=4;i

a[2][i]=a[2][i]-a[3][i]*a[2][3];

a[2][3]=0; printf("x1=%f\nx2=%f\nx3=%f\nx4=%f\n",a[0][4],a[1][4],a[2][4],a[3][4]); getchar();} function2_1() {

clrscr();

jiefangcheng();

printf("*********************************按Enter********************************\n");

getchar();

getchar();} int writeResultFile() {

FILE *fp2 = fopen("result.txt","w");

if (!fp2)

{ printf("can not create result file.");

return 0;}

fwrite(result,realLen,1,fp2);

fclose(fp2);

return 1; } char getAZ(char tmp,int i) {

char ch = (char)(tmp - i);

if (tmp >= 'a' && tmp

{

if (ch

ch = ch + 26;}

键继续

if (tmp >= 'A' && tmp

{if (ch >'Z')ch = ch -26;}

if((ch >= 'A' && ch = 'a' && ch

return ch;

return (char)ch+26;} int isPunc(char ch) {

if((ch >= 'A' && ch = 'a' && ch

FILE *fp;

fp = fopen(name,"r");

if(!fp)

{printf("can not read file.");return ;}

fgets(content,100,fp);

fclose(fp);

printf("%s\n",content);} int isPrimer(int data) {

int flag = 1;

int i;

for(i = 2; i

{if(data%i == 0)

{flag = 0;break;}

}

return flag;} void getSourceFile(int key) {

char tmp;

int b[3];

int i = 0;

int j = 0;

b[0] = key/100;

b[1] = key%100/10;

b[2] = key%10;

while(content[i]!= 0 )

{ tmp = content[i];

if(isPunc(tmp) == 1)

{ switch (j%3)

{

case 0:

result[i] = getAZ(tmp,b[0]);

break;

case 1:

result[i] = getAZ(tmp,b[1]);

break;

case 2:

result[i] = getAZ(tmp,b[2]);

break;}

j++;

}

else

result[i] = content[i];

i++;

}

realLen = i+1; }

int pojiemima()

{ int num = 100;

readFile("C:\mwj.txt");

for(num = 100; num

{

if(isPrimer(num) == 1)

{ getSourceFile(num);

printf("%d\n",num);

printf("%s\n",result);

if (num == 157)

writeResultFile();}

}

return 0; } function3_1() {clrscr(); pojiemima(); getchar(); getchar();

}

三、调试过程

1、结构体的定义:开始不知道怎么把名次和平均分与学生的序号联结在起来,每次都是平均分是按大到小排的,而前面的序号不是这个同学的,脱节了。还有不知道怎么处理5 个分数段总人数统计,定义一个STRUCT STUDENTS2的结构体可以方便的处理该问题,对结构体不熟悉!不过现在深刻理解了!

2、文件的打开与新建:不知道怎么正确地使用FPRINTF,

FSCANF,FGETS,FPUTS等一些函数。通过问老师,与同学讨论,查书,最终成功了!

3、程序中有不少算法不好想,有的不好理解,通过向老师请教,学了不少东西,更开阔了思路。

4、有好多细节性的东西,比如分号,大括号等等都必须小心。

5、有些文件对不齐,也不知怎么了,改了好多次都改不好,还没来得及问!!

四、程序改进的意见

第二个问题解方程组没有用共轭法,我们学的线性代数就是高斯消元法,化成行最简形则最后一列就是方程的解,高斯法容易理解,不会用共轭法!

五、对本次实习的建议

本次实习基本运用了我们所学过的全部内容,覆盖面大,囊括的知识多,总体来说比较难。题目出的是很好,但对我们来说太难了。我想可以出一些比较综合,又不至于太难的题目要我们来做,是不是效果会更好呢??

六、总结

这次实习总体来说还是比较有意义的,不仅把学的东西用于了实践,还收获了很多经验,学到了很多新东西。虽花了时间,还是感觉很值的。更重要的是对一些知识点有了更深的感悟。无论对二级,还是对以后在计算机方面深研都有好处的!

第19篇:C语言课程设计总结

长江大学工程技术学院课程设计总结

课程设计名称:____C语言课程设计_____开课系(部):_____信息系____专业、班级:自动化61002学生人数: 33_起止时间: 2011.6.28—2011.7.9_ 指导教师:___ 徐阳_______

负责人:______李敏教授_________

一、计划执行情况

为期两周的C语言课程设计,在老师和学生的共同努力下,终于圆满结束。课程设计期间,绝大多数学生都能严格遵守纪律和时间安排按时出勤,认真完成系统的各个功能模块,最后通过答辩验收,按照课设报告的结构和格式要求,完成本次课设报告的书写。

二、主要经验

由于学生是第一次接触课程设计,第一次独立完成较为系统的编程,且程序编写的工作量较大,考虑的方面较多,涉及的知识面较广,刚开始时,学生不知道该如何着手。但通过系统的讲解和耐心的辅导,大多数学生能逐步深入到程序中去,积极思考并完成自己的程序设计。通过本次课程设计的辅导,我觉得在以后的课设辅导中,应采取循序渐进的方式,对基础较好的学生,在他们完成自己任务的同时,另外附加其他要求较高的任务;对基础较差的学生,要对他们重点辅导,鼓励他们自己动手去完成一些基本功能,让所有的学生在课设期间都有收获。

三、存在问题及改进措施

主要存在的问题:

1、部分学生不能在规定的时间内完成布置的任务,上课期间不认真听讲,打游戏,聊天。

2、存在程序代码及实习报告互相拷贝的现象。

改进措施:

1、若少数程序功能不能完成,则要求其能讲解程序代码。

2、加强对学生书写代码的监督与管理,认真检查学生完成任务的情况。

3、在学生未打印课设报告之前,对其电子版做严格检查。

负责人签名:_____________

系(部)主任审查意见:

签名: _____________

日期: _____________

第20篇:C语言课程设计心得体会心得体会

C语言课程设计心得体会-心得体会

课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。

回顾起此次单片机课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说三极管PNP管脚不懂怎么放置,不懂分得二极管的正负极,对单片机汇编语言掌握得不好……通过这次课程设计之后,一定把以前所学过的知识重新温故。

这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在梁强老师的辛勤指导下,终于游逆而解。同时,在梁强老师的身上我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!

《c语言课程设计.doc》
c语言课程设计
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

相关推荐

实施方案自查报告整改措施先进事迹材料应急预案工作计划调研报告调查报告工作汇报其他范文
下载全文