C语言课程设计.docx

上传人:b****5 文档编号:11633925 上传时间:2023-03-29 格式:DOCX 页数:16 大小:19.36KB
下载 相关 举报
C语言课程设计.docx_第1页
第1页 / 共16页
C语言课程设计.docx_第2页
第2页 / 共16页
C语言课程设计.docx_第3页
第3页 / 共16页
C语言课程设计.docx_第4页
第4页 / 共16页
C语言课程设计.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

C语言课程设计.docx

《C语言课程设计.docx》由会员分享,可在线阅读,更多相关《C语言课程设计.docx(16页珍藏版)》请在冰豆网上搜索。

C语言课程设计.docx

C语言课程设计

1问题描述

1.1题目及要求

(2)建立n阶方阵,任选一题完成打印:

1)螺旋方阵,如下图:

1234

1213145

1116156

10987

1.2题目及要求

(3)已知2000年1月1日为星期六,请输入任一年的出生日期,确定是星期几

1.3题目及要求

长整数的处理

假定用一个整型数组表示一个长整数,数组的每个元素存储长整数的一位数字,则实际的长整数m表示为:

(C)

m=a[k]×10(k-1)+a[k-1]×10(k-2)+….+a[2]×10+a[1]

其中a[0]保存该长整数的位数。

求:

(1)长整数乘普通整数;

(2)长整数除普通整数。

2系统分析

 

2.1题目一

2.1.1题目要求

建立n阶方阵。

且打印出来。

2.1.2算法设计

2.1.3流程图

2.1.4关键问题

N阶方阵中,行和列的变化比较多,在做时,一定要注意行与列的变化规则

2.2题目二

2.2.1题目要求

)已知2000年1月1日为星期六,请输入任一年的出生日期,确定是星期几

2.2.2算法设计

2.2.3流程图

2.2.4关键问题

一年当中有闰年的情况,月数的天数也不相同,所以要特别注意每一个月的天数。

2.3题目三

2.3.1题目要求

长整数的处理。

实现长整数与普通整数的乘除法运算。

2.3.2算法设计

2.3.3流程图

2.3.4关键问题

输入的长整数在数组中是从低位到高位存放;而在做运算时则相反。

在做乘法时,按位乘要注意进位;在做除法时,要注意余数的存放。

3系统实现

3.1题目一

#include

voidMatrix(intn)

