c语言if中要规定半径为整数,C语言课后习题解

本文包含一系列C语言编程练习,涵盖条件判断、循环、递归、数学运算、字符串处理、数组操作、函数应用等多个方面。通过编写程序,求解最大公约数、最小公倍数、水仙花数、素数、汉诺塔问题、排序算法等,锻炼了基础编程技能和逻辑思维能力。此外,还涉及到了指针、内存管理、文件操作等高级主题,如字符串反序、数组转置、动态内存分配等。这些练习旨在提高编程者的实践能力和算法理解水平。
摘要由CSDN通过智能技术生成

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

#include 

void main ()

{

int a,b,c,max;

printf ("Please input a,b,c:");

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

max=a;

if (b>max)

max=b;

if (c>max)

max=c;

printf ("%d\n",max);

}

/*

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

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

*/

#include 

void main()

{

double r,h,Cy,Sy,Sq,Vq,Vz;

r=1.5;

h=3;

Cy=2*3.14*r;

Sy=3.14*r*r;

Sq=4*Sy;

Vq=(4*3.14*r*r*r)/3;

Vz=Sq*h;

printf ("\nCy=%.2lf\nSy=%.2lf\nSq=%.2lf\nVq=%.2lf\nVz=%.2lf",Cy,Sy,Sq,Vq,Vz);

}

/*

4.9输入一个华氏温度,要求输出摄氏温度.公式为

c=5(F-32)/9

输出要求有文字说明,取位2小数.

*/

#include 

void main ()

{

double C,F;

printf("请输入华氏温度:");

scanf ("%lf",&F);

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

printf ("输出摄氏温度:%.2lf",C);

}

/*

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

70~79分为’C’,60分以下为’D’.

*/

#include 

void main ()

{

float score;

char grade;

printf("请输入一个分数:\n");

scanf("%f",&score);

if (score<=0||score>=100)

{

printf("请重新输入!");

scanf ("%f",&score);

}

switch (int(score/10))

{

case 9: grade='A';break;

case 8: grade='B';break;

case 7: grade='C';break;

case 6: grade='D';break;

case 5: grade='E';break;

case 4:

case 3:

case 2:

case 1:

case 0: grade='E';break;

}

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

}

/*5.7 给定一个不多于5位的正整数,要求:① 求它是几位数;② 分别打印出每一位数字;③ 按逆序打印出各位数字.

例如原数为321,应输出123.

*/

#include 

main ()

{

int indiv,ten,hundred,thousant,ten_thousant,place;

long int i;

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

scanf("%ld",&i);

if (i>9999)  place=5;

else if (i>999)  place=4;

else if (i>99)   place=3;

else if (i>9)    place=2;

else   place=1;

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

ten_thousant=i/10000;

thousant=i/1000%10;

hundred=i/100%10;

ten=i%100/10;

indiv=i%10;

switch (place)

{

case 5:

printf("%d,%d,%d,%d,%d\n",ten_thousant,thousant,hundred,ten,indiv);

printf("反序列为:\n");

printf("%d,%d,%d,%d,%d\n",indiv,ten,hundred,thousant,ten_thousant);

break;

case 4:

printf("%d,%d,%d,%d\n",thousant,hundred,ten,indiv);

printf("反序列为:\n");

printf("%d,%d,%d,%d\n",indiv,ten,hundred,thousant);

break;

case 3:

printf("%d,%d,%d\n",hundred,ten,indiv);

printf("反序列为:\n");

printf("%d,%d,%d\n",indiv,ten,hundred);

break;

case 2:

printf("%d,%d\n",ten,indiv);

printf("反序列为:\n");

printf("%d,%d\n",indiv,ten);

break;

case 1:

printf("%d\n",indiv);

printf("反序列为:\n");

printf("%d\n",indiv);

break;

}

}

/*

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

利润高于10万元,低于20万元(100000

200000

400000

I>1000000时,超过100万元的部分按1%提成.从键盘输入当月利润I,求应发放奖金总数.

要求:(1)用if语句编程序;(2)用switch语句编程序.

*/

#include 

void main ()

