C语言作业.docx

上传人:b****8 文档编号:9573150 上传时间:2023-02-05 格式:DOCX 页数:38 大小:31.75KB
下载 相关 举报
C语言作业.docx_第1页
第1页 / 共38页
C语言作业.docx_第2页
第2页 / 共38页
C语言作业.docx_第3页
第3页 / 共38页
C语言作业.docx_第4页
第4页 / 共38页
C语言作业.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

C语言作业.docx

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

C语言作业.docx

C语言作业

7.1用筛法求之内的素数。

main()

{inti,j,a[100];

for(i=2;i<100;i++)

{a[i]=i;

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

{if(j

if(a[i]%j==0)

break;

if(a[i]-j==0)

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

}

}

printf("\n");

}

#include"math.h"

main()

{staticinti,j,k,a[98];

for(i=2;i<100;i++)

{a[i]=i;k=sqrt(i);

for(j=2;j<=a[i];j++)

if(j

break;

if(j>=k+1)

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

}

printf("\n");

}

7.2用选择法对10个整数从小到大排序。

main()

{inti,j,a[10],t;

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

scanf("%d",&a[i]);

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

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

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

{t=a[i+1];a[i+1]=a[i];a[i]=t;}

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

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

}

main()

{staticinta[10],i,j,k,t;

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

scanf("%d",&a[i]);

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

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

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

{t=a[i+1];a[i+1]=a[i];a[i]=t;}

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

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

printf("\n");

}

7.3求一个3×3矩阵对角线元素之和。

main()

{inti=0,j=0,a[3][3],s1,s2;

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

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

scanf("%d",&a[i][j]);

s1=a[0][0]+a[1][1]+a[2][2];

s2=a[0][2]+a[1][1]+a[2][0];

printf("s1=%d,s2=%d\n",s1,s2);

}

main()

{

staticinti,j,s1,s2,a[3][3];

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

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

scanf("%d",&a[i][j]);

s1=a[1][1]+a[2][2]+a[3][3];

s2=a[1][3]+a[2][2]+a[3][1];

printf("%d,%d\n",s1,s2);

}

7.4已有一个已排好的数组今输入一个数要求按原来排序的规律将它插入数组中。

main()

{staticinta[10]={1,7,8,17,23,24,59,62,101};inti,j,t;

scanf("%d",&a[9]);

for(i=9;i>0;i--)

if(a[i]

{t=a[i-1];a[i-1]=a[i];a[i]=t;}

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

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

}

main()

{

staticinta[5]={1,4,5,6,7};

inti,t,b;

scanf("%d",&b);

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

{if(b<=a[i])

{t=a[i];a[i]=b;b=t;}

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

printf("%d",b);

}

7.5将一个数组的值按逆序重新存放,例如,原来顺序为:

8,6,5,4,1。

要求改为:

1,4,5,6,8。

main()

{inti,b[10];

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

scanf("%d",&b[i]);

for(i=9;i>-1;i--)

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

printf("\n");}

7.6打印出以下杨辉三角形(要求打印出10行)。

1

1  1

1  2  1

1  3  3  1

1  4  6  4  1

1  5  10 10  5  1

main()

{staticintm,n,k,b[15][15];

b[0][1]=1;

for(m=1;m<15;m++)

{for(n=1;n<=m;n++)

{b[m][n]=b[m-1][n-1]+b[m-1][n];

printf("%-5d",b[m][n]);}printf("\n");

}

}

}

main()

{inti,j,n,k,a[10][10];

statica[][1]={{1},{1},{1},{1},{1},{1},{1},{1},{1},{1}};

a[1][1]=1;

for(k=2,k<11;k++)

for(i=2;i<=k;i++)

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

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

for(k=1;k<11;k++)

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

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

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

}

7.7打印“魔方阵”,所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。

例如,三阶魔方阵为

816

357

492

要求打印出由1~n2的自然数构成的魔方阵。

解:

#include

main()

{inta[16][16],i,i,k,p,m,n;

p=1;

while(p==1)/*要求阶数为1~15的商数*/

{printf("Entern(n=1~15):

");

scanf("%d",&n);

if((n!

=0)&&(n<=15)&&(n%2!

=0))p=0;

}

for(i=1;i<=n;i++)/*初始化*/

for(j=1;j<=n;j++)a[i][j]=0;

j=n/2+1;/*建立魔方阵*/

a[1][j]=1;

for(k=2;k<=n*n;k++)

{i=i-1;

j=j+1;

if((i<1)&&(j>n))

{i=i+2;

j=j-1;

}

else

{if(i<1)i=n;

if(j>n)j=1;

}

if(a[i][j]==0)a[i][j]=k;

else

{i=i+2;

j=j-1;

a[i][j]=k;

}

}

for(i=1;i<=n;i++)/*输出魔方阵*/

{for(j=1;j<=n;j++)

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

printf("\n");

}

}

7.8找出一个二位数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。

main()

{inta[5][5],b[5],c[5],d[5][5],k=0,l=0;inti,j;

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

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

scanf("%d",&d[i][j]);

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

for(j=0;j<5;j++,a[i][j]=d[i][j]);

for(i=0,k=0;i<5;i++,k++)

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

{if(a[i][j]>=a[i][j+1])

b[k]=a[i][j+1]=a[i][j];

else

b[k]=a[i][j+1];

}

for(j=0,l=0;j<5;j++,l++)

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

{if(a[i][j]<=a[i+1][j])

c[l]=a[i+1][j]=a[i][j];

else

c[l]=a[i+1][j];

}

for(i=0,k=0;i<5;i++,k++)

for(j=0,l=0;j<5;j++,l++)

if(d[i][j]-b[k]==0)

{if(d[i][j]-c[l]==0)

printf("d[%d][%d]=%d\n",i,j,d[i][j]);

else

printf("d[%d][%d]=%disnotandi\n",i,j,d[i][j]);

}

}

7.9有个15数按由小到大顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数组中第几个元素的值。

如果该数不在数组中,则打印出"无此数"

#include"math.h"

main()

{staticinti,j,m,a[15]={1,4,9,13,21,34,55,89,144,233,377,570,671,703,812};

scanf("%d",&m);

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

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

printf("\n");

i=7;

while(fabs(i-7)<8)

{if(m

{if(a[i]-m==0)

{printf("itisat(%d)\n",i+1);break;}i--;}

elseif(m>a[7])

{if(a[i]-m==0)

{printf("itisat(%d)\n",i+1);break;}i++;}

else

printf("8\n");

}

if(fabs(i-7)-8==0)

printf("Thereisnot\n");

}

7.10有一篇文章,共有3行文字,每行有个80字符。

要求分别统计出其中英文大写字母、小写字母、空格以及其它字符的个数。

main()

{inti,j=0,k=0,l=0,m=0,n=0;charstr0[301],str1[100],str2[100],str3[100];

gets(str1);gets(str2);gets(str3);

strcat(str0,str1);strcat(str0,str2);strcat(str0,str3);

for(i=0;str0[i]!

=’\0’;i++)

{if(str0[i]>=65&&str0[i]<=90)j++;

elseif(str0[i]>=97&&str0[i]<=122)k++;

elseif(str0[i]>=48&&str0[i]<=57)l++;

elseif(str0[i]==32)m++;

elsen++;}

printf("DaxieXiaoxieShuziKonggeQita\n");

printf("%5d%7d%5d%6d%4d\n",j,k,l,m,n);

}

7.11打印以下图案

* * * * *

* * * * *

* * * * *

** * * *

* * * * *

main()

{inti,j,k;chara[5][5];

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

{for(j=0;j<5;j++)

{a[i][j]=’*’;printf("%c",a[i][j]);}

printf("\n");

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

printf("\40");}

printf("\n");

}

7.12有一行电文译文下面规律译成密码:

A->Z a->z

B->Y b->y

C->X c->x

即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母。

非字母字符不变,要求编程序将密码回原文,并打印出密码和原文。

main()

{inti;charstr1[100],str2[100];

gets(str1);

for(i=0;str1[i]!

=’\0’;i++)

if(str1[i]>=65&&str1[i]<=90)

str2[i]=155-str1[i];

elseif(str1[i]>=97&&str1[i]<=122)

str2[i]=219-str1[i];

else

str2[i]=str1[i];

printf("%s\n%s\n",str1,str2);

}

7.13编一程序,将两个字符串连接起来,不要strcat函数。

main()

{inti,j;charstr1[100],str2[100],str3[201];

gets(str1);

gets(str2);

for(i=0;str1[i]!

=’\0’;i++)

str3[i]=str1[i];

for(j=0;str2[j]!

=’\0’;j++)

str3[j+i]=str2[j];

printf("%s\n%s\n%s\n",str1,str2,str3);

}

7.14编一个程序,将两个字符串S1和S2比较,如果S1>S2,输出一个正数;S1=S2,输出0;S1

不要用strcpy函数。

两个字符串用gets函数读入。

输出的正数或负数的绝对值应是相比较的两个字符串相对应字符的ASCII码的差值。

例如,’A’与’C’相比,由于’A’<’C’,应输出负数,由于’A’与’C’的码差值为2,因此应输出"-2"。

同理:

"And"和"Aid"比较,根据第2个字符比较结果,’n’比’i’大5,因此应输出"5"。

#include

#include

main()

{inti,resu;

chars1[100],s2[100];

printf("\ninputstring1:

");

gets(s1);

printf("\nInputstring2:

");

gets(s2);

i=0;

while(s1[i]==s2[i]&&s1[i]!

=’\0’)i++;

if(s1[i]==’\0’&&s2[i]==’0’)resu=0;

elseresu=s1[i]-s2[i];

printf("\nresult:

%d\n",resu);

}

7.15编写一个程序,将字符数组s2中的全部字符拷贝到字符数组s1中,不用strcpy函数。

拷贝时,’\0’也要拷贝过去,’\0’后面的字符不拷贝。

解:

#include"stdio.h"

main()

{chars1[80],s2[80];

inti;

printf("Inputs2:

");

scanf("%s",s2);

for(i=0;i

s1[i]=s2[i];

printf("s1:

%s\n",s1);

}

#include

intmain()

{

inta[10];

inti=0,j=0;

intmax,temp;

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

printf("Pleaseinputthe%dthnumber:

",i+1);

scanf("%d",&a[i]);

}

printf("Thearryhasbeeninputis:

\n");

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

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

}

printf("\n");

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

max=i;

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

max=((a[j]>a[max])?

j:

max);

}

temp=a[max];

a[max]=a[i];

a[i]=temp;

}

printf("Thearryaftersortis:

\n");

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

{

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

}

printf("\n");

printf("Plesaeinputanothernumber:

");

scanf("%d",&temp);

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

if(temp>a[i]){

break;

}

}

for(j=8;j>=i;--j){

a[j]=a[j-1];

}

a[i]=temp;

for(i=0;i<9;i++){

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

}

getchar();

return0;

}

6.1输入两个正整数m和n,求其最大公约数和最小公倍数。

main()

{longm,n,i=1,j,s;

scanf("%ld,%ld",&m,&n);

for(;i<=m&&i<=n;i++)

{if(m%i==0&&n%i==0)s=i;}

if(m>=n)j=m;

elsej=n;

for(;!

(j%m==0&&j%n==0);j++);

printf("s=%ld,j=%ld\n",s,j);

}

6.2输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。

#include"stdio.h"

main()

{charc;inti=0,j=0,k=0,l=0;

while((c=getchar())!

=’\n’)

{if(c>=65&&c<=90||c>=97&&c<=122)i++;

elseif(c>=48&&c<=57)j++;

elseif(c==32)k++;

elsel++;}

printf("i=%d,j=%d,k=%d,l=%d\n",i,j,k,l);

}

6.3求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字。

例如:

2+22+222+2222+22222(n=5),n由键盘输入。

#include"math.h"

main()

{intn,sum=0,i=1,s=2;

scanf("%d",&n);

while(i<=n)

{sum=sum+s;s=s+2*pow(10,i);

i++;}

printf("sum=%d\n",sum);

}

6.4求,(即求1!

+2!

+3!

+4!

+5!

+…+20!

main()

{intn,i=1;longsum=0,s=1;

scanf("%d",&n);

while(i<=n){s=s*i;sum=sum+s;i++;}

printf("sum=%ld\n",sum);

}

6.5求

main()

{doublei=1,j=1,k=1,s1=0,s2=0,s3=0,sum;

for(;i<=100;i++)s1=s1+i;

for(;j<=50;j++)s2=s2+j*j;

for(;k<=10;k++)s3=s3+1/k;

sum=s1+s2+s3;

printf("sum=%f\n",sum);

}

6.6打印出所有"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该本身。

例如:

153是一个水仙花数,因为153=1^3+5^3+3^3。

#include"math.h"

main()

{intx=100,a,b,c;

while(x>=100&&x<1000){a=0.01*x;b=10*(0.01*x-a);c=x-100*a-10*b;

if(x==(pow(a,3)+pow(b,3)+pow(c,3)))printf("%5d",x);x++;}

}

6.7一个数如果恰好等于它的因子之和,这个数就称为"完数"。

例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。

编程序找出1000之内的所有完数,并按下面格式输出其因子:

6 its factors are 1、2、3

main()

{intm,i,j,s;

for(m=6;m<10000;m++)

{s=1;

for(i=2;i

if(m%i==0)s=s+i;

if(m-s==0)

{printf("%5ditsfastorsare1",m);for(j=2;j

printf("%d",j);printf("\n");}

}

}

main()

{intm,i,j,s;

for(m=6;m<1000;m++)

{s=m-1;

for(i=2;i

if(m%i==0)s=s-i;

if(s==0)

{printf("%5ditsfastorsare1",m);for(j=2;j

printf("%d",j);printf("\n");}

}

}

6.8有一分数序列:

  

求出这个数列的前20项之和。

main()

{inti=1,n;doublet,x=1,y=2,s,sum=0;

scanf("%ld",&n);

while(i<=n){s=y/x;sum=sum+s;t=y;y=y+x;x=t;i++;}

printf("%f\n",sum);

}

6.9一球从100米高度自由下落,每次落地后返回原高度的一半,再落下。

求它在第10次落地时共经过多少米?

第10次反弹多高?

 

main()

{inti,n;doubleh=100,s=100;

scanf("%d",&n);

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

{h*=0.5;if(i==1)continue;s=2*h+s;}

printf("h=%f,s=%f\n",h,s);

}

6.10猴子吃桃问题。

猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。

第二天早上又将剩下的桃子吃掉一半,又多吃一个。

以后每天早上都吃了前一天剩下的一半零一个。

到第10天早上想再吃时,见只剩下一个桃子了。

求第一天共摘多少桃子。

main()

{inti=1,sum=0;

for(;i<=10;sum=2*sum+1,i++);

printf("sum=%d\n",sum);

}

6.11用迭代法求。

求平方根的迭代公式为:

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

当前位置:首页 > 人文社科 > 教育学心理学

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

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