C语言寒假作业.docx

上传人:b****6 文档编号:6458639 上传时间:2023-01-06 格式:DOCX 页数:23 大小:20.19KB
下载 相关 举报
C语言寒假作业.docx_第1页
第1页 / 共23页
C语言寒假作业.docx_第2页
第2页 / 共23页
C语言寒假作业.docx_第3页
第3页 / 共23页
C语言寒假作业.docx_第4页
第4页 / 共23页
C语言寒假作业.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

C语言寒假作业.docx

《C语言寒假作业.docx》由会员分享,可在线阅读,更多相关《C语言寒假作业.docx(23页珍藏版)》请在冰豆网上搜索。

C语言寒假作业.docx

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;i

n=fun(a,n);

printf("\n\nthedataafterdeleted:

\n");

for(i=0;i

printf("\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;i

printf("%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;i

printf("\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;i

printf("theoriginaldata:

\n");

for(i=0;i

printf("%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;i

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

printf("\n\nenterp:

");

scanf("%d",&p);

fun(a,p,n);

printf("\nthedataaftermoving:

\n");

for(i=0;i

printf("%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;i

for(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;i

if(p[i])b[j++]=p[i];

for(i=0;i

p[i]=b[i];

returnb;

}

*/

9./*

编写函数:

将大于形参m并且紧靠m的k个素数存入xx所指的数组中。

函数prime判断一个数是否为素数。

*/

#include

intprime(intn)

{

intm;

for(m=2;m

if(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;m

printf("%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;k

if((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;n

printf("\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

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

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

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

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