{

long i;

double 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=bon1*0.1;                    //利润在10万元以内按0.1提成奖金

else if (i<=200000)

bonus=bon1+(i-100000)*0.75;         //利润在20万元以内按0.075提成奖金

else if (i<=400000)

bonus=bon2+(i-200000)*0.05;        //利润在40万元以内按0.05提成奖金

else if (i<=600000)

bonus=bon4+(i-400000)*0.03;        //利润在60万元以内按0.03提成奖金

else if (i<=1000000)

bonus=bon6+(i-600000)*0.015;       //利润在100万元以内按0.015提成奖金

else if(i>1000000)

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

printf("bonus=%10.2f",bonus);

getchar();

getchar();

}

方法2

#include 

void main ()

{

int branch;

long i;

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

bon1=100000*0.1;

bon2=bon1+100000*0.075;

bon4=bon2+200000*0.05;

bon6=bon4+200000*0.03;

bon10=bon6+400000*0.015;

printf("输入当月利润i\n");

scanf("%ld",&i);

branch=(i/100000);

switch (branch)

{

case 0:

bonus=i*0.1;

break;                         //利润在10万元以内时的奖金

case 1:

bonus=bon1+(i-100000)*0.075;

break;                         //利润在10万元到20万元之间时的奖金

case 2:

case 3:

bonus=bon2+(i-200000)*0.05;

break;                         //利润在20万元到40万元之间时的奖金

case 4:

case 5:

bonus=bon4+(i-200000)*0.03;

break;                         //利润在40万元到60万元之间时的奖金

case 6:

case 7:

case 8:

case 9:

bonus=bon6+(i-400000)*0.015;

break;                         //利润在60万元到100万元之间时的奖金

case 10:

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

break;                       //利润在100万元以上时的奖金

default:

printf("-------------%d----------\n",branch);

}

printf("奖金为: %.2f",bonus);

getchar();

getchar();

}

/*

5.10  有4个圆塔,圆心分别为(2,2)、(-2,2)、(2,-2)、(-2,-2),圆半径为1.这4个塔的高度分别为10m.

塔以外无建筑物.今输入任一点的坐标,求该点的建筑高度(塔外的高度为零).

*/

#include 

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

else h=10;

printf("建筑物的高度为%d\n",h);

}

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

#include 

void main ()

{

int m,n,m_cup,n_cup,rest;

printf("Please input two integer:\n");

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

if (m>0&&n>0)

{

m_cup=m;

n_cup=n;

rest=m_cup%n_cup;

if (rest!=0)

{

m_cup=n_cup;

n_cup=rest;

rest=m_cup%n_cup;

}

printf ("Output greatest common divisor:%d\n",n_cup);

printf ("Output lease common multiple:%d\n",m*n/n_cup);

}

else printf ("Error!\n");

// getchar();

// getchar();

// scanf("%d",&n);

}

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

#include 

void main ()

{

char c;

int letter=0,space=0,digit=0,others=0,s=0;

printf("请输入一行字符:");

scanf ("%c",&c);

while ((c=getchar())!='\n')

{

if (c>'a'&&c'A'&&c

letter++;

else if (c==' ')

space++;

else if (c>'0'&&c

digit++;

else

others++;

}

printf("letter=%d,space=%d,digit=%d,others=%d",letter,space,digit,others);

}

//6.4 求,(即求1!+2!+3!+4!+5!+…+20!)

#include 

void main ()

{

int n,i=1;

long sum=0,s=1;

printf ("Please input a integer:");

scanf("%d",&n);

while(i<=n)

{

s=s*i;

sum=sum+s;

i++;

}

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

}

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

//例如:153是一个水仙花数,因为153=1^3+5^3+3^3.

#include 

void main ()

{

int a,b,c,n=100;

while (n>=100&&n<1000)

{

a=n/100;

b=n%100/10;

c=n%100%10;

if (n==a*a*a+b*b*b+c*c*c)

printf("水仙花数:%5d",n);

n++;

}

}

/*

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

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

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

6itsfactorsare1、2、3

*/

#include 

void main ()

{

int i,j,m,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 is fastors 1",m);

for (j=2;j

if (m%j==0)

printf ("%5d",j);

printf ("\n");

}

}

}

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

//再落下.求它在第10次落地时共经过多少米?第10次反弹多高?

#include 

void 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*2)+s;

}

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

getchar();

getchar();

}

/*

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

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

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

*/

#include 

void main ()

{

int i,sum=0;

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

{

sum=sum*2+1;

}

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

}

/*

6.12用迭代法求x=a^(1/2)。求平方根的迭代公式为:Xn+1=1/2(Xn+a/Xn)

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

*/

#include 

