C语言寒假作业.docx
《C语言寒假作业.docx》由会员分享,可在线阅读,更多相关《C语言寒假作业.docx(23页珍藏版)》请在冰豆网上搜索。
C语言寒假作业
1./*
编写函数,实现B=A+A',即把矩阵A加上A转置,存放在B中
123转置后:
147
456258
789369
*/
#include
voidfun(inta[3][3],intb[3][3])
{
for(inti=0;i<3;i++)
{
for(intj=0;j<3;j++)
{
b[i][j]=a[j][i]+a[i][j];
}
}
}
voidmain()
{
inta[3][3]={{1,2,3},{4,5,6},{7,8,9}},t[3][3];
inti,j;
printf("\ntheoriginaldata:
\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%7d",a[i][j]);
printf("\n");
}
fun(a,t);
printf("\ntheresultdata:
\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%7d",t[i][j]);
printf("\n");
}
}
2./*
编写函数:
删除一个字符串中的所有空格。
*/
#include
#include
#defineMAX100
voidfun(char*str)
{
intt=0;
for(inti=0;*(str+i)!
='\0';i++)
{
if(*(str+i)!
='')
*(str+t++)=*(str+i);
}
*(str+t)='\0';
}
intmain()
{
charstr[81];
printf("inputastring:
");
gets(str);
puts(str);
fun(str);
printf("***str:
%s\n",str);
printf("\n");
}
3./*
编写函数fun,功能:
删除一维数组中所有相同的数,使之只剩一个。
数组中的数已经按由小到大的顺序排列,函数返回删除后数组中数据的个数。
*/
#include
#include
#defineN80
intfun(inta[],intn)
{
intt=0;
a[t]=a[0];
for(inti=0;i{
if(a[i]!
=a[i+1])
{
a[++t]=a[i+1];
}
}
returnt+1;
}
intmain()
{
inta[N]={2,2,2,3,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10},i,n=20;
for(i=0;in=fun(a,n);
printf("\n\nthedataafterdeleted:
\n");
for(i=0;iprintf("\n\n");
}
/*
如果原始数组中的数据没有什么规律呢?
*/
4./*
编写函数:
m个人的成绩放在score数组中,编写函数fun,将低于平均分的人数作为函数值返回,将低于平均分的分数放在below所指数组中
如score中的成绩为:
10,20,30,40,50,60,70,80,90时,函数返回的人数应是4,below中的数据应为10、20、30、40。
*/
#include
#include
intfun(intscore[],intm,intbelow[])
{
ints=0,t=0;
for(inti=0;i{
s+=score[i];
}
doublev=s*1.0/m;
for(inti=0;i{
if(score[i]below[t++]=score[i];
}
returnt;
}
intmain()
{
inti,n,below[9];
intscore[9]={10,20,30,40,50,60,70,80,90};
n=fun(score,9,below);
printf("\nbelowtheaveragescoreare:
");
for(i=0;iprintf("%d",below[i]);
printf("\n");
}
5./*
编写函数:
编写函数,将放在字符串数组中的M各字符串,按顺序合并为一个新的字符串。
。
*/
#include
#include
#defineM3
#defineN20
voidfun(chara[M][N],char*b)
{
intt=0;
for(inti=0;i{
for(intj=0;a[i][j]!
='\0';j++)
{
*(b+t++)=a[i][j];
}
}
*(b+t)='\0';
}
intmain()
{
charw[M][N]={"AAAA","BBBBBBB","CC"},a[100];
inti;
printf("thestring:
\n");
for(i=0;iprintf("\n");
fun(w,a);
printf("theAstring:
\n");
printf("%s",a);
printf("\n");
}
6./*
统计各年龄段的人数。
N个年龄通过调用随机函数获得,并放在主函数的age数组中;要求函数把0至9岁年龄段的人数放在d[0]中,吧10~19段的人数
放在d[1]中,......,把100岁(含100岁)以上年龄段人数都放在d[10]中。
结果在主函数中输出。
*/
#include
#defineN50
#defineM11
voidfun(int*a,int*b)
{
for(inti=0;i{
b[i]=0;
}
for(inti=0;i{
if(a[i]>100)b[10]++;
else
b[a[i]/10]++;
}
}
doublernd()
{
staticintt=29,c=217,m=1024,r=0;
r=(r*t+c)%m;
return((double)r/m);
}
intmain()
{
intage[N],i,d[M];
//voidNONO(intd[M]);
for(i=0;iprintf("theoriginaldata:
\n");
for(i=0;iprintf("%4d:
%4d\n",(i+1)%10,age[i]);
printf("\n\n");
fun(age,d);
for(i=0;i<10;i++)printf("%4d---%4d:
%4d\n",i*10,i*10+9,d[i]);
printf("over100:
%4d\n",d[10]);
}
7./*
求小于或等于指定整数的所有素数。
*/
#include
#defineMAX100
intfun(intlim,intaa[MAX])
{
intm=0;
for(inti=2;i<=lim;i++)
{
boolflag=1;
for(intj=2;j
{
if(i%j==0)
{
flag=0;break;
}
}
if(flag)
aa[m++]=i;
}
returnm;
}
intmain()
{
intlimit,i,sum;
intaa[MAX];
printf("输入一个整数:
");
scanf("%d",&limit);
sum=fun(limit,aa);
for(i=0;i{
if((i%10==0)&&(i!
=0))printf("\n");
printf("%5d",aa[i]);
}
printf("\n");
}
8./*
编写函数:
移动一维数组中的内容;若数组中有n个整数,要求把下标从0到p(含p,p小于等于n-1)的数组元素平移到数组的最后,如
1,2,3,4,5,6,7,8,9,10;p的值为3,则移动后一维数组的内容为:
5,6,7,8,9,10,1,2,3,4。
*/
#include
#defineN80
voidfun(int*w,intp,intn)
{
intb[15];
for(inti=0;i{
b[i]=w[(i+p+1)%n];
}
for(inti=0;i{
w[i]=b[i];
}
}
intmain()
{
inta[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
inti,p,n=15;
printf("theoriginaldata:
\n");
for(i=0;iprintf("%3d",a[i]);
printf("\n\nenterp:
");
scanf("%d",&p);
fun(a,p,n);
printf("\nthedataaftermoving:
\n");
for(i=0;iprintf("%3d",a[i]);
printf("\n");
}
/*
方法2:
(1)定义一个一维数组做中间变量,先把w[p+1]到w[n-1]的值存入b[]数组中;
(2)再把数组w[0]到w[p]的数放在b数组的尾部
(3)最后把数组b中的内容依次存放到w[]中。
inti,j=0;b[N];
for(i=p+1;ifor(i=0;i<=p;i++)b[j++]=w[i];
for(i=0;i例如:
有一个数组intA[nSize],要求写一个函数:
int*myfunc(int*p,intnSize);
将A中的0都移至数组末尾,将非0的移至开始(保持原来的顺序不变)。
例如:
A原来是:
1,0,3,4,0,-3,5
经过myfunc处理后为:
1,3,4,-3,5,0,0
#include
voidmain()
{
int*myfunc(int*,int);
inta[7]={1,0,3,4,0,-3,5},i,*q;
q=myfunc(a,7);
for(i=0;i<7;i++)
printf("%d",a[i]);
}
int*myfunc(int*p,intnsize)
{intb[7]={0,0,0,0,0,0,0},j=0,i;
for(i=0;iif(p[i])b[j++]=p[i];
for(i=0;ip[i]=b[i];
returnb;
}
*/
9./*
编写函数:
将大于形参m并且紧靠m的k个素数存入xx所指的数组中。
函数prime判断一个数是否为素数。
。
*/
#include
intprime(intn)
{
intm;
for(m=2;mif(n%m==0)
return0;
return1;
}
voidfun(intm,intk,intxx[])
{
intprime(intn);
intt=0;
for(inti=m+1;t<=k;i++)
{
if(prime(i)==1)
{
xx[t++]=i;
}
}
}
intmain()
{
intm,n,zz[1000];
printf("\npleaseentertwointegers:
");
scanf("%d%d",&m,&n);
fun(m,n,zz);
for(m=0;mprintf("%d",zz[m]);
printf("\n");
}
10./*
编写函数,统计tt所指字符串中'a'到'z'共26各小写字母各自出现的次数,并依此放在pp所指数组中。
例如:
当输入abcdefgabcdeabc后,程序的输出结果应该为:
3332211000000000000
*/
#include
voidfun(char*tt,intpp[])
{
for(inti=0;i<26;i++)
{
pp[i]=0;
}
for(inti=0;*(tt+i)!
='\0';i++)
{
pp[*(tt+i)-'a']++;
}
}
intmain()
{
charaa[1000];
intbb[26],k;
printf("\npleaseenteracharstring:
");
scanf("%s",aa);
fun(aa,bb);
for(k=0;k<26;k++)
printf("%d",bb[k]);
printf("\n");
}
11./*
编写函数,求出1到1000之间能被7或11整除,但不能同时被7或11整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。
*/
#include
voidfun(int*a,int*n)
{
intm=0;
for(inti=1;i<=1000;i++)
{
if((i%7==0)+(i%11==0)==1)
{
a[m++]=i;
}
}
*n=m;
}
intmain()
{
intaa[1000],n,k;
fun(aa,&n);
for(k=0;kif((k+1)%10==0)printf("\n");
elseprintf("%5d",aa[k]);
}
12./*
编写函数:
移动字符串中的内容,移动规则:
把1到第m个字符,平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。
*/
#include
#include
#defineN80
voidfun1(char*w)
{
inti;chart;
t=w[0];
for(i=0;i<(int)strlen(w)-1;i++)
w[i]=w[i+1];
w[strlen(w)-1]=t;
}
voidfun(char*w,intm)
{
for(inti=0;i{
fun1(w);
}
}
intmain()
{
chara[N]="ABCDEFGHIJK";
intm;
printf("theoriginalstring:
\n");
puts(a);
printf("\n\nenterm:
");
scanf("%d",&m);
fun(a,m);
printf("\nthestringaftermoving:
\n");
puts(a);
printf("\n");
}
13./*
编写函数:
移动字符串中的内容,移动规则:
把1到第m个字符,平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。
*/
#include
#include
#defineN80
voidfun1(char*w)
{
inti;chart;
t=w[0];
for(i=0;i<(int)strlen(w)-1;i++)
w[i]=w[i+1];
w[strlen(w)-1]=t;
}
voidfun(char*w,intm)
{
for(inti=0;i{
fun1(w);
}
}
intmain()
{
chara[N]="ABCDEFGHIJK";
intm;
printf("theoriginalstring:
\n");
puts(a);
printf("\n\nenterm:
");
scanf("%d",&m);
fun(a,m);
printf("\nthestringaftermoving:
\n");
puts(a);
printf("\n");
}
14./*
编写函数,将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k返回。
prime函数是一个判断一个整数是否为素数,是返回1,否则返回0。
*/
#include
intprime(intm)
{
intk=2;
while(k<=m&&(m%k))
k++;
if(m==k)
return1;
else
return0;
}
voidfun(intm,int*k,intxx[])
{
intprime(intm);
intt=0;
for(inti=2;i{
if(prime(i)==0)
{
xx[t++]=i;
}
}
*k=t;
}
intmain()
{
intm,n,zz[100];
printf("\npleaseenteranintegernumberbetween10and100:
");
scanf("%d",&n);
fun(n,&m,zz);
printf("\n\nthereare%dnon-primenumberslessthan%d:
",m,n);
for(n=0;nprintf("\n%4d",zz[n]);
}
15./*
完成fun函数:
该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数。
例如:
输入的字符串为:
asdasasdfgasdaszs67asdmklo,子字符串为:
as,则应输出6.
*/
#include
#include
intfun(char*str,char*substr)
{
intlen=strlen(str),t=0;
for(inti=0;i{
if(str[i]==substr[0]&&str[i+1]==substr[1])
{
t++;
}
}
returnt;
}
main()
{
charstr[81],substr[3];
intn;
printf("输入主字符串:
");
gets(str);
printf("输入子字符串:
");
gets(substr);
puts(str);
puts(substr);
n=fun(str,substr);
printf("n=%d\n",n);
}
/*
如果没有限定子串长度呢?
方法1:
inti,j,k=0,t;
i=0;j=0;
while(str[i])
{
if(j==0)t=i;
if(str[i]==substr[j]){i++;j++;}
elseif(!
substr[j]){k++;j=0;i=t+1;}
else{j=0;i=t+1;}
}
returnk;
方法2:
利用strstr(char*s1,char*s2)是字符串在1中出现的位置,如找到则返回位置指针。
intk=0;
char*p=str,*q;
while(*p)
{
q=strstr(p,substr);
if(q==NULL)break;
p=q+strlen(substr);
k++;
}
returnk;
方法2有没有问题?
如果母串为aaaaadaaaaad,而子串为aaa,会怎么样?
如改为p=q+1;呢?
*/
16./*
编写函数,将字符串中的前导*号全部删除,中间和尾部的*号不删除.
例如:
字符串内容为*******AS*BHH**G*******,删除后,字符串内容应该为:
AS*BHH**G*******
*/
#include
voidfun(char*a)
{
intfirst=1,t=0;
for(inti=0;*(a+i)!
='\0';i++)
{
if(first&&a[i]!
='*')
{
first=0;
a[t++]=a[i];
}
if(!
first)
{
a[t++]=a[i];
}
}
a[t]='\0';
}
intmain()
{
chars[81];
printf("Enteras