C语言程序设计 (一)

时间:2024-10-07 06:46:05 计算机毕业论文 我要投稿

C语言程序设计 (一)

课程设计的目的 通过课程设计全面掌握《C语言程序设计》关键知识点,掌握C语言中数组、指针、结构体、文件等方面的基本知识。
通过课程设计了解并掌握C语言程序设计的方法,熟悉C程序设计的开发环境及C程序的调试过程。
培养学生查阅参考资料、手册的自学能力,通过独立思考深入钻研有关问题,学会自己分析、解决问题的方法。 

课程设计的任务和要求  任务: 编程求出输入的两个正整数之和,这两个正整数的可能达到200位。
 要求:
 输入:
 共有两行,第一行为第1个正整数;第二行为第2个正整数。
 输出:
 2个正整数之和。
 

主要参与成员
  姓 名  学  号   系   别  班  级    主要作用(分工) 
       
成果形式     设计      软件     作品     其他: 
完成情况及以后的拓展设想  通过用C语言编写函数基本实现了大整数相加这个程序,但该程序仍存在一些不足,还可以加上一些语句使程序具有容错功能,并且可以正确计算一个负数和一个正数相加。 

课 程 设 计 鉴 定 情 况 表
小组鉴定意见 


                                        小组长签名:
                                                   年   月   日 

指导教师意见
 


                                     教师签名:
                                              年   月  日  
 课程设计成绩  优         良        及格        不及格 
教研室意见 

 

                                               年      月    日 
备注  《C语言程序设计》课程设计报告书
作者:廖 序
课程设计概述
课程设计名称
 大整数相加
任务要求:
 编程求出输入的两个正整数之和,这两个正整数的可能达到200位。
 输入:
 共有两行,第一行为第1个正整数;第二行为第2个正整数。
 输出:
 2个正整数之和。
开发环境:
 C语言。C语言是目前世界上流行、使用最广泛的高级程序设计语言。1972年,C语言在美国贝尔实验室里问世,后来又被多次改进,并出现了多种版本。80年代初,美国国家标准化协会(ANSI),根据C语言问世以来各种版本对C语言的发展和扩充,制定了ANSIC标准。
 目前,在微机上广泛使用的C语言编译系统有MicrosoftC、Turbo C 、Borland C等。这些C语言版本不仅实现了ANSIC标准,而且在此基础上各自作了一些扩充,使之更加方便、完美。
 
 C语言的特点:
 C语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护。
 C语言的表现能力和处理能力极强。它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。它还可以直接访问内存的物理地址,进行位(bit)一级的操作。
 由于C语言实现了对硬件的编程操作,因此C语言集高级语言和低级语言的功能于一体。既可用于系统软件的开发,也适合于应用软件的开发。
 此外,C语言还具有效率高,可移植性强等特点。因此广泛地移植到了各类各型计算机上,从而形成了多种版本的C语言。
 参考资料
李铮、叶艳冰、汪德俊,C语言程序设计基础与应用,清华大学出版社,2005
[2]CSDN技术中心

二、概要设计
 为了实现大整数相加这个程序,将程序划分为了三个模块:
输入数据。
运算。
输出结果。

 首先定义了子函数Input()来存储用户输入的两个加数,为了满足任意位数的两个大整数相加,在子函数Input()中嵌套调用子函数Init()使sum数组里面存放的数初始化为”0”。
 然后定义子函数Long_Add()使两个大整数作加法运算,从后面往前面相加,附带进位。定义子函数Output()实现输出结果。
 最后如下图所示,在主函数main中调用Input(),Long_Add(),Output()三个子函数实现程序。
 
三、详细设计
 程序的流程图:
                                                四、调试过程
第一次 测试数据a=1234567893456767,b=111111
编译运行后不能输出结果,检查函数后编译正确。再次分析,发现如果直接把a,b,sum定义为unsigned int型的话,计算出来的和的范围只能在0~65535之间,否则就会出现错误。
尝试将a,b,sum存放到字符数组中,从个位开始,一位一位相加。
第二次  测试数据a=1234567893456767,b=111111
编译运行后仍不能输出结果。分析原因,在用于输出的子函数Output()中,输出数组字符数组sum[]前未确定和的最高非零位。
 尝试加入for(i=0;i<Max;i++)语句来寻找和的最高非零位,再
 if(sum[i] != '0')
                     break;
        次进行调试。
