C语言实验-第七章-第九章2
- 格式:doc
- 大小:87.00 KB
- 文档页数:10
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语言由丹尼斯·里奇(Dennis Ritchie)在20世纪70年代初期于贝尔实验室开发,至今仍是许多系统软件和应用软件的首选语言。
本电子书将从C语言的基本概念、语法结构、数据类型、控制结构、函数、数组、指针、结构体、文件操作等方面进行详细介绍。
第一章:C语言概述C语言是一种过程式编程语言,它支持结构化编程。
C语言的设计哲学是提供一种通用、高效、易于使用的语言,同时保持对硬件的控制。
C 语言广泛应用于操作系统、嵌入式系统、高性能计算等领域。
第二章:C语言环境和基本语法在开始编写C程序之前,需要配置C语言开发环境,如GCC编译器。
C 程序的基本结构包括预处理指令、函数、变量声明和语句。
程序从`main`函数开始执行。
第三章:数据类型和变量C语言提供了多种数据类型,包括整型、浮点型、字符型等。
变量是程序中存储数据的容器,需要先声明后使用。
C语言是静态类型语言,每种变量在使用前必须指定数据类型。
第四章:运算符和表达式C语言提供了丰富的运算符,包括算术运算符、关系运算符、逻辑运算符、位运算符等。
表达式是由变量、常量和运算符组成的组合,用于执行计算。
第五章:控制结构控制结构是程序流程控制的基本构件。
C语言提供了三种基本的控制结构:顺序结构、选择结构(if语句、switch语句)和循环结构(for 循环、while循环、do-while循环)。
第六章:函数函数是C语言中实现代码复用的重要手段。
函数允许将代码组织成独立的块,每个块可以执行特定的任务。
C语言支持函数的定义、声明、调用和递归。
第七章:数组数组是相同数据类型元素的集合。
C语言支持一维数组和多维数组。
数组在内存中是连续存储的,这使得数组操作高效但也需要小心越界问题。
第八章:指针指针是C语言的核心特性之一。
指针变量存储的是另一个变量的内存地址。
C程序设计实验报告第七章 数组班级: 信科 121学号: 12477218姓名: 孙剑峰第七章数组【实验目的】1.进一步学习输入输出2.学习数组的调试和结构化调试3.学习数组和循环的综合应用【上机准备】第一题:输入10个整数,不排序直接查找并输出所有重复的数字。
画出流程图并写出程序。
设计一组测试用例。
第二题:输入10个不同的数,将其按大小排序,然后再输入一个数,使用二分法查找这个数所处的位置。
若这个数已存在则显示该数已存在,否则将它插入到以已经排序的数组中合适的地方,并输出新的数组。
画出流程图,写出程序。
设计一组测试用例。
第三题:输入20个各不相同的正整数,将其中的偶数按照由大到小的次序输出;将其中的奇数按照由小到大的次序输出。
画出流程图,写出程序。
设计一组测试用例。
第四题:输入一个5*5的二维数组,将各行最大值的坐标放置在一个新的一维数组中,最后按照下面的格式输出:第0行:12 34 23 45 7 最大值为45 ,坐标是(0,4)第五题:输入一个5*5的二维数组,列出其中所有的素数以及所在位置,并按照值(行,列)的格式输出,例如:13(3,4)表示在第3行第4列有一个素数13.画出流程图,写出程序。
设计一组测试用例。
第六题:使用define定义一个常量n,定义一个数组A[n][n],使用计算的方法在数组中生成下面的图形,最后输出。
(下面的示意运行结果均假定n=6)。
直接编写程序.A 1 2 3 4 5 67 8 9 10 11 1213 14 15 16 17 1819 20 21 22 23 2425 26 27 28 29 3031 32 33 34 35 36B 1 2 3 4 5 612 11 10 9 8 713 14 15 16 17 1824 23 22 21 20 1925 26 27 28 29 30C 1 1 1 1 1 11 2 2 2 2 11 2 3 3 2 11 2 3 3 2 11 2 2 2 2 11 1 1 1 1 1第七题:输入3个长度不超过20的字符串,把这三个字符串按照字典顺序连接,然后输出。
《高级语言程序设计》实验报告班级: 学号: 姓名: 成绩:实验日期: 年月日实验题目: 实验七指针程序设计实验目的:实验内容: (包括算法说明: 用文字或流程图说明;程序清单;运行结果: 原始数据、相应的运行结果和必要的说明。
)序(程序以文件名sy7_7.c存盘)。
#include<stdio.h>void sort(int *p,int n){int i,j,t;for(i=0;i<n-1;i++)for(j=0;j<n-i-1;j++)if(*(p+j)>*(p+j+1)) //由小到大排序{ t=*(p+j); *(p+j)=*(p+j+1);*(p+j+1)=t;} }void main(){int a[10],i;printf("输入%d个正数: ",10);for(i=0;i<10;i++)scanf("%d",&a[i]);sort(a,10); //调用排序函数printf("排序后: \n");for(i=0;i<10;i++)printf("%5d",a[i]);printf("\n");}把当前的字母变成后面第3个字母, 如最后三个字母x、y、z变成字母a、b、c。
再设计一函数把加密字符还原(程序以文件名sy7_8.c存盘)。
#include<stdio.h>void jiami(char *ch){ char *p=ch;while(*p!='\0'){ if(*p>='a' && *p<='z'|| *p>='A'&& *p<='Z'){*p=*p+3;if(*p>'Z'&&*p<'a' ||*p>'z') *p=*p-26;}++p;}}void jiemi(char *ch){ char *p=ch;while(*p!='\0'){ if(*p>='a'&& *p<='z'||*p>='A'&& *p<='Z'){ *p=*p-3;if(*p<'A'||*p<'a'&&*p>'Z') *p=*p+26;}++p;}}void main(){char line[80];printf("请输入一行字符:\n");gets(line);jiami(line);puts(line);jiemi(line);puts(line);}(3)编写一个程序实现如下功能: 输入一个字符串, 内有数字和非数字字符, 如: a123x456 17960?302tab5876 将其中连续的数字作为一个整数, 依次存放到一数组a中。
第一章习题答案一、选择题1~5:BDCDA 6~10:DABBB 11~12:CC二、填空题1、main()2、函数首部,函数体3、函数4、编辑、编译、连接、运行5、.cpp、.obj、 .exe6、; 或分号三、编程题#include <stdio.h> /* 包含标准库的信息 */void main() /* 定义名为main 的函数,它不接受参数值 */{ /* main函数的语句都被括在花括号中 */printf("hello, world\n");/* main 函数调用库函数printf 以显示字符序列,其中\n代表换行符 */}第二章习题答案一、选择题1~5:CBABB 6~10:CDCDD 11~15:CADBC 16~20:BDAAD二、填空题1、整型,实型,字符型,枚举类型2、13、94、123535145、2,16、2,27、10 20 08、a=149、2,3,110、double第三章习题答案一、选择题1~5:CBBBC 6~10:DDDBB二、填空题1、控制语句,表达式语句,复合语句2、;3、{}4、15、a6、c:dec=120,oct=170,hex=78,ASCII=x7、32767,327678、10,A,109、3 310、(1) 123.456001(2) □□□□□□□ 123.456(3) 123.4560(4) 8765.456700(5) □□□□□□ 8765.457(6) 8765.4567(7) 8765.4567三、编程题1、参考答案:#include <stdio.h>void main(){int a,b,c;long int u,n;float x,y,z;char c1,c2;a=3;b=4;c=5;x=1.2;y=2.4;z=-3.6;u=51274;n=128765;c1='a';c2='b';printf("\n");printf("a=%2d b=%2d c=%2d\n",a,b,c );printf("x=%8.6f,y=%8.6f,z=%9.6f\n",x, y,z);printf("x+y=%5.2f y+z=%5.2f z+x=%5. 2f\n",x+y,y+z,z+x);printf("u=%6ld n=%9ld\n",u,n); printf("c1='%c'or %d(ASCII)\n",c1,c1);printf("c2='%c'or %d(ASCII)\n",c2,c2);}2、参考答案:#include <stdio.h>void main(){float a, b, c, t;printf("please input a,b,c:\n"); scanf ("%f, %f, %f", &a, &b, &c);t=(a+b+c)/3;printf ("averageof %6.2f、%6.2f and %6.2f is %6.2f\n",a,b,c,t);}3、参考答案:#include <stdio.h>main(){int R, d;float s;printf("请输入圆的半径");scanf("%d",&R);d=2*R;c=2*3.14159*R;printf("d=%d,c=%f\n",d,c);}4、参考答案:#include <stdio.h>void main(){int h, f, x, y; /* x为鸡的数量,y为兔的数量 */printf("请输入鸡兔的总头数h,总脚数f:");scanf("%d%d", &h, &f);x=(4*h-f)/2;y=(f-2*h)/2;printf("笼中有鸡%d 只,有兔%d只。
《C语言程序设计教程》全册教案完整版教学设计第一章:C语言概述1.1 教学目标让学生了解C语言的历史和发展背景让学生掌握C语言的特点和优势让学生了解C语言的应用领域1.2 教学内容C语言的历史和发展背景C语言的特点和优势C语言的应用领域1.3 教学方法讲解法:讲解C语言的历史和发展背景,讲解C语言的特点和优势讨论法:引导学生讨论C语言的应用领域1.4 教学评价课后作业:让学生编写简单的C语言程序,了解C语言的基本语法第二章:C语言基础语法2.1 教学目标让学生掌握C语言的基本语法,包括数据类型、运算符、表达式等让学生了解C语言的控制语句,包括条件语句、循环语句等2.2 教学内容数据类型、变量和常量运算符和表达式控制语句:条件语句、循环语句2.3 教学方法讲解法:讲解数据类型、变量和常量的定义和使用,讲解运算符和表达式的使用,讲解条件语句和循环语句的语法和功能编程实践:让学生编写C语言程序,运用所学的控制语句2.4 教学评价课后作业:让学生编写C语言程序,运用所学的数据类型、运算符和控制语句第三章:函数与编译预处理3.1 教学目标让学生掌握C语言的函数概念和定义方法让学生了解C语言的编译预处理指令3.2 教学内容函数的定义和声明编译预处理指令:include、define、宏定义和宏调用3.3 教学方法讲解法:讲解函数的定义和声明的语法和功能,讲解编译预处理指令的使用方法编程实践:让学生编写C语言程序,运用所学的函数和编译预处理指令3.4 教学评价课后作业:让学生编写C语言程序,运用所学的函数和编译预处理指令第四章:数组和字符串4.1 教学目标让学生掌握C语言的数组和字符串的概念和使用方法4.2 教学内容一维数组的定义和使用字符串的定义和使用4.3 教学方法讲解法:讲解一维数组的定义和使用的语法和功能,讲解字符串的定义和使用的语法和功能编程实践:让学生编写C语言程序,运用所学的数组和字符串4.4 教学评价课后作业:让学生编写C语言程序,运用所学的数组和字符串第五章:指针5.1 教学目标让学生掌握C语言的指针的概念和使用方法5.2 教学内容指针的概念和声明指针的赋值和使用指针与数组指针与函数5.3 教学方法讲解法:讲解指针的概念和声明的语法和功能,讲解指针的赋值和使用的语法和功能,讲解指针与数组和指针与函数的关系编程实践:让学生编写C语言程序,运用所学的指针知识5.4 教学评价课后作业:让学生编写C语言程序,运用所学的指针知识第六章:结构体、联合体和枚举6.1 教学目标让学生掌握C语言中的结构体、联合体和枚举的概念和使用方法。
967c语言程序设计参考书介绍本文档是一本C语言程序设计参考书,旨在帮助读者系统学习和掌握C语言编程。
通过详细的示例和解释,逐步引导读者理解C语言的基本概念和编程技巧,并提供在实际项目中应用这些知识的实例。
本书适合初学者和有一定编程基础的读者使用。
目录1.[第一章:C语言入门](#第一章:C语言入门)2.[第二章:数据类型和运算符](#第二章:数据类型和运算符)3.[第三章:流程控制](#第三章:流程控制)4.[第四章:函数与模块化编程](#第四章:函数与模块化编程)5.[第五章:数组与指针](#第五章:数组与指针)6.[第六章:结构体和联合体](#第六章:结构体和联合体)7.[第七章:文件操作](#第七章:文件操作)8.[第八章:动态内存分配](#第八章:动态内存分配)9.[第九章:高级C语言特性](#第九章:高级C语言特性)第一章:C语言入门1.1C语言简介C语言是一种通用的高级编程语言,具有简洁、高效的特点,被广泛应用于系统软件开发、嵌入式系统、游戏开发等领域。
本节将介绍C语言的起源和特点。
1.2开发环境搭建在学习C语言编程之前,我们需要正确配置开发环境。
本节将介绍如何搭建C语言开发环境,包括安装编译器、编辑器等。
1.3第一个C程序让我们从一个简单的"He ll oW or ld!"程序开始。
本节将教你如何编写、编译和运行你的第一个C程序。
第二章:数据类型和运算符2.1基本数据类型C语言提供了多种基本的数据类型,包括整型、浮点型、字符型等。
本节将介绍各种数据类型的定义和使用方法。
2.2运算符C语言支持各种算术、逻辑和关系运算符,用于完成不同类型的运算。
本节将详细介绍这些运算符的使用方法和优先级。
2.3类型转换在C语言中,不同类型的数据可以相互转换。
本节将介绍隐式和显式类型转换的规则,以及类型转换可能导致的一些问题。
第三章:流程控制3.1条件语句条件语句用于基于给定条件选择性地执行代码块。
实验七:指针的应用【实验目的】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)在整型数组中,没有结束标志,必须依靠数组中数据元素的个数控制循环次数。
(2)在for(p1=a;p1<a+15;p1++)中不可将a来当做指针变量进行++,因为a为常量。
(3)数组是顺序存储,因此可以用p1++后的值与a+15的比较来控制循环次数,需要注意的是,p1++不意味着p1的值加1。
3.改错题:下面程序是用指针法将一个字符串a复制到字符串b中,void main(){char a[]="I am a boy.",b[20], *p1,*p2;int i;p1=a;p2=b;for( ; *p1!=’\0’;p1++,p2++)*p2=*p1;p2=’\0’;printf("string a is:%s\n",a);printf("string b is:");for(i=0;b[i]!=’\0’;i++)printf("%c",b[i]);}答案:1.将第一个for循环改为while循环;2.将第二个for循环改用一条语句完成;第八章结构体与共同体的应用【实验目的】1.掌握结构体类型变量的定义、初始化和使用;2.掌握结构体类型数组的概念和使用;3.了解共用体的概念与使用。
【实验内容】1.填空题(1)结构体变量案例。
编程输出两个小孩的记录信息。
1 个男孩和1 个女孩,其姓名首字母分别为“R”和“H”;男孩15岁,女孩比男孩小1岁子;男孩的成绩为75,女孩的成绩为82。
该案例涉及结构体变量的定义和结构体变量成员的引用。
# include <stdio.h>void main(){struct childrec /*定义结构体类型*/{char initial; /*姓名首字母*/int age; /*年龄*/int grade; /*成绩*/}boy,girl;boy.initial=’R’;girl. initial=’H’;12girl.age=boy.age-1;girl.grade=82;printf(“boy:%c is %d years old and got a grade of %d\n”, 3 );printf(“girl:%c is %d years old and got a grade of%d\n”, 4 );}答案:1、boy.age=15;2、boy.grade=75;3、boy.initial,boy.age,boy.grade4、girl.initial,girl.age,girl.grade运行结果:boy:R is 15 years old and got a grade of 75girl:H is 14 years old and got a grade of 82提示:(1)结构体变量的定义:struct 结构体名{成员变量定义}结构体变量列表;即在定义结构体的同时定义结构体变量。
(2)结构体成员变量的引用:结构体变量名.成员变量名(2)结构体数组案例。
设有三个候选人,Zhang,Wang和Li,设有10个人参加投票,每次输入一个得票的候选人的名字,要求最后输出各候选人的得票结果,请设计程序对候选人的得票数进行统计。
该案例涉及结构体变量的定义、初始化和结构体变量成员的引用。
# include <stdio.h># include <string.h>struct person /*候选人信息结构体,这是一个全局的结构体数组*/{char name[20]; /*姓名*/int count; /*得票数*/}stu[3]={“Zhang”,0,”Wang”,0,”Li”,0};void main(){int i,j;char leader_name[20];for(i=1;i<=5;i++) /*设有5个人参加投票*/{scanf(“%s”, leader_name); /*输入得票人姓名*/for(j=0;j<3;j++)if(strcmp(leader_name,stu[j].name)==0)1 ;}printf(“\n”);for(i=0; 2 ; 3 )p rintf(“%5s: %d\n”, stu[i].name , 4 );}答案:1、stu[j].count++2、i<33、i++输入:ZhangWangLiZhangWang运行结果:Zhang:2Wang:2Li:1提示:(1)结构体变量还可以是数组。
如stu[3],表示创建了3个结构体变量stu[0]、stu[1]、stu[2](2)结构体变量可以在定义的同时赋初值,即初始化。
如:stu[3]={“Zhang”,0,”Wang”,0,”Li”,0};大括号内分别为stu[0]的成员变量值、stu[1]的成员变量值、stu[2]的成员变量值,与二维数组的初始化类似。
(3)结构体指针案例。
有一个结构体变量stu,内含学生学号、姓名和三门课成绩。
要求在mian()中赋以值,在函数print中打印输出。
本题涉及结构体指针作为函数参数的使用。
#include <stdio.h>#include <string.h>#define FORMAT “%d\n %s\n %.1f\n %.1f\n %.1f\n”struct student{int num;char name[20];float score[3];};void print(struct student *p);void main(){struct student stu;stu.num=12345;strcpy(,”Li Min”);stu.score[0]=68;stu.score[1]=87;stu.score[2]=98.5f;print(&stu);}void print(struct student *p){printf(FORMAT,p->num, );printf(“\n”) ;}答案:p->name ,p->score[0], p->score[1], p->score[2]运行结果:12345Li Min68.087.098.5提示:(1)结构体变量的定义还可以通过如下形式定义:struct 结构体名结构体变量名;如:struct student stu;(2)结构体除了使用结构体变量引用以外,还可以使用结构体指针引用。
结构体指针定义:struct 结构体名*指针变量名如:struct student *p;结构体指针存放结构体在内存的初始地址。
(3)使用结构体指针引用结构体成员变量:结构体指针变量名—>成员变量名如:p->name2.读程题共用体案例。
现需要输入学生成绩,学生分为小学生和初中生,小学生成绩为整型,初中生成绩为浮点型。
其他信息一致,使用共用体来处理(将小学生与初中生的成绩放在同一段内存中)。
本题涉及共用体的应用。
#include <stdio.h>#include <string.h>struct student{char cate[15];char name[15];union{int grade_xiao;float grade_chu;}grade;}stu[2];void main(){int i;char *p,*q;for(i=0;i<2;i++){scanf("%s %s",stu[i].cate,stu[i].name);if(strcmp(stu[i].cate,"xiaoxue")==0)scanf("%d",&stu[i].grade.grade_xiao);if(strcmp(stu[i].cate,"chuzhong")==0)scanf("%f",&stu[i].grade.grade_chu);}for(i=0;i<2;i++){if(strcmp(stu[i].cate,"xiaoxue")==0)printf("%s,%s,%d\n",stu[i].cate,stu[i].name,stu[i].grade.grade_xiao);elseprintf("%s,%s,%.1f\n",stu[i].cate,stu[i].name,stu[i].grade.grade_chu);}}输入:xiaoxuezhangli85chuzhongwangming84.5运行结果:xiaoxue,zhangli,85chuzhong,wangming,84.5提示:(1)共用体变量多占的内存长度等于最长的成员变量的长度。