C语言教材 第七章 指针 实验

合集下载

C语言实验-第七章-第九章2

C语言实验-第七章-第九章2

实验七:指针的应用【实验目的】1.掌握指针和指针变量,内存单元和地址、变量与地址、数组与地址的关系;2.掌握指针变量的定义和初始化,指针变量的引用方式;3.能正确使用数组的指针和指向数组的指针变量;【实验内容】1.填空题输入一个字符串,将其中的大写字母转换成小写字母,然后输出本程序主要是比较scanf()输入和gets()输入的区别#include <stdio.h>void main(){ char s[20];char *p=s;scanf(“%s”,p); /*注意用scanf()输入和gets()输入的区别*/while( 1 ){if( 2 ) *p=*p+ (‘a’-‘A’);p++ ;}puts ( 3 );}答案:1、*p!=’\0’2、(*p>='A')&&(*p<='Z')3、s运行结果:输入:Program输出:program输入:This is Program输出:this提示:scanf ()输入时遇到空格认为字符串结束,用gets()输入时只有遇到回车才认为字符串结束。

如键入any boy并回车,则2。

补充程序题输入15个整数存入一维数组,再按逆序重新调整该数组中元素的顺序然后再输出。

下面给出部分程序的内容,请将程序补充完整,然后上机调试。

部分程序清单如下:#include <stdio.h>void main(){ int a[15],*p1,*p2,x;for(p1=a;p1<a+15;p1++)scanf("%d",p1);for(p1=a,p2=a+14;p1<a+7;p1++,p2--){ x=*p1;*p1=*p2;*p2=x;}……}答案:for(p1=a;p1!=a+15;p1++)printf("%d ",*p1); // %d后面有一个空格运行结果:输入:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15输出:15 14 13 12 11 10 9 8 7 6 5 4 3 2 1提示:(1)在整型数组中,没有结束标志,必须依靠数组中数据元素的个数控制循环次数。

C语言实验程序、总结实验七指针

C语言实验程序、总结实验七指针

C语⾔实验程序、总结实验七指针实验七指针⼀实验⽬的 1 了解指针的概念,学会定义和使⽤指针变量。

2 掌握指针、变量和数组的关系及使⽤⽅法。

3 学会使⽤指向函数的指针变量。

⼆实验内容1 编写函数fun(float *sn,int n),其功能是:根据以下公式计算s ,计算结果通过形参sn 传回;n 通过实参传⼊,n 的值⼤于等于0。

上机运⾏并记录输⼊输出(主函数已给出)。

1217151311+?+-+-=n s fun(float *sn,int n){ 定义变量:和s,通项w ,符号f ,循环控制变量i ; /* 其中s 、f 要初始化 */ 循环求累加和s{ 改变符号; /* 由负变正或由正变负 */求通项w;累加:s+=w;}形参指针变量sn 赋值; /* 通过形参sn 传回累加和s */}main(){ float s; int n;printf("n="); scanf("%d ",&n);fun(&s,n);printf("s=%f\n ",s);}完整程序如下:#includevoid fun(float *sn,int n){ float s=0.0,w,f=-1.0;int i=0;for (i=0;i<=n;i++);{ f=(-1)*f;w=f/(2*i+1);s+=w;}*sn =s;}main(){ float s; int n;printf("n="); scanf("%d",&n);fun(&s,n);printf("s=%f\n",s);}输出结果如下图:2 想使指针变量pt1指向a和b中的⼤者,pt2指向⼩者,以下程序能否实现此⽬的?swap(int *p1,int *p2) { int *p;p=p1;p1=p2;p2=p}main(){ int a,b; int *pt1,*pt2 ;scanf("%d,%d",&a,&b);pt1=&a pt2=&b ;if(aprintf("%d,%d \n",*pt1,*pt2) ;}上机调试此程序。

C语言程序设计实训教程第7章 指 针

C语言程序设计实训教程第7章 指 针

