程序设计基础课程设计.docx

上传人:b****4 文档编号:26766762 上传时间:2023-06-22 格式:DOCX 页数:19 大小:18.80KB
下载 相关 举报
程序设计基础课程设计.docx_第1页
第1页 / 共19页
程序设计基础课程设计.docx_第2页
第2页 / 共19页
程序设计基础课程设计.docx_第3页
第3页 / 共19页
程序设计基础课程设计.docx_第4页
第4页 / 共19页
程序设计基础课程设计.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

程序设计基础课程设计.docx

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

程序设计基础课程设计.docx

程序设计基础课程设计

《程序设计基础课程设计》实验报告

班级:

1403013

姓名:

熊清锋

学号:

14030130063

所选题目:

1_1,1_3,2_2,3_1,3_2,3_3,3_4,5_1,5_2,

第1_1题:

比较两个文本文件并打印出它们第一个不相同的行(文件每行字符数不多于80)。

算法描述:

定义两个不同的指针,建立两个不同的文本文件并存入字符;打开文本文件并一行一行的比较,定义一个计数器,若发现了不同行,立即跳出循环,分别打印两个不同文件中计数器所指的行;

源程序:

no1_1.c

#include

#include

#include

#defineN5//文件中字符的行数

intmain()

{

FILE*fp1,*fp2;//文件指针

charstr1[N][80],str2[N][80];

charA[N][80],B[N][80];

inti,k,flag=0;

printf("PleaseenterthefirsttextA:

\n");

if(fp1=fopen("num1.text","w")==NULL)//建立文本文件

{

printf("cannotopenthefile!

");

exit(0);

}

for(i=0;i

{

gets(str1[i]);

fputs(str1[i],fp1);

fputs("\n",fp1);

}

printf("\n");

printf("PleaseenterthesecondtextB:

\n");

if(fp2=fopen("num2.text","w")==0)//

{

printf("cannotopenthefile!

\n");

exit(0);

}

for(i=0;i

{

gets(str2[i]);

fputs(str2[i],fp2);

fputs("\n",fp2);

}

fclose(fp1);

fclose(fp2);

fp1=fopen("num1.text","r");//打开文件

fp2=fopen("num2.text","r");

for(i=0;i

{

fgets(str1[i],80,fp1);

fgets(str2[i],80,fp2);

if(strcmp(str1[i],str2[i])!

=0)

{

k=i;

flag=1;

break;

}

}

if(flag)//如果存在不同行

{

printf("\nThefirstdifferentrowbetweenAandB:

\n");//分别输出不同行

printf("A:

%s\n",str1[k]);

printf("B:

%s\n",str2[k]);

}

else

printf("Thetwotexthavethesamecontents!

!

\n");

fclose(fp1);//关闭文件

fclose(fp2);

return0;

}

测试数据:

第1_3题:

现有两个文本文件db1.txt和db2.txt。

db1.txt中第一列为姓名,第二列为英语成绩;db2.txt中第一列为姓名,第二列为数学成绩。

通过姓名字段将db1.txt文件关联到db2.txt文件生成db3.txt文件。

db3.txt文件第一列为姓名,第二列为英语成绩,第三列为数学成绩,第四列为平均成绩

算法描述:

定义三个文件指针,输入数据分别存在两个文件文本,输入时用结构存储数字和字符的混合输入;打开文件,对文件中的结构体存储的字符比较遇到两个文件中相同的name,将两个文件对应该name的内容整合,写到第三个文件中,并在屏幕输出文件内容。

源程序:

no1_3.c

#include

#include

#include

#defineN1

structStudent//定义前两个文件内容的结构体,结构体元素是姓名和分数

{

charname[10];

doublescore;

};

structStudent1//定义第三个文件内容的结构体,元素是姓名和分数数组(含三个元素)

{

charname[10];

doublescore[3];

};

intmain()

{

FILE*fp1,*fp2,*fp3;

structStudentstu[2][N];//定义二维结构体数组

structStudent1stu1[N];

inti,j,k=0;

intflag=0;

//输入

printf("Pleaseinputdb1.txt:

\n");

fp1=fopen("db1.txt","w");

for(i=0;i

{

scanf("%s%lf",stu[0][i].name,&stu[0][i].score);

fwrite(&stu[0][i],sizeof(structStudent),1,fp1);//读取结构体中的一元素存入文件

}

printf("\nPleaseinputdb2.txt:

\n");

fp2=fopen("db2","w");

for(i=0;i

{

scanf("%s%lf",stu[1][i].name,&stu[1][i].score);

fwrite(&stu[1][i],sizeof(structStudent),1,fp2);

}

fp1=fopen("db1.txt","r");//打开文件,只写

fp2=fopen("db2,txt","r");

for(i=0;i

{

fread(&stu[0][i],sizeof(structStudent),1,fp1);

for(j=0;j

{

fread(&stu[1][j],sizeof(structStudent),1,fp2);

if(strcmp(stu[0][i].name,stu[1][j].name)==0)

{

flag=1;

strcpy(stu1[k].name,stu[1][i].name);

stu1[k].score[0]=stu[0][i].score;

stu1[k].score[1]=stu[1][j].score;

stu1[k].score[2]=(stu1[k].score[0]+stu1[k].score[1])/2;

k++;

}

}

}

printf("\n");

//输出

if(flag)

{

fp3=fopen("db3.txt","w");

printf("NamesMathsEnglishAverage\n");

for(i=0;i

{

fwrite(&stu1[i],sizeof(structStudent1),1,fp3);

printf("%s",stu1[i].name);

for(j=0;j<3;j++)

printf("%10.2f",stu1[i].score[j]);

printf("\n");

}

fclose(fp3);

}

else

printf("Maybethelistsaretakenbymistake!

!

\n");

fclose(fp1);

fclose(fp2);

return0;

}

测试数据:

第2_2题:

统计一个英文文本文件中26个英文字母出现次数并按英文字母序输出统计结果,查找并替换此英文文本文件中某字符串。

算法描述:

建立文本文件并输入数据(二维字符数组的形式),存储于文件,打开文件读出字符!

个英文字符与从文件读出的文件比较,建立累加器对每个字母出现的次数赋值!

源程序:

no2_2.c

#include

#include

#include

#defineN2

intmain()

{

FILE*fp1,*fp2;

inti,j,k,cout;

charstr[N][80],ch,c;

printf("Pleaseinputfile_num1:

\n");

fp1=fopen("num1","w");//建立文件并写入数据

for(i=0;i

{

gets(str[i]);

fputs(str[i],fp1);

fputs("\n",fp1);

}

printf("\n");

//打开文件并读出数据

fp2=fopen("num1","r");

for(i=0;i

fgets(str[i],80,fp2);

printf("Theshowingtimesofletters:

\n");

for(ch='a',k=1;ch<='z';ch++)

{

cout=0;

for(i=0;i

{

for(j=0;j

{

if(isalpha(str[i][j]))

{

c=tolower(str[i][j]);//大写转化小写

if(ch==c)

cout++;

}

}

}

if(cout)

{

printf("%c:

%2d",ch,cout);

k++;

if(k%4==0)

printf("\n");

}

}

//查找并替换字符串my->my

printf("\nTheadvertedarticle:

\n");

for(i=0;i

{

for(j=0;j

{

if(str[i][j]=='m'&&str[i][j+1]=='y')

str[i][j+1]='e';

}

printf("%s\n",str[i]);

}

return0;

}

测试数据:

第3_1题:

将输入的2进制字符串转换为10进制数输出。

算法描述:

输入二进制的字符串,每个字符减去0字符就是他们的十进制数值,在乘以2的n-1次方,再加和!

源程序:

no3_1.c

#include

#include//为strlen函数提供原型

#include//为pow函数提供原型

intmain()

{

charstr[10];

inti,sum=0;

printf("Pleaseinputbinarynumber:

\n");

gets(str);

for(i=0;i

{

sum+=(str[i]-'0')*pow(2,i);//计算每个位上的字符再加和

}

printf("Thedecimalnumberis:

\n");

printf("%d\n",sum);//输出所对应的十进制数

return0;

}

 

测试数据:

 

第3_2题:

设计一个复数类型,输入实部和虚部生成一个复数,可进行两个复数求和、两个复数求差、两个复数求积运算。

算法描述:

复数分为实部和虚部,因此一个复数的输入是要分两部分的,输出也是,输出时在虚部后加i.

源程序:

no3_2.c

#include

intmain()

{

inta,b,c,d;

charch;

printf("Pleaseentertwocomplexnumbers:

\n");

scanf("%d%d%d%d",&a,&b,&c,&d);

printf("\n1)calculatethesum\n2)calculatethediff\n3)calculatetheproduct\n");

printf("Pleasechoose1,2or3:

(qtoquit):

\n");//选择模式

getchar();

while((ch=getchar())!

='q')//循环

{

while(getchar()!

='\n');

switch(ch)

{

case'1':

printf("%d+%di\n",a+c,b+d);

break;

case'2':

if(b-d>=0)

printf("%d+%di\n",a-c,b-d);

else

printf("%d%di\n",a-c,b-d);

break;

case'3':

printf("%d+%di\n",a*c-b*d,a*d+b*c);

break;

default:

break;

}

}

return0;

}

测试数据:

第3_3题:

用一个整型数组表示10进制大整数,数组的每个元素存储大整数的一位数字,将这个大整数转换为2进制数输出。

算法描述:

存入大整数时,将数值的各个位上的数分离存到数组中。

因为整数数值大,一定注意了溢出,,在计算时,再用数组下标与数值各个位上的关系,整合再输出所对应的二进制数!

源程序:

No3_3.c

#include

#include

#defineN20

intmain()

{

voidto_base_n(longlongn,unsignedintbase);

inta[N],i=0,j,k,m;

charch;

longlongn=0;

printf("请输入数字(#结束):

\n");

printf("\n");

while(scanf("%d",&a[i])==1)

{

i++;

}

j=i-1;

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

{

for(k=j;k>=0;k--)

{

n+=a[i]*pow(10,k);

}

}

printf("\n转换过后的等值二进制数:

\n");

printf("\n");

to_base_n(n,2);

printf("\n");

return0;

}

voidto_base_n(longlongn,unsignedintbase)//进制转换超级函数

{

intr;

r=n%base;

if(n>=base)

to_base_n(n/base,base);

putchar('0'+r);

return;

}

测试数据:

 

第3_4题:

根据输入的数字N,计算N以内(包括N)数据链并统计数据链末尾数字是1的数据个数。

例如N=44,则数字链为:

44->32->13->10->1,其规则为:

4*4+4*4=32,3*3+2*2=13,1*1+3*3=10,1*1+0*0=1。

算法描述:

对输入数字进行各个位拆分并计算各个位上数字的平方和,每计算一次的和与1进行比较,

知道等于1时程序结束。

源程序:

no3_4.c

#include

intmain()

{

intn,sum,a[10];

inti,cout=0;

printf("请输入数字N:

");

scanf("%d",&n);

printf("\n数据链:

\n");

while(n!

=1)

{

printf("%d->",n);

sum=0;

i=0;

while(n>0)//对每次的各位数字平方和再拆

{

a[i]=n%10;

if(a[0]==1)

cout++;//统计末尾数字为1的计数器

sum+=a[i]*a[i];

n=n/10;

i++;

}

n=sum;

}

printf("%d\n",1);

printf("\n数据链末尾数字为1的数字个数:

\n");

printf("%d\n",cout);

return0;

}

测试数据:

 

第5_1题:

程序自动生成一个位于99内的随机数,要求用户猜这个数。

用户输入一个数后,程序有三种应答:

toobig,toosmall,youwin。

算法描述:

播下产生随机数的种子,随时间不同每次生成的随机数不同,用户根据提示进行猜数游戏。

源程序:

no5_1.c

#include

#include//为rand函数提供原型

#include//为种子提供原型

intmain()

{

intn,m;

printf("Ready?

Let'sgo!

!

!

\nInputthecorrectnumberyouthought:

\n");

scanf("%d",&n);

srand(time(NULL));//种子

m=rand()%100;

while(n!

=m)//猜数进行时的提示

{

if(n>m)

printf("Toobig!

Comeon,do'tgiveup!

\n");

else

printf("Toosmall!

Whyareyousosilly!

!

\n");

printf("Tryagain:

\n");

scanf("%d",&n);

}

printf("%c%cYouwin!

Youaresosmart!

!

\n",1,1);

return0;

}

测试数据:

 

第5_2题:

产生一组随机数,要求每个数字不能重复。

例如:

1,20,3,17,80,4,35,88符合要求,3,20,1,17,80,3,35,88不符合要求

算法描述:

Rand函数一次只能产生一个随机数,于是使用循环结构让其多产生几个随机数,为了对随机数是否重复进行判断,将产生的随机数存放在数组中。

源程序:

no5_2.c

#include

#include

#include

#defineN10

intmain()

{

inta[N],n,i,j,k;

intflag=1;

n=N;

srand(time(NULL));

while(flag)

{

for(i=0;i

a[i]=rand()%100;

for(i=0;i

{

for(j=0;j

{

if(a[i]==a[j]&&i!

=j)//判断的数组中是否有重复数字,若有,就重新产生

{

flag=0;

break;

}

}

}

if(!

flag)

flag=1;

else

{

flag=0;

printf("产生的不重复的随机数:

\n");

printf("\n");

for(i=0,k=1;i

{

printf("%-4d",a[i]);

if(k%10==0)

printf("\n");

}

}

}

return0;

}

测试数据:

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

当前位置:首页 > 初中教育 > 语文

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

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