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

合集下载

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语言程序设计(第三版)谭浩强著 各章习题答疑

以八、 /* 以八、十六进制输出 */
} ???? 是对应的带符号短整数。 输出结果是八进制整数 十六进制整数
2
3.9 计算某个表达式的值。 通用程序清单如下: stdio.h” #include ”stdio.h stdio.h void main() { ?????? x; 计算表达式值存入x x=( 表达式 );/* 计算表达式值存入x */ printf(”% printf( %?\n”,x); ,x); } ?????? 表达式对应的数据类型符(需事先判断) ? 表达式为整型,则为d 表达式为实型,则为f 3
第七章习题答疑(二)
折半查找法在排序数组中查找某个数。 上课时已有提示。 7.13 字符串连接(b[]中字符串连接到a[]中字符串后) 设:a[10]=”12 ,b[]=”abc 12”, abc” 12 abc (1)找到a串的’\0’的下标(i=2) ’ (2)j=0; 当型循环(b[j]!=’\0’) ’\ ’ a[i]=b[j],i++,j++ (3)a[i]=’\0’ \ 7.15 字符串复制(b[]中字符串复制到a[]中) 设:a[10]=”12”,b[]=”abc” (1)i=0; 当型循环(b[i]!=’\0’) a[i]=b[i],i++ (2)a[i]=’\0’ 7.9
18
第十章习题答疑(一)
输入3个整数,按照由小到大顺序输出。 int x,y,z,*px=&x,*py=&y,*pz=&x; 用以前的程序,其中的x、y、z换成*px、*py、*pz 10.3 输入10个整数存入一维数组a[10],将其中最小数与第1 个数交换,最大数与最后一个数交换。 要求编3个函数: 10 10 输入10个整数、交换、输出交换后的10个整数。 输入函数: void in(int *p,int n) 输出函数: void out(int *p,int n) 交换函数: void change(int *p,int n) 其中寻找最大最小数的方法: int *q,*max,*min; for (max=min=p,q=p+1;q<p+n;q++) { if(*max<*q) max=q; if(*min>*q) min=q; } 19 交换的方法:*p和*min,*(p+n-1)和*max 10.1

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语言第7章_文件及应用

C语言第7章_文件及应用

精选ppt课件
16
7.2.2 用于文件操作的函数
2.文件的读写函数
1)字符读写函数:
int fputc ( int ch, FILE *fp); int fgetc(FILE *fp);
2)串读写函数
int fputs(const char *str, FILE *fp); char *fgets(char *str,int length,FILE *fp);
cchh=agretachd(d);r[20];
} sitf;(ch=='e' || ch=='E' ) break;
}i;f ((fp=fopen("mail","w"))==NULL)
f{close(fp);}
printf("file open failed!!!\n");exit(精0)选; ppt课件
21
}
7.2.2 用于文件操作的函数 /* 功 能: 建立一个学生通讯录的数据库文件*/
/* 说 明: 使用块写入函数fwrite()*/
#m{ inawcinlhu(i)dlee(1【录")std。例io.7h."15】如例7.11,用块写函数来建立学生通讯
FIL{E p*rfipn;tf("姓名:"); scanf("%s",);
返回值为指向此文件的指针,以后使用。 如果打开失败,返回值为NULL。
精选ppt课件
15
7.2.2 用于文件操作的函数
1.文件的打开与关闭函数
2)关闭文件 函数fclose()关闭由fopen()函数打开的流。 fclose()函数把遗留在缓冲区的数据写入文 件,实施操作系统级的关闭操作。同时释 放与流联系的文件控制块。

C语言(第七章)—清华大学出版社

