admin 管理员组

文章数量: 1086019


2024年5月17日发(作者:小程序开发服务好态度好)

1.5请参照本章例题编写一个C程序输出以下信息

**************************

Very Good!

**************************

mian()

{printf(“**************************”);

printf(“n”);

printf(“Very Good!n”);

printf(“n”);

printf(“**************************”);

}

1.6 编写一个程序输入a、b、c三个值输出其中最大值。

mian()

{int a,b,c,max;

printf(“请输入三个数a,b,c:n”);

scanf(“%d,%d,%d”,&a,&b,&c);

max=a;

if(max

max=b;

if(max

max=c;

printf(“最大数为“%d”,max);

}

第三章

3.6写出以下程序运行的结果。

main()

{char c1=’a’,c2=’b’,c3=’c’,c4=’101’,c5=’116’;

printf(“a%cb%ctc%ctabcn”,c1,c2,c3);

printf(“tb%c %c”,c4,c5);

}

aaㄩbbㄩㄩㄩccㄩㄩㄩㄩㄩㄩabc

AㄩN

3.7 要将"China"译成密码译码规律是用原来字母后面的第4个字母代替原来的字母

如字母"A"后面第4个字母是"E""E"代替"A"。因此"China"应译为"Glmre"。请编一程

序用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为’C’、’h’、’i’、’n’、’

a’

经过运算使c1、c2、c3、c4、c5分别变为’G’、’l’、’m’、’r’、’e’并输出。

#include n()

{ char c1=’C’,c2=’h’,c3=’i’,c4=’n’,c5=’a’;

c1+=4;

c2+=4;

c3+=4;

c4+=4;

c5+=4;

printf("密码是%c%c%c%c%cn",c1,c2,c3,c4,c5);

}

运行结果

密码是Glmre

3.9求下面算术表达式的值。

1x+a%3*(int)(x+y)%2/4

设x=2.5,a=7,y=4.7

2(float)(a+b)/2+(int)x%(int)y

设a=2,b=3,x=3.5,y=2.5

12.5

23.5

3.10写出程序运行的结果。

main()

{int i,j,m,n;

i=8;

j=10;

m=++i;

n=j++;

printf(“%d,%d,%d,%d”,i,j,m,n);

}

911910

3.12 写出下面表达式运算后a的值设原来a=12。设a和n都已定义为整型变量。

1a+=a 2 a-=2 3 a*=2+3 4a/=a+a

5 a%=(n%=2)n的值等于5

6a+=a-=a*=a

(1) 24 (2) 10 (3) 60 (4) 0 (5) 0 (6) 0

第四章

44若a=3b=4c=5x=1.2y=2.4z=-3.6u=51274n=128765c1=’a’

c2=’b’。

想得到以下输出格式和结果请写出程序包括定义变量类型和设计输出。

a=_3_ _b=_4_ _c=_5

x=1.200000,y=2.400000,z=-3.600000

x+y=_3.600_ _y+z=-1.20_ _z+x=-2.40

c1=ˊaˊ_or_97(ASCII) 2=ˊbˊ_or_98(ASCII)

main()

{int a=3,b=4,c=5;

long int u=51274,n=128765;

float x=1.2,y=2.4,z=3.6;

char c1=’a’,c2=’b’;

printf("a=%2d b=%2d c=%2dn",a,b,c);

printf("x=%f,y=%f,z=%fn",x,y,z);

printf("x+y=%5.2f y+z=%5.2f z+x=%5.2fn",x+y,y+z,z+x);

printf("u=%6ld n=%9ldn",u,n);

printf("%s %s %d%sn","c1=’a’","or",c1,"(ASCII)");

printf("%s %s %d%sn","c2=’a’","or",c2,"(ASCII)");

}

47用scanf下面的函数输入数据使a=3b=7x=8.5y=71.82c1=ˊAˊc2=

ˊaˊ

问在键盘上如何输入

main()

{

int abfloat xychar c1c2

scanf"a=%d_b=%d"&a&b

scanf"_x=%f_y=%e",&x&y

scanf"_c1=%c_c2=%c"&c1&c2

}

a=3_b=7

_x=8.5_y=71.82

_c1=A_c2=a

48设圆半径r=1.5圆柱高h=3求圆周长、圆面积、圆球表面积、圆球体积、圆柱体

积。

用scanf输入数据输出计算结果输出时要求文字说明取小数点后两位数字。请编程序。

main()

{float r,h,C1,Sa,Sb,Va,Vb;

scanf("%f,%f",&r,&h);

C1=2*3.14*r;

Sa=3.14*r*r;

Sb=4*Sa;

Va=4*3.14*r*r*r/3;

Vb=Sa*h;

printf("C1=%.2fn",C1);

printf("Sa=%.2fnSb=%.2fnVa=%.2fnVb=%.2fn",Sa,Sb,Va,Vb);

}

49输入一个华氏温度要求输出摄氏温度。公式为

c=5(F-32)/9

输出要求有文字说明取位2小数。 n()

{float F,c;

scanf("%f",&F);

c=5*(F-32)/9;

printf("c=%.2f",c);

}

410编程序用getchar函数读入两个字符给c1、c2然后分别用函数和函数输出这两

字符。并思考以下问题变量c1、c2应定义为字符型或整形抑二者皆可要

求输出c1和c2值的ASCII码应如何处理用putchar函数还是printf函数整形

变量与字符变量是否在任何情况下都可以互相代替如

char c1c2

int c1c2

是否无条件的等价

#include"stdio.h"

main()

{char c1,c2;

c1=getchar();c2=getchar();

putchar(c1);putchar(’n’);putchar(c2);putchar(’n’);

}

#include"stdio.h"

main()

{char c1,c2;

c1=getchar();c2=getchar();

printf("c1=%d c2=%dn",c1,c2);

printf("c1=%c c2=%cn",c1,c2);

}

第五章

5.1 什么是算术运算什么是关系运算什么是逻辑运算

解略。

5.2 C语言中如何表示“真”和“假”系统如何判断一个量的“真”和“假”

解设有一个逻辑表达式若其结果为“真”则以1表示若其结果为“假”则以0表

示。

但是判断一个逻辑量的值时以0代表“真”以非0代表“假”。例如3&&5的值为“真”

系统给出3&&5的值为1。

5.3 写出下面各逻辑表达式的值。设a=3b=4c=5。

(1) a+b>c&&b==c

(2) a||b+c&&b-c (3) !(a>b)&&!c||1

(4) !(x=a)&&(y=b)&&0

(5) !(a+b)+c-1&&b+c/2

(1) 0

(2) 1

(3) 1

(4) 0

(5) 1

5.4 有3个整数a、b、c由键盘输入输出其中最大的数。

方法一

#include

main()

{ int a,b,c;

printf("请输入3个整数");

scanf("%d,%d,%d",&a,&b,&c);

if(a

if(b

else printf("max=%dn",b);

else if(a

else printf("max=%dn",a);

}

方法二使用条件表达式可以使程序更加简明、清晰。

程序如下

#include

main()

{ int a,b,c,temp,max;

printf("请输入3个整数");

scanf("%d,%d,%d",&a,&b,&c);

temp=(a>b)?a:b; /* 将a和b中的大者存人temp中 */

max=(temp>c)?temp:c; /* 将a和b中的大者与c比较取最大者*/

printf("3个整数的最大数是%dn”,max);

}

5.5 有一函数

写一程序输入x值输出y值。

#include

main()

{int x,y;

printf("输入x");

scanf("%d",&x);

if(x<1) /* x<1 */

{ y=x;

printf("x=%3d, y=x=%dn",x,y);

}

else if (x<10) /* 1≤x-10 */

{ y=2*x-1;

printf("x=%3d, y=2*x-1=%dn",x,y);

}

else /* x≥10 */

{ y=3*x-11;

printf("x=%3d, y=3*x-11=%dn",x,y);

}

}

5.6 给一个百分制成绩要求输出等级’A’、’B’、’C’、’D’、’E’。90分以上为’A’

80~90分为’B’70~79分为’C’60分以下为’D’。

程序如下

#include

main()

{ float score;

char grade;

printf("请输入学生成绩");

scanf("%f",&score);

while(score>100||(score<0)

{ printf("n输入有误,请重新输入");

scanf("%f",&score);

}

switch((int)(score/10))

{ case 10:

case 9: grade=’A’;break;

case 8: grade=’B’;break; e 7: grade=’C’;break;

case 6: grade=’D’;break;

case 5:

case 4:

case 3:

case 2:

case 1:

case 0: grade=’E’;

}

printf("成绩是%5.1f相应的等级是%c。n",score,grade);

}

说明对输入的数据进行检查如小于0或大于100要求重新输入。(int)(score/10)的作

是将 (score/10) 的值进行强制类型转换得到一个整型值。

5.7 给定一个不多于5位的正整数要求① 求它是几位数② 分别打印出每一位数字

③ 按逆序打印出各位数字。例如原数为321应输出123。

#include

main()

{ long int num;

int indiv,ten,hundred,thousand,ten_thousand,place;

/*分别代表个位、十位、百位、千位、万位和位数*/

printf("请输入一个整数0~99999");

scanf("%ld",&num);

if (num>9999) place=5;

else if(num>999) place=4;

else if(num>99) place=3;

else if(num>9) place=2;

else place=1;

printf("place =%dn", place);

ten_thousand=num/10000;

thousand=num/1000%10;

hundred=num/100%10;

ten=num%100/10;

indiv=num%10;

switch(place)

{ case 5: printf("%d,%d,%d,%d,%d",ten_thousand,thousand,hundred,ten,indiv);

printf("n反序数字为");

printf("%d%d%d%d%dn",indiv,ten,hundred,thousand,ten_thousand);

break;

case 4: printf("%d,%d,%d,%d",thousand,hundred,ten,indiv);

printf("n反序数字为");

printf("%d%d%d%dn",indiv,ten,hundred,thousand);

break;

case 3: printf("%d,%d,%d",hundred,ten,indiv);

printf("n反序数字为");

printf("%d%d%dn",indiv,ten,hundred);

break;

case 2: printf("%d,%d",ten,indiv);

printf("n反序数字为");

printf("%d%dn",indiv,ten);

break;

case 1: printf("%d",indiv);

printf("n反序数字为");

printf("%dn",indiv);

break;

}

}

5.8 企业发放的奖金根据利润提成。利润I低于或等于10万元时奖金可提成10% 利润

高于10万元低于20万元100000

万元的部分可提成7.5% 200000

高于20万元的部分按5%提成400000

600000

〈I≤1000000时高于60万的部分按1.5%提成I>1000000时超过100万元的部分按1%

提成。从键盘输入当月利润I求应发放奖金总数。要求(1)用if语句编程序(2)用

switch

语句编程序。

解计算利润时要特别注意不同利润的不同提成比例。例如利润为15万元其中有10

万元按10%的比例提成另外5万元则按7.5%提成。

(1) 用if语句编程序。

#include

main()

{ long i;

float bonus,bon1,bon2,bon4,bon6,bon10;

bon1=100000*0.1; /*利润为10万元时的奖金*/

bon2=bon1+100000*0.075; /*利润为20万元时的奖金*/

bon4=bon2+200000*0.05; /*利润为40万元时的奖金*/

bon6=bon4+200000*0.03; /*利润为60万元时的奖金*/

bon10=bon6+400000*0.015; /*利润为100万元时的奖金*/

printf("请输入利润i");

scanf("%ld",&i);

if(i<=100000)

bonus=i*0.1; /*利润在10万元以内按0.1提成奖金*/

else if(i<=200000)

bonus=bon1+(i-100000)*0.075; /*利润在10万至20万元时的奖金*/

e if(i<=400000)

bonus=bon2+(i-200000)*0.05; /*利润在20万至40万元时的奖金*/

else if(i<=600000)

bonus=bon4+(i-400000)*0.03; /*利润在40万至60万元时的奖金*/

else if(i<=1000000)

bonus=bon6+(i-600000)*0.015; /*利润在60万至100万元时的奖金*/

else

bonus=bon10+(i-1000000)*0.01; /*利润在100万元以上时的奖金*/

printf(”奖金是%10.2fn",bonus);

}

此题的关键在于正确写出每一区间的奖金计算公式。例如利润在10万元至20万时奖金应

由两部分组成①利润为10万元时应得的奖金。即100000ⅹ0.1②10万元以上部分应得

的奖金。即(num-100000)ⅹ0.075。同理20万40万这个区间的奖金也应由两部分组成

①利润为20万元时应得的奖金即100000ⅹ0.1ⅹ10万ⅹ0.075②20万元以上部分应得的

奖金即(num-200000)ⅹ0.05。程序中先把10万、20万、40万、60万、100万各关键点的

奖金计算出来即bon1、bon2、bon4、bon6、hon10然后再加上各区间附加部分的奖金。

(2) 用switch语句编程序。

输入利润i确定相应的提成等级branch

根据branch确定奖金值

0 奖金=i*0.1

1 奖金=bon1+(i-105)*0.075

2 奖金=bon2+(i-2*105)*0.05

3

4 奖金=bon4+(i-4*105)*0.03

5

6 奖金=bon6+(i-6*105)*0.015

7

8

9

10 奖金=bon10+(i-106)*0.01

输出奖金

#include

main()

{ long i;

float bonus, bon1, bon2, bon4, bon6, bon10;

int c;

bon1=100000*0.1;

bon2=bon1+100000*0.075;

bon4=bon2+200000*0.05;

bon6=bon4+200000*0.03; 10=bon6+400000*0.015;

printf("请输入利润i");

scanf("%ld",&i);

c=i/100000;

if(c>10) c=10;

switch(c)

{ case 0: bonus=1*0.1;break;

case 1: bonus=bon1+(i-100000)*0.075;break;

case 2 :

case 3: bonus=bon2+(i-200000)*0.05; break;

case 4:

case 5: bonus=bon4+(i-400000)*0.03;break;

case 6:

case 7:

case 8:

case 9: bonus=bon6+(i-600000)*0.015;break;

case 10: bonus=bon10+(i-1000000)*0.01;

}

printf("奖金是%10.2f",bonus);

}

5.9 输入4个整数要求按由大到小的顺序输出。

解此题采用依次比较的方法排出其大小顺序。在学习了循环和数组以后

序方法。

#include

main()

{ int t,a,b,c,d;

printf("请输入4个整数");

scanf("%d,%d,%d,%d",&a,&b,&c,&d);

printf("n a=%d,b=%d,c=%d,d=%dn",a,b,c,d);

if(a>b) {t=a; a=b; b=t;}

if(a>c) {t=a; a=c; c=t;}

if(a>d) {t=a; a=d; d=t;}

if(b>c) {t=a; b=c; c=t;}

if(b>d) {t=b; b=d; d=t;}

if(c>d) {t=c; c=d; d=t;}

printf("排序结果如下n");

可以有更多的排

printf("%d, %d, %d, %dn",a,b,c,d);

}

5.10 有4个圆塔圆心分别为(22)、(-22)、(2-2)、(-2-2)圆半径为1。这

4个塔

的高度分别为10m。塔以外无建筑物。今输入任一点的坐标求该点的建筑高度(塔外的高

度为零)。

程序如下

#include

main()

{ int h=10;

float x1=2,y1=2,x2=-2,y2=2,x3=-2,y3=-2,x4=-2,y4=-2,x,y,d1,d2,d3,d4;

printf("请输入一个点(x,y)");

scanf("%f,%f",&x,&y);

d1=(x-x1)*(x-x1)+(y-y1)*(y-y1); /*求该点到各中心点的距离*/

d2=(x-x2)*(x-x2)+(y+y2)*(y+y2);

d3=(x+x3)*(x+x3)+(y-y3)*(y-y3);

d4=(x+x4)*(x-x4)*(y+y4)*(y+y4);

if(d1>1&&d2>1&&d3>1&&d4>1) h=0; /*判断该点是否在塔外*/

printf("该点高度为%dn",h);

}

第六章

第六章 循环控制

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

main()

{long m,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;

else j=n;

for(;!(j%m==0&&j%n==0);j++); ntf("s=%ld,j=%ldn",s,j);

}

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

#include"stdio.h"

main()

{char c;int i=0,j=0,k=0,l=0;

while((c=getchar())!=’n’)

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

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

else if(c==32) k++;

else l++;}

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

}

6.3求Sn=a+aa+aaa+?+aa?aaa有n个a之值

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

#include"math.h"

main()

{int n,sum=0,i=1,s=2;

scanf("%d",&n);

while(i<=n)

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

i++;}

printf("sum=%dn",sum);

}

6.4 求 即求1!+2!+3!+4!+5!+?+20!

main()

{int n,i=1;long sum=0,s=1;

scanf("%d",&n);

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

printf("sum=%ldn",sum);

}

6.5 求

main()

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

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

其中a是一个数字。例如

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

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

sum=s1+s2+s3;

printf("sum=%fn",sum);

}

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

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

#include"math.h"

main()

{int x=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()

{int m,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("%5d its fastors are 1 ",m);for(j=2;j

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

}

}

main()

{int m,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("%5d its fastors are 1 ",m);for(j=2;j

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

}

}

6.8有一分数序列

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

main()

{int i=1,n;double t,x=1,y=2,s,sum=0;

scanf("%ld",&n); le(i<=n) {s=y/x;sum=sum+s;t=y;y=y+x;x=t;i++;}

printf("%fn",sum);

}

6.9一球从100米高度自由下落每次落地后返回原高度的一半再落下。求它在第10次落

地时共经过多少米第10次反弹多高

main()

{int i,n;double h=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=%fn",h,s);

}

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

第二天早上又将剩下的桃子吃掉一半又多吃一个。以后每天早上都吃了前一天剩下的一半

零一个。到第10天早上想再吃时见只剩下一个桃子了。求第一天共摘多少桃子。

main()

{int i=1,sum=0;

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

printf("sum=%dn",sum);

}

6.11用迭代法求 。求平方根的迭代公式为

要求前后两次求出的得差的绝对值少于0.00001。

#include"math.h"

main()

{float x0,x1,a;

scanf("%f",&a);

x1=a/2;

do

{x0=x1;x1=(x0+a/x0)/2;}

while(fabs(x0-x1)>=0.00001);

printf("%.3fn",x1);

}

6.12 用牛顿迭代法求方程在1.5附近的根。

main()

{double x,y;x=1.5;

do{y=2*x*x*x-4*x*x+3*x-6;

x=x-y/(6*x*x-8*x+3);}

while(y!=0); ntf("x=%.3fn",x);

}

6.13用二分法求方程在(-1010)之间的根

main()

{double x1,x2,y1,y2;x1=-10;x2=10;

do{y1=2*x1*x1*x1-4*x1*x1+3*x1-6;

x1=x1-y1/(6*x1*x1-8*x1+3);}

while(y1!=0);

do

{y2=2*x2*x2*x2-4*x2*x2+3*x2-6;

x2=x2-y2/(6*x2*x2-8*x2+3);}

while(y2!=0);

printf("x1=%.3f,x2=%.3fn",x1,x2);

}

6.14打印以下图案

*

* * *

* * * * *

* * * * * * *

* * * * *

* * *

*

#include"math.h"

main()

{int i,j,k;

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

{for(j=0;j<=2-i;j++)

printf(" ");

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

printf("*");

printf("n");

}

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

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

printf(" "); for(k=0;k<=4-2*i;k++)

printf("*");

printf("n");

}

}

第七章

第七章 数组

7.1 用筛法求之内的素数。

main()

{ int i,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()

{static int i,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()

{ int i,j,a[10],t;

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

scanf("%d",&a[i]); (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()

{static int a[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()

{int i=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=%dn",s1,s2);

}

main()

{

static int i,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,%dn",s1,s2);

}

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

n()

{ static int a[10]={1,7,8,17,23,24,59,62,101};int i,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()

{

static int a[5]={1,4,5,6,7};

int i,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将一个数组的值按逆序重新存放例如原来顺序为

14

568。

main()

{ int i,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()

86541。要求改为

{ static int m,n,k,b[15][15];

b[0][1]=1; (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()

{ int i,j,n,k,a[10][10];

static a[][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 打印“魔方阵”所谓魔方阵是指这样的方阵它的每一行、每一列和对角线之和均相

等。例如三阶魔方阵为

8 1 6

3 5 7

4 9 2

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

#include

main()

{ int a[16][16],i,i,k,p,m,n;

p=1;

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

{ printf("Enter n(n=115)");

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()

{int a[5][5],b[5],c[5],d[5][5],k=0,l=0;int i,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]=%dn",i,j,d[i][j]);

else

printf("d[%d][%d]=%d isnot andin",i,j,d[i][j]);

}

}

7.9有个15数按由小到大顺序存放在一个数组中输入一个数要求用折半查找法找出该数

组中第几个元素的值。如果该数不在数组中则打印出"无此数"

#include"math.h"

main()

{static int i,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("it is at (%d)n",i+1);break;}i--;}

else if(m>a[7])

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

{printf("it is at (%d)n",i+1);break;}i++;}

else

printf("8n");

}

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

printf("There is notn");

}

7.10有一篇文章共有3行文字每行有个80字符。要求分别统计出其中英文大写字母、

小写字母、空格以及其它字符的个数。

main()

{int i,j=0,k=0,l=0,m=0,n=0;char str0[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++;

else if(str0[i]>=97&&str0[i]<=122) k++; e

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

else if(str0[i]==32) m++;

else n++;}

printf("Daxie Xiaoxie Shuzi Kongge Qitan");

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

}

7.11打印以下图案

main()

{int i,j,k;char a[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()

{ int i;char str1[100],str2[100];

gets(str1);

for(i=0;str1[i]!=’0’;i++)

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

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

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

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

else

str2[i]=str1[i];

printf("%sn%sn",str1,str2);

}

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

main()

{ int i,j;char str1[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("%sn%sn%sn",str1,str2,str3);

}

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

0S1

或负数的绝对值应是相比较的两个字符串相对应字符的ASCII码的差值。例如’A’与’C’

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

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

#include

#include

main()

{ int i,resu;

char s1[100],s2[100];

printf("n input string1");

gets(s1);

printf("n Input string2");

gets(s2);

i=0;

while(s1[i]==s2[i]&&s1[i]!=’0’) i++;

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

else resu=s1[i]-s2[i];

printf("n result%dn",resu);

}

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

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

#include "stdio.h"

main()

{ char s1[80],s2[80];

int i;

printf("Input s2");

scanf("%s",s2);

for(i=0;i

printf("s1%sn",s1);

}

第八章

第八章 函数

1.1写两个函数分别求两个整数的最大公约数和最小公倍数用主函数调用这两个函数

并输出结果两个整数由键盘输入。

maxyueshu(m,n)

int m,n;

{ int i=1,t;

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

{if(m%i==0&&n%i==0)

t=i;

}

return(t);

}

minbeishu(m,n)

int m,n;

{int j;

if(m>=n) j=m;

else j=n;

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

return j;

}

main()

{int a,b,max,min;

printf("enter two number is: ");

scanf("%d,%d",&a,&b);

max=maxyueshu(a,b);

min=minbeishu(a,b);

printf("max=%d,min=%dn",max,min);

}

8.2求方程 的根用三个函数分别求当b2-4ac大于0、等于0、和小于0时的根并输出结

果。从主函数输入a、b、c的值。

#include"math.h"

float yishigen(m,n,k)

float m,n,k;

{float x1,x2;

x1=(-n+sqrt(k))/(2*m);

x2=(-n-sqrt(k))/(2*m); ntf("two shigen is x1=%.3f and

x2=%.3fn",x1,x2);

}

float denggen(m,n)

float m,n;

{float x;

x=-n/(2*m);

printf("denggen is x=%.3fn",x);

}

float xugen(m,n,k)

float m,n,k;

{float x,y;

x=-n/(2*m);

y=sqrt(-k)/(2*m);

printf("two xugen is x1=%.3f+%.3fi and x2=%.3f-%.3fin",x,y,x,y);

}

main()

{float a,b,c,q;

printf("input a b c is ");

scanf("%f,%f,%f",&a,&b,&c);

printf("n");

q=b*b-4*a*c;

if(q>0) yishigen(a,b,q);

else if(q==0) denggen(a,b);

else xugen(a,b,q);

}

8.2写一个判断素数的函数在主函数输入一个整数输出是否是素数的消息。

psushu(m)

int m;

{int i=2,t;

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

if(m%i==0&&i

if(m-i==0) t=1;

else t=0;

return m;

}

main()

{int a,s;

printf("enter sushu is n");

scanf("%d",&a);

s=psushu(a);

if(s==1) printf("a is sushun");

else printf("s is not sushun");

}

8.4写一个函数使给定的一个二维数组×转置即行列互换。

int zhuangzhi(b)

int b[3][3];

{int i,j,t;

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

for(j=0;j>=i&&j<3-i;j++)

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

}

main()

{int a[3][3];int i,j;

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

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

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

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

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

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

printf("n");}

zhuangzhi(a);

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

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

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

printf("n");}

}

8.5写一函数使输入的一个字符串按反序存放在主函数中输入输出字符串。

main()

{char str0[100];

gets(str0);

fanxu(str0);

puts(str0);

}

fanxu(str1)

char str1[100];

{int i,t,j;

char str2[100];strcpy(str2,str1);

t=strlen(str1);

for(i=0,j=t-1;j>-1;i++,j--)

str1[i]=str2[j];

}

8.6写一函数将两个字符串连接。

lianjie(a,b)

char a[100],b[100]; {strcat(a,b);

}

main()

{char str1[100],str2[100];

gets(str1);gets(str2);

lianjie(str1,str2);

puts(str1);

}

8.7写一函数将两个字符串中的元音字母复制到另一个字符串然后输出。

fuzhi(a,b)

char a[100],b[100];

{int i,j=0;

for(i=0;a[i]!=’0’;i++)

if(a[i]==97||a[i]==101||a[i]==105||a[i]==111||a[i]==117||a[i]==65||

a[i]==69||a[i]==73||a[i]==85) {b[j]=a[i];j++;}

}

main()

{char str1[100],str2[100];

gets(str1);

fuzhi(str1,str2);

puts(str2);

}

8.8写一函数输入一个四位数字要求输出这四个数字字符但每两个数字间空格。如输

入1990应输出"1_9_9_0"。

char f(b)

char b[4];

{int i=0;

for(;i<4;i++)

{printf(" ");

printf("%c",b[i]);}

printf("n");

}

main()

{int a,u,v,w,t;char c[4];

scanf("%4d",&a);

u=a*0.001;v=0.01*(a-1000*u);w=(a-1000*u-100*v)*0.1;t=a-1000*u-100*v-10*w;

c[0]=u+48;

c[1]=v+48;

c[2]=w+48;

c[3]=t+48;

f(c);

}

8.9编写一函数由实参传来一个字符串统计此字符串中字母、数字、空格和其它字符的

个数在主函数中输入字符串以及输出上述结果。

char tongji(str0,b)

char str0[100];

int b[4];

{int i;

for(i=0;str0[i]!=’0’;i++)

{if(str0[i]>=65&&str0[i]<=90||str0[i]>=97&&str0[i]<=122) b[0]++;

else if(str0[i]>=48&&str0[i]<=57) b[1]++;

else if(str0[i]==32) b[2]++;

else b[3]++;}

}

main()

{char str1[100];static int i,a[4];

gets(str1);

tongji(str1,a);

printf("zimu Shuzi Kongge Qitan");

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

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

}

8.10写一函数输入一行字符将此字符串中最长的单词输出。

cechang(str1,word0)

char str1[100],word0[15];

{int i=0,j=0,t=0;

static char word1[15];

for(;str1[i]!=’0’;i++)

{if(!(str1[i]>=97&&str1[i]<=122||str1[i]>=65&&str1[i]<=90))

{t=j;j=0;continue;}

word1[j]=str1[i];j++;

if(j>=t) strcpy(word0,word1);}

}

main()

{char str0[100],longword[15];

gets(str0);

cechang(str0,longword);

puts(longword);

}

8.11写一函数用起泡法对输入的个字符按由小到大的顺序排列。

int paixu(x)

int x[];

{int i,j,t; (j=1;j<10;j++)

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

if(x[i]>x[i+1]) {t=x[i+1];x[i+1]=x[i];x[i]=t;}

}

main()

{int y[10];int i;

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

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

paixu(y);

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

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

printf("n");

}

8.12用牛顿迭代法求根。方程为 系数abc

个实根。求出后由主函数输出。

double qigen(s,t,u,v)

int s,t,u,v;

{double x,y;x=1;

do{y=s*x*x*x+t*x*x+u*x+v;

x=x-y/(3*s*x*x+2*t*x+u);}

while(y!=0);

return x;

}

main()

{int a,b,c,d;double x;

scanf("%d,%d,%d,%d",&a,&b,&c,&d);

x=qigen(a,b,c,d);

printf("x=%.3fn",x);

}

8.13用递归方法求n阶勒让德多项式的值递归公式为

float p(x0,n)

int n;float x0;

{float y;

if(n==0||n==1) if(n==1) y=x0;else y=1;

else y=((2*n-1)*x0*p(x0,n-1)-(n-1)*p(x0,n-2))/n;

return(y);

} n()

{float x,y0;int a,i;

scanf("%f,%d",&x,&a);

y0=p(x,a);

d由主函数输入。求X在1附近的

printf("y0=%.3fn",y0);

}

8.14输入10个学生5门课的成绩分别用函数求①每个学生平均分②每门课的平均分

③找出最高分所对应的学生和课程④求平均分方差


本文标签: 输入 输出 函数 要求 字符