时间范围:2022年10月31日-2022年11月6日
2022年10月31日
/*
* 作者:徐子宸
* 来源:原创
* 功能:用指针实现冒泡排序
* 日期:2022年10月31日
*
*/
#include
int input(int a[],int n)
{
int *p=a;
n=5;
printf("请输入待排序的数\n");
for(int i=0;i<5;i++)
{
scanf("%d",&p[i]);
}
}
int sort(int a[],int n)
{
int *p=a;
for(int i=0;i<5;i++)
{
for(int j=0;j<5-i;j++)
{
if(p[j]>p[j+1])
{
int tmp=p[j];
p[j]=p[j+1];
p[j+1]=tmp;
}
}
}
}
int output(int a[],int n)
{
int *p=a;
printf("已完成排序\n");
for(int i=0;i<5;i++)
{
printf("%d\n",p[i]);
}
}
int main()
{
int a[5]={0};
input(a,5);
sort(a,5);
output(a,5);
//int i,j;
return 0;
}
#include
#include
#include
float jia(float a,float b)
{
return a+b;
}
float jian(float a,float b)
{
return a-b;
}
float cheng(float a,float b)
{
return a*b;
}
float chu(float a,float b)
{
return a/b;
}
int main()
{
float a,b;
char c;
char str[10]={'\0'};
//while(1);
printf("输入quit退出,goon继续\n");
while(1)
{
gets(str);
if(strcmp(str,"quit")==0)
{
exit(0);
}
else if(strcmp(str,"goon")==0)
{
printf("请输入要计算的数字和操作\n");
scanf("%f%*c%c%f",&a,&c,&b);
switch(c)
{
case '+':
//jia(a,b);
printf("%f\n",jia(a,b));
break;
case '-':
//jian(a,b);
printf("%f\n",jian(a,b));
break;
case '*':
//cheng(a,b);
printf("%f\n",cheng(a,b));
break;
case '/':
//chu(a,b);
printf("%f\n",chu(a,b));
break;
default:
printf("ERROR");
break;
}
}
}
return 0;
}
#include
int main()
{
int a=10;
int *p=&a;
char b='c';
char *q=&b;
printf("%ld\n",sizeof(int *));
printf("%ld\n",sizeof(char *));
return 0;
}
#include
int swap(int x,int y)
{
int temp=x;
x=y;
y=temp;
}
int main()
{
int x=3;
int y=4;
swap(x,y);
printf("x=%d,y=%d\n",x,y);
return 0;
}
#include
int swap(int *x,int *y)
{
int temp=*x;
*x=*y;
*y=temp;
printf("x=%d,y=%d\n",*x,*y);
}
int main()
{
int x=3,y=4;
swap(&x,&y);
printf("x=%d,y=%d\n",x,y);
return 0;
}
#include
int main()
{
int a=10;
int *p=&a;
printf("%d",*&a);
return 0;
}
#include
int main()
{
int a=10;
int *p=&a;
*p=20;
printf("%d",*p);
return 0;
}
#include
int main()
{
int a=10;
int *p=&a;
printf("%d\n",*p);
*p=20;
printf("%d\n",a);
printf("%d\n",*&a);
return 0;
}
#include
int main()
{
int a=10;
int *p=&a;
int b=20;
*p=b;
printf("%p\n",&a);
printf("%p\n",p);
printf("%d\n",*p);
printf("%p\n",&b);
printf("%p\n",p);
printf("%d\n",*p);
return 0;
}
#include
int main()
{
int *p;
printf("%p\n",p);
return 0;
}
#include
int main()
{
int *p;
p=NULL;
printf("%p\n",p);
return 0;
}
#include
int main()
{
int a=10;
const int *p=&a;
printf("%p\n",p);
int b=20;
p=&b;
printf("%p\n",p);
return 0;
}
#include
int main()
{
const int *p=&a;
int b;
int a;
printf("%p\n",*p);
*p=b;
printf("%p\n",*p);
return 0;
}
#include
int main()
{
int a=20,b=10;
int * const p=&a;
*p=10;
*p=20;
printf("%d\n",*p);
return 0;
}
#include
int main()
{
int a[5];
int *p=a;
for(int i=0;i<5;i++)
{
scanf("%d",&p[i]);
}
for(int i=0;i<5;i++)
{
printf("%d\n",p[i]);
}
return 0;
}
#include
int main()
{
int a[5];
int *p=a;
for(int i=0;i<5;i++)
{
scanf("%d",p+i);
}
for(int i=0;i<5;i++)
{
printf("%d\n",*(p+i));
}
return 0;
}
#include
int main()
{
int a[5];
int *p=a;
for(int i=0;i<5;i++)
{
scanf("%d",p++);
}
p=a;
for(int i=0;i<5;i++)
{
printf("%d\n",*(p++));
}
return 0;
}
#include
int main()
{
int *p=arr;
for(int i=0;i<5;i++)
{
scanf("%d\n",&p[i]);
}
for(int i=0;i<5;i++)
{
printf("%d\n",p[i]);
}
return 0;
}
#include
int main()
{
int a[5];
int *p=a;
for(int i=0;i<5;i++)
{
scanf("%d",p++);
}
/*for(int i=0;i<5;i++)
{
printf("%d\n",*(p--));
}*/
for(int i=0;i<5;i++)
{
printf("%d\n",*(--p));
}
return 0;
}
#include
int swap(int *a,int *b)
{
int c=*a;
*a=*b;
*b=c;
}
int main()
{
int a=10,b=20;
printf("a=%d,b=%d\n",a,b);
return 0;
}
#include
int swap(int *a,int *b)
{
int *temp;
*temp=*a;
*a=*b;
*b=*temp;
printf("a=%d,b=%d\n",*a,*b);
}
int main()
{
int a=10,b=20;
swap(&a,&b);
printf("a=%d,b=%d\n",a,b);
return 0;
}
/*
* 段错误
*
*/
2022年11月1日
#include
int my_strcat(char *s,char *q)
{
while(*s!='\0')
{
s++;
}
while(*q!='\0')
{
*s=*q;
q++;
s++;
}
}
int main()
{
char str[50]="aaaaa";
char str1[50]="bbbbb";
my_strcat(str,str1);
printf("%s",str);
return 0;
}
#include
int my_strcmp(char *s,char *q)
{
while(*s==*q&&*q!=0)
{
s++;
q++;
}
if(*s>*q)
{
printf(">\n");
}
else if(*s<*q)
{
printf("<\n");
}
else
{
printf("=\n");
}
}
int main()
{
char str[100]="xuzichen";
char str1[100]="zhaozhanqin";
my_strcmp(str,str1);
return 0;
}
#include
int main()
{
char str1[100]={'\0'};
char str2[100]={'\0'};
gets(str1);
gets(str2);
int i=0;
int j=0;
while(str1[i]!='\0')
{
i++;
}
while(str2[j]!='\0')
{
str1[i]=str2[j];
i++;
j++;
}
puts(str1);
return 0;
}
#include
int main()
{
char str1[100]={'\0'};
char str2[100]={'\0'};
gets(str1);
gets(str2);
int i=0;
while(str2[i]!='\0')
{
str1[i]=str2[i];
i++;
}
str1[i]='\0';
puts(str1);
return 0;
}
#include
/*
* 作者:徐子宸
* 来源:22091班上课笔记
* 功能:实现字符串的拷贝
*
*
*
*/
int main()
{
char *str="China";
char *atr="country";
char *p=atr;
char *q=atr;
int i=0;
while(*(p++)!='\0')
{
*(q++)=*(p++);
//i++;
}
p[i]='\0';
puts(str);
return 0;
}
#include
int input(int n,int *p)
{
//int i=0;
for(int i=0;ip[j+1])
{
int temp=p[j];
p[j]=p[j+1];
p[j+1]=temp;
}
}
}
}
int main()
{
int arr[5]={0};
input(5,arr);
sort(5,arr);
output(5,arr);
return 0;
}
#include
void my_strcpy(char *p,char *q)
{
while(*q!='\0')
{
*q=*p;
p++;
q++;
}
*p='\0';
}
int main()
{
char str[100]="abcde";
char str1[100]="aa";
my_strcpy(str,str1);
puts(str);
return 0;
}
/*
* 有问题
*
*
*/
#include
int my_strlen(char *s)
{
char *p=s;
while(*p!='\0')
{
p++;
}
return p-s;
}
int main()
{
char str[10]="abcde";
printf("%d",my_strlen(str));
return 0;
}
#include
int my_strlen(char *s)
{
char *p=s;
while(*(p++)!='\0');
return p-s-1;
}
int main()
{
char *a="abcde";
printf("%d",my_strlen(a));
return 0;
}
#include
int main()
{
int arr[5]={1,2,3,4,5};
int *p=&arr[0];
int *q=&arr[1];
printf("%ld",q-p);
return 0;
}
#include
int main()
{
int arr[5]={1,2,3,4,5};
int *p=&arr[0];
int *q=&arr[1];
printf("%p\n",q);
printf("%p\n",p);
printf("%p\n",q-p);
printf("%d\n",q-p);
return 0;
}
#include
int main()
{
int arr[5]={1,2,3,4,5};
int *p=arr;
printf("%p\n",p);
p++;
printf("%p\n",p);
printf("%p\n",&arr[1]);
return 0;
}
#include
int main()
{
int arr[5]={1,2,3,4,5};
int *p=arr;
printf("%p\n",p);
printf("%p\n",&arr[0]);
p++;
printf("%p\n",p);
printf("%p\n",&arr[1]);
p--;
printf("%p\n",p);
printf("%p\n",&arr[0]);
return 0;
}
/*
* 指针的运算
*
*/
#include
int main()
{
int arr[5]={1,2,3,4,5};
int *p=arr;
printf("%p\n",p);
printf("%p\n",&arr[0]);
p++;
printf("%p\n",p);
printf("%p\n",&arr[1]);
p--;
printf("%p\n",p);
printf("%p\n",&arr[0]);
p+1;
printf("%p\n",p);
p-1;
printf("%p\n",p);
return 0;
}
/*
* p++/p-- 往地址增大或减小的方向移动一个数据类型的大小,p的指向发生了改变
* p+1/p-1 往地址增大或减小的方向移动一个数据类型的大小,p的指向未发生改变
*
*
*/
#include
int main()
{
char a[10]; // 错误
a[10]="abcde";
char b[10]; // 错误
b="abcde";
char *c; // 错误
*c="abcde";
char *d; // 改变指针指向
d="abcde";
char *e="abcde"; // 错误
*e="ab";
char f[10]="abcde"; // 正确
char *p;
p=f;
char g[10]="abcde"; // 正确
char *q=g;
q=&g[2];
char *h=NULL; // 正确
h="abcde";
return 0;
}
#include
int main()
{
int arr[5]={1,2,3,4,5};
for(int i=0;i<5;i++)
{
printf("%d",arr[i]);
}
return 0;
}
#include
int main()
{
char arr[5]="abcd";
for(int i=0;i<5;i++)
{
printf("%c",arr[i]);
}
return 0;
}
#include
int main()
{
char arr[5]="abcd";
printf("%s",arr);
return 0;
}
#include
int main()
{
char str[3][20]={"aaaa","bbbb","cccc"};
int i;
printf("%s",str[i]);
return 0;
}
#include
int main()
{
char *s="abcde";
*s="a";
return 0;
}
#include
int main()
{
char str[10]="abcde";
char *p=str;
printf("%s\n",p);
p=&str[2];
printf("%s\n",p);
printf("%s\n",str);
return 0;
}
#include
int main()
{
char str[10]="abcde";
printf("%s",str[2]);
return 0;
}
#include
int main()
{
char *p="abcde";
printf("%c\n",*p);
printf("%s\n",*p);
printf("%s\n",p);
printf("%d\n",*p);
return 0;
}
#include
int main()
{
char *s="abcde";
s++;
printf("%s\n",s);
s++;
printf("%s\n",s);
s++;
printf("%s\n",s);
s++;
printf("%s\n",s);
return 0;
}
#include
int main()
{
int a=10;
int *p=&a;
int **q=&p;
printf("%d\n",sizeof(p));
printf("%d\n",sizeof(q));
return 0;
}
#include
int main()
{
int a=10;
int *p=&a;
int **q=&p;
printf("%p\n",&a);
printf("%p\n",p);
printf("%p\n",*q);
printf("%p\n",&p);
printf("%p\n",q);
return 0;
}
#include
int main()
{
int a=10;
int *p=&a;
int **q=&p;
printf("%d\n",*p);
printf("%p\n",*q);
printf("%p\n",**q);
printf("%p\n",p);
printf("%p\n",&a);
return 0;
}
#include
int main()
{
int a=10;
int *p=&a;
int **s=&p;
printf("%d\n",**s);
printf("%p\n",&a);
printf("%p\n",p);
printf("%p\n",*s);
int b=20;
*s=&b;
printf("%p\n",&b);
printf("%p\n",p);
printf("%p\n",*s);
return 0;
}
#include
int main()
{
int a=10;
int *p=&a;
int b=20;
int *pp=&b;
int const **s=&p;
**s=*pp;
s=&pp;
}
#include
int main()
{
int a=10;
int *p=&a;
int b=20;
int *pp=&b;
int ** const s=&p;
**s=*pp;
s=&pp;
}
#include
int main()
{
int a=10;
int *p=&a;
int b=20;
int *pp=&b;
int * const * s=&p;
**s=*pp;
s=&pp;
}
#include
int main()
{
char *str[3]={"abcde","qwert","zxcvb"};
int i=0;
for(i=0;i<3;i++)
{
printf("%s\n",*str[i]);
}
return 0;
}
2022年11月2日
#include
int main()
{
int arr[5]={1,2,3,4,5};
int (*p)[5]=&arr;
printf("%p\n",arr);
printf("%p\n",&arr);
printf("%p\n",&arr[0]);
printf("%p\n",p);
return 0;
}
#include
int main()
{
int arr[5]={1,2,3,4,5};
int (*p)[5]=&arr;
printf("%p\n",p);
int arr1[5]={1,2,3,4,5};
//int arr1[3]={1,2,3};
p=&arr1;
printf("%p\n",p);
return 0;
}
#include
int main()
{
int arr[5]={1,2,3,4,5};
int (*p)[5]=&arr;
printf("%p\n",p);
p++;
printf("%p\n",p);
return 0;
}
/*
* 作者:徐子宸
* 来源:原创
* 功能:用指针实现冒泡排序
* 日期:2022年10月31日
*
*/
#include
int input(int (*p)[5]/*,int n*/)
{
//int *p=a;
//n=5;
printf("请输入待排序的数\n");
for(int i=0;i<5;i++)
{
scanf("%d",&(*p)[i]);
}
}
int sort(int (*p)[5]/*,int n*/)
{
//int *p=a;
for(int i=0;i<5-1/* i<2 i<1 */;i++)
{
for(int j=0;j<5-1-i;j++)
{
if((*p)[j]>(*p)[j+1])
{
int tmp=(*p)[j];
(*p)[j]=(*p)[j+1];
(*p)[j+1]=tmp;
}
}
}
}
int output(int (*p)[5]/*,int n*/)
{
//int *p=a;
printf("已完成排序\n");
for(int i=0;i<5;i++)
{
printf("%d\n",(*p)[i]);
}
}
int main()
{
int a[5]={0};
int (*p)[5]=&a;
input(&a/*,5*/);
sort(&a/*,5*/);
output(&a/*,5*/);
//int i,j;
return 0;
}
/*
* 思路分析:
* 输入元素:1 9 4 2 6
* 第一趟:
* 1 9 4 2 6
* 1 4 9 2 6
* 1 4 2 9 6
* 1 4 2 6 9
* 第二趟:
* 1 4 2 6 9
* 1 2 4 6 9
*
*
*
*
*
*
*
*
*
*
*
*
*/
#include
int main()
{
int arr[5]={1,2,3,4,5};
int (*p)[5]=&arr;
for(int i=0;i<5;i++)
{
printf("%d\n",*(arr+i));
}
for(int i=0;i<5;i++)
{
printf("%d\n",*(*p+i));
}
for(int i=0;i<5;i++)
{
printf("%d\n",*(*p++));
}
for(int i=0;i<5;i++)
{
printf("%d\n",*((*p)++));
}
}
#include
int main()
{
int arr[5];
int (*p)[5]=&arr;
//int i;
for(int i=0;i<5;i++)
{
scanf("%d",&(*p)[i]);
}
for(int i=0;i<5;i++)
{
printf("%d",(*p)[i]);
}
}
#include
int main()
{
int arr[5];
int (*p)[5]=&arr;
//int i;
for(int i=0;i<5;i++)
{
scanf("%d",&*(*p+i));
}
for(int i=0;i<5;i++)
{
printf("%d",(*p)[i]);
}
return 0;
}
#include
int main()
{
int arr[5]={1,2,3,4,5};
int (*p)[5]=&arr;
printf("%d\n",sizeof(int(*)[5]));
printf("%d\n",sizeof(int[5]));
return 0;
}
#include
int main()
{
printf("%d\n",sizeof(int *));
printf("%d\n",sizeof(char *));
printf("%d\n",sizeof(double *));
printf("%d\n",sizeof(int (*)[5]));
return 0;
}
附习题:
若有以下定义和语句:
double r=99;double *p=&r ;
*p=r ;
则以下正确的叙述是 。
A. 以上两处的*p 含义相同,都说明给指针变量p 赋值
B. 在"double r=99,*p=&r;"中,把r 的地址赋值给了p 所指的存储单元
C. 语句"*p=r;"把变量r 的值赋给指针变量p
D. 语句"*p=r;"取变量r 的值放回r 中
5、 分析下面函数,以下说法正确的是 。
swap(int *p1,int *p2)
{
Int *p;
*p=*p1; *p1=*p2; *p2=*p;
}
A. 交换*p1和*p2的值 B. 正确,但无法改变*p1和*p2的值
C. 交换*p1和*p2的地址 D. 可能造成系统故障,因为使用了野指针
9、 有如下程序段
int *p ,a=10 ,b=1 ;
p=&a ; a=*p+b ;
执行该程序段后,a 的值为 。
A. 12 B. 11 C. 10 D. 编译出错
8、 若int x ; int *pb; ,则正确的赋值表达式是 。
A. pb=&x B. pb=x; C. *pb=&x; D. *pb=*x
12、若有说明:long *p ,a;则不能通过scanf 语句正确给输入项读入数据的程序段
是 。
A. *p=&a; scanf("%ld",p);
B. p=(long *)malloc(8); scanf("%ld",p);
C. scanf("%ld",p=&a);
D. scanf("%ld",&a);
13、对于类型相同的两个指针变量之间,不能进行的运算是 。
A. < B. = C. + D. -
2、执行以下程序后,a的值为( )b的值为( )
void main()
{
int a,b,k=4,m=6,*p1=&k,*p2=&m;
a = p1==&m;
b=(-*p1)/(*p2)+7;
printf(“a=%d\n”, a);
printf(“b=%d\n”, b);
}
A.-1 B.1 C.0 D.4
A.5 B.6 C.7 D.10
6、有四组对指针变量进行操作的语句,以下判断正确的选项是()
1. int p, q; q=p; int a,*p,*q; p=q=&a;
2. int a,*p,*q; q=&a; p=*q; int a=20,*p; p=a;
3. int a=b=0,*p; p=&a; b=*p; int a=20,*p,*q=&a; p=q;
4. int a=20,*p,*q=&a; p=q; int p,*q; p=q;
A.正确(1) 不正确(2)(3)(4)
B.正确(1)(4) 不正确(2)(3)
C.正确(3) 不正确(1)(2)(4)
D.正确(1)(3) 不正确 (2)(4)
7、以下程序中调用scanf 函数给变量a输入值的方法是错误的,其错误原因是( )
void main()
{
int*p, q, a, b;
p=&a;
printf(“input a:”);
scanf(“%d”,*p);
……
}
A.*p表示的是指针变量p的地址
B.*p表示的是变量a的值,而不是变量a的地址
C.*p表示的是指针变量p的值
D.*p只能用来说明p是一个指针变量
2.已有定义int k=2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是 。
A)k=*ptr1+*ptr2 B)ptr2=k C)ptr1=ptr2 D)k=*ptr1*(*ptr2)
5.若有说明:int *p1, *p2,m=5,n;以下均是正确赋值语句的选项是
A)p1=&m; p2=&p1 ; B)p1=&m; p2=&n; *p1=*p2 ;
C)p1=&m; p2=p1 ; D)p1=&m; *p1=*p2 ;
6.若有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是
A)a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p
void fun(char *a, char