编程习题.docx
《编程习题.docx》由会员分享,可在线阅读,更多相关《编程习题.docx(16页珍藏版)》请在冰点文库上搜索。
编程习题
11.编程:
从键盘输入N个字符串,按字典顺序排序后输出,并将结果保存入“DATA.DAT”中。
#include
#include
#include
#defineN5
intmain()
{
charstr[N][20],s[20];
inti,j,k;
FILE*fp;
fp=fopen("DATA.dat","w");
if(fp==NULL){printf("文件打开错误");exit(0);}
for(i=0;ifor(i=0;i{k=i;
for(j=i+1;jif(strcmp(str[k],str[j])>0)k=j;
strcpy(s,str[k]);
strcpy(str[k],str[i]);
strcpy(str[i],s);
}
for(i=0;ifclose(fp);
return0;
}
12.编程:
将字符串中的第m个字符开始的全部字符复制到另一个字符串。
要求在主函数中输入字符串及m的值并输出复制结果,在被调函数中完成复制。
#include
intmain()
{
voidcopy(chars1[],chars2[],intm);
ints[20],t[20],m;
gets(s);
scanf("%d",&m);
copy(s,t,m);
puts(t);
return0;
}
voidcopy(chars1[],chars2[],intm)
{
s1=s1+m-1;
strcpy(s2,s1);
}
13.编程:
输出100~300中的素数及素数的个数
#include
#include
intmain()
{
inti,n,k,count=0;
for(n=100;n<=300;n++)
{
k=sqrt(n);
for(i=2;i<=k;i++)
if(n%i==0)break;
if(i>k){printf("%d\t",n);count++;}
}
printf("\n");
printf("素数的个数:
%d\n",count);
return0;
}
15.有一数列,包含10个数,已按升序排好。
现要求编一程序,从指定位置开始的n个数按逆序重新排列并输出新的完整数列(例:
原数列:
2,4,6,8,10,12,14,16,18,20,若要求把从第4个数开始的5个数按逆序重新排列,则得到新数列为2,4,6,16,14,12,10,8,18,20)要求在主函数中输入10个数及指定位置m的值,并输出新的数列,在被调函数中从指定位置开始的n个数按逆序重新排列。
#include
intmain()
{
voidnixu(inta[],intm,intn);
inta[10],i,m,n;
for(i=0;i<10;i++)scanf("%d",&a[i]);
scanf("%d%d",&m,&n);
nixu(a,m,n);
printf("重排后的数列是:
\n");
for(i=0;i<10;i++)printf("%d\t",a[i]);
return0;
}
voidnixu(inta[],intm,intn)
{
intt,i,j;
for(i=m-1,j=m+n-2;i{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
20.编程:
输入一个无符号整数,输出它的各位数之和并保存到文件“DATA.DAT”中。
#include
#include
intmain()
{
FILE*fp;
unsignedintn,s=0;
fp=fopen("data.dat","w");
if(fp==NULL){printf("不能打开文件\n");exit(0);}
scanf("%u",&n);
while(n!
=0)
{
s+=n%10;
n=n/10;
}
printf("s=%d\n",s);
fprintf(fp,"s=%d\n",s);
fclose(fp);
return0;
}
23.有一个3*4的矩阵,找出每行中最大的元素并与第一列交换,输出原矩阵及处理后的矩阵并保存到文件“DATA.DAT”中。
#include
intmain()
{
inta[3][4]={{2,5,12,7},{8,10,-1,2},{7,6,5,22}},i,j,max,t;
printf("原来的矩阵:
\n");
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
printf("%d\t",a[i][j]);
printf("\n");
}
for(i=0;i<3;i++)
{
max=0;
for(j=1;j<4;j++)
if(a[i][j]>a[i][max])max=j;
t=a[i][0];a[i][0]=a[i][max];a[i][max]=t;
}
printf("现在的矩阵:
\n");
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
printf("%d\t",a[i][j]);
printf("\n");
}
return0;
}
24.函数fun的功能是:
求出
的前n项之和,其结果通过函数值返回main函数。
例如:
在main函数中输入n的值为5,则输出8.391667。
#include
intmain()
{
floatfun(intn);
intn;
floats;
scanf("%d",&n);
s=fun(n);
printf("s=%f\n",s);
return0;
}
floatfun(intn)
{
inti;
floats=0,j=2,k=1,m;
for(i=1;i<=n;i++){s+=j/k;m=j;j=j+k;k=m;}
returns;
}
27.函数voidfun(chars[],charch)的功能是:
从字符串s中删除字符ch。
要求:
在main函数中输入字符串s及要删除的字符ch的值,调用fun函数,输出删除了字符ch后的字符串。
例如:
从键盘输入cabcdabcdabcxccc和c,输出的结果应该是abdabdabx。
#include
voidfun(chars[],charch)
{
inti,j=0;
for(i=0;s[i]!
='\0';i++)
if(s[i]!
=ch)s[j++]=s[i];
s[j]='\0';
}
intmain()
{
chars[81],ch;
gets(s);
scanf("%c",&ch);
fun(s,ch);
puts(s);
return0;
}
30.函数intispalin(charstr[])的功能是判断字符串str是否为回文,即顺读和逆读都一样的字符串,若是,返回1;否则返回0。
要求:
在main函数中从键盘输入字符串str,调用ispalin函数,输出判断结果。
例如:
输入admda,则输出admda:
yes;输入abcdabc,则输出abcdabc:
No。
#include
intmain()
{
charstr[81],flag;
gets(str);
flag=ispalin(str);
if(flag==1)printf("%s:
yes\n",str);
elseprintf("%s:
no\n",str);
return0;
}
intispalin(charstr[])
{
inti,j;
for(i=0,j=strlen(str)-1;iif(str[i]!
=str[j])return0;
return1;
}
33.编写函数intprime(intn),功能为判断n是否为素数,若是,返回1;否则返回0。
要求:
在main函数中调用函数prime,将2~100以内的所有素数存放到一维数组a中,输出a中的所有元素。
#include
#include
intmain()
{
intprime(intn);
inta[50],i,m=0;
for(i=2;i<=100;i++)
if(prime(i)==1)a[m++]=i;
for(i=0;ireturn0;
}
intprime(intn)
{
intflag=1,i;
for(i=2;i<=sqrt(n);i++)
if(n%i==0){flag=0;break;}
returnflag;
}
35.编程:
从键盘输入6名学生5门课程成绩,分别统计出每个学生的平均成绩并保存到文件“DATA.DAT”中。
#include
#include
intmain()
{
floatscore[6][5],average[6],s;
inti,j;
FILE*fp;
fp=fopen("data.dat","w");
if(fp==NULL){printf("打开文件错误\n");exit(0);}
for(i=0;i<6;i++)
{
s=0;
for(j=0;j<5;j++)
{
scanf("%f",&score[i][j]);
s+=score[i][j];
}
average[i]=s/5;
}
for(i=0;i<6;i++)
{
printf("%f\n",average[i]);
fprintf(fp,"%f\n",average[i]);
}
fclose(fp);
return0;
}
38.编程:
从键盘输入N个字符串,输出其中最长的字符串并保存到文件“DATA.DAT”中。
#include
#include
#include
#defineN5
intmain()
{
charstr[N][20];
intm=0,i;
FILE*fp;
fp=fopen("data.dat","w");
if(fp==NULL){printf("不能打开文件");exit(0);}
for(i=0;ifor(i=0;iif(strlen(str[i])>strlen(str[m]))m=i;
printf("最长的字符串是:
");
puts(str[m]);
fprintf(fp,"%s",str[m]);
fclose(fp);
}
39.编写一个函数print,功能为打印学生的成绩数组,该数组中有5个学生的数据记录,每个记录包括num、name、score[3]。
要求:
在main函数中输入这些记录,调用print函数输出这些记录。
#include
structstudent{
intnum;
charname[10];
floatscore[3];
};
structstudentstu[5];
intmain()
{
voidprint();
inti;
for(i=0;i<5;i++)
scanf("%d%s%f%f%f",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
print();
return0;
}
voidprint()
{
inti;
for(i=0;i<5;i++)
printf("%d\t%s\t%f\t%f\t%f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
}
42.函数intfun(inta[],intn,intb[])的功能是:
求出数组a中n个元素的平均值,将大于平均值的元素存入b数组中,函数返回b数组中元素个数。
编写main,通过调用fun,输出大于平均值的元素。
#include
intfun(inta[],intn,intb[])
{
intave,i,j=0,s=0;
for(i=0;iave=s/n;
for(i=0;iif(a[i]>ave)b[j++]=a[i];
returnj;
}
intmain()
{
inta[10],b[10],i,m;
for(i=0;i<10;i++)scanf("%d",&a[i]);
m=fun(a,10,b);
for(i=0;ireturn0;
}
45.函数voidmove(inta[],intn,intm)的功能是:
将有n个元素的数组a中前面各数顺序向后移m个位置,最后m个数变成最前面m个数。
编写main,调用move函数,输出变换后的结果。
#include
intmain()
{
voidmove(inta[],intn,intm);
inta[10],m,i;
for(i=-0;i<10;i++)scanf("%d",&a[i]);
scanf("%d",&m);
move(a,10,m);
for(i=0;i<10;i++)printf("%d",a[i]);
return0;
}
voidmove(inta[],intn,intm)
{
intt[10],i;
for(i=0;ifor(i=0;ia[n-1-i]=a[n-m-1-i];
for(i=0;i}
46.一个10万以内的整数,它加上100后是一个完全平方数,加上268又是一个完全平方数。
编程:
输出满足条件的数。
#include
#include
intmain()
{
intn,p,q;
for(n=1;n<=100000;n++)
{
p=sqrt(n+100);
q=sqrt(n+268);
if(n+100==p*p&&n+268==q*q)printf("%d\t",n);
}
return0;
}
47.编程:
找出1~99之间的全部同构数并保存到文件“DATA.DAT”中。
同构数是这样一组数:
它出现在平方数的右边。
例如:
5是25的右边的数,25是625右边的数,5和25都是同构数。
#include
#include
intmain()
{
intn;
FILE*fp;
fp=fopen("data.dat","w");
if(fp==NULL){printf("不能打开文件\n");exit(0);}
for(n=1;n<=99;n++)
if(n*n%10==n||n*n%100==n){printf("%d\t",n);fprintf(fp,"%d\t",n);}
fclose(fp);
return0;
}
55.编程:
分解质因数,正整数从键盘输入。
例如:
输入90,打印出90=2*3*3*5。
#include
intmain()
{
intn,i;
scanf("%d",&n);
printf("%d=",n);
for(i=2;i<=n;i++)
{
while(n%i==0)
{
n=n/i;
if(n==1)printf("%d\n",i);
elseprintf("%d*",i);
}
}
}
72.函数voidmerge(inta[],intb[],inttemp[],intlen_a,intlen_b)的功能是:
将降序的a和升序的b合并成一个新的升序序列temp。
编写main函数,调用merge函数进行合并,输出合并后的结果。
例如:
a中数据为78,42,24,8;b中数据为1,23,28,79,90;
输出结果为:
1823242842787990
#include
intmain()
{
voidmerge(inta[],intb[],intc[],intlen_a,intlen_b);
inta[4]={78,42,24,8},b[5]={1,24,28,79,90},c[9],i;
merge(a,b,c,4,5);
for(i=0;i<9;i++)printf("%d\t",c[i]);
return0;
}
voidmerge(inta[],intb[],intc[],intlen_a,intlen_b)
{
inti,j,k=0;
for(i=len_a-1,j=0;i>=0&&jif(a[i]
elseif(b[j]else{c[k++]=a[i--];c[k++]=b[j++];}
if(i<0)while(jelse
if(j==len_b)while(i>=0)c[k++]=a[i--];
}