c语言程序设计小杂烩.docx

上传人:b****6 文档编号:6797770 上传时间:2023-01-10 格式:DOCX 页数:42 大小:26.15KB
下载 相关 举报
c语言程序设计小杂烩.docx_第1页
第1页 / 共42页
c语言程序设计小杂烩.docx_第2页
第2页 / 共42页
c语言程序设计小杂烩.docx_第3页
第3页 / 共42页
c语言程序设计小杂烩.docx_第4页
第4页 / 共42页
c语言程序设计小杂烩.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

c语言程序设计小杂烩.docx

《c语言程序设计小杂烩.docx》由会员分享,可在线阅读,更多相关《c语言程序设计小杂烩.docx(42页珍藏版)》请在冰豆网上搜索。

c语言程序设计小杂烩.docx

c语言程序设计小杂烩

一个具有15个整型数组元素的一维数组array。

使用函数实现以下功能:

1)使用srand()和rand()初始化该一维数组,使其每个数组元素在-300到500之间(含-300和500);

2)编写一个数组输出函数,输出数组元素,要求每行仅输出10个数组元素。

3)使用冒泡排序法对该数组按照由小到大(由大到小)的顺序进行排序,并在主函数中输出排序后的结果。

4)使用折半(二分)查找法查找数组中是否存在200,若存在返回200在数组中的位置,否则返回-1

5)删除数组元素array[10],使其后面的数组元素依次前移。

6)将467插入到array中,插入后保持数组的排序方式不变。

7)将数组元素左移6位。

我的程序如下:

#include

#include

#include

#defineN15

#defineM6

#defineX2

voidmain()

