您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 14030210038_程序设计基础实验报告-dxw
《程序设计基础课程设计》实验报告班级:1403021姓名:宋之鑫学号:14030210038所选题目: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#includestdio.h#includestring.h#includestdlib.hintmain(){inti;chara[6][80],b[6][80];//用于存储文件中的字符串FILE*fp1;FILE*fp2;if((fp1=fopen(1.txt,r))==NULL)//打开文件{printf(can'topenfile!\n);exit(0);}if((fp2=fopen(2.txt,r))==NULL)///打开文件{printf(can'topenfile!\n);exit(0);}for(i=0;i6;i++)//把文件中的数据录入到字符串数组中{fgets(b[i],81,fp2);fgets(a[i],81,fp1);}for(i=0;i6;i++)if(strcmp(a[i],b[i])!=0)break;//比较此行数据是否相同if(i==6)printf(这两个文件相同!\n);else{printf(不同行是第%d行\n1.txt的第%d行是%s\nb.txt的第%d行是%s\n,i+1,i+1,a[i],i+1,b[i]);}}测试数据(输入、输出):两个不同的文本文件1.txt和2.txt第1_2题算法描述:有三个文件,前两个里面有一串数字,把前面两个文件中的数字格式化输入到一个整型数组中,写一个冒泡排序函数把这个整型数组从大到小排序,最后平用fprint输入到第三个文件中,完毕源程序:no1_2.c#includestdio.h#includestdlib.h#includestring.hintpaixu(int*arr,intjishu)//冒泡排序,把数组中的数组排序{inti=0,j=0,tmp;for(i=0;ijishu;i++)//冒泡排序,从大到小{for(j=i+1;jjishu;j++){if(arr[i]arr[j]){tmp=arr[i];arr[i]=arr[j];arr[j]=tmp;}}}return0;}intmain(){inta[300]={0};//初始化intjishu=0;//初始化inti=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(文件打开失败\n);return0;}while(!feof(fp1)){fscanf(fp1,%d,&a[jishu++]);//把文件1中各数字输入到数组中}fclose(fp1);while(!feof(fp2))//把文件二中各数字输入到数组中{fscanf(fp2,%d,&a[jishu++]);}fclose(fp2);paixu(a,jishu);for(i=0;ijishu;i++){fprintf(fp3,%d\,a[i]);//把排完序的数字输入到文件3中}fclose(fp3);printf(操作成功...);return0;}测试数据(输入、输出):输入:输出:第2-1题算法描述:有一个带有注释的c源程序,首先把它按行录入到二维数组中,有两种情况//型和/**/型,第一//分两种情况,处理方法,找到//所在数组行,把这行//削去,//之后赋值为\0,/**/情况,找出/*所在行一直削去,直到遇到*/,把处理后的数组重新放入c源程序中,(放之前c的打开方式是wb+:为了把之前的数据删除)完毕源程序:No2_1.c//1.将合法C源程序每行前加上行号并删除其所有注释。#includestdio.h#includestring.hintmain(){printf(这是一个将c源程序每行加行号且删除其所有注释的程序);inti=0,j,k;charduqu[100][1000],ch;//用这个来储存c程序,这个程序不大于100行,且每行不大于1000个字符FILE*fp=fopen(1.cpp,r+);if(fp==NULL){printf(打开文件失败\n);return0;}while(!feof(fp)){fgets(duqu[i],1000,fp);i++;//读取的行数}for(k=i-1;k=0;k--)//把注释消掉{for(j=0;j1000;j++){if(duqu[k][j]=='/'&&duqu[k][j-1]!='*'&&(duqu[k][j+1]=='/'||duqu[k][j+1]=='*'))//这是/*情况和//情况{if(k!=0&&j!=0)duqu[k][j]='\n';//防止下面的第一行是注释,消除完后,第一行变空elseduqu[k][j]='\0';duqu[k][j+1]='\0';}elseif(duqu[k][j]=='/'&&duqu[k][j-1]=='*')duqu[k][0]='\0';//*/的这种情况}}fclose(fp);//把原来的c内容删掉fp=fopen(1.cpp,wb+);//同上if(fp==NULL){printf(打开文件失败\n);return0;}for(j=0,k=1;ji-1;j++,k++)//这个是加行号的(i-1是因为前面有个i++,多加了一个1){if(strlen(duqu[j])==0){k--;//如果第一行为空,则跳过这次,并且不能使第一行行号变成2;所以要减去1continue;}fputs(/*,fp);fprintf(fp,%d,k);fputs(*/,fp);fputs(duqu[j],fp);}fclose(fp);return0;}测试数据(输入、输出):1:没操作之前2:操作之后第3_1题算法描述:输入的是一个字符串,首先把这个字符串转化为整型数组中的数,再根据二进制转化为十进制的方法求出,具体实现过程用for循环完成,其中定义一个数学关于几的几次方的函数方便计算源程序:No3_1.c#includestdio.h#includemath.h#includestring.hintpow(inta,intb)//次数函数{intsum=1;for(b;b0;b--)sum*=a;returnsum;}intmain(){inta[100];charb[10];printf(这是一个将一个二进制的字符串转化十进制的数的程序\n请输入二进制字符串:\n);gets(b);intn=strlen(b);inti,j,k,m,sum=0;for(i=0;in;i++)a[i]=b[i]-48;//把字符串传化为数for(i=n-1,j=0;i=0;i--,j++)//把二进制的数转化为十进制的数{sum+=pow(2,j)*a[i];}printf(转化的结果为:%d,sum);}测试数据(输入、输出):第3_2题算法描述:首先定义一个复数的结构体,内部分别为复数的实部和虚部,有三个分支,分别为三种运算,加减乘,根据运算法则,做出c中的运算规则,如果输入错误则从新输入,最后输出结果源程序:No3_2.c#includestdio.h#includestdlib.h#includestring.hintmain(){intm,n,p,q;structfushu{inti;//实部intj;//虚部}a,b,c;//c是昨晚运算的结构体charstart='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(你希望这两个复数做什么运算?\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;}elseif(m==2)//求差{c.i=a.i-b.i;c.j=a.j-b.j;}elseif(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);gotoxing;}//如果输入错误的话则重新输入数据printf(运算结果是:%d+%di\n\n,c.i,c.j);printf(你是否要继续使用?(y/n)\n);scanf(%c,&start);fflush(stdin);if(start=='n')exit(0);}}测试数据(输入、输出):1.加法运算,减法运算,乘法运算第3_3题算法描述:按本程序要求,首先把十进制的数放到字符串中,为了要把十进制转化为二进制必须把这个字符串转化到整型数组,所以定义一个转化函数,再根据,十进制转化为二进制的数学方法,编出相应法则(本程序定义了,x乘以10的n次方的函数方便计算)完毕源程序:No3_3.c#includestdio.h#includestring.hintpow(inta,intb)//计算a乘以10的b次方的值{intsum=1;for(b;b0;b--){sum*=10;}returna*sum;}intzhuanhua(intsum)//将十进制转化为二进制{inty,c=1,b[100];//y是余数inti;for(i=0,y=0;sum!=0;i++){b[i]=sum%2;sum=(sum-b[i])/2;y++;//计数}printf(结果是:);for(i=0;iy;i++)printf(%d,b[y-i-1]);//输出二进制的数}intmain(){inta[100],i,j,k,sum=0;charb[100];printf(这是一个将一个十进制数转化为二进制的数的程序\n请输入一个十进制的数:\n);gets(b);//先把是十进制的数放到一个字符串数组里面intn=strlen(b);//b是十进制数的位数for(i=0;in;i++)a[i]=b[i]-48;//把十进制数放到整型数组里面for(i=0;in;i++)//计算大整数的值{sum+=pow(a[i],n-1-i);}//printf(sum=%d,sum);zhuanhua(sum);}测试数据(输入、输出):第3_4题算法描述:先判断输入的数的位数(这是一个子程序),再写一个子程序,按是判断一个数是否为链运算后是否为为一,如果为一,返回1给主函数,主函数中有一个变量记录链运算为1的数的个数ps:(按照题目给的链运算规则写第一个子程序)完毕源程序:No3_4.c#includestdio.h#includestring.hintweishu(intn)//判断输入的N的位数{inti;for(i=1;1;i++){n=n/10;if(n==0)returni;//返回位数}}intxunhuan(intn)//判断链运算后是否某为1{inta[10
本文标题:14030210038_程序设计基础实验报告-dxw
链接地址:https://www.777doc.com/doc-3060931 .html