第三次  测试数据a=99999919,b=99
         编译运行后发现计算出来结果不正确。经过分析,函数中没有对最后
 一个进位进行处理。
 尝试加入while(carry > 0)          语句,再次进行调试。
                {
                 tempsum = sum[i]-'0'+carry ;
          sum[i] = tempsum%10+'0';
          carry = tempsum/10;
                 i--;
                }
第四次  测试数据a=99999919,b=99
      编译运行后得到正确结果。
第五次  随意输入几组数据进行测试,结果都是正确的。程序得到实现。
五、结论与体会
 通过不断的调试、修改,本课程设计最终实现了200位以内的两个大整数相加,但程序还可以进一步完善,程序中仍存在一些不足之处,比如缺少容错功能,不能准确计算负整数加正整数,等等问题
 虽然C语言程序设计在上学期做为我们的必修课已经学习过了,但书到用时方恨少,这次课程设计的学习程序设计中暴露出的我自身的问题更是非常明显。
 一开始看到题目认为非常简单,直接将两个数都定义为整型。编写程序并运行后发现并不能达到题目的要求,计算出来的和只能小于等于65535,否则就会出现错误。分析后,将数据作为字符串来处理,用for循环语句从存数的字符数组中一位一位的取数出来,按照数位对齐,从个位开始,按位相加,逢十进一的运算规则进行运算。最后用字符输出函数putchar()输出计算出来的结果。由于程序偏大且较复杂,将程序划分为了输入数据、运算、输出数据三个子程序。数次编译调试后,最终使程序得以实现。
 经过三个星期的上机实践学习,使我对C语言有了更进一步的认识和了解,让我能够进一步的掌握和运用C语言来编写程序。要想学好C语言要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处和薄弱环节。
 首先,基础掌握不牢固,对于C语言中的许多基本语法尚没有熟练掌握,在设计过程中仍需请教其它同学,查阅课本,设计效率很低。
 其次,经典算法掌握不牢。在完成作业的过程中还需查阅书籍和借鉴他人。
 再次,程序量过大的时候,头绪理不清。杂乱无章,无系统性,不便调试和阅览,自己也易于出错。
 并且对C语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。
 通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。
六、源程序清单
#include <stdio.h>
#include <string.h>
#define Max 1000
char sum[Max+1];   /*和*/       
char a[Max],b[Max];   /*两个加数*/    
int len1,len2;
void Input(char a[],char b[])
{
 int i,len;
 void Init(char a[]);   /*对Init()函数进行声明*/
 printf("Please enter two integer:\n");
 scanf("%s %s",a,b);
 len1=strlen(a);
 len2=strlen(b);
 Init(sum);
 len=strlen(a);
 for(i=len-1; i>=0; i--)
  sum[Max+i-len] = a[i];
}
void Init(char a[])
{
 int i;
 for(i=0; i<Max; i++)
 a[i] = '0';
return ;
}

void Long_Add(char sum[],char new[]) 
{
 int i,j;
 int len;
 int tempsum;
 int carry = 0;  /*进位*/            
 len = strlen(new);
/*从个位开始,按位相加,逢十进一*/
 for(i=Max-1,j=len-1; i>=0,j>=0; i--,j--)
 {
  tempsum = sum[i]-'0'+new [j]-'0'+carry;
  sum[i] = tempsum%10+'0';
  carry = tempsum/10;
 }
 while(carry > 0)  /*处理最后一个进位*/
 {
  tempsum = sum[i]-'0'+carry ;
  sum[i] = tempsum%10+'0';
  carry = tempsum/10;
  i--;
 }
 return;
}

void Output(char sum[])
{int i,n;
/*寻找和的最高非零位*/
 for(i=0;i<Max;i++)
  if(sum[i] != '0')
   break;
/*输出计算出来的和*/
 n=i;
 for(n;n<Max;n++)
  putchar(sum[n]);
 return ;
}
 int main()
{
 Input(a,b);
 Long_Add(sum,b);
 Output(sum);
 getch();
 return 0;

【C语言程序设计 (一)】相关文章:

论独立学院 C语言程序设计教学改革与实践03-27

多媒体课件制作-《C程序设计》03-08

Solaris下PRO*C和OCI程序设计分析与比较03-18

c语言毕业论文开题报告05-03

C语言实验课教学探讨03-02

试析中职学校的C语言教学03-20

分枝结构的程序设计 (一)03-07

人工智能AI程序设计语言简介03-18

I2C总线在uClinux操作系统下的驱动程序设计11-22