程序设计基础实验报告(共36页).doc





《程序设计基础实验报告(共36页).doc》由会员分享,可在线阅读,更多相关《程序设计基础实验报告(共36页).doc(36页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上程序设计基础课程设计实验报告班级:姓名:宋之鑫学号:所选题目:1_1 , 1_2 , 2_1 , 3_1 , 3_2 , 3_3 , 3_4 , 4-1 , 5_1 , 5_2 第1_1题 算法描述:首先定义两个二维字符数组,两个维数分别代表行数和文本中每行的字符的个数,用for循环和fgets函数把两个文本中的数据一行一行地复制到数组中,完毕后用for循环和strcmp函数比较两个数组中的不同的行,遇到不同行输出不同行,若没有不相等的行则输出:这两个文本文件相同!完毕源程序:no1_1.c #include#include #includeint main()int
2、 i;char a680,b680; /用于存储文件中的字符串FILE * fp1;FILE * fp2;if(fp1=fopen(1.txt,r)=NULL)/打开文件printf(cant open file!n);exit(0);if(fp2=fopen(2.txt,r)=NULL)/打开文件printf(cant open file!n);exit(0); for(i=0;i6;i+)/把文件中的数据录入到字符串数组中fgets(bi,81,fp2);fgets(ai,81,fp1); for(i=0;i6;i+)if(strcmp(ai,bi)!=0) break;/比较此行数据是否
3、相同if(i=6) printf(这两个文件相同!n); elseprintf(不同行是第%d行n1.txt的第%d行是%snb.txt的第%d行是%sn,i+1,i+1,ai,i+1,bi); 测试数据(输入、输出):两个不同的文本文件1.txt和2.txt第1_2题 算法描述:有三个文件,前两个里面有一串数字,把前面两个文件中的数字格式化输入到一个整型数组中,写一个冒泡排序函数把这个整型数组从大到小排序,最后平用fprint输入到第三个文件中,完毕源程序:no1_2.c #include #include #include int paixu(int *arr, int jishu) /冒
4、泡排序,把数组中的数组排序 int i=0,j=0,tmp; for (i=0;ijishu;i+) /冒泡排序,从大到小 for(j=i+1; jarrj) tmp=arri; arri=arrj; arrj=tmp; return 0; int main() int a300=0; /初始化 int jishu=0; /初始化 int i=0; FILE *fp1=fopen(1.txt,r); FILE *fp2=fopen(2.txt,r); FILE *fp3=fopen(3.txt, w+); if (fp1=NULL|fp2=NULL) /判断打开是否成功 printf(文件打开
5、失败n); return 0; while (!feof(fp1) fscanf(fp1, %d, &ajishu+);/把文件1中各数字输入到数组中 fclose(fp1); while (!feof(fp2) /把文件二中各数字输入到数组中 fscanf(fp2, %d, &ajishu+); fclose(fp2); paixu(a, jishu); for (i=0; ijishu; i+) fprintf(fp3, %d , ai); /把排完序的数字输入到文件3中 fclose(fp3); printf(操作成功.); return 0; 测试数据(输入、输出):输入:输出:第2-
6、1题 算法描述:有一个带有注释的c源程序,首先把它按行录入到二维数组中,有两种情况/型和/*/型,第一/分两种情况,处理方法,找到/所在数组行,把这行/削去,/之后赋值为0,/*/情况,找出/*所在行一直削去,直到遇到*/,把处理后的数组重新放入c源程序中,(放之前c的打开方式是wb+:为了把之前的数据删除)完毕源程序:No2_1.c /1. 将合法 C 源程序每行前加上行号并删除其所有注释。#include#includeint main()printf(这是一个将c源程序每行加行号且删除其所有注释的程序); int i=0,j,k; char duqu1001000,ch;/用这个来储存c
7、程序,这个程序 不大于100行,且每行不大于1000个字符 FILE *fp=fopen(1.cpp,r+);if(fp=NULL) printf(打开文件失败n);return 0; while(!feof(fp)fgets(duqui,1000,fp);i+; /读取的行数 for(k=i-1;k=0;k-) /把注释消掉 for(j=0;j1000;j+)if(duqukj=/ & duqukj-1!=* & (duqukj+1=/ | duqukj+1=* ) ) /这是/*情况和 / 情况 if(k!=0 & j!=0) duqukj=n;/防止下面的第一行是注释,消除完后,第一行变
8、空 else duqukj=0;duqukj+1=0; else if(duqukj=/ & duqukj-1=*) duquk0=0; /*/的这种情况 fclose(fp);/把原来的c内容删掉 fp=fopen(1.cpp,wb+); /同上 if(fp=NULL) printf(打开文件失败n);return 0; for(j=0,k=1;ji-1;j+,k+)/这个是加行号的 (i-1是因为前面有个i+,多加了一个1) if(strlen(duquj)=0) k-;/如果第一行为空,则跳过这次,并且不能使第一行行号变成2;所以要减去1 continue; fputs(/*,fp);f
9、printf(fp, %d,k);fputs(*/,fp);fputs(duquj,fp); fclose(fp);return 0;测试数据(输入、输出):1:没操作之前2:操作之后第3_1题 算法描述:输入的是一个字符串,首先把这个字符串转化为整型数组中的数,再根据二进制转化为十进制的方法求出,具体实现过程用for循环完成,其中定义一个数学关于几的几次方的函数方便计算源程序:No3_1.c #include#include#includeint pow(int a,int b)/次数函数 int sum=1;for(b;b0;b-) sum*=a;return sum;int main()
10、int a100;char b10;printf(这是一个将一个二进制的字符串转化十进制的数的程序n请输入二进制字符串:n);gets(b);int n=strlen(b);int i,j,k,m,sum=0;for(i=0;i=0;i-,j+)/把二进制的数转化为十进制的数 sum+=pow(2,j)*ai;printf(转化的结果为:%d,sum);测试数据(输入、输出):第3_2题 算法描述:首先定义一个复数的结构体,内部分别为复数的实部和虚部,有三个分支,分别为三种运算,加减乘,根据运算法则,做出c中的运算规则,如果输入错误则从新输入,最后输出结果源程序:No3_2.c #includ
11、e#include #includeint main()int m,n,p,q;struct fushuint i;/实部 int j;/虚部 a,b,c;/c是昨晚运算的结构体 char start=y;/标志,当start=n时退出 for(;1;)printf(请分别输入两个复数的实部,虚部(用空格间隔)n);printf(请输入第一个复数:n);scanf(%d%d,&a.i,&a.j);/第一个复数 fflush(stdin);/释放数据 printf(请输入第二个复数:n);scanf(%d%d,&b.i,&b.j);fflush(stdin);xing:printf(你希望这两个
12、复数做什么运算?n求和运算请输入1.n求差运算请输入2.n求乘积运算请输入3.n);scanf(%d,&m);/选择运算方式 fflush(stdin);if(m=1)/求和 c.i=a.i+b.i;c.j=a.j+b.j;else if(m=2)/求差 c.i=a.i-b.i;c.j=a.j-b.j;else if(m=3)/求积 c.i=a.i*b.i-a.j*b.j;c.j=a.i*b.j+a.j*b.i;else printf(输入错误,请重新输入n);goto xing;/如果输入错误的话则重新输入数据 printf(运算结果是:%d+%dinn,c.i,c.j);printf(你是
13、否要继续使用?(y/n)n);scanf(%c,&start);fflush(stdin);if(start=n) exit(0); 测试数据(输入、输出):1. 加法运算,减法运算,乘法运算第3_3题 算法描述:按本程序要求,首先把十进制的数放到字符串中,为了要把十进制转化为二进制必须把这个字符串转化到整型数组,所以定义一个转化函数,再根据,十进制转化为二进制的数学方法,编出相应法则(本程序定义了,x乘以10的n次方的函数方便计算)完毕源程序:No3_3.c #include#includeint pow(int a,int b)/计算a乘以10的b次方的值 int sum=1;for(b;
14、b0;b-)sum*=10;return a*sum;int zhuanhua(int sum)/将十进制转化为二进制 int y,c=1,b100;/y是余数 int i;for(i=0,y=0;sum!=0;i+)bi=sum%2;sum=(sum-bi)/2;y+;/计数 printf(结果是:); for(i=0;iy;i+) printf(%d,by-i-1);/输出二进制的数int main()int a100,i,j,k,sum=0;char b100;printf(这是一个将一个十进制数转化为二进制的数的程序n请输入一个十进制的数:n);gets(b);/先把是十进制的数放到一
15、个字符串数组里面int n=strlen(b);/b是十进制数的位数for(i=0;in;i+) ai=bi-48;/把十进制数放到整型数组里面for(i=0;in;i+)/计算大整数的值 sum+=pow(ai,n-1-i);/printf(sum=%d,sum); zhuanhua(sum);测试数据(输入、输出):第3_4题 算法描述:先判断输入的数的位数(这是一个子程序),再写一个子程序,按是判断一个数是否为链运算后是否为为一,如果为一,返回1给主函数,主函数中有一个变量记录链运算为1的数的个数 ps:(按照题目给的链运算规则写第一个子程序)完毕源程序:No3_4.c #include
16、#includeint weishu(int n)/判断输入的N的位数 int i;for(i=1;1;i+)n=n/10;if(n=0)return i;/返回位数int xunhuan(int n)/判断链运算后是否某为1 int a100,i,k;int j=weishu(n);for(;n=10;)/44-32-13-10-1for(i=0;ij;i+)/把各个数字取出来,放到数组里 ai=n%10;n=(n-ai)/10;for(i=0;i0;n-)if(xunhuan(n)=1) m+;/记录数据用的printf(结果是:%d,m);测试数据(输入、输出):第4_1题 算法描述:K
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 基础 实验 报告 36

限制150内