C语言(第七章)—清华大学出版社
实参向形参的数据传递是“值传递” ,即实参与形 参是不同的单元。函数调用时,为形参分配单元,并将 实参的值复制到形参中;调用结束,形参单元被释放, 实参单元仍保留并维持原值。值传递为单向传递。
实参表求值顺序,因系统而定。
例 求一个整数的立方
14
int cube (int x) /* 函数定义 */ { return (x * x * x); }
9
{ if{v{nootrii说(,difj;o=明函r1语(数;j i=句名<1=(;类nj ;<型i=+1+n)-参i; j数++1) ,类//**型需输2要出参输每数出行2的左,…行边)数的/空**首/ 格部*/*/ 执行p语rin句tf(" ");
reftourr(nj =; 1/;*可j <以= i省; j+略+)retur/*n输语出句每*/行的数字 */
7.1 概述
4
源程序文件1
C程序 函数是指完成一 个特定工作的独 立…程序…模块。源程序文件n
函数1 … 函数n
函数1 … 函数m
使用 ① 程序结构清晰,可读性好。
函数 ② 减少重复编码的工作量。
的 好处
③ 可多人共同编制一个大程序,缩短程序
设计周期,提高程序设计和调试的效率。
5
说明
⑴ 一个C源程序可以由一个或多个源程序文件组成。 C编译系统在对C源程序进行编译时是以文件(.cpp)为 单位进行的。
}
printf(" %d ", i); /* 每个数字的前后各有一个空格 */
putchar ('\n');
表} 示不返回结果 } 不能省略,否则,函数类型被默认定义为int

c语言程序设计电子书

c语言程序设计电子书

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语言程序设计第7章(谭浩强)PPT版本

c语言程序设计第7章(谭浩强)PPT版本

如 int a[5]; static int a[5]={6,2,3}; int a[]={1,2,3,4,5,6}; 等价于: a[0]=6; a[1]=2;a[2]=3; a[3]=0; a[4]=0; 等价于:a[0]=0; a[1]=0; a[2]=0; a[3]=0; a[4]=0; 如 编译系统根据初值个数确定数组维数 int a[3]={6,2,3,5,1}; ()

38 49 49 38 65 76 97 13 97 76 97 27 13 30 97 27 97 30 初 始 关 键 字 n=8
38 49 65 13 76 27 76 13 30 76 27 76 30 97 第 一 趟
38 49 13 65 27 65 13 30 65 27 65 30
程序举例
#include <stdio.h> #define SIZE 10 例 读10个整数存入数组,找出其中最大值和最小值 main() { int x[SIZE],i,max,min; printf("Enter 10 integers:\n"); for(i=0;i<SIZE;i++) 步骤: { printf("%d:",i+1); 1. 输入:for循环输入10个整数 scanf("%d",&x[i]); 2. 处理: } (a) 先令max=min=x[0] max=min=x[0]; (b) 依次用x[i]和max,min比较(循环) for(i=1;i<SIZE;i++) 若max<x[i],令max=x[i]{ if(max<x[i]) max=x[i]; 若min>x[i],令min=x[i] if(min>x[i]) min=x[i]; 3. 输出:max和min } printf("Maximum value is %d\n",max); printf("Minimum value is %d\n",min); }

C语言(第七章数组)

C语言(第七章数组)

对部分元素赋初值(前面的连续元素)。如: int b[10]={0,1,2,3,4};
表示数组元素的值为:
b[0]=0; b[1]=1; b[2]=2; b[3]=3; b[4]=4; 后5个元素的初值为0。
注意:不能只对不连续部分元素或后面的连续
元素赋初值。 语句: int a[10]={, , , , ,1,2,3,4,5};
main ( ) { int a[2] [3]={{1, 2,3},{4, 5,6}}; int b[3] [2], i, j; printf("array a: \n"); for (i=0; i<=1; i++) { for (j=0; j<=2; j++) { printf("%5d", a[i][j]); b[j][i]=a[i][j]; } printf("\n"); } printf("array b:\n"); for (i=0; i<=2; i++) { for (j=0; j<=1; j++) printf("%5d", b[i]j]); printf("\n"); } }
运行结果如下:
1
1
2
3
5
8
89
13
144
21
133
34
377
55
610
987
1597
1584
4181
6765
四、简单预处理指令
1. 指令格式:
#define 符号常量
2. 指令作用
文本串
用整型表达式替换程序中所有的符号常量。

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的字符串,把这三个字符串按照字典顺序连接,然后输出。

C语言程序设计_课件_第七章(适于清华谭浩强版)

C语言程序设计_课件_第七章(适于清华谭浩强版)

注意:
(1) return(表达式); 和return 表达式;都 是正确的。 (2) 带返回值的函数只能返回一个值。 (3) 在函数定义时,允许使用多个return语句, 但是应尽量在末尾使用一个return语句。 (4) return语句中的表达式与函数的返回值类 型不匹配时,以函数定义时的返回类型为准。

