程序设计基础实验报告dxw.docx
- 文档编号:23696779
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:50
- 大小:437.32KB
程序设计基础实验报告dxw.docx
《程序设计基础实验报告dxw.docx》由会员分享,可在线阅读,更多相关《程序设计基础实验报告dxw.docx(50页珍藏版)》请在冰豆网上搜索。
程序设计基础实验报告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
#include
#include
#include
intmain()
{
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。
i<6。
i++)//把文件中的数据录入到字符串数组中
{
fgets(b[i],81,fp2)。
fgets(a[i],81,fp1)。
}
for(i=0。
i<6。
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
#include
#include
#include
intpaixu(int*arr,intjishu)//冒泡排序,把数组中的数组排序
{
inti=0,j=0,tmp。
for(i=0。
i i++)//冒泡排序,从大到小 { for(j=i+1。 j 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。 i i++) { fprintf(fp3,"%d\",a[i])。 //把排完序的数字输入到文件3中 } fclose(fp3)。 printf("操作成功...")。 return0。 } 测试数据(输入、输出): 输入: 输出: 第2-1题 算法描述: 有一个带有注释的c源程序,首先把它按行录入到二维数组中,有两种情况//型和/**/型,第一//分两种情况,处理方法,找到//所在数组行,把这行//削去,//之后赋值为\0,/**/情况,找出/*所在行一直削去,直到遇到*/,把处理后的数组重新放入c源程序中,(放之前c的打开方式是wb+: 为了把之前的数据删除)完毕 源程序: No2_1.c //1.将合法C源程序每行前加上行号并删除其所有注释。 #include #include intmain() { 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。 j<1000。 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。 j j++,k++)//这个是加行号的(i-1是因为前面有个i++,多加了一个1) { if(strlen(duqu[j])==0) { k--。 //如果第一行为空,则跳过这次,并且不能使第一行行号变成2;所以要减去1 continue。 } fputs("/*",fp)。 fprintf(fp,"%d",k)。 fputs("*/",fp)。 fputs(duqu[j],fp)。 } fclose(fp)。 return0。 } 测试数据(输入、输出): 1: 没操作之前 2: 操作之后 第3_1题 算法描述: 输入的是一个字符串,首先把这个字符串转化为整型数组中的数,再根据二进制转化为十进制的方法求出,具体实现过程用for循环完成,其中定义一个数学关于几的几次方的函数方便计算 源程序: No3_1.c #include #include #include intpow(inta,intb)//次数函数 { intsum=1。 for(b。 b>0。 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。 i 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 #include #include #include intmain() { 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 #include #include intpow(inta,intb)//计算a乘以10的b次方的值 { intsum=1。 for(b。 b>0。 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。 i 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。 i i++) a[i]=b[i]-48。 //把十进制数放到整型数组里面 for(i=0。 i i++)//计算大整数的值 { sum+=pow(a[i],n-1-i)。 } //printf("sum=%d",sum)。 zhuanhua(sum)。 } 测试数据(输入、输出): 第3_4题 算法描述: 先判断输入的数的位数(这是一个子程序),再写一个子程序,按是判断一个数是否为链运算后是否为为一,如果为一,返回1给主函数,主函数中有一个变量记录链运算为1的数的个数ps: (按照题目给的链运算规则写第一个子程序)完毕 源程序: No3_4.c #include #include intweishu(intn)//判断输入的N的位数 { inti。 for(i=1。 1。 i++) { n=n/10。 if(n==0)returni。 //返回位数 } } intxunhuan(intn)//判断链运算后是否某为1 { inta[100],i,k。 intj=weishu(n)。 for(。 n>=10。 )//44->32->13->10->1 { for(i=0。 i i++)//把各个数字取出来,放到数组里 { a[i]=n%10。 n=(n-a[i])/10。 } for(i=0。 i i++)//链式计算 { n+=a[i]*a[i]。 } } if(n==1)return1。 //如果符合规则返回1 elsereturn0。 //如果不符合规则返回0 } intmain() { intn,m=0,a[100]。 printf("这个是计算N、以内(包括N)数据链末尾数字是1的数据个数的程序\n请输入N: \n")。 scanf("%d",&n)。 for(n。 n>0。 n--) { if(xunhuan(n)==1)m++。 //记录数据用的 } printf("结果是: %d",m)。 } 测试数据(输入、输出): 第4_1题 算法描述: Ktv点歌系统主要的是把主体框架搭建起来,这里实现多种功能要用到switch语句,各种case连接着一个有功能的子程序,每个功能结束返回主菜单,歌曲信息的读取还需要结构体的定义,歌曲的信息(歌曲名,歌手,风格)放到一个文本文件中,歌曲的删除添加需要加一个密码功能,结构体有一个标记变量,这个变量用于删除歌曲时把删除的歌曲做标记 源程序: No4_1.c #include #include #include #defineSIZE1000//最多有1000首歌曲 structmusicdate//定义歌曲信息的结构体变量 { charname[15]。 charsinger[15]。 charstyle[10]。 intflag=1。 //用于删除时标记的 }music[SIZE]。 voidmimaServe1()//这是密码服务1,开启密码服务的 { FILE*fp=fopen("mima.txt","ab+")。 if(fp==NULL) { printf("con'topenthisfile! ")。 exit(0)。 } charmima[6]={"\0"}。 //给密码初始化 fgets(mima,7,fp)。 //把密码读到mima数组中 //if(strlen(mima)==0)printf("您还没有设置密码\n")。 //printf("**%s**",mima)。 if(strlen(mima)! =0)//如果开启就不用再开启,直接结束就okay { printf("密码服务已开启,无需再次开启\n\n")。 return。 } else { restar: printf("请输入密码,按回车键结束(密码共六位,可以是字母或数字)")。 //密码由六位字符组成 gets(mima)。 if(strlen(mima)! =6)//如果不是六位则密码是设置错误 { printf("\n格式错误,请重新输入! (密码共六位,可以是字母或数字)\n\n")。 gotorestar。 } fflush(stdin)。 printf("\n请再次出入密码")。 charcheck[6]={"\0"}。 //防止第一次密码出入错误,第二次验证 gets(check)。 if(strcmp(check,mima)==0)fputs(mima,fp)。 else { printf("\n\n两次输入的不一致,请重新设置密码\n\n")。 gotorestar。 } printf("\n\n密码设置成功! \n\n")。 fclose(fp)。 } } voidmimaServe2()//密码服务的2,用于关闭密码服务 { FILE*fp=fopen("mima.txt","ab+")。 if(fp==NULL) { printf("con'topenthisfile! ")。 exit(0)。 } charmima[6]={"\0"}。 fgets(mima,7,fp)。 //if(strlen(mima)==0)printf("您还没有设置密码\n")。 //printf("**%s**",mima)。 if(strlen(mima)==0)//如果之前没有开启密码服务,则没有必要关闭 { printf("密码服务已关闭,请勿重新关闭\n\n")。 return。 } if(strlen(mima)! =0)//需要输入原密码才能关闭! { charformerMima[6]。 for(inti=0。 i<3。 i++) { printf("请输入原密码: ")。 gets(formerMima)。 if(strcmp(formerMima,mima)==0)//如果原密码与输入密码相同,则关闭 { printf("\n密码关闭成功! \n\n")。 fclose(fp)。 fp=fopen("mima.txt","wb+")。 //打开文件时初始化 fclose(fp)。 return。 } printf("输入错误请重新输入! \n\n")。 } printf("您已出入错误三次;再见! ")。 //如果密码输入错误超过三次,则结束程序 exit(0)。 } } voidmimaServe3()//密码服务第三种功能,修改密码 { FILE*fp=fopen("mima.txt","ab+")。 if(fp==NULL) { printf("con'topenthisfile! ")。 exit(0)。 } charmima[6]={"\0"}。 fgets(mima,7,fp)。 //if(strlen(mima)==0)printf("您还没有设置密码\n")。 //printf("**%s**",mima)。 if(strlen(mima)==0)//之前已经录入密码 { printf("未开启密码服务! 请开启! \n")。 return。 } for(inti=0。 i<3。 i++)//如果跳出去则密码输入错误超过三次 { printf("\n请输入原来的密码: ")。 charformerMima[6]。 gets(formerMima)。 fflush(stdin)。 if(strcmp(formerMima,mima)==0)//如果输入正确则整个if都在改密码 { printf("\n输入正确! \n")。 restar1: printf("\n请输入新密码: ")。 charnew1[6]。 gets(new1)。 if(strlen(new1)! =6)//判断新密码位数 { printf("\n格式错误,请重新输入! (密码共六位,可以是字母或数字)\n\n")。 gotorestar1。 } fflush(stdin)。 printf("\n请再次输入新密码: ")。 charcheck[6]。 gets(check)。 if(strcmp(check,new1)! =0) { printf("\n前后输入不一致,请重新输入: \n")。 gotorestar1。 } else//进行录入 { fclose(fp)。 fp=fopen("mima.txt","wb+")。 if(fp==NULL) { printf
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 基础 实验 报告 dxw