C程序设计很好的版本.docx

上传人:b****7 文档编号:23859358 上传时间:2023-05-21 格式:DOCX 页数:14 大小:123.93KB
下载 相关 举报
C程序设计很好的版本.docx_第1页
第1页 / 共14页
C程序设计很好的版本.docx_第2页
第2页 / 共14页
C程序设计很好的版本.docx_第3页
第3页 / 共14页
C程序设计很好的版本.docx_第4页
第4页 / 共14页
C程序设计很好的版本.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

C程序设计很好的版本.docx

《C程序设计很好的版本.docx》由会员分享,可在线阅读,更多相关《C程序设计很好的版本.docx(14页珍藏版)》请在冰豆网上搜索。

C程序设计很好的版本.docx

C程序设计很好的版本

HUNANCITYUNIVERSITY

C语言课程设计

报告

课程名称:

C语言课程设计

专业:

计算机科学与技术

学生姓名:

周志强

班级学号:

1006402-07

分组成员:

曹立清、王晓洁

指导教师:

谭新良老师

C语言上机实习报告

1006402—07周志强

一、设计时间

2011年11月24日—11月28日

二、设计地点

湖南城市学院1实验楼计算机机房406

三、设计目的

1.熟练掌握C语言的基本知识:

数据类型(整形、实型、字符型、数组、结构等);运算符(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的使用);预处理命令(宏定义、文件包含、条件编译)等。

2.掌握各种函数的应用,包括输入输出函数、数学函数、字符操作函数、字符串操作函数、时间函数、绘图函数等。

3.程序=数据结构+算法。

掌握一些常用的算法,包括用辗转相除法求最大公约数;用牛顿迭代法、二分法、弦截法等求高次方程的根;用冒泡法、选择法排序;穷举法等。

4.理解递归函数的运行实现过程,掌握递归程序的编写。

5.学握指针的使用、学会利用位运算处理实际问题,懂得文件的基本操作。

四、设计小组成员

1006402-47曹立清,1006402-07周志强1006402-57王晓洁

五、指导老师

谭新良老师

六、设计课题

我们组成员选取第1,7,9三题进行编程设计

七、基本思路及关键问题的解决

(1)基本思路:

分析题目所要涉及的函数类型、数据类型—分析数据结构及算法—编写程序—运行并检查程序

(2)关键问题的解决:

在画N-S流程图的过程中,关键是搞清程序所表达的意思,然后弄清楚当型、直当型、for以及while的流程图结构和嵌套语句在流程图中的画法。

八、调试过程中出现的问题及相应解决办法

(1)调试运行中的问题

①程序中有死循环;

②程序在等待某些输入信息,并且直到输入正确后才会得出结果;

(2)解决方法

在开始调试这样一个程序时,应该先检查一下程序结构,然后再按执行顺序依次查看程序的各个部分,看看它们是否能正确运行。

①程序中有死循环:

先检查检查一下循环结构,重新编辑运行;如果运行出错,直接关闭程序。

②程序在等待某些输入信息,并且直到输入正确后才会得出结果:

运行程序时注意输入值的限制条件,在进行运行。

九、算法及流程图

第1题流程图:

第7题流程图:

 

第9题流程图:

建立链表的N-S图

n=0

p1=p2=(structstudent*)malloc(LEN):

开辟一个新单元

输入第一个学生的学号和成绩numscore

head=NULL头指针不知想任何有用的储存单元

while(p1->num!

=0)

n=n+1

Tn等于1

F

haed=p1

P2->next=p1

p2=p1

P1=(structstudent*)malloc(LEN)

输入学生的学号和成绩scanf(“%d,%d,&p1->=num,&p1->score”)

P2->next=NULL

返回有指针所指的内容

 

合并链表的N-S图

Pa2=pa1=ah

Pb2=pb1=bh

