文档库 最新最全的文档下载
当前位置:文档库 › C语言程序设计课程设计计划及实施方案

C语言程序设计课程设计计划及实施方案

自动化与电气工程学院

2012级C语言程序设计课程设计计划及实施方案

一、设计安排

1、时间安排

课程设计安排在本学期第20周(7月8日—7月12日)和第21周(7月13日—7月17日)。

第20周(7月8日—7月12日):给学生布置设计任务、讲解要求。让学生做第一类基础题和第二类改错题,画出其流程图,写出源代码,并上机调试得出运行结果。根据情况检查学生的完成情况。

第21周(7月13日—7月17日):要求学生做第三类综合题,首先要分析出该题的需求和功能;其次画出各个模块及总程序的流程图;然后编写源代码;最后上机调试得出运行结果。根据情况检查学生的完成情况(要求每个学生做不同的模块)。

7月17日,要求学生完成课程设计报告并参加课程设计检查和小组答辩。

7月17日下午18点前各指导教师完成小组内答辩,并收齐所有课程设计报告。报告按照统一格式完成,课程设计的最终成绩由各指导教师根据学生平时的学习情况、课程设计报告及答辩情况综合考虑给出。

2、答疑时间

7月8日(学院楼406):学生确定所选题目;

7月10日下午15:00(学院楼406):检查第一类基础题的流程图、源代码及调试运行结果;

7月12日上午10:00(学院楼406):检查第一类基础题和第二类改错题的流程图、源代码及调试运行结果;

7月16日下午15:00(学院楼406):检查第三类综合题各模块及总程序的流程图、源代码及调试运行结果。

二、设计内容与要求

1、课程设计的基本内容

课程设计题目分成三类,第一类为技巧性强的基础题目,第二类为程序改错题目,

第三类为综合题目。第一类及第二类题目要求每人一题,不得重复,第三类题目可依据题目难度,2-3人为一小组合作完成。每个学生均提交课程设计报告,以此作为主要评分依据。

2、设计基本步骤

设计步骤的规范不但可以培养学生科学的工作方法和作风,而且还能有效地减少错误,提高工作效率。因此必须严格执行良好的设计规范。本课程设计的基本步骤是:(1)问题分析及解决方案框架确定

充分地分析和理解问题本身,弄清要求做什么(What to do?)。在确定解决方案框架过程中(How to do?),综合考虑系统功能,考虑怎样使系统结构清晰、合理、简单和易于调试。最后确定每个过程和函数的简单功能,以及过程(或函数)之间的调用关系。

(2)详细设计

确定算法的主要流程,在此基础上进行代码设计(Coding),每个明确的功能模块程序一般不超过60行,否则要进一步划分。

(3)上机调试

上机前程序静态检查可有效提高调试效率,减少上机调试程序时的无谓错误。

静态检查主要有两种途径:用一组测试数据手工执行程序;通过阅读或给别人讲解自己的程序而深入全面地理解程序逻辑,把程序中的明显错误事先排除。

(4)完成课程设计说明书

课程设计说明书内容应有如下几部分组成:

1)引言:说明设计目的,要求和设计方法;

2)设计

设计思路:主要算法思想分析

设计表示:每个函数或过程的功能,列出每个过程或函数所调用的过程或函数

流程图:画出清晰的主程序及各模块流程图

源代码:编写主程序及各模块函数的源代码

实现注释:各项功能的实现程度、在完成基本要求的基础上还实现了什么功能

3)调试报告:调试过程中遇到的主要问题,是如何解决的;对设计和编码的

回顾讨论和分析;改进设想;经验和体会等。

4)运行及测试结果。如果题目规定了测试数据,则结果要包含这些测试数据

和运行输出,当然还可以含其他测试数据和运行输出。

5)总结:对设计方法,结果等进行总结;

6)参考文献:给出设计中主要参考的文献;

3、课程设计报告形式要求

(1)设计报告仅是对设计目的、设计任务及自己所做设计的说明,不允许对原理内容描述过多。

