C语言课程设计实习报告
一、两个大数相乘问题
1、题目描述:
【要求】本问题中,要求输入两个相对较大的正整数,能够通过程序计算出其结果。
【提示】两个相对较大的数肯定是不能够用LONG INT类型存储的,因为LONG型数据的数据范围也并不是很大,于是就需要采用其他的存储结构。这里推荐用数组存储一个大数,数组的初始空间可以定义到如200或300个单元,每个单元存储一位数据,形如下图:
这样理论上,比如数组定义为200,就可以存储200个数字的整数,应该是满足足够大的条件了。而结果的存储也需要考虑空间的问题,所以需要一个更大的数组。
在解决了存储问题后,我们需要来实现乘法运送的过程,也就是说你必须要把这个数组中的每一位数字单独来进行乘法运算,比如我们可以用一个数字和另外一个数组中的每一位去相乘,从而得到乘法运算中一行的数字,再将每一行数字错位相加。这就是乘法运算的过程。
2、设计思路:
乘法计算的算法,从低位向高位乘,在竖式计算中,我们是将乘数第一位与被乘数的每一位相乘,记录结果,之后,用第二位相乘,记录结果并且左移一位,以此类推,直到计算完最后一位,再将各项结果相加。通过调用函数得出最后结果。
流程图:
3、运行效果截图:
a:65498765165
b:16515135135
65498765165*16515135135=1081720957875605572275
4、附源程序如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 100
int GetDigits(int *a,char *s);
int multiply(int *a,int *b,int *c);
main()
{
char s1[N],s2[N];
int i,j,a[N],b[N],c[N*2];
printf("\n 请输入大数a: ");
scanf("%s",s1);
printf("\n 请输入大数b: ");
scanf("%s",s2);
GetDigits(a,s1);
GetDigits(b,s2);
multiply(a,b,c);
j=N*2-1;
while(c[j]==0)
j--;
printf("\n %s * %s=",s1,s2);
for(i=j;i>=0;i--)
printf("%d",c[i]);
return 0;
}
int GetDigits(int *a, char *s)
{
int i;
char digit;
int len=strlen(s);
for(i=0;i<N;i++)
*(a+i)=0;
for(i=0;i<len;i++)
{
digit=*(s+i);
*(a+len-1-i) = digit - '0';
}
return 0;
}
int multiply(int *a,int *b,int *c)
{
int i,j;
for(i=0;i<N*2;i++)
*(c+i)=0;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
*(c+i+j)+=*(a+i) * *(b+j);
for(i=0;i<N*2-1;i++)
{
*(c+i+1)+=*(c+i)/10;
*(c+i)=*(c+i)%10;
}
return 0;
}
二、画组合图形问题
1、题目描述:
【要求】了解C语言的图形函数,掌握用C语言画图的基本方法。首先需要同学们能够在屏幕上用各种颜色画出简单的点、直线、圆、椭圆、矩形、填充圆、填充矩形等图形,然后自由构图,通过编程实现一副简单图画(要求有一定意义)或动画。
【提示】C语言中有图形库函数<graphics.h>,包含此头文件可调用其中的图形函数,如画点函数、画线函数等。给出实例程序段如下,同学们可通过其举一反三。其他函数请查阅帮助文档或网络。
2、设计思路:
通过图形库函数<graphics.h>,包含此头文件可调用其中的图形函数绘制直线和圆弧进行组合,绘制成一幅较复杂的图画。许多图形可以由直线组成。以下话的房屋,可以由矩形、平行四边形和三角形组成。画直线函数line可以在指定位置画一条指定长度的直线。前景色决定屏幕上显示对象的颜色。C语言的作图函数都使用当前前景色作图。因此,要用什么颜色画图,在调用作图函数之前就先设置它为前景色。设置前景色可以使用setcolor函数。背景色决定屏幕的颜色,设置背景色可以使用setbkcolor函数。设置填充模式可以使用setfillstyle函数。
3、运行效果截图:
4、附源程序如下:
#include "graphics.h"
main( )
{
int drive,mode;
drive=DETECT;
initgraph(&drive,&mode,"E:\\123"); /*设置图形模式*/
cleardevice( );
circle(450,100,30); /*画太阳*/
setfillstyle(SOLID_FILL,LIGHTRED);
floodfill(450,100,12); /*自动充填太阳为浅红色*/
setbkcolor(15); /*设置背景色为白色*/
setcolor(6); /*设置前景色为棕色*/
rectangle(225,250,480,400); /*画正面*/
rectangle(390,320,440,400); /*画门*/
rectangle(260,290,300,330); /*画窗户*/
line(260,310,300,310);
line(280,290,280,330);
line(200,200,455,200);
line(455,200,480,250);
line(200,200,225,250); /*画屋顶*/
line(160,230,200,200);
line(160,230,225,250); /*画左面*/
line(160,230,160,380);
line(160,380,225,400);
getch( );
closegraph( ); /*关闭图形模式*/
}
实习感想:
计算机编程真的是一门很严谨的学科,容不得半点差错,少一个标点,少一个符号,都可以导致整个程序错误而无法运行。编程是对我们耐心和细心严谨态度的考验,启发了我在治学求学的道路上,要审慎细心。编程确实有些难度,很多问题都要请教同学帮助,刚开始时,几乎寸步难行,如果没有程序设计指导书的帮助,还有同学们的耐心讲解和协作,我不可能写出这套程序。我们学习了C语言程序设计,初步了解了一些计算机语言方面的知识。借这次上机实习之际我又把上学期的课程重新复习了一遍。
实践总是检验真理的唯一方法,学了再多的知识不会运用。学习C语言就是为了运用它帮助我们解决一些日常生活中遇到的问题,而此次的课程设计就为我们提供了检验自己能力的一次机会,也给了我们一次弥补以前缺陷的机会。总而言之,这次课程设计使我获益匪浅。
最后,感谢老师在百忙之中,指导我们C语言实习以及认真查阅修改我们的实习报告,在这个寒冷的冬季,麻烦辛苦老师了。预祝老师新年快乐,万事如意。
20##年12月
第二篇:C语言课程设计实习报告封面
C语言课程设计实习报告
姓 名: 学 号:
专 业: 班 学 号:
院(系): 指导教师:
年 月