{

introw=0,col=0;//当前位置所在的行列

intleft=-1,right=n,top=-1,bottom=n;//当前的边界

intirow=0,icol=1;//当前的前进方向(初始时往右)

intarr[20][20];

for(inti=0;i

{

arr[row][col]=i+1;

//根据当前的前进方向获得下一个位置的行列号

row+=irow;

col+=icol;

if(col==right)

{

//下一个位置是右边界时,往下。

irow=1;

icol=0;

//此时,顶边界往下一格

top+=1;

//改变下一个位置

row+=1;

col-=1;

}

if(row==bottom)

{

//下一个位置是底边界时,往左。

irow=0;

icol=-1;

//此时,右边界往左一格

right-=1;

//改变下一个位置

row-=1;

col-=1;

}

if(col==left)

{

//下一个位置是左边界时,往上。

irow=-1;

icol=0;

//此时,底边界往上一格

bottom-=1;

//改变下一个位置

row-=1;

col+=1;

}

if(row==top)

{

//下一个位置是顶边界时,往右。

irow=0;

icol=1;

//此时,左边界往右一格

left+=1;

//改变下一个位置

row+=1;

col+=1;

}

}

for(i=0;i

{

for(intj=0;j

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

printf("\n");

}

printf("\n");

}

voidmain()

{

intm;

printf("请输入m:

");

scanf("%d",&m);

Matrix(m);

}

3.2题目二

#include

intisleap(intyear);

voidoutput(intmonth,intleap,intday1);

voidmain()

{

intyear,flag,day=0,i;

do

{

printf("请输入年份!

\n");

scanf("%d",&year);

}

while(0);

flag=isleap(year);

if(year>=2000)

/*以2000年1月1日(星期六)为基准,计算与输入年份的1月1日相隔天数*/

day+=(year-2000)*365+(year-1999)/4;

else

day-=(2000-year)*365+(2002-year)/4;

day=day%7;

/*一周七天,计算得到余数即可知输入年份的1月1日为星期几*/

if(day<=0)day+=7;

/*2000年前的年份天数相隔为负,余数也为负,+7转化为正数*/

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

{

output(i,flag,day);

/*i表示打印的月份(对应的形参为month),flag为闰年标志(对应形参为leap),

day为当月首日为星期几(对应形参为day1)*/

switch(i)

{

case1:

case3:

case5:

case7:

case8:

case10:

case12:

day+=31;break;

case4:

case6:

case9:

case11:

day+=30;break;

case2:

if(flag==1)day+=29;

elseday+=28;

}

day=day%7;

}

scanf("%d",&year);

}

intisleap(intyear)

{

if(year%4==0)return

(1);

elsereturn(0);

}

voidoutput(intmonth,intleap,intday1)

{

intrange,i,j=0;

switch(month)

{

case1:

case3:

case5:

case7:

case8:

case10:

case12:

range=31;break;

case4:

case6:

case9:

case11:

range=30;break;

case2:

if(leap==1)range=29;

elserange=28;

}

printf("~%d月~\n",month);

printf("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\n");

if(day1>1)

for(i=1;i

printf("\t");

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

{

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

j++;

if(j==7){j=0;printf("\n");}

}

printf("\n\n");

}

3.3题目三

//***************************************************************************************************

#include

#include

voidinput(intstr1[],intstr2[]);

voidmul(intstr1[],intx);

voiddiv(intstr2[],intx);

voidoutput(intnum[]);

//*****************************************************************************

voidmain()

{

intstr1[20],str2[20];

intx;

intsel;

printf("请输入普通整数(不得大于5位)\n");

scanf("%d",&x);

do

{

printf("\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");

printf("\t1长整数的输入\n");

printf("\t2长整数乘普通整数\n");

printf("\t3长整数除普通整数\n");

printf("\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");

printf("\t0退出系统\n");

printf("\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");

printf("请选择:

");

scanf("%d",&sel);

switch(sel)

{

case1:

input(str1,str2);break;

case2:

mul(str1,x);output(str1);break;

case3:

div(str2,x);output(str2);break;

case0:

printf("\n\n\t\t\t\t^-^,再见!

\n\n\n");break;

}

}while(sel!

=0);

}

//*****************************************************************************

voidinput(intstr1[],intstr2[])

{

inti,j,len;

charstr[20];

getchar();

printf("请输入长整数(不得大于10位):

");

gets(str);

len=strlen(str);

for(i=1,j=len-1;i<=len,j>=0;i++,j--)//字符串在数组中为ASCII码,将其转换成数字

str1[i]=str[j]-'0';//并且个位数在字符数组的最高位,因此要用

//str1[i]=str[j]-'0'将其放入低位。

str1[0]=len;

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

str2[i]=str1[i];

}

//********************************************************************************

voidmul(intstr1[],intx)

{

inti,c=0;

for(i=1;i<=str1[0];i++)

{

c+=str1[i]*x;

if(c>=10)

str1[i]=c%10;

else

str1[i]=c;

c=c/10;

}

while(c!

=0)

{

str1[i]=c%10;

c=c/10;

i++;

str1[0]++;

}

}

//该问是参考答案做的

voiddiv(intstr2[],intx)

{

inti,n;

n=str2[0];

str2[0]=0;//为了当i==1时,str2[0]=str2[0]+余数,使str2[0]保存余数

for(i=n;i>=1;i--)

{

if(str2[i]

{

str2[i-1]=str2[i-1]+str2[i]*10;//本地余数

str2[i]=str2[i]/x;

}

else

{

if(str2[i]%x!

=0)

str2[i-1]=str2[i-1]+(str2[i]%x)*10;

str2[i]=str2[i]/x;

}

if(str2[n]==0)

n--;//此下标很关键,除掉起始位的0,不予计位

}

i=str2[0];//str2[0]中保存的是余数

str2[0]=n;//现在str2[0]中保存的是长整数的位数

}

//该问参考答案

voidoutput(intnum[])

{

inti;

for(i=num[0];i>=1;i--)

printf("%d",num[i]);

}

//***************************************************************************************************************

系统测试

4.1题目一

请输入m:

4

1234

1213145

1116156

10987

Pressanykeytocontinue

4.2题目二

请输入年份!

2000

~1月~

星期日星期一星期二星期三星期四星期五星期六

1

2345678

9101112131415

16171819202122

23242526272829

3031

~2月~

星期日星期一星期二星期三星期四星期五星期六

12345

6789101112

13141516171819

20212223242526

272829

~3月~

星期日星期一星期二星期三星期四星期五星期六

1234

567891011

12131415161718

19202122232425

262728293031

~4月~

星期日星期一星期二星期三星期四星期五星期六

1234567

891011121314

15161718192021

22232425262728

2930

~5月~

星期日星期一星期二星期三星期四星期五星期六

123456

78910111213

14151617181920

21222324252627

28293031

~6月~

星期日星期一星期二星期三星期四星期五星期六

123

45678910

11121314151617

18192021222324

252627282930

~7月~

星期日星期一星期二星期三星期四星期五星期六

1234567

891011121314

15161718192021

22232425262728

293031

~8月~

星期日星期一星期二星期三星期四星期五星期六

12345

6789101112

13141516171819

20212223242526

2728293031

~9月~

星期日星期一星期二星期三星期四星期五星期六

12

3456789

10111213141516

17181920212223

24252627282930

 

~10月~

星期日星期一星期二星期三星期四星期五星期六

1234567

891011121314

15161718192021

22232425262728

293031

~11月~

星期日星期一星期二星期三星期四星期五星期六

1234

567891011

12131415161718

19202122232425

2627282930

~12月~

星期日星期一星期二星期三星期四星期五星期六

12

3456789

10111213141516

17181920212223

24252627282930

31

 

4.3题目三

请输入普通整数(不得大于5位)

11111

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1长整数的输入

2长整数乘普通整数

3长整数除普通整数

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

0退出系统

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

请选择:

1

请输入长整数(不得大于10位):

1111111111

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1长整数的输入

2长整数乘普通整数

3长整数除普通整数

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

0退出系统

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

请选择:

2

12345555554321~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1长整数的输入

2长整数乘普通整数

3长整数除普通整数

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

0退出系统

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

请选择:

总结

一年很快就过去了,通过这一年对C语言的学习,对这个陌生的“语言”总算是从表层上比较熟悉,了解了它的一些基本知识,学习C语言对我而言,真的感觉很难,很多算法和结构都想不到,我也很想学好它,但很多时候都心有余而力不足,也许是思维不灵活吧。

都说学习是个积累了过程,上课仔细听课能听懂,但一旦题归我手就不再那么轻松,很困难。

当被一个题卡住时很不好受,有时很不懂为什么别人轻而易举就能解决的问题,在我这里就成了另一番景象,很苦恼;但有时看到自己的成果时心中的苦闷也就减少了。

有时就那么短短的几条程序就能看到很美丽的图案,那种喜悦又怎不让我对这么特殊的语言感兴趣。

不过太大或者说复杂的程序,我真的会无从下手,不知该如何是好,就像这次的课程设计,如果真的要我自己独立去完成,真的太有难度了,所以很多地方都是听别人讲了,然后根据他们的思路,有时就连他们中的一些较复杂的语句,我都要琢磨半天才能搞清楚,所有这个课程设计很多地方都是别人的东西,我只是当了一个拾“知识垃圾”的人而已,不是我不愿去想,也不是我不想去想,我想了也查了一些资料,但都像是做了一些无用功一样,用在程序中没有一点亮色,反而新增了很多错误,很无赖。

不过很幸运,我们遇到了纪老师,我们全班的同学都很喜欢你,你让我们感到上课很轻松,不会感到枯燥乏味;不过很遗憾,C语言我学的很不好,这次课程设计,让我从他们那里学到了很多的方法,虽然课程设计做得很不好,但是我认真对待了,也认真的付出了。

回归编程,思路和算法真的很重要,在以后的学习中,我会更加注重在这方面的提高的,也会更多的去练习编程。

谢谢纪老师

 

20090703

周盼祎

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

当前位置:首页 > 求职职场 > 简历

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

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