问题的提出 函数基础 函数的定义 函数说明 函数调用 参数传递 程序举例 递归调用 变量的存储类别
7.1 问题的提出
例6.20它可以解决的问题有: ①输入若干个学生的姓名、某课程的期中 和期末成绩,并计算每个学生的总评成绩; ②计算总评成绩的分数段情况; ③输出所有学生的姓名、期中、期末和总 评成绩; ④查询某个学生的总评成绩。
函数调用时需要传递数据。调用函数要将 实参的值传送给被调用函数的形参。 若函数定义首部是 double power(double x,int n) /*函数定义 */ 调 用 形 式 是 可 以 是 power(y,m) , 也 可 以 是 power(3.0,5)。 其中,x和n是形式参数,y和m是实际参数,3.0 和可以是一个变量 名,因为变量名也构成一个表达式,形式参数只 能是变量名。当实际参数是变量名时,它与形参 的名称既可以相同,也可以不同,只是要注意, 在函数定义内部应该使用形参的名称。 (2) 实际参数与形式参数的参数个数、数据类型 和顺序都应该一致,如果数据类型不一致,系统 将按照自动转换规则进行转换。
7.3 函数的定义
7.3.1 函数的定义形式 在C语言中函数定义的形式有两种。
第一种:
函数返回值的数据类型说明 函数名称(带有类型说明的参数表)
{
函数内部数据说明; 语句;
}
第二种:

C语言各章节知识点总结

C语言各章节知识点总结

C语言各章节知识点总结C语言是一种通用的高级编程语言,广泛应用于计算机软件开发。

下面是C语言各章节的知识点总结:第一章:C语言简介-C语言起源和发展-C语言的特点和优势-C语言的应用领域-C语言的编译和执行过程-编写第一个C语言程序第二章:C语言基础-C语言的基本数据类型-变量和常量-运算符和表达式- 控制语句(if语句、switch语句、for循环、while循环)-输入和输出-函数的定义和调用第三章:C语言数组-数组的定义和初始化-一维数组和多维数组-数组的应用(排序、查找、统计)- 字符串处理函数(strlen、strcpy、strcat)-字符串的输入和输出第四章:C语言指针-指针的概念和作用-指针变量和指针的运算-指针和数组的关系-指针作为函数参数-动态内存分配第五章:C语言函数高级特性-递归函数-函数指针和回调函数-变量的作用域和存储类别-预处理指令-多文件程序设计第六章:C语言结构体和共用体-结构体的定义和初始化-结构体的嵌套和数组-共用体的定义和应用-枚举类型的定义和使用- typedef的使用第七章:C语言文件处理-文件的概念和分类-文件的打开和关闭-文件的读取和写入-文件的定位和修改-错误处理和异常处理第八章:C语言位运算和位字段-位运算的概念和操作-位掩码和位移操作-位字段的定义和使用-位字段的对齐和优化-位操作的应用第九章:C语言高级编程技术-内存管理和动态内存分配-系统调用和库函数的使用-异常处理和错误处理-多线程编程和进程间通信-嵌入式系统开发技术总结:C语言是一门基础且强大的编程语言,掌握C语言的各章节知识点对于学习和使用C语言是非常重要的。

掌握C语言基础知识可以编写简单的程序,掌握指针和数组等知识可以处理更加复杂的数据结构和算法,掌握高级特性可以编写更加高效和模块化的程序。

通过学习C语言,可以为后续学习其他编程语言打下坚实的基础。

C实验报告(第七章)解答

C实验报告(第七章)解答

