admin 管理员组

文章数量: 1086019


2024年8月27日发(作者:网页有效)

P140 0.4 判断一串输入的字符.

#include

int main()

{

char ch;

int a=0,b=0,c=0,d=0,e=0;

printf("Please input the stringn");

while((ch=getchar())!='n') //直到回车.

{

if(ch<='z'&&ch>='a')

{

a++;

}

else if(ch==' ')

{

c++;

}

else if(ch<58&&ch>47)

{

d++;

}

else if(ch<='Z'&&ch>='A')

{

b++;

}

else

{

e++;

}

}

printf("大写%d 小写%d 空格%d 数字%d 其它%dn",a,b,c,d,e);

}

P140 0.5 2+22+222+2222系列的和.

#include //不理解时可以百度或是谷歌更多的信息.

int main() //想办法既快速做完,又要消化理解

{

int temp,i,a,n,sum=0; //主逻辑,友好性暂时放松.

scanf("%d %d",&a,&n); //a是数字,n是要乘的个数.

temp=a; //先把第一阶的值存起来.

for(i=0;i

{

sum=sum+a;

printf("%d + ",a); //事关布局.

a=a*10+temp; //重点是每次乘,然后加上上一个数.

}

printf("= %d .",sum);

return 0;

}

P140 0.6 1!+2!+3!+4!.....的值.

#include

int main() //1!+2!+3!+4!.....

{

int i,j,k,sum=0,m=1;

scanf("%d",&k); //比如设定为,值为.

for(i=1;i<=k;i++) //第一层循环,指定到.

{

for(j=1;j<=i;j++) //第二层循环,指定至当前数.

{

m=m*j;

} //到此是阶乘的结构.

sum=sum+m;

m=1;

}

printf("%d",sum); //完全不理解时,搜索并参考.

return 0; //尝试自己做,第一次做出来就是自己的东西了.

}

P140 0.7 1至100,1至50平方,1至10倒数的总和.

#include

int main()

{

int a,b;

double c,asum=0,bsum=0,csum=0;

for(a=1;a<=100;a++) //三个块分别注释验证结果.

{

asum=asum+a;

}

for(b=1;b<=50;b++) //在VS运行中,注意*.cpp为C++语言.

{

bsum=bsum+b*b; //为了避免语言差别,请注意文件名为*.c.

}

for(c=1;c<=10;c++) //c作浮点运算,所以定义在double类型中.

{

csum=csum+1/c;

}

printf("%lf",asum+bsum+csum);

return 0;

}

P

P

#include

#include

int main()

{

int j,k,s[6],x=100,y,sum=0;

for(j=153;j<=154;j++)

{

for(k=2;k>=0;k--)

{

s[k]=j%(int)pow(10,k+1)/(int)pow(10,k);

y=pow(s[k],3);

sum+=y;

printf("%d-%d--%dt",k,s[k],j);

}

printf("%dn",sum);

}

return 0;

}

P140 0.8 水仙花数.

//#include //一步步的发现问题.

//

//int main() //在%和/号之间,以前pow.以后再做.

//{

// int i,j,k,a,b,c,sum=0; //这里逻辑对,算出来却错了.

// for(i=2;i<=4;i++) //计算机在想什么,看来它的大脑难以模拟.

// {

// for(j=pow(10,i);j<=pow(10,i+1)-1;j++) //我不完全明白它遵守的逻辑.

// {

// for(k=0;k<=i;k++)

// {

// sum+=pow((j%pow(10,i+1)/pow(10,i)),3);

// }

// if(sum==j)

// {

// printf("%d 是水仙花数!n",j);

// }

// sum=0;

// }

// }

// return 0;

//} //为什么还是无法实现?!

#include

#include

int main()

{

int a,b,c,i,sum=0; //这里只计算三位数的.

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

{

a=i/100;

b=i%100/10;

c=i%10;

sum+=a*a*a+b*b*b+c*c*c;

if(sum==i)

{

printf("%d 是水仙花数.n",i);

}

sum=0;

}

return 0;

}

P141 0.9 完数.

#include

int main()

{

int i,j,r;

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

{

//零是个临界值,不能包括它.

r=0; //每次清零重来.类似水仙中的sum.

for(j=1;j

{

if(i%j==0) //除得尽即是因子.

{

r=r+j; //然后累加进去.

}

}

if(r==i) //若相等.

{

printf("%d 是完数.n",i);

}

}

return 0;

}

P141 0.10 2/1+3/2+5/3+8/5+13/8…

#include

int main() //10.007051

{

double i,a=2,b=1,c,s=0; //a是分子,b是分母.

for(i=0;i<6;i++) //二十可以用户指定.

{

s+=a/b; //中间储值变量.

c=a+b;

b=a;

a=c;

}

printf("%lfn",s);

return 0;

}

P141 0.11 球落地并反弹问题.

#include

int main() //从一百开始,减一半再自加两次,下降一次,反弹一次.

{

double sum=100,high=100,up,donw,i;

for(i=1;i<10;i++) //不管指定到哪个数,都不会超过三百.

{

up=high/2;

donw=up;

high=donw; //自咬尾巴问题.

sum+=donw*2;

}

printf("%lf %lfn",donw,sum);

return 0;

}

P141 0.12 猴子吃桃子.

#include

int main() //从一百开始,减一半再自加两次,下降一次,反弹一次.

{

int i,sum=1;

for(i=1;i<=10;i++) //临界要清楚,结果要与手算的前几个实例相匹配.

{

printf("倒数第%d天还剩有%d个桃子.n",i,sum);

sum=(sum+1)*2;

}

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

return 0;

}

P141 0.16 输出星号棱形图案.

#include

#include

main() //只关注左半部分.右半部分无视空格.

{

int i,j,k,m=6; //m可指定,指定中心点位置.可任意奇偶.

for(i=1;i<=m;i++) //上半部分.其实也是正三角.

{

for(j=1;j<=m-i;j++) //一到中心点前i个位置填充空格.

printf(" ");

for(k=1;k<2*i;k++) //空格后向前填充星号的个数.是奇数.一,三,五...

printf("*");

printf("n");

}

for(i=m-1;i>0;i--) //下半部分.其实也是倒三角.

{ //减一是因为行数问题.这是中心行以下的.

for(j=m-1;j>=i;j--)

printf(" ");

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

printf("*");

printf("n");

}

getch(); //用户反应后结束.但,没必要.

}

第六章

第六章 循环控制

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++);

printf("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)之值,其中a是一个数字。例如:

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

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

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

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

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

}

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

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]);

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

