1、指针练习:交换两个指针变量的值
一级指针:*p,*q;
int a=0,b=12;
int *p=&a,*q=&b;
printf("交换前:\n%d,%d,%d\n",p,*p,&p);
printf("%d,%d,%d\n",q,*q,&q);
swap(p, q);
printf("交换后:\n%d,%d,%d\n",p,*p,&p);
printf("%d,%d,%d\n",q,*q,&q);
void swap(int *x,int *y){
/*不用中间变量
用异或运算 同样得到结果*/
*x ^= *y;
*y ^= *x;
*x ^= *y;
}
输出结果:
交换前:
1606416820,0,1606416808
1606416816,12,1606416800
交换后:
1606416820,12,1606416808
1606416816,0,1606416800
交换两个指针变量所指向的地址:int a=0,b=12;
int *p=&a,*q=&b;
printf("交换前:\n%d,%d,%d\n",p,*p,&p);
printf("%d,%d,%d\n",q,*q,&q);
swap(&p, *q);
printf("交换后:\n%d,%d,%d\n",p,*p,&p);
printf("%d,%d,%d\n",q,*q,&q);
void swap(int *x,int *y){
/*不用中间变量
用异或运算 同样得到结果*/
*x ^= *y;
*y ^= *x;
*x ^= *y;
}
输出结果:
交换前:
1606416820,0,1606416808
1606416816,12,1606416800
交换后:
1606416816,12,1606416808
1606416820,0,1606416800
用二级指针交换两个一级指针变量所指向的地址:int a=2;
int b=3;
int *p=&a;
int *q=&b;
int **pp=&p;//定义二级指针
int **qq=&q;//定义二级指针
printf("交换前:\n%d,%d,%d \n",p,*p,&p);
printf("%d,%d,%d \n",q,*q,&q);
swap(pp,qq);
printf("交换后:\n%d,%d,%d \n",p,*p,&p);
printf("%d,%d,%d \n",q,*q,&q);
void swap(int **x,int **y){
int * temp;
temp=*x;
*x=*y;
*y=temp;
}
输出结果:
交换前:
1606416812,2,1606416800
1606416808,3,1606416792
交换后:
1606416808,3,1606416800
1606416812,2,1606416792
2、打印出九九乘法表
void jiujiu(){
for(int i=1;i<10;i++){
for(int j=1;j<i+1;j++){
printf("%d*%d=%d\t",j,i,i*j);
}
printf("\n");
}
}
输出结果:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
3、任意输入两个整数,用两种方法输出最大的那个,分别用条件语句和算术运算得出最大值;//第一种方法:判断语句
void bijiao1(){
int a,b;
printf("请输入两个整数a,b:");
scanf("%d%d",&a,&b);
int max=a>b?a:b;
printf("最大值是:%d\n",max);
}
//第二种方法:算术运算
void bijiao2(){
int a,b;
printf("请输入两个整数a,b:");
scanf("%d%d",&a,&b);
int max=((a+b)+abs(a-b))/2;//如果想得出最小,请写:int min=((a+b)-abs(a-b))/2;
printf("最大值是:%d\n",max);
}
输出结果:
请输入两个整数a,b:1 2
最大值是:2
请输入两个整数a,b:3 4
最大值是:4
4、打印一个心形:
printf(" * * * *\n");
printf(" * * *\n");
printf(" * * \n");
printf(" * *\n");
printf(" * *\n");
printf(" * *\n");
printf(" *\n");
5、打印出杨辉三角形
#include <stdio.h>
int main (int argc, const char * argv[])
{
int a[10][10];
//把所有一位上的和末位上的赋成1
for(int i=0;i<10;i++){
a[i][0]=1;
a[i][i]=1;
}
//a[i][j]是它上面的左右两 个
for(int i=2;i<10;i++){
for(int j=1;j<i;j++){
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
//打印出杨辉三角形
for(int i=0;i<10;i++){
//输出前面空格
for(int s=i;s<10;s++){
printf(" ");
}
for(int j=0;j<=i;j++){
printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}
输出结果:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1