《高级语言程序设计》实验报告班级: 学号: 姓名: 成绩:实验日期: 年月日实验题目: 实验七指针程序设计实验目的:实验内容: (包括算法说明: 用文字或流程图说明;程序清单;运行结果: 原始数据、相应的运行结果和必要的说明。

)序(程序以文件名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中。

C语言课后习题答案

C语言课后习题答案

第一章习题答案一、选择题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语言第七章

4、strcpy(字符数组1,字符数组2):
例:main()
把“字符串2”的值拷贝到“字符串1”中。
{char str1[10]; char str2[ ]="Chinese"; strcpy(str1,str2); puts(str1); } 输出: Chinese 说明: (1)字符数组1的长度不应小于字符串2的长度。 (2)“字符数组1”必须写成数组名形式,“串2”可以是字符数 组名,也可以是一个字符串常量。如:strcpy(str1,“China”); (3)拷贝是‘\0‟一起拷贝。 (4)不能用赋值语句将一个字符常量或字符数组直接赋给一个 字符数组。 (5)可以用strcpy函数将字符串2中前面若干个字符拷贝到字符 数组1中去。 例如:strcpy(str1,str2,2);
3、部分元素赋值: int a[3][4] = {{1},{5},{9}}; 1 0 0 0 5 0 0 0 9 0 0 0
仅对a[0][0]、a[1][0]、a[2][0]赋值,编译器自动为未赋
值元素指定初值0。
4、如果对全部元素赋初值,则第一维的长度可以 不指定,但必须指定第二维的长度。 int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 与下面定义等价: int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12};
[例6.6]: main() { int i; char c1[ ] = {"How are you?"}; char c2[15]; scanf("%s", c2 ); for(i=0;i<12;i++) printf("%c", c2[i] ); printf("%s", c1 ); } 程序运行时:输入:abcdefghijklmno 结果:abcdefghijklHow are you?

C实验报告(第七章)解答-推荐下载

C实验报告(第七章)解答-推荐下载

/* num 是指向 int 类型的指针型数组,p 是指向 int 型的变量
int *f(int *x[],int); /* 返回指针值的 f 函数的声明 */
for (i=0;i<5;i++)
num[i]= &a[i] ; /* num 的每个分量指向 a 的每个相应元素 */
p=f(num,2); /* 返回 num[2]分量所指的数组 a 中的元素的地址 */
*p=*p1; //*p=*p1 改为 p=*p1
*p1=*p2;
*p2= *p; //*p2=*p 改为 *p2=*p
void main()
{
}
int a,b;
scanf("%d%d",&a,&b);
printf("a=%d\tb=%d\n",a,b);
swap(&a,&b);
printf("a=%d\tb=%d\n",a,b);
姓名:
实验日期:
成绩:


(2)下列程序的功能为:通过调用函数实现对所输入的任意两个整数,交换它们的值;
请纠正程序中存在错误,使程序实现其功能,程序以文件名 sy7_2.c 存盘。
#include<stdio.h>
swap(int *p1,int *p2)
{
}
int *p; //int *p 改为 int p
实验内容:(包括算法说明:用文字或流程图说明;程序清单;运行结果:原始数据、
相应的运行结果和必要的说明。)
1.原改始错数题据、相应的运行结果和必要的说明。 (1)下列程序的功能为:统计将已知字符串中数字符的个数;请纠正程序中存在错误,

C语言程序设计第七章 利用数组处理数据

C语言程序设计第七章 利用数组处理数据
整理课件
一维数组的存储: 计算机中用连续的内存单元存放各个元素。 如:int a[5];其内存存储为:
保存数组所需内存量与数组元素的基本类型和数组大小有关。 总字节数=sizeof(基本类型)*数组元素个数 如上例:= sizeof(int)*5 第i个元素的地址=第1个元素的地址+i*sizeof(基本类型)
类型说明符 数组名[常量表达式]={值,值……值}; 其中在{ }中的各数据值即为各元素的初值,各值之间用逗号 间隔。 例如:
int a[10]={ 0,1,2,3,4,5,6,7,8,9 }; 相当于a[0]=0;a[1]=1...a[9]=9;
整理课件
C语言对数组的初始化赋值还有以下几点规定:
有 5个元素。但是其下标从0开始计算。因此5个元素分别为
a[0],a[1],a[2],a[3],a[4]。
不能在方括号中用变量来表示元素的个数, 但是可以是符
号常数或常量表达式。
例如:
#define FD 5
main( )
{ int a[3+2],b[7+FD];
……
}是合法的。
但是下述说明方式是错误的。
for (i=0; i<=9;i++) a[i]=i;
for(i=9;i>=0; i--) printf("%d ",a[i]);
printf("\n"); return 0; }
使a[0]~a[9]的值为0~9 先输出a[9],最后输出a[0]
整理课件
一维数组的初始化
数组初始化赋值是指在数组定义时给数组元素赋予初值。 初始化赋值的一般形式为:
for(i=0;i<1;i++) if (a[i]>a[i+1]) { ……}

C语言程序设计教程 第七章 课后习题参考答案