{

//随机赋值

srand(time(NULL));//随机函数随时间变化而随机赋值的固定格式

inta[N],n,m;

for(m=0;m

a[m]=rand()%11;//a[m]=a+rand()%(b+1);a[m]的范围为[a,b](固定格式)

//输出

printf("随机赋值后的数组:

\n");

for(m=0;m

printf("%5d",a[m]);

printf("\n");

//冒泡法排序

intt;

printf("用冒泡法排序结果:

\n");

for(n=0;n

for(m=0;m

if(a[m]>a[m+1])//每次都用a[m]和其后的没有排序的数进行比较(注意排好的不再进行比较)

{

t=a[m];

a[m]=a[m+1];

a[m+1]=t;

}

for(m=0;m

printf("%5d",a[m]);

printf("\n");

//选择法排序

intk;

printf("用选择法排序结果:

\n");

for(n=0;n

{

k=n;

for(m=n+1;m

if(a[k]>a[m])

k=m;//注意:

嵌套的for语句在此已经结束,比较也跟着结束了。

//下面的语句实现:

通过交换的方式把a[n-1]其后面的数的最小值给a[n]

t=a[k];

a[k]=a[n];

a[n]=t;

}

//输出排序后的数组

for(m=0;m

printf("%5d",a[m]);

printf("\n");

//输入要查找的数

intb;

printf("请输入要查找的数:

");

scanf("%d",&b);

//折半法查找

inti,j,mid;

i=0;j=N-1;mid=(i+j)/2;

for(;i<=j;)

{

if(b==a[mid])

{

printf("你查找的是数组中第%d个数\n",mid+1);

break;

}

else

{

if(b>a[mid])

i=mid+1;

else

j=mid-1;

mid=(i+j)/2;

}

}

if(i>j)

printf("你查找的数字不存在!

\n");

//删除数

intde,flag,count=0;

printf("请输入要删除的数字:

");

scanf("%d",&de);

for(m=0;m

if(de==a[m])

{

flag=m;//把此时m的值存放在flag中

for(;m

a[m]=a[m+1];

m=flag-1;

/*因为对于最外面的for语句来说本次循环执行完之后m要加1,要想从flag处继续往后查找(实质上此时a[flag]处存放的是原来a[flag+1]的值)和输入值相等的数,必须的将让flag-1。

也就是说:

在数组中与输入值相等的位置必须判断两次,因为此处的值被其后面的值覆盖后,如果不再判断该处的值,就会漏掉被删除数后面的一个数(如果删除的数值与其后面的数值相等,就会出错)*/

count++;

}

printf("删除这个数后的数组为:

\n");

for(m=0;m

printf("%5d",a[m]);

printf("\n");

//插入一个数字

intq,N1=N-count;

printf("请输入要插入的数字:

");

scanf("%d",&q);

printf("插入该数之后的新数组为:

\n");

for(n=N1;n>=0;n--)

{

if(q>=a[n])

/*从数组的最后一位开始,如果比q小,直接把q的值赋给其后面的一位(定义数组时应该多定义一位):

如果比q小,把该数放到其后的位置,然后再判断原来其前面的数与q的大小。

如此循环即可。

*/

{

a[n+1]=q;break;

}

else

a[n+1]=a[n];

a[n]=q;

//如果到最后也没找到,即已经把a[0]的值赋给了a[1],此时说明q最小,把q赋给a[0](此时n已经为0)

}

for(m=0;m

printf("%5d",a[m]);

printf("\n");

//将数组移位

ints;

printf("将上面的数组左循环移%d位!

\n",M);

for(m=0;m

{

s=a[0];//把数组的第一个数组储存起来

for(n=0;n

a[n]=a[n+1];//嵌套的for语句结束

a[N-1]=s;//把储存起来的第一个数赋到最后一位上。

实现了整体向前移动一位。

}

for(m=0;m

printf("%5d",a[m]);

printf("\n");

//X进制转换

inth,c[100],js=0;

printf("请输入要转换成%d制的十进制数:

",X);

scanf("%d",&h);

while(h!

=0)

/*10进制13转2进制:

13/2=6余数为1,6/2=3余数为0,3/2=1余数为1,1/2=0余数为1,所以对应的二进制数为1101(第一位1是最后的商)*/

{

c[js]=h%X;

js++;

h=h/X;

}

//倒序输出数组c即为所求

for(m=js-1;m>=0;m--)

printf("%2d",c[m]);

printf("\n");

}

从数组里删除数

#include

#include

#include

#defineN10

voidmain()

{

inta[N],i,*j,*t,b,n=0;

j=a;

srand(time(NULL));

for(i=0;i

{

*j=rand()%5;

printf("%5d",*j);

}

printf("\n");

printf("请输入删除的数字:

");

scanf("%d",&b);

for(j=a;j

if(*j==b)

{

t=j;

for(;j

*j=*(j+1);

j=t-1;

n++;

}

for(j=a;j

printf("%5d",*j);

printf("\n");

}

求和与图形

25编写程序,求下面数列前20项的和。

结果取3位小数。

1,-1/3^3,1/5^3,1/7^3,……,(-1)^(n-1)/(2n-1)^3,……(其中,^表示幂运算)

~0.969

#include

intmain()

{longi,sign;

doubles;

sign=1;

s=0;

i=1;

while(i<=20)

{

s=s+1.0/((2*i-1)*(2*i-1)*(2*i-1))*sign;

sign=-sign;

i++;

}

printf("\n%.3lf",s);

return0;

}

26编写程序,求下面数列前20项的和。

结果取3位小数。

1,1/2^4,1/3^4,1/4^4,……,1/n^4,……(其中,^表示幂运算)

~1.082

#include

intmain()

{longi;

doubles;

s=0;

i=1;

while(i<=20)

{

s=s+1.0/(i*i*i*i);

i++;

}

printf("\n%.3lf",s);

return0;

}

 

~~~

35编写程序,计算并输出下面数列前n项的和(设n=20,x=0.5),要求结果保留3位小数。

sin(x)/x,sin(2x)/2x,sin(3x)/3x,……,sin(n*x)/(n*x),……(其中,sin(x)为正弦函数)

~2.786

#include

#include"math.h"

intmain()

{longi;

doubles,x=0.5;

s=0;

i=1;

while(i<=20)

{

s=s+sin(i*x)/(i*x);

i++;

}

printf("\n%.3lf",s);

return0;

}

36编写程序,计算并输出下面数列前n项的和(设n=20,x=0.5),要求结果保留3位小数。

cos(x)/x,cos(2x)/2x,cos(3x)/3x,……,cos(n*x)/(n*x),……(其中,cos(x)为余弦函数)

~1.277

#include

#include"math.h"

intmain()

{longi;

doubles,x=0.5;

s=0;

i=1;

while(i<=20)

{

s=s+cos(i*x)/(i*x);

i++;

}

printf("\n%.3lf",s);

return0;

}

79.编写程序,用双重循环和表达式输出下面图形。

(不能使用两维数组)。

1234

5678

9101112

#include

intmain()

{

inti,j,k;

for(i=1;i<=3;i++)

{

for(j=1;j<=4;j++)

{

k=(i-1)*4+j;

printf("%4d",k);

}

printf("\n");

}

return0;

}

74.编写程序,使用重双循环输出下列三角形:

(不能使用两维数组)。

A

ABC

ABCDE

ABCDEFG

#include

intmain()

{inti,j;

for(i=1;i<=4;i++)

{

for(j=1;j<10-2*i;j++)

printf("");

for(j=1;j<=2*i-1;j++)

printf("%2c",64+j);

printf("\n");

}

return0;

}

80

*

***

*****

*******

*********

*******

*****

***

*

#include

#include"math.h"

voidmain()

{

inti,j;

for(i=-4;i<=4;i++)

{

for(j=1;j<10+abs(i);j++)

printf("");

for(j=1;j<=9-abs(i)*2;j++)

printf("*");

printf("\n");

}

}

数组

1.编写程序,使用随机函数初始化一个具有20个整型数据的一维数组元素a,使其每个数组元素在100到300之间,使用冒泡排序法按照由小到大的顺序对该数组进行排序,输出排序前、后的数组元素。

#include

#include

#include

#defineN10

voidprintArray(int*p,intn);

intmain()

{

inta[N];

inti,j,temp;

srand(time(NULL));

for(i=0;i

a[i]=100+rand()%(300-100+1);

printArray(a,N);

for(i=0;i

{

for(j=0;j

{

if(a[j]>a[j+1])

{

temp=a[j];

a[j]=a[j+1];

a[j+1]=temp;

}

}

}

printArray(a,N);

return0;

}

voidprintArray(int*p,intn)

{

printf("\n");

int*ptr=p;

inti;

for(i=0;ptr

{

printf("%5d",*ptr);

if((i+1)%10==0)

printf("\n");

}

printf("\n");

}

#include

#include

#include

#defineN20

voidmain()

{

inta[N];

int*p;

inti,j,temp;

srand(time(NULL));

for(i=0;i

a[i]=100+rand()%(300-100+1);

p=a;

printf("\n");

int*ptr=p;

for(i=0;ptr

{

printf("%5d",*ptr);

if((i+1)%10==0)

printf("\n");

}

printf("\n");

for(i=0;i

{

for(j=0;j

{

if(a[j]>a[j+1])

{

temp=a[j];

a[j]=a[j+1];

a[j+1]=temp;

}

}

}

p=a;

ptr=p;

printf("\n");

for(i=0;ptr

{

printf("%5d",*ptr);

if((i+1)%10==0)

printf("\n");

}

printf("\n");

}

4.把50-85这36个自然数按行赋给二维数组A[6][6],计算输出主对角线以上(含主对角线)各元素值的立方根之积。

结果保留3位小数。

结果:

3769867280899.743

#include"math.h"

#include

intmain()

{inta[6][6],i,j,k=50;

doubles=0;

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

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

{a[i][j]=k;

k=k+2;

}

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

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

if(j+i<6)

s=s*pow(a[i][j],1.0/3);

printf("%.3lf",s);

return0;

}

 

5.把21-56这36个自然数按列赋给二维数组A[6][6],计算输出主对角线以下(含主对角线)各元素值立方根之积。

结果:

42610953771.152

#include"math.h"

#include

intmain()

{inta[6][6],i,j,k=21;

doubles=1;

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

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

{a[j][i]=k;

k=k+1;

}

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

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

if(i+j>=5)

s=s*pow(a[i][j],1.0/3);

printf("\n%.3lf",s);

return0;

}

 

6.编写程序,实现一维数组A[10]元素值循环左移4位(要求用指针实现)。

例数组的原值:

12345678910

结果为:

78910123456

#include

#defineN10

#defineLM4

intmain()

{

inta[N],i;

for(i=0;i

{

a[i]=i+1;

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

}

printf("\n");

inttemp,*p;

for(i=0;i

{

temp=*(a+N-1);

for(p=a+N-1;p>a;p--)

*p=*(p-1);

*p=temp;

}

For(i=0;i

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

printf("\n");

return0;

}

8.编写程序,建立一个有10个元素组成的一维数组(该数组已存放9个数据,数据自定,并已按降序排列),要求从键盘输入一个数据,并将其插入到数组适当位置,即插入后的数组仍按降序排列,最后将结果输出(要求用指针实现)。

#include

intmain()

{inta[10]={3,6,7,9,12,16,18,20,90},i,x,*p;

p=a;

scanf("%d",&x);

i=8;

while(i>=0&&p[i]>x)

{p[i+1]=p[i];

i--;

}

p[i+1]=x;

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

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

return0;

}

14.编写程序,把一个数组倒序,并输出倒序前、后的数据(要求用指针实现)。

例:

倒序前的数:

12345678

倒序后的数:

87654321

#include

intmain()

{inta[]={1,2,3,4,5,6,7,8},i,t,*p;

p=a;

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

{

t=p[i];

p[i]=p[7-i];

p[7-i]=t;

}

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

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

return0;

}

15.已知一个一维数组(数据自定且不重复),然后从键盘上输入一个数x,若x在数组中存在,则删除该元素。

并输出删除后的数组(要求用指针实现)。

例:

若数组的数据为:

1234643789889799,x为37

则,结果为:

12346489889799

#include

intmain()

{inta[8]={12,34,64,37,89,88,97,99},i,x,*p,j;

p=a;

scanf("%d",&x);

i=0;

while(i<=7&&p[i]!

=x)

i++;

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

p[j]=p[j+1];

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

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

return0;

}

 

16.编写程序,查找一个由大到小的一维数组array[20]={281,279,268,266,258,251,234,228,217,208,

162,160,158,139,137,127,124,122,115,110},使用折半(二分)查找法查找268是否在该数组中,若在输出268在该数组中的位置,否则输出“不存在该数”。

结果:

2

#include

#defineN20

intmain()

{

intarray[N]={281,279,268,266,258,251,234,228,217,208,162,160,158,139,137,127,124,122,115,110};

ints=0,e=N-1;

intmid=(s+e)/2;

while(s<=e)

{

if(array[mid]==268)

{

printf("%dinthelocationof%d\n",268,mid);

return0;

}

elseif(array[mid]>268)

{

s=mid+1;

mid=(s+e)/2;

}

else

{

e=mid-1;

mid=(s+e)/2;

}

}

printf("不存在!

\n");

return0;

}

20.编写程序,实现一维数组A[10]元素值循环右移4位(要求用指针实现)。

例数组的原值:

12345678910

结果为:

56789101234

#include

#defineN10

#defin

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

当前位置:首页 > 幼儿教育 > 幼儿读物

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

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