12
2)指针与一维数组 【例 7.6】 下列程序的运行结果是( )。[读 程序写结果,重庆市 2001年第 2次等级考试]
13
14
3)指向字符的指针
15
16
17
18
4)指针与二维数组
19
5)指向一维数组的指针(行指针) 【例 7.18】 对 int(﹡p)[5];的正确描述 是( )。[多选题,重庆市 2003年第 1次等级考 试] A. p是数组名 B. p是指针变量名 C. p数组中有 5个元素 D .p指向一个包含 5个元素的整型数组 E. p是一个整型数组 答案:B D
22
7)指针数组 当数组的元素类型为指针时,叫做指针数组。 【例 7.21】 下列程序的运行结果是( )。 [读程序写结果,重庆市 2004年第 2 次等级考试]
23
8)指针做函数参数 指针做函数参数的主要目的是利用在函数中, 利用指针去操作主调函数中的变量。 【例 7.22】 下列程序在数组中同时查找最大 值下标和最小值下标,并分别存放在 main函数的 变量 max和 min中,请填空。[读程序写结果,重 庆市 2003年第 2次等级考试]
10
【例 7.3】 由于指针的数据类型实际上是指定 指针所能指向对象的数据类型,所以不同数据类型 的指针变量不能相互赋值。( )[判断题,重庆市 2005年第 2次等级考试] 答案:对 分析:在某些特定情况下,可以在不同数据类 型指针之间通过强制类型转换赋值。
11
【例 7.4】 若有定义:long intj,﹡p;,则操 作 j=(long int)p;是合法操作。( )[判断题, 重庆市 2004年第 1次等级考试] 答案:对 【例 7.5】 在 C 语言中,程序

C语言教材第七章指针实验

C语言教材第七章指针实验

C语⾔教材第七章指针实验第七章指针第⼀部分知识训练【知识要点】1. 地址与指针指针变量的概念:⽤⼀个变量专门来存放另⼀个变量的地址。

2. 指向变量的指针变量指针变量的形式:基类型 *指针变量名;&: 取地址运算符;*:指针运算符。

3. 指针与数组引⽤⼀个数组元素可以⽤下标法和指针法;可以⽤数组名作函数的参数。

4.指针与函数函数指针变量定义的⼀般形式为:类型说明符 (*指针变量名)();⼀个函数的返回值可以是⼀个函数。

【典型习题与解析】5. char * const p;char const * pconst char *p上述三个有什么区别?【解析】char * const p; //常量指针,p的值不可以修改;char const * p;//指向常量的指针,指向的常量值不可以改;const char *p; //和char const *p。

6. main(){int a[5]={1,2,3,4,5};int *ptr=(int *)(&a+1);printf("%d,%d",*(a+1),*(ptr-1));}输出结果是什么?【解析】答案:输出:2,5*(a+1)就是a[1],*(ptr-1)就是a[4],执⾏结果是2,5。

&a+1不是⾸地址+1,系统会认为加⼀个a数组的偏移,是偏移了⼀个数组的⼤⼩(本例是5个int)。

1)&a是数组指针,其类型为 int (*)[5];⽽指针加1要根据指针类型加上⼀定的值,不同类型的指针+1之后增加的⼤⼩不同。

2)a是长度为5的int数组指针,所以要加 5*sizeof(int),所以ptr实际是a[5],但是prt与(&a+1)类型是不⼀样的(这点很重要),所以prt-1只会减去sizeof(int*) a,&a的地址是⼀样的,但意思不⼀样。

3)a是数组⾸地址,也就是a[0]的地址,&a是对象(数组)⾸地址,a+1是数组下⼀元素的地址,即a[1],&a+1是下⼀个对象的地址,即a[5]。

C语言电子教案第七章指针和指针变量

C语言电子教案第七章指针和指针变量

C语言电子教案第七章指针和指针变量教学目标:1.了解指针的概念和作用;2.掌握指针变量的定义和使用;3.理解指针和数组之间的关系;4.能够通过指针来实现函数的传递和返回。

教学重点:1.指针和指针变量的概念;2.指针变量的定义和初始化;3.指针和数组的关系。

教学难点:1.如何理解和使用指针变量;2.如何利用指针实现函数的传递和返回。

教学准备:教学PPT、电脑、投影仪、编程软件教学过程:一、导入新课(5分钟)通过提问导入新课,引出指针的概念和作用。

学生回答问题后,教师简要介绍指针的基本概念,并给出指针的定义。

二、指针变量的定义和初始化(25分钟)1.指针变量的定义:指针是一个变量,用于存储一个变量的地址。

指针变量的定义格式为:数据类型*指针变量名;2.指针变量的初始化:可以通过给指针赋值,使其指向一个已存在的变量。

三、指针和数组的关系(20分钟)1.数组和指针的关系:数组名是一个指向该数组首元素的指针常量,可以通过指针来对数组进行操作;2. 数组名的使用:数组名可以当作指针变量来使用,例如:inta[5]; int *p = a; p就是一个指向a的指针。

四、指针作为函数参数(25分钟)1.指针作为函数参数:可以将指针作为函数的参数,通过指针对函数外部的变量进行修改;2.指针作为函数返回值:可以将指针作为函数的返回值,从函数中返回一个指向变量的指针。