While((pb1->num>pa1->num)&&(pa1->next!

=NULL)

pa2=pa1

pa1=pa1->next

Pb1指向的等号小于

T

或等于所指向的学号

F

ah=pal

T

F

ah=pb1

Pa2->next=pb1

 

Pb1=pb1->next

Pb2->next=pa1

Pa2=pb2;pb2=pb1

While(pa1->next!

=NULL)||(pa1==NUL:

L&&pb1!

=NULL)

(pb1!

=NULL)&&(pb1->num>

T

Pai->num)&&(pa1->next=NULL)

F

Pa1->next=pb1

返回ah

十、课程设计心得体会

经过这次的课程设计我体会到拥有实的基础很关键,因为如果你平时学得就不怎么样,那么你面对这么一个比较有难度的程序,你可能会望而却步,看他人的程序都是个难点,更别说让你自己去设计。

为了解决此。

类问题,最好就是多向同学,老师请教,不要怕难为情。

尤其是老师,评他们多年的编写程序的经验,要解决我们的问题,对他们来说只是smallcase。

此外我非常感谢老师们给了我们这次的课程设计,它使我更加深刻地体会到多看专业书的重要性,只有掌握了一定量的专业知识才能得心应手地解决诸多问题;另外,做任何事都要有耐心,不要一遇到困难就退缩;在学习和工作中要时刻谨记“团结”二字,它好比通向成功的铺路石,不可或缺。

在这次程序中有过山穷水尽的困惑;有过柳暗花明的惊喜;有过唇枪舌剑的辩论;有过相互鼓励的安慰。

一个多礼拜的时间我们经历了很多,也收获了很多。

与其说它是体力与脑力的作业,不如说它是合作精神和毅力的考验。

经过这次课程设计,我不仅学到了很多知识和技能,更重要的是我们学会了如何运用所学知识去解决实际问题.十一、源程序(每句语言要有详细解释)

1.学生成绩管理系统

管理n个学生的成绩。

每个学生包括学号NO.、姓名name、语文score1、数学score2、外语score3等信息。

输入这n个学生的信息,求出每人的平均分,打印出总分最高的学生的姓名。

#defineN3//定义一个3次循环的N

structstudent//定义"student"这个整体

{charnum[10];//定义num,装载学号,最多占10个字符

charname[10];//定义name,装载名字,最多占10个字符

intscore[4];//定义score,整形变量,装载分数,最多4个字符

floatave;//定义浮点型ave,装载一名学生的平均分

}stu[N];

main()//主函数

{inti,j,max,maxi,sum;//定义整形i,j,max,maxi,sum

floataverage;//定义浮点型average,用来装每个学生的平均分

for(i=0;i

printf("Pleaseinputscoresofstudent%d:

\n",i+1);//屏幕显示循环次数

printf("NO.:

");//输入循环的学生学号

scanf("%s",stu[i].num);//输入学号,赋值给每次循环的num

printf("name:

");//提示输入学生名字

scanf("%s",stu[i].name);//输入学生名字,赋值给每次循环的name

for(j=0;j<3;j++){//设置一个进行3次的循环

printf("score%d:

",j+1);//屏幕显示输入分数,输完后循环+1

scanf("%d",&stu[i].score[j]);//输入分数,分别赋值给每次循环的学生,P.S:

此语句一共将循环3*3=9次

}

}

average=0;//将average的初值设置为0,用来装每个学生的平均分

max=0;//将max的初值设置为0,用来装所有学生成绩最高的

maxi=0;//将maxi的初值设置为0,用来装最大分数学生的学号

for(i=0;i

sum=0;

for(j=0;j<3;j++)sum+=stu[i].score[j];//将每名学生的成绩加起来,赋值给sum,循环N次

stu[i].ave=sum/3.0;//求出每个学生的平均分,赋值给ave

average+=stu[i].ave;//将每个学生的平均分加起来,赋值给average

if(sum>max)

{max=sum;//当sum>max时,将sum的值赋给max

maxi=i;//将学生的顺序编号赋值给maxi,此时,maxi为最大学生的顺序编号

}

}

average/=N;//求所有学生的平均分

printf("NO.namescore1score2score3average\n");

for(i=0;i

printf("%5s",stu[i].num);//将每位学生的学号输出,占5字符

printf("%10s",stu[i].name);//将每位学生的姓名输出,占10字符

for(j=0;j<3;j++)printf("%9d",stu[i].score[j]);//将每位学生的分数输出,占9个字符

printf("%8.2f\n",stu[i].ave);//输出每名学生的平均成绩

}

printf("average=%6.2f\n",average);

printf("Thehighestscoreis:

%s,scoretotal:

%d\n",stu[maxi].name,max);//将最高成绩输出

getch();//停止

}

7.打印n*n方阵:

#include

#include

voidmain()/*打印n*n的方阵*/

{

intm,n,s=0,i=1,j=1,h,a[21][21];

/*定义一个二维数组,m、n、i、j控制行列,s控制数值*/

printf("Pleaseinputn(1~20):

");

scanf("%d",&n);/*输入一个1~20范围内的数*/

for(m=0;m

{

for(h=0;h<=m;h++)

{

a[i][j]=++s;

if(m%2==0){i++;j--;}

else{i--;j++;}

}

if(m%2==0)j=j+1;

elsei=i+1;

}/*控制行列*/

for(m=n-1;m>0;m--)/*为n维数组赋初值*/

{

for(h=0;h

{

if(m%2==0){i--;j++;}

else{i++;j--;}

a[i][j]=++s;

}

if(m%2==0)j=j+1;

elsei=i+1;

}/*控制行列*/

for(i=1;i<=n;i++)

{

printf("\n");

for(j=1;j<=n;j++)

printf("%4d",a[i][j]);

}/*以n列为一行输出数组*/

getch();/*将数组输出到屏幕*/

}

9.已有a,b两个链表,每个链表中的结点包括号学号、成绩。

要求把两个链表合并,按学号升序排列。

#include

#include

/*在malloc.h头文件中已包含了宏定义#defineNULL0,故在程序中不必再重复定义*/

#defineLENsizeof(structstudent)

structstudent

{

Longnum;

Intscore;

Structstudent*next;

};

Structstudentlista,listb;

intn,sum=0;

voidmain()

{

structstudent*creat(void);//函数声明

Structstudent*insert(structstudent*,structstudent*);//函数声明

voidprint(structstudent*);//函数声明

structstudent*ahead,*bhead,*abh;

printf(“inputlista:

\n”);

ahead=creat();//调用creat函数,输入表A

sum=sum+n;

printf(“inputlistb:

\n”);

bhead=creat();//调用creat函数,输入表B

sum=sum+n;

ab=insert(ahead,bhead);//调用insert函数,将两表合并

print(abh);//输出合并后的链表

}

Structstudent*creat(void)//建立链表函数

{

Structstudent*p1,*p2,*head;

n=0;

p1=p2=(structstudent*)malloc(LEN);

printf(“inputnumber&scoresofstudent:

\n”);

printf(“ifnumberis0,stopinputing.\n”);

scanf(“%ld,%d”,&p1->num,&p1->score);

head=NULL;

while(p1->num!

=0)

{

n=n+1;

If(n==1)

Head=p1;

else

p2->next=p1;

p2=p1;

p1=(structstudent*)malloc(LEN);

scanf(“%ld,%d”,&p1->num,&p1->score);

}

P2->next=NULL;

return(head);

}

structstudent*insert(structstudent*ah,structstudent*bh)

//定义insert函数,用来合并两个链表

{

structstudent*pa1,*pa2,*pb1,*pb2;

pa2=pa1=ah;

pb2=pb1=bh;

do

{

while((pb1->num>pa1->num)&&(pal->next!

=NULL))

{

pa2=pa1;

pa1=pa1->next;

}

If(pb1->num<=pa1->num)

{

if(ah==pa1)

ah=pb1;

elsepa2->next=pb1;

pb1=pb1->next;

pb2->next=pa1;

pa2=pb2;

pb2=pb1;

}

}while((pa1->next!

=NULL)||(pa1==NULL&&pb1!

=NULL));

If((pb1!

=NULL)&&(pb1->num>pa1->num)&&(pa1->next==NULL))

pa1->next=pb1;

return(ah);

}

voidprint(structstudent*head)//输出函数

{

structstudent*p;

printf(“\nThereare%drecords:

\n”,sum);

p=head;

if(p!

=NULL)

do

{printf(“%ld%d\n”,p->num,p->score);

p=p->next;

}while(p!

=NULL);

}

 

参考文献

[1]张强华.C语言程序设计[M].北京:

人民邮电出版社,2001.

[2]徐新华.C语言程序设计教程[M].北京:

中国水利水电出版社,2001.

[3]谭浩强.C程序设计(第四版)[M].北京:

清华大学出版社,2010.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1