{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已有一个已排好的数组今输入一个数要求按原来排序的规律将它插入数组中。

main()

{ 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将一个数组的值按逆序重新存放,例如,原来顺序为:8,6,5,4,1。要求改为:

1,4,5,6,8。

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

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

{ 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

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

解:

#include

main()

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

p=1;

while(p==1)

{ printf("Enter n(n=1~15):");

scanf("%d",&n);

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

}

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

/*要求阶数为1~15的商数*/

初始化*/

p=0;

/*

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

else 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,

输出0;S1

出的正数或负数的绝对值应是相比较的两个字符串相对应字符的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

s1[i]=s2[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);

printf("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写一个函数,使给定的一个二维数组(3×3)转置,即行列互换。

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;

for(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用牛顿迭代法求根。方程为:

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

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;

a,b,c,d由主函数输入。求X在1附 ,系数

}

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

}

main()

{float x,y0;int a,i;

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

y0=p(x,a);

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

}

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

平均分;③找出最高分所对应的学生和课程;④求平均分方差:δ=[SXi^2]/n-(SXi/n)^2,

为一学生的平均分

float x1[10],x2[5];

float pp(),cc(),find(),xx();

main()

{char name[10][20],class[5][20];float score[10][5],o,k=0,max[5];int a[5],i,j;

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

gets(name[i]);

for(j=0;j<5;j++) gets(class[j]);

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

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

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

pp(score);

cc(score);

find(score,max,a);

o=xx(k);

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

{puts(name[i]);

printf("%.3fn",x1[i]);}

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

{puts(class[j]);printf("%.3fn",x2[j]);}

for(j=0;j<5;j++) {printf("%.3f n",max[j]);

puts(name[a[j]]);

puts(class[j]);}

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

}

float pp(f)

float f[10][5];

{float sum=0;int i,j;

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

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

sum=sum+f[i][j];

x1[i]=sum/5;}

}

float cc(y)

float y[10][5];

{float sum=0;int i,j;

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

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

sum=sum+y[i][j];

x1[j]=sum/10;}

}

float find(z,s,t)

float z[10][5],s[5];int t[5];

{int i,j;

for(j=0,s[j]=z[0][j];j<5;j++)

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

if(s[j]

}

float xx(q)

float q;

{float f=0,e=0;int i;

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

{e=x1[i]*x1[i]+e;

f=f+x1[i];}

q=e/10-(f/10)*(f/10);

return(q);

}

8.15写几个函数:①输个职工的姓名和职工号;②按职工号由小到大顺序排序,姓名

顺序也随之调整;③要求输入一个职工号,用折半法找出该职工的姓名,从主函数输入要

查找的职工号,输出该职工姓名。

#define N 10

find(a,b)

int a[],b[];

{int i,j,s,t,c[N][2];

for(i=0;i

{c[i][1]=a[i];c[i][1]=i;}

for(i=0;i

for(j=0;j

if(c[i][0]>c[i+1][0])

{t=c[i][0];c[i][0]=c[i+1][0];c[i+1][0]=t;

s=c[i][1];c[i][1]=c[i+1][1];c[i+1][1]=s;}

for(i=0;i

b[i]=c[i][1];

return;

}

lookfor(h,k)

int h[],k;

{int i,j;

for(i=0;i

if(h[i]-k==0) j=i;

return j;

}

main()

{int number[N],x[N],i,j,u,p;char name[N][20];

for(i=0;i

{gets(name[i]);

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

scanf("%d",&p);

find(number,x);

u=lookfor(number,p);

for(i=0;i

{printf("%d",number[i]);

puts(name[x[i]]);}

puts(name[x[u]]);

}

8.16写一函数,输入一个十六进制数,输出相应的十进制数。

#include"math.h"

int x;

ff(shu)

char shu[];

{int i=strlen(shu)-1,sum=0;

for(;i>-1;i++)

{if {if(48<=shu[i]<=57) sum=sum+(shu[i]-48)*pow(16,(i-1));

else if(65<=shu[i]<=90) sum=sum+(shu[i]-55)*pow(16,(i-1));

else if(97<=shu[i]<=102) sum=sum+(shu[i]-87)*pow(16,(i-1));

x=1;}

else x=0;

return x;

}

main()

{char shufu[100];int s;

gets(shufu);s=ff(shufu);

if(x) printf("s(D)=%dn",s);

else printf("The number is not oxn");

}

8.17用递归法将一个整数n转换成字符串。例如,输入486,应输出字符串"486"。n

的位数不确定,可以是任意位数的整数。

#include"math.h"

int x[10];

pf(m,n)

unsigned long m;int n;

{int y;

if(n==0) {y=(int)(m%10);x[0]=y;}

else {y=(unsigned long)((m-pf(m,n-1))/pow(10,n))%10;x[n]=y;}

return(y);

}

main()

{unsigned long a,b;int i,j,k;char c[11];

scanf("%ld",&a);

for(j=0,b=a;b>0.1;j++,b/=10);

pf(a,j-1);

for(i=0,k=j-1;i

c[i]=x[k]+48;c[10]=’0’;

puts(c);}

#include"math.h"

char x[11];

pf(m,o)

unsigned long m;int o;

{int j,i;

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

x[i]=(int)((unsigned long)(m/pow(10,j))%10)+48;

return;

}

main()

{unsigned long a,b;int j,i;

scanf("%ld",&a);

for(j=0,b=a;b>0.1;j++,b/=10);

pf(a,j);

puts(x);printf("%dn",j);}

#include"math.h"

int x[10];unsigned long m;

pf(n)

int n;

{int y;

if(n==0) {y=m%10;x[0]=y;}

else {y=(unsigned long)((m-pf(n-1))/pow(10,n))%10;x[n]=y;}

return(y);

}

main()

{unsigned long a;int i,j,k;char c[11];

scanf("%ld",&m);

for(j=0,a=m;a>0.1;j++,a/=10);

pf(j-1);

for(i=0,k=j-1;i

c[i]=x[k]+48;c[10]=’0’;

puts(c);}

8.18给出年、月、日,计算该日是该年的第几天。

int find(x,y,z)

int x,y,z;

{ int i,t,s,days=0;

if(x%4==0) t=1;

else t=0;

for(i=1;i

{if(i==2) s=2-t;

else s=0;

days=days+30+i%2-s;

}

days=days+z;

return(days);

}

main()

{int year,month,date,day;

scanf("%d %d %d",&year,&month,&date);

day=find(year,month,date);

printf("THE DATE IS THE %dth DAYSn",day);

}

第九章

第九章 编译预处理

9.1定义一个带参的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时

的实参。输出已交换后的两个值。

#define CHANGE(a,b,t) t=a;a=b;b=a

main()

{int c,d,s;

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

CHANGE(c,d,s);

printf("c=%d,d=%dn",c,d);

}

9.2输入两个整数,求他们相除的余数。用带参的宏来实现,编程序。

#define Q(a,b) a%b

main()

{int c,d,t;

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

t=Q(c,d);

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

}

9.3三角形面积为:

其中S=(a+b+c)/2,a、b、c为三角形的三边。定义两个带参的宏S,一个用来求area,

另一个宏用来求。写程序,在程序中用带实参的宏名来求面积area。

#include"math.h"

#define SSS(m,n,k) (m+n+k)/2

#define

sqrt(SSS(m,n,k)*(SSS(m,n,k)-m)*(SSS(m,n,k)-n)*(SSS(m,n,k)-k))

AQRT(m,n,k)

main()

{float a,b,c,s,area;

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

s=SSS(a,b,c);

area=AQRT(a,b,c);

printf("s=%.3f area=%.3fn",s,area);

}

#include"math.h"

#define SSS(m,n,k) (m+n+k)*0.5

#define

sqrt(((m+n+k)/2)*((m+n+k)/2-m)*((m+n+k)/2-n)*((m+n+k)/2-k))

main()

{float a,b,c,t,area;

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

t=SSS(a,b,c);

AQRT(m,n,k)

area=AQRT(a,b,c);

printf("t=%.3f;area=%.3fn",t,area);

}

#include"math.h"

#define SSS(m,n,k) ((m+n+k)/2)

#define AQRT(m,n,k,m,n,k,m,n,k,m,n,k,m,n,k,m,n,k,m,n,k,m,n,k,m,n,k)

sqrt(SSS*(SSS-m)*(SSS-n)*(SSS-k))

main()

{float a,b,c,t,area;

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

t=SSS(a,b,c);

area=AQRT(a,b,c,a,b,c,a,b,c,a,b,c,a,b,c,a,b,c,a,b,c,a,b,c,a,b,c);

printf("t=%.3f;area=%.3fn",t,area);

}

9.4给年份year,定义一个宏,以判别该年份是否闰年。提示:宏名可以定义为

LEAP_YEAR,形参为y,既定义宏的形式为

#define LEAP_YEAR(y) (读者设计的字符串)

在程序中用以下语句输出结果:

if (LEAP_YEAR(year)) printf("%d is a leap year",year);

else printf ("%d is not a leap year",year);

#define LEAPYEAR(y) y%4

main()

{int y;

scanf("%d",&y);

if(LEAPYEAR(y)) printf("%d is a not leap yearn",y);

else printf("%d is a lear yearn",y);

}

9.6请设计输出实数的格式,包括:⑴一行输出一个实数;⑵一行内输出两个实数;⑶

一行内输出三个实数。实数用"6.2f"格式输出。

#define PR1(x) printf("%6.2fn",x)

#define PR2(x) printf("%6.2ft%6.2fn",x,x)

#define PR3(x) printf("%6.2ft%6.2ft%6.2fn",x,x,x)

main()

{float a;scanf("%f",&a);

PR1(a);PR2(a);PR3(a);

}

9.7设计所需的各种各样的输出格式(包括整数、实属、字符串等),用一个文件名

"fornat.h",把信息都放到这个文件内,另编一个程序文件,用命令#include "fornat.h"

以确保能使用这些格式。

分别用函数和带参的宏,从三个数中找出最大的数。

#define MAX(a,b,c) (a>((b>c)? b:c))? a:((b>c)? b:c)

main()

{float x,y,z,t;

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

t=MAX(x,y,z);

printf("%.4fn",t);

}

9.10用条件编译方法实现以下功能:

输入一行电报文字,可以任选两种输出,一为原文输出;一为将字母变成其下一字母

(如’a’变成’b’……’z’变成’a’其它字符不变)。用命令来控制是否要译成密码。

例如:

#define CHANGE 1

则输出密码。若:

#define CHANGE 0

则不译为密码,按原码输出。

#define CHANGE 1

main()

{char str[80],c;int i=0;

gets(str);

while(str[i]!=’0’)

{

#if CHANGE

if(str[i]==90||str[i]==122) str[i]=str[i]-25;

else if(str[i]>=65&&str[i]<90||str[i]>=97&&str[i]<122) str[i]=str[i]+1;

#endif

i++;

}

puts(str);

}

#define CHANGE 1

main()

{char str[80],*c;int i=0;

gets(str);c=str;

while(*c!=’0’)

{

#if CHANGE

if(*c==90||*c==122) *c=*c-25;

else if(*c>=65&&*c<90||*c>=97&&*c<122) *c=*c+1;

#endif

c++;

}

puts(str);

}

第十章

第十章 指针

10.1输入三个整数,按由小到大的顺序输出。

main()

{ int a,b,c,*p1,*p2,*p3,t;

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

p1=&a;p2=&b;p3=&c;

if(*p1>*p2)

{t=p1;p1=p2;p2=t;}

if(*p1>*p3)

{t=p1;p1=p3;p3=t;}

if(*p2>*p3)

{t=p2;p2=p3;p3=t;}

printf("%d,%d,%dn",*p1,*p2,*p3);

}

main()

{int a,b,c,*p1,*p2,*p3,t;

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

p1=&a;p2=&b;p3=&c;

if(a>b)

{t=*p1;*p1=*p2;*p2=t;}

if(a>c)

{t=*p1;*p1=*p3;*p3=t;}


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