五、综合练习(15分钟)通过综合练习来加深对指针和指针变量的理解和运用。

六、小结(5分钟)本节课主要学习了指针和指针变量的概念、定义和使用,以及指针和数组之间的关系。

指针的作用非常重要,通过指针可以对变量进行间接操作,可以更灵活地使用内存。

教学反思:本节课通过提问导入新课,引出了指针的概念,并逐步讲解了指针变量的定义和初始化、指针和数组的关系、指针作为函数参数和返回值的用法。

通过综合练习,学生对指针和指针变量的使用有了更深入的理解。

不足之处是教学时间安排不够合理,对于一些学生来说,难度略大,希望在后续教学中适当调整。

《C语言程序设计》实验报告

《C语言程序设计》实验报告

(此文档为word格式,下载后您可任意编辑修改!)《C语言程序设计》实验报告2012~2013学年第二学期班级姓名学号指导教师实验一实验项目名称:C程序的运行环境和运行C程序的方法所使用的工具软件及环境:Visual C++6.0一、实验目的:1.了解在Visual C++6.0环境下如何编辑、编译、连接和运行一个C程序;2.通过运行简单的C程序,初步了解C源程序的特点。

二、预习内容:教材《C语言程序设计教程》第1章。

三、实验内容:1.在Visual C++6.0环境下输入并运行下面的程序:#include<stdio.(){printf("This is a C program.\n");return0;}2.在Visual C++6.0环境下输入下面的程序(有语法错误),编译、连接、调试该程序,直至程序无语法错误,然后运行程序,并观察分析运行结果。

#include<stdio.(){int a,b,suma=3;b=4;sun=a+b;print("%d+%d=%d\n",a,b,sum);return0;}四、实验结果:1.运行结果(或截图):2.(1)改正后的源程序:(2)运行结果(或截图):五、思考题:1.一个C程序上机的步骤有哪些?答:2.组成C程序的基本单位是函数,一个函数包括哪几个部分?答:成绩指导教师签名实验二实验项目名称:数据类型、运算符和表达式所使用的工具软件及环境:Visual C++6.0一、实验目的:1.掌握整型、实型与字符型这三种基本类型的概念;2.掌握常量及变量的使用方法;3.掌握基本算术运算符及其表达式的使用方法;4.掌握++、--运算符、赋值运算符及其表达式的使用方法。

二、预习内容:教材《C语言程序设计教程》第2章。

三、实验内容:1.在Visual C++6.0环境下输入下面的程序(有语法错误),编译、连接、调试该程序,直至程序无语法错误。

#include<stdio.(){int2cd=3;floatπ=3.14;char for=′A′;printf("%d,%f,%c\n",2cd,π,for);return0;}2.在Visual C++6.0环境下输入并运行下面的程序,观察分析运行结果。

C语言指针实验报告-c语言指针心得

C语言指针实验报告-c语言指针心得
用字符串的指针与指向字符串的指针变量;
2
将一个任意整数插入到已排序的整形数组中,插入后,数组中的数仍然保持有序 要求:
(1) 整形数组直接由赋值的方式初始化,要插入的整数有seanf()函数数入;
(2)算法实现过程采用指针进行处理;
(3) 输入原始数据以及插入整数后的数据,并加以说明;
c语言程序设计实验报告实验名称指针机械工程与自动化专业班级机械1003任课教师实验时间实验内容将一个任意整数插入到已排序的整形数组中插入后数组中的数仍然保持有序要求
C
实验名称
指针
学院
机械工程与自动化
专业班级
机械1003
姓名
学号
任课教师
实验时间
1
(1)掌握指针的概念,会定义与使用指针变量;
(2) 能正确使用变量的指针与指向变量的指针变量;

C语言程序设计实验实验指导书及答案

C语言程序设计实验实验指导书及答案

常熟理工学院电气与自动化工程学院《C语言程序设计》实验指导书实验一熟悉C程序运行环境班级学号姓名成绩一、实验目的1. 熟悉C语言Visual C++6.0调试环境。

2. 掌握C程序的编辑、调试及运行。