#include

void main()

{

float x0,x1,a;

scanf("%f",&a);

//x1=a/2;

x1=sqrt(a);

do

{

x0=x1;

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

}

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

printf("%.3f\n",x1);

}

/*6.14打印以下图案

*

* * *

* * * * *

* * * * * * *

* * * * *

* * *

*

*/

#include 

void main ()

{

int i,j,k;

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

{

if(i <= 3)

{

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

printf("*");

}

else

{

int  nTemp = 7-(i-3)*2;

for( k=0; k

printf("*");

}

printf("\n");

}

}

/*6.14打印以下图案

*

***

*****

*******

*****

***

*

*/

#include 

#include"math.h"

void 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 用筛法求100内的素数.

#include 

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

}

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

#include 

void 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];a[i]=a[i+1];a[i+1]=t;

}

}

}

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

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

}

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

#include 

void main ()

{

int i,j,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);

}

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

#include 

void main ()

{

static int a[9]={2,3,4,6,8,9,12,23,34};

int i,t;

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

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

if (a[i]

{

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

}

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

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

printf ("\n");

}

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

//并输出结果.从主函数输入a、b、c的值.

#include 

#include 

void deltaZero (double a,double b,double c)

{

double ans=-b/(2*a);

printf ("x1=x2=%lf\n",ans);

}

void deltaLargerZero (double a,double b,double c)

{

double ans1,ans2,d;

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

ans1=(-b+sqrt(d))/2*a;

ans2=(-b-sqrt(d))/2*a;

printf ("x1=%lf,x2=%lf\n",ans1,ans2);

}

void deltaLessZero (double a,double b,double c)

{

double real,imar,d;

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

real=-b/2*a;

imar=sqrt(d)/2*a;

printf ("x1=%lf+%lfi,x2=%lf-%lfi\n",real,imar,real,imar);

}

void main ()

{

double a,b,c;

double d;

printf ("please input a,b,c:");

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

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

if (d==0) deltaZero(a,b,c);

else if (d>0) deltaLargerZero(a,b,c);

else if (d<0) deltaLessZero(a,b,c);

printf ("please input a,b,c\n");

}

//8.3写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息.

#include 

#include 

int is_prime(int m)

{

int i;

if(m==1)

{

return 0;

}

for(i=2;i

{

if(m%i==0)

return 0;

}

return 1;

}

void main()

{

int n,c;

scanf("%d",&n);

c=is_prime(n);

if(c==1)

printf("prime\n");

else

printf("not prime\n");

}

//8.4写一个函数,使给定的一个二维数组(3×3)转置,即行列互换.

//写一个N*N的二维数组

#include 

#include 

#define N 4

void Transpose (int a[][N])

{

int i,j,t;

for (i=0;i

{

for (j=i;j

{

t=a[i][j];

a[i][j]=a[j][i];

a[j][i]=t;

}

}

}

int main ()

{

int i,j,a[N][N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};

for (i=0;i

{

for (j=0;j

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

printf("\n");

}

Transpose(a);

printf ("\n");

for (i=0;i

{

for (j=0;j

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

printf("\n");

}

// return 0;

}

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

#include 

#include 

#define N 10

char a[80];

int i;

void Reverse()

{

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

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

printf ("\n");

}

void main ()

{

void Reverse ();          //函数声明

printf ("请输入字符串:");

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

printf ("反转后的字符串");

Reverse ();

}

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

#include 

void main()

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

int i=0,j=0;

puts("input two strings:");

gets(s1);

gets(s2);

while(s1[i]!='\0') i++;

while((s1[i++]=s2[j++])!='\0');

printf("result:%s\n",s1);

}

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

#include 

void copy (char str[])

{

int i,j;

char s1[30]={0};

for (i=0,j=0;i<=29;i++)

{

if ((str[i]=='a')||(str[i]=='e')||(str[i]=='i')||(str[i]=='o')||(str[i]=='u'))

{

s1[j]=str[i];

j++;

}

}

s1[i]='\0';

puts (s1);

}

void main ()

{

void copy (char str[]);

char s[30];

gets (s);

copy (s);

}

//8.8写一函数,输入一个四位数字,要求输出这四个数字字符,但每两个数字间空格.如输入1990,应输出"1_9_9_0".

#include 

#include 

void dx(char b[])

{

char c[100];

char *p=b;

int i=0;

while (*b)

{

c[i++]=*b++;

c[i++]=' ';

}

c[i--]='\0';

strcpy(p,c);

}

void main ()

{

void dx(char b[]);

char a[80];

gets(a);

dx(a);

puts(a);

}

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

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

#include 

#include 

int letter,digit,space,others;

void count(char str[])

{

int i;

for (i=0;str[i]!='\n';i++)

{

if ((str[i]>='a'&&str[i]<='z'||str[i]>='A'&&str[i]<='Z'))

letter++;

else if (str[i]>='0'&&str[i]<='9')

digit++;

else if (str[i]==' ')

space++;

else

others++;

}

}

void count(char str[]);

void main ()

{

char text[80];

printf ("请输入一个字符串");

gets(text);

printf ("字符串为:");

strcat(text,"\n");

letter=0;

digit=0;

space=0;

others=0;

count(text);

printf ("%d字母,%d数字,%d空格,%d其他",letter,digit,space,others);

}

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

#include

#include

void longwords(char str[])

{

int maxlen,len,i,j,src1=0,src2=0;

maxlen=len=0;

j=strlen(str);

for(i=0;;i++)

{

while(str[i]==' ') i++;//忽略空格,直到找到单词开始

if(i==j)

break;

for(src2=i;i

{

if(str[i]==' ') //直到空格(单词结束)

{

len=i-src2;

if(len>maxlen)

{

maxlen=len;

src1=src2;

}

break;

}

}

if(i==j)break;

//继续循环找下一个单词

};

for(i=src1;str[i]!=' ';i++)

printf("%c",str[i]);

}

void main()

{

void longwords(char str[]);

char str1[80];

int i;

printf("please input a string:\n");

gets(str1);

i=strlen(str1);

//str1[i]=' ';

//str1[i+1]='\0';

longwords(str1);

}

//8.11 写一函数用起泡法对输入的十个数按由小到大的顺序排列.

#include

void sort(int *a,int n)

{

int i,j,t;

for(j=0;j

for(i=0;i

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

{

t=a[i];

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

a[i+1]=t;

}

}

void main()

{

int a[10];

int i,j,t;

printf("input 10 numbers:\n");

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

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

printf("\n");

sort(a,10);

printf("the sorted numbers:\n");

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

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

printf("\n");

}

// 8.12 输入4个整数,找出其中最大的值。用函数的嵌套调用来处理。

#include 

void main ()

{

int max4(int a,int b,int c,int d);

int a,b,c,d,max;

printf ("please enter four integers :");

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

max=max4(a,b,c,d);   // 调用max4函数,得到4个数中的最大者

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

}

int max4(int a,int b,int c,int d)

{

int max2(int a,int b);

int m;

m=max2(a,b);   //调用max2函数,得到a,b中的最大值,放在m中

m=max2(m,c); //调用max2函数,得到a,b,c中的最大值,放在m中

m=max2(m,d); //调用max2函数,得到a,b,c,d中的最大值,放在m中

return (m);

}

int max2(int a,int b)

{

if (a>=b)

return a;

else

return b;

}

/*

8.13 有5个学生坐在一起,问第5个学生多少岁,他说比第4个学生大2,

问第4个学生多少岁,他说比第3个学生大2,

问第3个学生多少岁,他说比第2个学生大2,

问第2个学生多少岁,他说比第1个学生大2,

问最后一个学生,他说是10岁。

请问第5个学生多大?

*/

#include

void main ()

{

int age (int n);

printf ("NO.5 age:%d\n",age(5));  //输出第5个学生的成绩

}

int age (int n)

{

int c;

if (n==1)

c=10;

else

c=age(n-1)+2;

return (c);

}

// 8.14 用递归方法球n!.

#include 

void main ()

{

int fac (int n);

int n;

int y;

printf ("please enter an integer number:");

scanf ("%d",&n);

y=fac (n);

printf ("%d!=%d\n",n,y);

}

int fac (int n)

{

int f;

if (n<0)

printf ("n<0,data error.");

else if (n==0||n==1)

f=1;

else

f=fac(n-1)*n;

return (f);

}

/*

8.15  Hanoi (汉诺)塔问题。

这是一个古典数学问题,是一个递归方法解题的经典例子。问题是这样的:

古代有一个樊塔,塔内有3个座,A,B,C,开始时A座上有64个盘子,盘子大小不等,

大的在下,小的在上。有一个老和尚想把这64个盘子从A座移到C座,但规定每次只允

许移动一个盘,且在移动过程中在3个座上都始终保持大盘在下,小盘在上。在移动过程

中可以利用B座。要求编程序输出移动盘子的步骤。

步骤:

(1)将A上n-1个盘借助C座先移到B座上;

(2)把A座上剩下的一个盘移到C座上;

(3)将n-1个盘从B座借助A座移到C座上。

*/

#include 

void main ()

{

void hanoi (int n,char one,char two,char three);

int m;

printf ("enter the number of disks:");

scanf ("%d",&m);

printf ("The step to move %d disks :\n",m);

hanoi (m,'A','B','C');

}

void hanoi (int n,char one,char two,char three)

{

void move (char x,char y);

if (n==1)

move (one,three);

else

{

hanoi (n-1,one,three,two);

move(one,three);

hanoi (n-1,two,one,three);

}

}

void move (char x,char y)

{

printf ("%c-->%c\n",x,y);

}

// 8.17 有一个一维数组score,内放10个学生成绩,求平均成绩。

#include

void main ()

{

float average (float array[10]);

int i;

float score[10],aver;

printf ("please enter 10 score :");

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

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

printf ("\n");

aver=average (score);

printf ("average score is %5.2f\n",aver);

}

float average (float array[10])

{

int i;

float aver,sum=array[0];

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

{

sum=sum+array[i];

}

aver=sum/10;

return (aver);

}

// 8.18 有两个班级,分别有5名和10名学生,调用一个average函数,分别求这两个班的学生的平均成绩。

#include

void main ()

{

float average (float array[],int n);

float score1[5]={89,80,76,79,68};

float score2[10]={78,89,90,98,76,68,56,94,90,80};

printf ("The average of class A is %6.2f\n",average(score1,5));

printf ("The average of class B is %6.2f\n",average(score2,10));

}

float average (float array[],int n)

{

int i;

float aver,sum=array[0];

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

{

sum=sum+array[i];

}

aver=sum/n;

return (aver);

}

//8.19  用选择法对数组中10个整数按由小到大排序。

#include 

void main ()

{

void sort (int array[],int n);

int a[10]={0},i;

printf ("please enter ten integers:");

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

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

sort (a,10);

printf ("the sorted array:\n");

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

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

printf ("\n");

}

void sort (int array[],int n)

{

int i,j,k,t;

for (i=0;i

{

k=i;

for (j=i+1;j

{

if (array[j]

{

k=j;

t=array[k];

array[k]=array[i];

array[i]=t;

}

}

}

}

//10.1通过指针变量访问整型变量。

#include 

void main ()

{

int a=100,b=10;

int *pointer_1,*pointer_2; //定义了两个指针变量pointer_1,pointer_2

pointer_1=&a;  //将变量为a的地址赋给了pointer_1

pointer_2=&b;

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

printf ("*pointer_1=%d,*pointer_2=%d\n",*pointer_1,*pointer_2);

//输出*pointer_1,*pointer_2的值。其中“*”表示“指向”。*pointer_1表示“指针变量pointer_1所指向的变量,也就是变量a”

}

//10.2 输入a和b两个整数,按先大后小的顺序输出a和b.

#include 

void main ()

{

int *p1,*p2,*p,a,b;

printf ("Please enter two integer numbers:");

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

p1=&a;

p2=&b;

if (a

{

p=p1;

p1=p2;

p2=p;

}

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

printf ("max=%d,min=%d\n",*p1,*p2);

}

//10.3 题目要求同例10.2,即对输入的两个整数按大小顺序输出。现在函数处理,

//而且用指针类型的数据做函数参数。

#include

void main ()

{

void swap(int *p1,int *p2);

int a,b;

int *pointer_1,*pointer_2;

printf ("please enter a and b:");

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

pointer_1=&a;

pointer_2=&b;

if (a

swap(pointer_1,pointer_2);

printf ("max=%d,min=%d\n",a,b);

}

void swap (int *p1,int *p2)

{

int temp;

temp=*p1;

*p1=*p2;

*p2=temp;

}

//10.5 输入3个整数a,b,c,要求按由大到小的顺序将它们输出。用函数实现。

#include 

void main ()

{

void exchange (int *q1,int *q2,int *q3);

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

printf ("please enter three numbers:");

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

p1=&a;

p2=&b;

p3=&c;

exchange(p1,p2,p3);

printf ("The order is:%d,%d,%d\n",a,b,c);

}

void exchange (int *q1,int *q2,int *q3)

{

void swap(int *pt1,int *pt2);

if (*q1

swap (q1,q2);

if (*q1

swap (q1,q3);

if (*q2

swap (q2,q3);

}

void swap (int *pt1,int *pt2)

{

int temp;

temp=*pt1;

*pt1=*pt2;

*pt2=temp;

}

//10.6 有一个整型数组a,有10个元素,要求输出数组中的全部元素。

#include 

void main ()

{

int a[10];

int i;

printf("please enter 10 integer numbers:");

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

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

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

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

printf ("\n");

}

方法二:

//通过数组名计算数组元素地址,找出元素的值。

#include 

void main ()

{

int a[10];

int *p,i;

printf ("please enter 10 integer numbers :");

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

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

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

printf ("%5d",*(a+i));

printf ("\n");

}

方法三:

//用指针变量指向数组元素。

#include 

void main ()

{

int a[10];

int *p,i;

printf ("please enter 10 integer numbers :");

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

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

for (p=a;p

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

printf ("\n");

}

//10.8 将数组a中n个整数按反序顺序存放。

#include

void main ()

{

void inv(int x[],int n);

int i,a[10]={3,4,5,6,7,8,9,0,1,2};

printf("The original array:\n");

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

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

printf ("\n");

inv (a,10);

printf ("The array has been inverted:\n");

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

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

printf ("\n");

}

void inv(int x[],int n)

{

int temp,i,j,m=(n-1)/2;

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

{

j=n-1-i;

temp=x[i];

x[i]=x[j];

x[j]=temp;

}

}

//方法二:

#include 

void main ()

{

void inv(int *x,int n);

int i,a[10]={3,4,5,6,7,8,9,0,1,2};

printf ("The original array :\n");

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

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

printf ("\n");

inv (a,10);

printf("The array has been inverted:\n");

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

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

printf ("\n");

}

void inv(int *x,int n)  //形参x是指针变量

{

int *p,temp,*i,*j,m=(n-1)/2;

i=x;

j=x+n-1;

p=x+m;

for (;i<=p;i++,j--)

{

temp=*i;

*i=*j;

*j=temp;

}

}

// 10.8(3) 将数组a中n个整数按相反顺序存放。

//  方法三 :

#include 

void main ()

{

void inv (int *x,int n);

int i,arr[10]={0},*p=arr;

printf ("The array is :");

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

scanf ("%d",p);

p=arr;

inv (p,10);

printf ("The array has been inverted :");

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

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

printf ("\n");

}

void inv (int *x,int n)

{

int *i,*j,temp,m=(n-1)/2,*p;

i=x;

j=x+n-1;

p=x+m;

for (;i<=p;i++,j--)

{

temp=*i;

*i=*j;

*j=temp;

}

}

//10.9 改写例10.8,用指针变量作实参

#include

void main ()

{

void inv(int *x,int n);

int i,arr[10],*p=arr;      //指针变量p指向arr[0]

printf ("The original array:\n");

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

scanf ("%d",p);

printf ("\n");

p=arr;

inv(p,10);

printf ("The array has been inverted:\n");

for (p=arr;p

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

printf ("\n");

}

void inv (int *x,int n)  //定义inv函数,形参x是指针变量

{

int *p,m,temp,*i,*j;

m=(n-1)/2;

i=x;

j=x+n-1;

p=x+m;

for (;i<=p;i++,j--)

{

temp=*i;

*i=*j;

*j=temp;

}

}

//10.11 输出二维数组的有关数据(地址和值)

#include 

void main ()

{

int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

printf ("%5d,%5d\n",a,*a);

printf ("%5d,%5d\n",a[0],*(a+0));

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

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

printf ("%5d,%5d\n",&a[1][0],*(a+1)+0);

printf ("%5d,%5d\n",a[2],*(a+2));

printf ("%5d,%5d\n",&a[2],a+2);

printf ("%5d,%5d\n",a[1][0],*(*(a+1)+0));

printf ("%5d,%5d\n",*a[2],*(*(a+2)+0));

}

//10.12 有一个3*4的二维数组,要求用指向元素的指针变量输出二维数组个元素的值。

#include

void main ()

{

int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

int *p;    //p是int *型指针变量

for (p=a[0];p

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值