(2)设计报告形式

1.纸型:A4纸,单面打印;

2.封面填写内容格式:中文,宋体,四号;数字及英文字符,Times New Roman,

四号。

3.页边距:上2.5cm,下2.5cm,右2.5cm,左:3.5CM,左侧装订。

4.页眉页码:页码居中,底部,Times New Roman,小五,正文起始页页码为1。封面不允许出现页眉页码。页眉页码由正文开始,一律用阿拉伯数字连续编页码。页码必须标注在每页页脚底部居中位置,宋体,小五。行距为最小值9磅,段前为30磅、段后为0。页眉宋体,五号,居中。填写内容是“c语言程序设计课程设计报告”。行距为最小值9磅,段前为0、段后为30磅。

5.正文格式:

(a) 章节标题格式:

一级标题:中文,宋体,加粗,英文,Times New Roman,加粗,小三,1.5倍行距,居左;

二级标题:中文,宋体,加粗,英文,Times New Roman,加粗,四号,1.5倍

行距,居左。

(b) 正文格式:

中文:宋体,小四;

英文:Times New Roman,小四;

多倍行距 1.25,间距:段前、段后均为0行,取消网格对齐选项。设计(论文)中文字之间不允许有空行,文字与图之间不允许有多行空白。

(c) 源程序代码格式:Times New Roman,小四,单倍行距。

三、设计大纲

1、目的

进一步培养学生结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解,针对c语言中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。

为了使学生从课程设计中尽可能取得比较大的收获,对课程设计题目分成2类,第一类为技巧性强的基础要求题目,第二类为综合题目。学生从第一类中选择1个题目,从第二类中选择1个题目进行设计。

2、课程设计的要求和过程管理

设计步骤的规范不但可以培养学生科学的工作方法和作风,而且还能有效地减少错误,提高工作效率。因此必须严格执行良好的实验步骤规范(包括上级操作规范)。本课程设计的基本步骤是:

1.问题分析及解决方案框架确定

充分地分析和理解问题本身,弄清要求做什么(What to do?)。在确定解决方案框架过程中(How to do?),综合考虑系统功能,考虑怎样使系统结构清晰、合理、简单和易于调试。最后确定每个过程和函数的简单功能,以及过程(或函数)之间的调用关系。

2.详细设计和编码

确定算法的主要流程,在此基础上进行代码设计(Coding),每个明确的功能模

块程序一般不超过60行,否则要进一步划分。

3.上机前程序静态检查

上机前程序静态检查可有效提高调试效率,减少上机调试程序时的无谓错误。

静态检查主要有两种途径:用一组测试数据手工执行程序;通过阅读或给别人讲解自己的程序而深入全面地理解程序逻辑。把程序中的明显错误事先排除。

4.上机调试程序

5.完成课程设计报告

①需求和规格说明:问题描述:题目要解决的问题是什么

②设计

设计思路:主要算法思想

设计表示:每个函数或过程的功能,列出每个过程或函数所调用的过程或函数实现注释:各项功能的实现程度、在完成基本要求的基础上还实现了什么功能详细设计:主要算法的伪代码。这部分不作强制性要求

③调试报告:调试过程中遇到的主要问题,是如何解决的;对设计和编码的回顾讨论和分析;改进设想;经验和体会等

④附录:源程序清单和结果。如果题目规定了测试数据,则结果要包含这些测试数据和运行输出,当然还可以含其他测试数据和运行输出。

3、考核评估

通过程序实现、总结报告和学习态度综合考评,并结合学生的动手能力,独立分析解决问题的能力和创新精神。成绩分优、良、中、及格和不及格五等。

考核标准包括:

1、程序设计的正确性,程序结构是否合理、编程风格。

2、学生的工作态度、动手能力、创新精神。

3、总结报告。

总成绩评定:满分为100分,总分=第一项成绩×50%+第二项成绩×20%+第三项

成绩×30% 90-100分为优秀,80-89分为良好,70-79分为中等,

60-69分为及格,60分以下为不及格。成绩单上按优秀、良好、中