二、实验内容项目1. 调试并运行下面程序,并写出运行结果:#include <stdio.h>int main(){printf(“Good morning!\n”);printf(“Hello,world!\n”);return 0;}运行结果(注意,按照屏幕输出格式写):项目2. 调试并运行下面程序,并写出运行结果:#include <stdio.h>int main(){int a , b , sum; /*定义变量*/a=23; b=56; /*为变量赋值*/sum=a+b; /*计算两个变量的和*/printf(“sum is %d\n”,sum); /*输出计算结果*/return 0;}运行结果:2项目3. 调试并运行下面程序,并写出运行结果:#include <stdio.h>int max(int,int);int main(){int a , b , c; /*定义变量*/a=23; b=56; /*为变量赋值*/c=max(a,b); /*调用max函数,将得到的值赋给c*/ printf(“max is %d\n”,c); /*输出c的值*/return 0;}int max(int x,int y) /*定义max函数,函数值为整型*/ {int z; /*定义变量*/if(x>y)z=x;elsez=y;return(z); /*将z的值返回*/}运行结果:三、提高部分1.试想,如果求10个数中的最大者,则程序该如何编写。

程序代码运行结果:实验二数据及其运算班级学号姓名成绩一、实验目的1. 掌握C数据类型的概念、熟悉整型、字符型和实型基本类型的常量的用法;学会三种基本类型变量的定义、赋值和使用方法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第七章指针第一部分知识训练【知识要点】1. 地址与指针指针变量的概念:用一个变量专门来存放另一个变量的地址。

2. 指向变量的指针变量指针变量的形式:基类型 *指针变量名;&: 取地址运算符;*:指针运算符。

3. 指针与数组引用一个数组元素可以用下标法和指针法;可以用数组名作函数的参数。

4.指针与函数函数指针变量定义的一般形式为:类型说明符 (*指针变量名)();一个函数的返回值可以是一个函数。

【典型习题与解析】5. char * const p;char const * pconst char *p上述三个有什么区别?【解析】char * const p; //常量指针,p的值不可以修改;char const * p;//指向常量的指针,指向的常量值不可以改;const char *p; //和char const *p。

6. main(){int a[5]={1,2,3,4,5};int *ptr=(int *)(&a+1);printf("%d,%d",*(a+1),*(ptr-1));}输出结果是什么?【解析】答案:输出:2,5*(a+1)就是a[1],*(ptr-1)就是a[4],执行结果是2,5。

&a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int)。

int *ptr=(int *)(&a+1);则ptr实际是&(a[5]),也就是a+5。

原因如下:1)&a是数组指针,其类型为 int (*)[5];而指针加1要根据指针类型加上一定的值,不同类型的指针+1之后增加的大小不同。

2)a是长度为5的int数组指针,所以要加 5*sizeof(int),所以ptr实际是a[5],但是prt与(&a+1)类型是不一样的(这点很重要),所以prt-1只会减去sizeof(int*) a,&a的地址是一样的,但意思不一样。

3)a是数组首地址,也就是a[0]的地址,&a是对象(数组)首地址,a+1是数组下一元素的地址,即a[1],&a+1是下一个对象的地址,即a[5]。

【练习题】一、填空题1. 指针变量是把内存中另一个数据的作为其值的变量。

2. 能够直接赋值给指针变量的整数是。

3. 如果程序中已有定义:int k;1) 定义一个指向变量k的指针变量p的语句是。

2) 通过指针变量,将数值6赋值给k的语句是。

3) 定义一个可以指向指针变量p的变量pp的语句是。

4) 通过赋值语句将pp指向指针变量p的语句是。

5) 通过指向指针的变量pp,将k的值增加一倍的语句是。

4. 当定义某函数时,有一个形参被说明成int *类型,那么可以与之结合的实参类型可以是、等。

5. 以下程序的功能是:将无符号八进制数字构成的字符串转换为十进制整数。

例如,输入的字符串为:556,则输出十进制整数366。

请填空。

#include <stdio.h>main( ){char *p,s[6];int n;p=s;gets(p);n=*p-‵0‵;while( != '\0')n=n*8+*p-‵0‵;printf("%d \n",n);}二、选择题1.变量的指针,其含义是指该变量的()。

A)值B)地址 C)名 D)一个标志2.下面程序的运行结果是()。

#include <stdio.h>#include <string.h>main(){char *s1="AbDeG";char *s2="AbdEg";s1+=2;s2+=2;printf("%d\n",strcmp(s1,s2));}A)正数B)负数 C)零 D)不确定的值3.若有以下定义,则对a数组元素的正确引用是()。

int a[5],*p=a;A)*&a[5] B)a+2 C)*(p+5) D)*(a+2)4.若有以下定义,则p+5表示()。

int a[10],*p=a;A)元素a[5]的地址B)元素a[5]的值C)元素a[6]的地址D)元素a[6]的值5. 以下Delblank函数的功能是删除字符串s中的所有空格(包括Tab、回车符和换行符)。

