还剩16页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
C语言课程设计报告
一、实践的目的和要求加深对《C语言》课程所学知识的理解,进一步巩固C语言语法规则学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备解决综合性实际问题的能力
二、实践内容在熟练掌握C语言的基本知识数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的使用)等进一步掌握各种函数的应用,包括时间函数、绘图函数,以及文件的读写操作等
三、实践任务1.欢迎画面2.学生成绩管理系统(自己设计界面)3.异或加密与解密
(1)文件加密
(2)文件解密说明将某一已知文件的内容以字符形式读出,与密钥(用户从键盘输入)的对应字符进行异或操作即可,解密同样如此如设原文为ab1234,密钥为56,则有ab1234565656按二进制进行异或操作即可得到密文(乱码)4.移位加密与解密
(1)文件加密
(2)文件解密说明将某一已知文件的内容(限于英文字母)以字符形式读出,根据密钥k(用户从键盘输入)将对应字符进行移位操作即可,解密时__方向相反如设原文为abcdef,密钥为5,则有abcdef每个字母按字母表向后__位(注z后接a)fghijkl可得到密文(乱码)5.辅助运算
(1)整数N模m的乘法逆t要求输入整数N和m,求出t,若t不存在,给出信息提示这三个数满足N*t%m=1,使用穷举法例如当N为11,m为26时,由于(11×19)%26=1,所以11模26的乘法逆为19
(2)统计字母个数要求输入一段英文字母,统计各个字母的个数,并按个数从大到小排序输出提示字母大小写等价输出格式为字母个数
(3)OTP加密要求输入同等长度的原文x和密钥k(英文字母),根据公式c=x+k%26得到密文,并输出提示将26个字母按0~25编号,将原文字母和对应位置的密钥字母的编号按上述公式进行计算后得到一个新的字母
四、设计流程图流程图另附!
五、相关程序1欢迎画面#includestdlib.h#includegraphics.hstructSnow{intx;inty;intspeed;}snow
[100];intsnownum=0;intsize;intchange=10;void*s__e1*s__e2;voidCopy;voidDrawSnow;voidPr;void__invoid{intgd=DETECTgm;initgraphgdgmc:\\turboc2;Copy;DrawSnow;getch;closegraph;}voidCopy{setcolor0;setfillstyleSOLID_FILL15;fillellipse20020044;size=i__gesize196196204204;s__e1=__llocsize;s__e2=__llocsize;geti__ge196196204204s__e1;geti__ge9696104104s__e2;}voidPr{ints
[15]={0100150200150200250150250300250150100250350};setcolorchange/10;settextstyle004;outtextxy150200Welcome!!!;sounds[change/10];}voidDrawSnow{inti;intsx
[62];randomize;fori=0;i62;i++sx[i]=i+2*10;cleardevi__;while!kbhit{Pr;ifsnownum!=100{snow[snownum].speed=2+random5;i=random62;snow[snownum].x=sx[i];snow[snownum].y=10-random100;}fori=0;isnownum;i++puti__gesnow[i].xsnow[i].ys__e2COPY_PUT;Pr;ifsnownum!=100snownum++;/*delay300;*/setfillstyleSOLID_FILL15;fori=0;isnownum;i++{snow[i].y+=snow[i].speed;puti__gesnow[i].xsnow[i].ys__e1COPY_PUT;ifsnow[i].y500snow[i].y=10-random200;}change++;ifchange==140change=10;}nosound;}2学生成绩管理系统(自己设计界面)#defineN1structstudent{charnum
[10];charname
[10];intscore
[4];float__e;}stu[N];__in{intij__x__xisum;float__erage;fori=0;iN;i++{printfPleaseinputscoresofstudent%d:\ni+1;printfNO.:;scanf%sstu[i].num;printfname:;scanf%sstu[i].name;forj=0;j3;j++{printfscore%d:j+1;scanf%dstu[i].score[j];}}__erage=0;__x=0;__xi=0;fori=0;iN;i++{sum=0;forj=0;j3;j++sum+=stu[i].score[j];stu[i].__e=sum/
3.0;__erage+=stu[i].__e;ifsum__x{__x=sum;__xi=i;}}__erage/=N;printfNO.namescore1score2score3__erage\n;fori=0;iN;i++{printf%5sstu[i].num;printf%10sstu[i].name;forj=0;j3;j++printf%9dstu[i].score[j];printf%
8.2f\nstu[i].__e;}printf__erage=%
6.2f\n__erage;printfThehighestscoreis:%sscoretotal:%d\nstu[__xi].name__x;getch;}3.异或加密与解密#includestdio.h#includestdlib.h#includeconio.h#includestring.hvoidjiamichar*inchar*pwdchar*out;void__inintar__char*argv[]{charin
[30];charout
[30];charpwd
[8];ifar__!=4{printf\Inputfilename:\n;getsin;printfPleaseenterpassword:\n;getspwd;printfOutputfilename:\n;getsout;jiamiinpwdout;}else{strcpyinargv
[1];strcpypwdargv
[2];strcpyoutargv
[3];jiamiinpwdout;}}voidjiamichar*inchar*pwdchar*out_file{FILE*fp1*fp2;registercharch;intj=0;intk=0;fp1=fopeninrb;iffp1==NULL{printfCannotopenin-file!\n;exit1;}fp2=fopenout_filewb;iffp2==NULL{printfCannotopenorcreateoutput-file!\n;exit1;}whilepwd[++k];ch=fgetcfp1;while!feoffp1{fputcch^pwd[j=kj=0:j++]fp2;ch=fgetcfp1;}fclosefp1;fclosefp2;}4.移位加密与解密#includestdio.h__in{intchoi__=0k;FILE*fp1*fp2;charcfilename1
[30]filename2
[30];printfPleaseinputtwodeferentfilename:;scanf%s%sfilename1filename2;printfPleaseinputthepassword:\n;scanf%dk;iffp1=fopenfilename1r==NULLprintf\nERROR!CANNOTOPENTHEFILE\n;else{fp2=fopenfilename2w;printf\nChoose:1-jiami2-jiemi;scanf%dchoi__;switchchoi__{case1:do{c=getcfp1;ifc=ac=z-k||c=Ac=Z-kputcc+kfp2;elseifcz-kc=z||cZ-kc=Zputcc-26-kfp2;elseputccfp2;}whilec!=EOF;break;case2:do{c=getcfp1;ifc=a+kc=z||c=A+kc=Zputcc-kfp2;elseifc=aca+k||c=AcA+kputcc+26-kfp2;elseputccfp2;}whilec!=EOF;break;default:printf\nYouh__echooseawrongnumber!Pleasechooseagain!;}}fclosefp1;fclosefp2;}5.辅助运算
(1)整数N模m的乘法逆t__in{unsignednmt=1;intc;printfPleaseenterthenumber:\n;scanf%d%dnm;whilet65535{c=n*t%m;ifc==1||c==0break;t++;}ift==65535||c==0printfNichengnumberisnotexited!\n;ifc==1printfTis:%d\nt;getch;}
(2)统计字母个数#includestring.h__in{intijt;chara
[80]b
[26];intc
[26];chare;printfPleaseentertheletters:\n;getsa;fori=0;i26;i++b[i]=A+i;fori=0;i26;i++c[i]=0;forj=0;j80;j++{fori=0;i26;i++{ifa[j]==b[i]||a[j]==b[i]+32c[i]++;}ifa[j]==\0break;}forj=0;j=25;j++{fori=0;i=25;i++{ifc[i]c[i+1]{t=c[i];c[i]=c[i+1];c[i+1]=t;e=b[i];b[i]=b[i+1];b[i+1]=e;}}}fori=25;i=0;i--{ifc[i]!=0printfThe%cletternumberis%d\nb[i]c[i];}getch;}
(3)OTP加密#includestdio.h__in{chara
[80]b
[80]c
[80];inti;printfPleaseenterthex:\n;getsa;printfPleaseenterthek:\n;getsb;fori=0;i80;i++c[i]=a[i]+b[i]%26;printfTheresultis:\n;fori=0;i80c[i]!=\0;i++printf%cc[i];getch;}六心得体会通过此次C语言程序设计实践本人实在是获益不浅!C语言是上个学期开的课程所以这个学期并没___过当要开始设计的时候还真不知从哪下手!结果第一次的上机我只坐了一个下午什么也没干!回去以后我想这样不行这样下去还得了!我就重新学了一遍我们上个学期的教材发觉自已有许多都遗忘了!特别是有文件的操作几乎是一遍空白!温习过后开始做题!那个欢迎动画是在”C语言之家”找到的自已改了一下但并没做多大的改动!之后做出来的第一个程序是”统计字母个数”因为上个学做过类似的!接着是”乘法逆”这个我觉得比较简单!再接着是”OTP”加密!而那个学生成绩管理系统是参考了上机手册后做出来的!最后花了最多时间的是”异或加密与解密”和”移位加解密”几乎花了我百分之九十的时间而且还是在一些在其他大学读计科专业的同学的帮助下和在上网查看了大量的资料之后才做出来!最后想说两句这次设计让我重新掌握了C语言而且还得到了用C语言解决实际问题的宝贵经验!。