等、及格和不及格填写。

4、课程设计实习题

(一)基本要求题目

1、一司机出车祸后驾车逃离现场,第一位目击者记得车牌号前两位数字相同,且后两位数字也相同;第二位目击者是一位数学家,他看出车牌号是四位完全平方数。试编程推算肇事车的车牌号。

2、有17个人围成一圈,从0号的人开始报数,凡报到3的倍数的人离开圈子,然后再数下去。直到最后只剩下一个人为止。问此人原来的位置是多少号。

3、编写一个程序,求3X4数组的转置矩阵。要求在main函数里读数,在change 函数里把矩阵转置。

4、用条件编译方法实现以下功能:输入一行电报文字,可以任选两种输出,一为原文输出;一为将字母变成其下一字母(如’a’变成’b’……….’z’变成’a’。其他字符不变)。用#define命令来控制是否要译成密码。例如:#define change 1 ,则输出密码。若#define change 0,则不译成密码,按原码输出。

5、用指向指针的方法对n个字符串排序并输出。

6、用指向指针的方法对n个整数排序并输出。要求将排序单独写成一个函数。N 个整数在主函数中输入。最后在主函数中输出。

7、有n个学生,每个学生的数据包括学号、姓名、年龄和两科成绩。请编程用结构类型的数据处理方式实现如下目标:(1)在main函数中输入原始数据;(2)在count 函数中输出各学生的总分和平均分;(3)输出总分最高的学生;(4)编写sort函数将各学生的数据按总分降序输出。

8、用链表方式建立5个学生的成绩统计表,每个学生的信息包括学号和一门课成绩。要求:(1)程序执行前只含头结点;(2)从键盘输入各学生的成绩时,按学号输入,但各学生在链表中所占接点的位置按成绩的高低排列;(3)程序要能删除特定分数线以下的学生所占的结点,并释放相应的内存。

9、编写文件拷贝程序,执行格式:HCOPY file_name1 file_name2

10、编写对C源程序加行号的程序,执行格式:ADD file_name

11、编写求 Xn函数

12、编写求以下函数

13、编写求子串函数substr(s,n1,n2),在串s中从n1位置开始取n2个字符的子串

14、文本文件连接程序:FCAT file_name1 file_name2

15、超文本文件转换成文本文件程序:TRAN file_name1 file_name2

16、文件分割程序:FG file_name SIZE,如FG XSDOS.LHP 360K

17、文件加密程序:将待加密文件以二进制打开,读入32个字节,分别与口令异或,在将4、5、6三个字分别与0xaaaa异或,即完成加密,执行第二次就解密

18、求矩阵a、b乘积,结果存入矩阵c中并按矩阵形式输出。

矩阵相乘的前提:矩阵A(m×p)的列数p=矩阵B(p×n)。即:C(m×n)=A·B 要求

A=

B=

C= 3

其计算公式是: (i=1,2,…,m j=1,2,…,n) Σ==pkkjikbacij1

19、编写字串 str1 中找出所有小写字母转成大写字母,大写字母转成小写字母后,结果依次存入字符数组 str2 中,str1 不变仍为原字串的程序。例如,字符串 str1 为 "91A2BC. a1bc",调用函数 fun 后,字符数组 str2将存入"91a2bc. A1BC",str1仍然是"91A2BC. a1bc"。

20、编写一个将某个范围在-32768~32767之间的整数转换为R进制(R=2,5,8,16)的通用程序。

(二)程序改错题

程序1:

#include

main()

{

int i,j;

char ch;

while(ch=getch()!='\r')

{

i++;

printf("%c",ch);

}

printf("you type %d characters\n",i);

}

程序2:

#include

#include

main()

{

int i,j;

int sum,k=0;

for(i=0;i<5;i++);

{

printf("input a number:");

scanf("%d",k);

sum+=k;

}

printf("the sum is %d",sum);

}

程序3:

#include

main()

