//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