void Delblank(char *s){int i,t;char c[80];for(i=0,t=0; ① ;i++)if(!isspace( ② ))c[t++]=s[i];c[t]=‘\0’;strcpy(s,c);}①A) s[i] B) !s[i] C) s[i]=‘\0’ D) s[i]==‘\0’②A) s+i B) *c[i] C) *(s+i)=‘\0’ D) *(s+i)6. 以下conj函数的功能是将两个字符串s和t连接起来。

char *conj(char *s,char *t){char *p=s;while(*s) ① ;while(*t){*s= ② ;s++;t++;}*s=‘\0’;③ ;}① A) s-- B) s++ C) s D) *s② A) *t B) t C) t-- D) *t++③ A) return s B) return t C) return p D) return p-t7. 下列程序的输出结果是()。

#include <stdio.h>main(){int **k,*a,b=100;a=&b;k=&a;printf(“%d\n”,**k);}A)运行出错 B) 100 C) a的地址 D) b的地址8. 若定义了以下函数:void f(……){……p=(double *)malloc(10*sizeof(double));……}p是该函数的形参,要求通过p把动态分配存储单元的地址传回主调函数,则形参p的正确定义应当是()。

A) double *p B) float **p C) double **p D) float *p三、编程题1. 编写一个程序,将用户输入的字符串中的所有数字提取出来。

2. 通过指针处理下面的问题:利用随机函数模拟产生 300 个 1~12 月出生的人数,统计各月所占的出生率。

【练习题参考答案】一、填空题1. 首地址2. 03. 1)int *p=&k; 2)*p=6; 3)int **pp; 4)pp=&p; 5)(**pp)*=2;4. 整型数组名、指向整型数据的指针值5. *(p++)二、选择题1. B2. B3. D4. A5. BD6. BAC7. B8. C三、编程题1. 编写一个程序,将用户输入的字符串中的所有数字提取出来。

#include <stdio.h>#include <string.h>void main(){ char string[81],digit[81];char *ps;int i=0;printf("enter a string:\n");gets(string);ps=string;while(*ps!='\0'){if(*ps>='0' && *ps<='9'){ digit[i]=*ps;i++;}ps++;}digit[i]='\0';printf("string=%s digit=%s\n",string,digit);}2.通过指针处理下面的问题:利用随机函数模拟产生 300 个 1~12 月出生的人数,统计各月所占的出生率。

#include <stdio.h>#include <stdlib.h>#include <time.h>int main(int argc, char* argv[]){int month[12],*m_pt,i;m_pt=month;srand( (unsigned)time( NULL ) ); //srand()函数产生一个以当前时间开始的随机种子for (i=0;i<12;i++)*(m_pt+i)=0;for (i=0;i<300;i++)(*(m_pt+rand()%12)) ++;printf("月份出生人数出生率 (总数300)\n");for (i=0;i<12;i++)printf("%3d %6d %2.1f℅ \n",i+1,*(m_pt+i),*(m_pt+i)/300.0*100);getchar();return 0;}第二部分上机实训一、目的要求1.掌握指针的概念。

2.学会通过指针处理普通变量和一维数组。

3.学会通过指针处理动态分配的内存。

二、预习内容掌握指针变量的使用方法、“&”和“*”的用法、指针变量的赋值、指向数组的指针和指向函数的指针用法。

三、实验内容及实验步骤1.要求使用指针处理下面的问题,输入四个整数,按由小到大的顺序输出然后将程序改为:(1)将程序修改为由大到小顺序输出;(2)输入四个字符串,按由小到大顺序输出。

参考程序:行号程序代码1 #include "stdio.h"2 void main()3 { int a,b,c,d,t;4 int *pa=&a,*pb=&b,*pc=&c,*pd=&d;5 printf("请输入四个整数:");6 scanf("%d%d%d%d",pa,pb,pc,pd);7 if (*pa>*pb) //第一个数和第二个数比较8 { t=*pa;*pa=*pb;*pb=t; } //两个数交换9 if (*pb>*pc) //第二个数和第三个数比较10 { t=*pb;*pb=*pc;*pc=t; }11 if (*pc>*pd) //第三个数和第四个数比较12 { t=*pc;*pc=*pd;*pd=t; }13 if (*pa>*pb) //第一个数和第二个数比较14 { t=*pa;*pa=*pb;*pb=t; }15 if (*pb>*pc) //第二个数和第三个数比较16 { t=*pb;*pb=*pc;*pc=t; }17 if (*pa>*pb) //第一个数和第二个数比较18 { t=*pa;*pa=*pb;*pb=t; }19 printf("\n 排序结果如下:");20 printf("%d,%d,%d,%d\n",*pa,*pb,*pc,*pd );21 }问题 1:将程序修改为由大到小顺序输出。

相关文档
最新文档