{

int i,j;

clrscr();

for(i=0;i<10;i++)

for(j=0;j<10;j++)

{

if(i=j)break;

printf("* ");

}

printf("\n");

}

程序4:

#include

int fun( )

{

int a[3][3], sum;

int i, j;

_____;

for(i=0; i<3; i++)

{

for(j=0; j<3; j++)

scanf("%d" a[i][j]);

}

for(i=0; i<3; i++)

sum = sum * a[i][i];

printf("Sum=%d\n", sum);

}

main( )

{ fun( ); }

程序5:

#include

#include

void fun(int a, b)

{

int t;

t = b; b = a ; a = t;

}

main( )

{

int a, b;

clrscr( );

printf("Enter a,b :"); scanf("%d%d", &a, &b);

fun(&a, &b);

printf("a=%d b=%d\n", a, b);

}

程序6:

#include

#include

fun(double *a, *b)

{

if(a*b > 0.0)

return 1;

else

return 0;

}

main( )

{

double n, m;

clrscr( );

printf("Enter n , m : "); scanf("%lf%lf", &n, &m);

printf("\nThe value of function is: %d\n", fun(&n, &m));

}

程序7:

#include

#include

#include

int fun(char *s, char *t)

{

int n; char *p, *r;

n = 0;

while(*s)

{

p = s; r = t;

while(*r)

if(*r == *p)

{

r++;

p++

}

else

break;

if(r == '\0')

n++;

s++;

}

return n;

}

main( )

{

char s[100], t[100]; int m;

clrscr( );

printf("\nPlease enter string S:" );

scanf("%s", s);

printf("\nPlease enter substring t:");

scanf("%s", t);

m = fun(s, t);

printf("\nThe result is : m = %d\n", m);

}

程序8:

对候选人得票的统计程度。设由3个候选人,每次输入一个得票的候选人的名字,要求最后输入各人得票结果。(总票数为n)。

程序如下:

#include

struct person

{

char name[20];

int count;

}

leader[3]={"Li",0,"Zhang",0,"Fun",0};

main()

{

int i,j; /*error*/

char leader_name[20];

scanf("%d\dn",&n);

for(i=0;i<=n;i++) /*error*/

{

scanf("%s",leader_name);

for(j=0;j<3;j++)

if(leader_name==leader[j].name) /*error*/

}

printf("\n");

for(i=0;i<3;i++)

printf("%5s:%d\n",leader[i].name,leader[i].count);

}

程序9:

函数str1的功能是输入一个英文句子(字符串),将其中每个单词的最后一个字母改写成大写,然后输出此句子。(这里的"单词"是指由空格隔开的字符串)。例如:若输入:"this is a book ",则应输出:"thiS iS A booK "请改正函数str1中的两个错误,使程序能输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

程序如下:

#include "stdio.h"

#include "ctype.h"

#include "conio.h"

void str1(char *p)

{

int k=0;

for(;*p;p++)

if(k)

{

if(p==' ')

{

k=0;

*p=toupper(*(p-1));

}

}

else

k=1;

}

void main()

{

char str[100];

int d;

clrscr();

printf("\n please input a string:");

gets(str);

str1(str);

printf("\nafter changing:\n %s",str);

}

程序10:

下列给定程序中,函数fun的功能是:分别统计字符串中大写字母和小写字母的个数。例如:给字符串s输入:AAaaBBb123CCccccd,则应该输出结果:upper=6,lower=8。请改正程序中的错误,使程序能得出正确的结果。注意,不要改多main函数,不得增行或删行,也不得更改程序的结构。

程序如下:

#include

void fun (char *s,int a, int b)

{

while(*s)

{

if (*s>='A' && *s<='Z')

a++;

if (*s>='a' && *s<='z')

b++;

s++;

}

}

main()

{

char s[100];int upper=0,lower=0;

clrscr();

printf("nPlease a string:");gets(s);

fun(s,&upper, &lower);

printf("n upper=%d lower=%dn",upper,lower);

}

程序11:

下列给定程序中,函数fun的功能是:逐个比较a、b两个字符串对应位置中的字符,把ASCII值大或等于的字符一次存放到c数组中,形成一个新的字符串。例如,若a中的字符串为aBCDeFgH,b中的字符串为:ABcd,则c中的字符串为:aBcdeFgh。请改正程序中的错误,使程序能得出正确的结果。注意,不要改多main函数,不得增行或删行,也不得更改程序的结构。

程序如下:

#include

void; fun(char *p,char *q,char *c)

{

int k=1;

while(*p!=*q)

{

if (*p<*q) c[k]=*q;

else c[k]=*p;

if (*p) p++;

if (*q) q++;

k++;

}

}

main()

{

char a[10]="aBCDeFgh",b[10]="ABcd",c[80]={''};

fun(a,b,c);

printf("The string a:"); puts(a);

printf("The string b:"); puts (b);

printf("The result:"); puts(c);

}

程序12:

下列给定程序中,函数fun的功能是:依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串。请改正程序中的错误,使程序能得出正确的结果。注意,不要改多main函数,不得增行或删行,也不得更改程序的结构。

程序如下:

#include

void fun (char *s)

{

int i,j;

for (i=0,j=0;s[i]!='\0';i++)

if (s[i]>='0' && s[i]<='9')

s[j]=s[i];

s[j]="\0";

}

main()

{

char item[80];

clrscr();

printf("\nEnter a string:");

gets(item);

printf("\n\nThe string is :\%s\n",item);

fun (item);

printf("\n\nThe string of changing is :\%s\n",item);

}

程序13:

假定整数数列中的数不重复,并存放在数组中。下列给定程序中,函数fun的功能是:删除数列中值为x的元素。n中存放的是数列中元素的个数。请改正程序中的错误,使程序能得出正确的结果。注意,不要改多main函数,不得增行或删行,也不得更改程序的结构。

程序如下:

#include

#define N 20

fun (int *a,int n, int x)

{

int p=0,i;

a[n]=x;

while (x!=a[p])

p=p+1;

if (p==n)

return -1;

else

{

for (i=p;i

a[i+1]=a[i];

return n-1;

}

}

main()

{

int w[N]={-3,0,1,5,7,99,10,15,30,90},x,n,i;

n=10;

printf("The original data:n");

for (i=0;i

printf("%5d",w[i]);

printf("nInput x (to delete):");

scanf("%d",&x);

printf("Delete:%dn",x);

n=fun(w,n,x);

if (n==-1)

printf("***Nor be found!***nn");

else

{

printf("The data after deleted:n");

for (i=0,i

printf("%5d",w[i]);printf("nn");

}

}

程序14:

下列给定程序中,函数fun的功能是:根据整型形参m的值,计算如下公式的值。t=1-1/2×2-1/3×3-…-1/m×m。例如,若m中的值为5,则应输出:0.536389。请改正程序中的错误,使程序能得出正确的结果。注意,不要改多main函数,不得增行或删行,也不得更改程序的结构。

程序如下:

#include

#include

double fun (int m)

{

double y=1.0;

int i;

for (i=2;i

y-=1/(i*i);

return(y);

}

main ()

{

int n=5;

clrscr();

printf("\nRhe result is %1f\n",fun(n));

}

程序15:

下列给定程序中,函数fun的功能是:用选择法对数组中的n个元素按从小到大的顺序进行排序。请改正程序中的错误,使程序能得出正确的结果。注意,不要改多main 函数,不得增行或删行,也不得更改程序的结构。

程序如下:

#include

#define N 20

void fun(int a[],int n)

{

int i,j,t,p;

for (j=0;j

{

p=j

for (i=j;i,n;i++)

if (a[i]

p=j;

t=a[p];a[p]=a[j];a[j]=t;

}

}

main()

{

int a[N]={9,6,8,3,-1},i,m=5;

printf("排序前的数据:");

for (i=0;i

printf("%d",a[i]);printf("\n");

fun(a,m);

printf("排序后的数据:");

for (i=0;i

相关文档
相关文档 最新文档