C语言程序设计教程 第七章 课后习题参考答案
}
}
}
void print(int a[][N],int m,int n)
{
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
}
void sum(int a[][N],int b[][N],int m,int n)
print(a,size);
reverse(a,size);
printf("\n");
return 0;
}
void print(int a[],int n)
{
int i;
printf("原:\n");
for(i=0;i<n;i++)
{
printf("%-4d",a[i]);
}
printf("\n");
for(i=0;i<n;i++)
input(b,M,N);
print(b,M,N);
printf("A+B=\n");
sum(a,b,M,N);
return 0;
}
void input(int a[][N],int m,int n)
{
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);

C语言工程实训教程第9章

C语言工程实训教程第9章

• 参数hConsoleOutput表示控制台屏幕缓冲区的句柄;参 数wAttributes表示文本及背景的颜色,其取值可以是下 面的常量值: • FOREGROUND_BLUE 蓝色文本色 • FOREGROUND_GREEN 绿色文本色 • FOREGROUND_RED 红色文本色 • FOREGROUND_INTENSITY 高亮度文本色 • BACKGROUND_BLUE 蓝色背景色 • BACKGROUND_GREEN 绿色背景色. • BACKGROUND_RED 红色背景色 • BACKGROUND_INTENSITY 高亮度背景色
• 参数说明: • lpThreadAttributes:指向SECURITY_ATTRIBUTES 型态的结构的指针。在Windows NT中,它被设 为NULL,表示使用缺省值; • dwStackSize:线程堆栈大小,一般设为0,在 任何情况下,Windows根据需要动态延长堆栈 的大小; • lpStartAddress:指向线程函数的指针,形式: @函数名,函数名称没有限制,但是必须以下 列形式声明:DWORD WINAPI ThreadProc (LPVOID pParam) ,格式不正确将无法成功调用;
2. WaitForSingleObjec()函数
• WaitForSingleObject函数就可以用来等待一个内核对 象变为已通知状态。该函数原型为: • • DWORD WaitForSingleObject • ( • HANDLE hHandle, • DWORD dwMilliseconds • ); • • 参数hHandle用来指明一个内核对象的句柄;参数 dwMilliseconds指定等待时间间隔,单位为毫秒。
• 例如:下面的代码等待一个handle对象,然 后根据实际执行的结果,判断函数的执行 情况。如handle对象所代表的线程在5秒内 结束,则函数返回WAIT_OBJECT_0值;如果 等待的时间超过5秒,则函数返回 WAIT_TIMEOUT值;如果handle对象无效, 则函数返回WAIT_FAILED,表示函数执行失 败。

高树芳C语言程序设计--第七章

高树芳C语言程序设计--第七章
[解决方案] 一行需要两个函数。一个函数显 示星号左面的空格,一个函数显示星号。
程序代码
11
7.2函数的定义、声明和调用
相关知识:
1.有参、无返回值函数的定义 2.有参、无返回值函数的调用 3.有参、无返回值函数的声明
12
7.2函数的定义、声明和调用
案例7-4 求组合数
[案例任务]
键盘输入m和n两个整数, 计算并显示下面的组合数, C 要求运用函数编程。
n m m! n! (m-n)!
[解决方案] 定义一个求阶乘的函数。它有一个 形参,而且有返回值。
程序代码
13
7.2函数的定义、声明和调用
[课堂训练7-2]
修改案例7-3的主函数,使之显示一个与案例7-3 形状相似的倒三角“*”号图案(要求显示4行)。
14
7.2函数的定义、声明和调用
相关知识: 1.有参、有返回值函数的定义 2.有参、有返回值函数的调用 3.无参、有返回值函数的调用
15
7.2函数的定义、声明和调用
案例7-5
显示100~200间的素数
[案例任务]
参照案例5-9判断素数程序,将其改造成一个函数如 prime,其功能是对给定的整数x,判断它是否是素数,如 是则返回1,不是则返回0。然后利用下面给出的主函数 调用函数prime ,显示100至200之间的全部素数。
[解决方案] 设计一个函数用于判断一个整数是
案例7-2 用函数实现简易菜单 [案例任务]
对案例5-3进行简化和改造。要求循环显示菜单并等 待用户选择,然后显示用户选择了第几项功能,如选 择0则结束程序。要求用函数实现菜单的显示内容。
[解决方案]定义无形参、无返回值的函数显示菜单。
程序代码
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验七:指针的应用【实验目的】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)共用体变量多占的内存长度等于最长的成员变量的长度。

相关文档
最新文档