标签:赋值 reverse input 偶数 代码 code 定义 scan 空格
1、掌握指针的概念和定义方法。
2、掌握指针的操作符和指针的运算。
3、掌握指针与数组的关系。
4、掌握指针与字符串的关系。
5、熟悉指针作为函数的参数及返回指针的函数。
6、了解函数指针。
1、问题的简单描述:分别输出整型变量a,浮点型变量b,初值c=3的值及地址。
2、实验代码:
#include<stdio.h>
int main()
{
int *p,a,c=3;
float *q,b;
p=&a;
q=&b;
printf("Please input the value of a,b:");
scanf("%d%f",p,q); /*使用指针p和q输入a,b的值*/
printf("Result:\n");
printf("%d,%f\n",a,b);
printf("%d,%f\n",*p,*q); /*通过指针p和q间接输出a,b的值*/
printf("The address of a,b:%p,%p\n",&a,&b);
printf("The address of a,b:%p,%p\n",p,q); /*输出p和q的值并与上行输出结果进行比较*/
p=&c;
printf("c=%d\n",*p);
printf("The address of c: %x,%x\n",p,&c); /*输出p的值及c的地址*/
return 0;
}
3、问题分析:在输入的时候,数值之间要用空格,否则只能输出第一个数且是浮点型。
1、问题的简单描述:从主函数中分别调用交换函数,打印输出交换后的结果。
2、实验代码:
#include<stdio.h>
void swap1(int x,int y);
void swap2(int *x,int *y);
int main()
{
int a,b,*t1=&a,*t2=&b;
printf("Please input a=");
scanf("%d",&a);
printf("\nb=");
scanf("%d",&b);
swap1(a,b);
printf("\nAfter Call swap1: a=%d b=%d\n",a,b);
swap2(t1,t2);
printf("\nAfter Call swap2: a=%d b=%d\n",a,b);
return 0;
}
void swap1(int x,int y)
{
int temp;
temp=x;
x=y;
y=temp;
}
void swap2(int *x,int *y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}
3、问题分析:通过理论课学习,我了解了指针交换的方法,但是忘记了指针一定要有指向。在引用swap2()
时,其中应填&a,&b 或者定义变量t1,t2,在开头将p=&a,q=&b。
1、问题的简单描述:定义函数char *reserve(char *str),通过指针移动的方式将字符串反转。定义函数char *link(char *str1,char *str2),通过指针移动的方式将字符串连接起来。
2、实验代码:
#include<stdio.h>
char *reverse(char *str);
char *link(char *str1,char *str2);
int main()
{
char str[30],str1[30],*str2;
printf("Input reversing charater string:");
gets(str);
str2=reverse(str);
printf("\nOutput reversed character string:");
puts(str2);
printf("Input string1:");
gets(str);
printf("Input string2:");
gets(str1);
str2=link(str,str1);
puts(str2);
return 0;
}
char *reverse(char *str)
{
char *p,*q,temp;
p=str,q=str;
while(*p!=‘\0‘) /*判断是否到达最后一个字符*/
p++;
p--;
while(q<p)
{
temp=*q;
*q=*p;
*p=temp;
q++,p--; /*指针做相向移动处理*/
}
return str; /*返回结果*/
}
char *link(char *str1,char *str2)
{
char *p=str1,*q=str2;
while(*p!=‘\0‘)
p++;
while(*q!=‘\0‘)
{
*p=*q; /*q指向的元素赋值给p所指向的元素*/
p++;q++; /*指针做相应的移动处理*/
}
*p=‘\0‘; /*令结束字符为空字符*/
return str1;
}
3、问题描述:通过老师的讲解,还有一些细节问题。在char *link()
函数中漏写了*,且函数定义时末尾不加‘;’。
1、问题的简单描述:定义一个整型一维数组,输入任意奇偶数,再定义一个函数,实现数组元素奇数在左,偶数在右的排列。
2、实验代码:
#include<stdio.h>
#define N 10
void arrsort(int a[],int n);
int main()
{
int a[N],i;
for(i=0;i<N;i++)
scanf("%d",&a[i]);
arrsort(a,N);
for(i=0;i<N;i++)
printf("%d ",a[i]);
}
void arrsort(int a[],int n)
{
int *p,*q,temp;
p=a;
q=a+n-1;
while(p<q)
{
while(*p%2!=0) /*判断*p是否为奇数*/
p++; /*指针向后移动*/
while(*q%2==0) /*判断*q是否为偶数*/
q--; /*指针向前移动*/
if(p>q)
break;
temp=*p;
*p=*q;
*q=temp;
p++;q--; /*指针相向移动*/
}
}
3、问题分析:运行时没有结果,在判断奇偶数时,将取余符号%写成了除号/。
这次实验,老师将8.3.3和8.3.4讲得很细,我又学到了字符串反转和连接,了解了其中的运行轨迹。‘*’在指针中很重要,稍不注意,程序就会出错。本次4个实验有提前预习,所以进行还比较顺利。指针还是很难的,我会多看书复习,理解清楚其中的含义用法。
标签:赋值 reverse input 偶数 代码 code 定义 scan 空格
原文地址:https://www.cnblogs.com/li-shaung/p/13029756.html