7C语言.
C语言程序设计实验实验报告7

C语言程序设计实验实验报告7实验名称:链表实现学生信息管理系统实验目的:通过设计链表实现学生信息管理系统,掌握链表的操作方法及其应用。
实验内容:设计一个学生信息结构体,包括学号、姓名、性别、年龄和成绩五个成员变量,并选择链式结构存储这些数据。
实现以下功能:1. 添加学生信息:从键盘输入学号、姓名、性别、年龄和成绩等信息,添加到链表中。
2. 删除学生信息:从链表中删除指定学号的学生信息。
5. 按成绩排序:按学生的成绩从高到低排序,并输出所有学生的信息。
7. 退出程序:退出学生信息管理系统。
实验方法:1. 设计学生信息结构体,定义链表节点结构体,并编写初始化链表和销毁链表的函数。
2. 编写添加学生信息函数,新建链表节点并插入链表末尾。
3. 编写删除学生信息函数,根据学号查找需要删除的节点,先将该节点从链表中删除,再释放节点空间。
4. 编写修改学生信息函数,根据学号查找需要修改的节点,并修改其成员变量。
6. 编写按成绩排序函数,使用冒泡排序法对链表进行排序,并输出所有学生的信息。
7. 编写输出所有学生信息函数,遍历链表并输出每个节点的信息。
8. 完成学生信息管理系统的主函数,实现菜单及相应功能的选择。
实验结果:依次选择菜单中的各个功能,添加、修改、删除、查找、排序和输出学生信息都能实现。
经测试,程序稳定运行,功能正常,符合需求。
本次实验主要让我们掌握了链式结构的概念、链表节点的定义、链表的初始化、插入、查找、删除和销毁链表的操作方法,以及在实际应用中如何使用链表来实现数据管理。
虽然链表操作相对于数组稍微有些繁琐,但其可以灵活处理数据结构的长度变化,具有更高的可扩展性和更好的操作效率,可以更好的适应各种实际需求。
在实验中,还需要注意节点指针的正确使用、各个函数之间的调用关系和输入输出数据格式的合理选择等问题,以保证程序能够正常运行。
同时,还需要保持认真细致的态度,严格按照实验需求和要求来完成每个步骤,以达到更好的实验效果和运行效率。
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语言 第七章

7.4、对被调用函数的声明和函数原型
⒈ 对被调用函数说明的前提条件
必须是已存在的函数,如用户自定义函数或库函数。 2.被调用函数是用户自定义函数的函数说明 主调函数和被调用函数在同一文件中, 在主调函数中说明被调函数类型。
在C语言中,以上的函数说明称为函数原型。 main() 对被调用函数的说明 { float add(float x,float y); float a, b, c; scanf(“ %f, %f”, &a, &b); 作为表达式被调用 c=add(a,b) ; printf(“ sum is %f ”, c ); } /*定义add函数*/ float add (float x,float y) { float z; z=x+y; return (z); }
7.3 调用函数
• 调用函数就是使用函数。 • 调用函数之前,必须首先声明函数。 • 声明函数就是声明:函数名、函数返回 值的类型和参数的类型。 • 例:
int Power(int, int);
一、函数调用的一般形式 有参数函数
函数名(实际参数表)
无参数函数
函数名()
二、函数调用的具体方式
1.函数调用作为一个语句 函数名(实际参数表);
main( ) { int max( int x, int y) ; int a,b,c; scanf (“%d,%d,&a,&b); c=max(a,b); printf(“Max is %d”,c);} int max( int x, int y) { int z; z=x>y? x:y; return(z);} void print_star()
四、 形式参数和实际参数
C语言第7章_指针

退出
指针运算
算术运算 int *p, a[10]; p = a; p++; /*p的值增加多少?*/ 的值增加多少? 的值增加多少 指针的加减运算是以其指向的 指针的加减运算是以其指向的 类型的字节长度为单位的 类型的字节长度为单位的
6000 6001 6002 6003 6004 6005 6006
swap函数的几种错误形式(3/3) 函数的几种错误形式 3/3)
指针p没有确切地址 指针 没有确切地址 void Swap(int *p1, int *p2) { int *p; /*指针 未初始化*/ /*指针p未初始化*/ 指针p未初始化 *p = *p1; *p1 = *p2; *p2 = *p; }
退出
寻址方式
如何读写内存中的数据? 如何读写内存中的数据? 两种寻址方式 直接(寻址)访问 直接(寻址)
通过变量地址直接存取变量内容
0 ┇ 3 6 9 ┇ 3010 2000 变量 i_pointer 变量 i 变量 j 变量 k 内存用户数据区
通过变量的地址访问变量所在的 2000 存储单元
2002 2004
退出
指针运算
赋值运算 指针在使用前一定要赋值 为指针变量赋的值必须是一个地址 main() { int *p; scanf("%d",p); … }
错! 但TC下不报错 下不报错 VC下报错 下报错
main() { int a,*p=&a; scanf("%d",p); … }
退出
指针与函数
指针既然是数据类型,自然可以做函数参数和返回值 指针既然是数据类型, 的类型 指针做函数参数的经典例子: 指针做函数参数的经典例子:
C语言程序设计基础 第7章

模块化程序设计的基本要点是贯彻“自顶向下,逐步细 化”的思想方法,即将一个复杂功能的编程问题,划分成若 干个功能相对简单的子问题。这种划分可以逐层进行,直到 便于编程为止。在C语言中,一个模块的功能由一个函数来 实现。顶层函数是主函数main( )。功能模块与C语言函数的 关系如图7.1所示。
图7.1 模块与函数
第7章 函数——模块化程序设计方法的实现
7.1 模块化程序设计方法与函数 7.2 函数的定义 7.3 函数的调用 7.4 函数调用的条件与函数声明 7.5 函数的嵌套调用和递归调用 7.6 变量的作用域与函数间的数据传递 7.7 用函数实现模块化程序设计 实训任务十三 熟悉函数的功能及其使用方法 实训任务十四 学习模块化程序设计的方法
② 函数功能实现部分,是一个程序段,要依据实现某 种功能的算法进行设计。
③ 函数体最后使用一个“return(返回值);”语句,括 号中的返回值是一个需传带给主调函数的数据对象。如果没 有返回值,可以不要这个语句。VC++ 6.0系统中提倡在 main( )函数体后使用一个“return 0;”语句,表示正常返 回系统,否则会出现警告。如果函数体仅是一对花括号,没 有任何语句,就是空函数。空函数一般是无参函数。
7.2 函 数 的 定 义
怎样定义函数?定义函数要考虑哪些问题?
定义函数要解决两个方面的问题:一是函数间的接口问 题,二是功能实现问题。接口问题包括如何被上层函数调用 ,调用时需传递什么数据,调用返回时需传带什么数据。功 能实现问题就是如何实现模块的过程算法。
函数定义的一般形式为
基类型符 函数名(类型符形式参数 1,类型符形式参数 2,…) {
函数体内数据对象定义或声明部分; 函数功能实现部分; return(返 回值); }
第7章C语言图形编程基础

textattr(int attr);
参数attr使用了一个字节来描述文本的属性,各位的含义如图7.2所示。
7.2 文本模式下的图形处理
BLINK R
G
B
I
R
G
B
闪烁
背景色
加亮
图7.2 文本属性字节的含义
前景色
其中低4位(0~3)用来设置字符显示的颜色(前景色),对应于颜色值 0~15;第4~6位用于设置背景色;最高位用于设置显示出的字符是否闪 烁。
7.1 图形处理基础
2.EGA EGA(增强型图形适配器)除支持CGA的4种显示模式外,还增加了
分辨率为640*200像素的16色显示方式,TC中称为EGALO(EGA低分辨率 显示方式)和640*350像素的EGA高分辨显示方式(EGAHI),也可显示 16色。 3.VGA VGA(视频图形阵列适配器)是目前流行的PC显示标准,它支持CGA、 EGA的所有显示方式,同时还有640*480像素的高分辨率显示方式 (VGAHI)、640*350像素的中分辨率显示方式(VGAMED)和640*200 像素的低分辨率显示方式(VGALO),它们均有16种显示颜色可供选择。 4.MCGA MCGA的功能与CGA相似,它和CGA是部分兼容的,但有些功能又和VGA 类似,有640*480像素的两色模式。 5.IBM8514 IBM8514适配器具有较强的图形功能,最高分辨率可达1024*768像素,有
C语言-7数组sc

下标越界是大忌! ◦ 定义:int a[10]; 那么数组元素为a[0] ~a[9] ◦ 使用大于最大下标的下标,将访问数组以外的空间。那里的数 据是未知的,系统不做下标越界检查,但可能带来严重后果
注意 数组下标从0开始
sizeof可以用来获得数组大小
C语言程序设计——算法的描述
14
SCS-SWPU
C语言程序设计——算法的描述
输出方法: 输出下标为i的数组元素: printf("%d",a[i]); 输出整个数组元素: for(i=0;i<10;i++) printf("%d",a[i]);
17
SCS-SWPU
以下数组操作格式是否正确??
1、 int n; scanf(“%d″,&n); int a[n]; 2、#define n 5 int a[n]; 3、 float a[0]; 4、 int b(2); 5、int b[4]={0};
6.1 6.2 6.3
一维数组 二维数组 字符数组与字符串
C语言程序设计——第一章 C语言概述
2
SCS-SWPU
float s; • 存放一个学生的学习成绩 • 存放一个班100个学生的成绩呢?
搜索已有知识结构:
C语言程序设计——算法的描述
3
SCS-SWPU
函数:
控制结构: 顺序 基础:
数据类型
C语言程序设计——算法的描述
25
SCS-SWPU
程序流程图如下:
0
C语言程序设计——算法的描述
26
SCS-SWPU
#include <stdio.h> #define N 6 void main( ) { int a[N],temp,i,j; for(i=0;i<N;i++) scanf("%d",&a[i]); for(j=1;j<=N-1;j++) for(i=0;i<=N-j-1;i++) if(a[i]>a[i+1]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; } for(i=0;i<N;i++) printf("%4d",a[i]); printf("\n"); }
C语言_7函数

2 必须有某个结束递归条件:这个结束条件是递归 分解的终止点。
例 1. 用递归法求 n! n! =n*(n-1)! n! =1 当n>1时 时 当n=0或n=1时 或 时
例 2.用递归函数计算Febonacci序列的第n项值 函数原形是:f(n)=f(n-1)+f(n-2)
例 3.用递归函数计算xn的值
§4 函数的调用 一、 函数调用的一般形式 函数名(实参表列) 函数名(实参表列) 说明 : 调用无参函数,虽然不需要实参,但括号不能省。 调用无参函数,虽然不需要实参,但括号不能省。
调用函数的方式有三种: 调用函数的方式有三种: 函数语句、函数表达式、函数参数。 函数语句、函数表达式、函数参数。 如: ShowInfor(); m=max(a,b)*20; cout<<max(a,b);
实验题 1.找出1000之内的所有“完数”,判一个数是否 为完数用函数实现 。 2 .编写程序,从键盘上读入一个整数m,然后输出 这个数的全部素数因子,其中判断是否为素数用函 数实现。
§7.5 函数的嵌套调用
函数的嵌套调用
main 函数 ① 调用 a 函数 ⑨ ⑧ 结束 函数不能嵌套定义函数 ②
main
a d e f e
b g h i g
c j
C 程序结构
§2 函数定义
无参函数 形式: 函数名() 形式:函数类型 函数名() { 函数体 } 注意: 注意: 如果一个函数不需要返回值, 如果一个函数不需要返回值,认为函数类型是void类 型 例如: 定义一个ShowInfor函数,显示如下信息: 函数, 例如: 定义一个 函数 显示如下信息: ********* int a,b,c; cin>>a>>b; c=max( a ,b ); cout<<c<<‘\n’; }
C语言第7章 数组

第7章数组17.以下能正确定义二维数组的是____。
A、int a[][3];B、int a[][3]={2*3};C、int a[][3]={};D、int a[2][3]={{1},{2},{3,4}};答案:B难易程度:初级章节:7.3.2 二维数组的定义21.s1和s2已正确定义并分别指向两个字符串。
若要求:当s1 所指串大于 s2所指串时,执行语句S;则以下选项中正确的是____。
A、if(s1>s2)S;B、if(strcmp(s1,s2))S);C、if(strcmp(s2,s1)>0)S;D、if(strcmp(s1,s2)>0)S;答案:D难易程度:初级章节:7.4 字符数组60.有以下程序main( ){ char a[]="abcdefg",b[10]="abcdefg";printf("%d %d\n",sizeof(a),sizeof(b));}执行后输出结果是____。
A、7 7B、8 8C、8 10D、10 10答案:C难易程度:初级章节:7.4字符数组64.有以下定义#include <stdio.h>char a[10],*b=a;不能给a数组输入字符串的语句是____。
A、gets(a)B、gets(a[0])C、gets(&a[0]);D、gets(b);答案:B难易程度:初级章节:7.5 字符数组73.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是____。
A、char s[10]="abcdefg";B、char t[]="abcdefg",*s=t;C、char s[10];s="abcdefg";D、char s[10];strcpy(s,"abcdefg");答案:C难易程度:初级章节:7.5 字符数组101.以下不能正确定义二维数组的选项是____。
c语言的7种数据类型

c语言的7种数据类型
C语言的7种基本数据类型是:
1. 整型(int):用于表示整数值,包括正整数、负整数和零。
根据存储大小可以分为`short int`、`int`、`long int` 和`long long int`。
2. 浮点型(float):用于表示有小数部分的数值。
可以存储小数点左右的数值,精度有限。
3. 双精度浮点型(double):用于表示更高精度的浮点数值。
4. 字符型(char):用于表示单个字符的数据类型。
5. 短整型(short):用于表示整数值,存储大小比`int` 小。
6. 长整型(long):用于表示整数值,存储大小比`int` 大。
7. 无类型(void):用于表示没有返回值的函数或指针类型,不能用于定义变量。
除了这些基本数据类型,C语言还支持派生数据类型,如数组、指针、结构体和枚举等。
c语言 第7章 数组(4)

void sort( int b[],int k) {int i,j,t,flag; for (j=0;j<k-1;j++) {flag=0; for (i=0;i<k-j-1;i++) if (b[i]>b[i+1]) { t=b[i]; b[i]=b[i+1]; b[i+1]=t; flag=1; } if (flag==0) break; } }
上一页 下一页
for(i=0;i<26;i++) if(c[i]) {if(m%8==0)putchar('\n');m++; printf("%c: %-d ",i+'A',c[i]); } printf("\n"); for(i=0;i<26;i++) if(c[i+26]) {if(m%8==0)putchar('\n');m++; printf("%c: %-d ",i+'a',c[i+26]); } }
第四讲:
第 七 章 数组
7.1 7.2 7.3 7.4 7.5 7.6 一维数组 二维数组 数组的应用 字符数组与字符串 数组作为函数的参数 程序举例
7.5 数组作为函数的参数
数组作为函数参数主要有两种情况: 数组元素作为函数的实参:这种情况与普通变量 作实参一样,是将数组元素的值传给形参。形 参的变化不会影响实参数组元素,我们称这种 参数传递方式为“值传递”。 数组名作实参:要求函数形参是相同类型的数 组或指针,这种方式是把实参数组的起始地址 传给形参数组,形参数组的改变也是对实参数 组的改变,称这种参数传递方式为“地址传 递”。
c语言(7)

内容:
§6.5 循环嵌套
§6.6 break和continue语句
§6.7 循环结构程序举例
§6.5 循环的嵌套
一、 循环的嵌套
在一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。
二、循环嵌套结构的执行
外循环每执行一次,内循环执行一个周期。
k=sqrt(m);
for (i=2;i<=k;i++)
if (m%i==0) {flag=1;break;}
if (flag==0) /* 按flag的值判断m是否为素数 */
{if (n%5==0) printf("\n"); /*每行输出5个数据*/
printf("%8d",m); /*输出格式字符使用%8d是为了输出格式清晰*/
#include "math.h" /* 要使用数学函数,必须包含math.h头文件 */
main ()
{int s=1; /* 变量s用来存放每项的系数 */
float pi=0,n=1; /* 变量pi用来存放总和,n用来存放项数 */
while (1/(2*n-1)>=1e-6) /* 循环结束条件是当项值的绝对值小于0.000001 */
printf("\n");/* 内循环的第三个语句输出回车换行符 */
}
}
§6.6 break语句和continue语句
一、 break 语句
1. 格式: break;
2. 功能: 提前结束循环,从循环体中无条件跳出来,转到循环语句后面的语句执行。
计算机等级考试 C语言 第7章C语言 函数

/* 函数功能: 用迭代法计算n!
返回值函数类入型口参数:函整数型名变说量n明表示阶乘的形阶参数表,函
函数返回值: 函返数回的n!功的能值
数入口
*/
long Fact(int n) /* 函数定义 *函/ 数内部可以定义
{
只能自己使用的变
int i;
量,称内部变量
long result = 1;
for (i=2; i<=n; i++)
2/51
问题的提出
此前,我们所有的代码基本上都是放在main函 数中,这对于一个小的问题来说没问题,但如 果一个问题较大,里面涉及到成百上千个变量 ,将所有代码放在main函数里面显然是非常糟 糕的事情。
我们可以将一个大的问题分解成一个一个的小 问题,每个小问题放在一个函数里面,最后在 main函数里整合。这种思想实际上就是所谓的 “分而治之”。
printf("Input data error!\n"); } else {
for(i=2;i<=n;i++) {
result*=i;
2019/9/10
} return result; } }
25/51
防御性程序设计(Defensive Programming)
但是输入-1后,会输出 :
Input data error!
int i; long result=1; for(i=2;i<=n;i++) {
result*=i; } return result; }
int main() { int m; long ret;
printf("input m:"); scanf("%d",&m); ret=Fact(m); printf("%d!=%d\n",m,ret); return 0; }
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语言习题(7)

C语言习题(7)第7章函数一.填空题1.C语言中从函数的形式分可分为无参函数和。
2.在C语言中,一个自定义函数一般由两部分组成,它们是函数首部和。
3.从用户使用角度看,函数有两种:标准函数和。
4.若一个函数不需要形参,则在定义该函数时应使形参表为空或者放置一个标识符。
5.有函数调用fun1(x+y, (y,z), 10, fun((x,y-1))); 函数fun1有个参数。
6.已知函数定义:void dothat(int n, double x) { …… },其函数声明的两种写法为_________________________,_________________________。
7.C语言变量按其作用域分为和;按其生存期分为___________和。
8.C语言变量的存储类别有,,和。
9.凡在函数中未指定存储类别的局部变量,其默认的存储类别为。
10.在一个C程序中,若要定义一个只允许本源程序文件中所有函数使用的全局变量,则该变量需要定义的存储类别为。
11.C语言中,形式参数的缺省存储类型是。
12.C语言中,若为指定函数是内部函数或外部函数,则默认该函数是。
二.选择题1.以下正确的说法是___________。
A)用户若需要调用标准库函数,调用前必须重新定义B)用户可以重新定义标准库函数,如若此,该函数将失去原有定义C)系统不允许用户重新定义标准库函数D)用户若需要使用标准库函数,调用前不必使用预处理命令将该函数所在的头文件包含编译,系统会自动调用。
2.以下正确的函数定义是___________。
A)double fun(int x, int y); B)int fun(int x,y){ z=x+y ; return z ; } { int z ; return 3;}C)double fun (x,y) D)double fun (int x, int y){ int x, y ; double z ; { double z ; z=x+y;z=x+y ; return z ; } return z ; }3.C语言中,简单变量做实参和形参时,以下正确的说法是___________。
C语言第7章 函数

函数的 参数?
int main() {
int a=12, b=24; … printf("%d\n", Average(a, b)); … return 0; }
int Average(int x, int y) {
int result;
result = (x + y) / 2;
return result; }
C语言程序设计
22/114
7.3.1 函数调用
每次执行函数调用时
现场保护并为函数的内部变量(包括形参)分配内存 把实参值复制给形参,单向传值(实参形参) 实参与形参数目一致,类型匹配(否则类型自动转换)
int main()
{
①
int a=12, b=24,ave;
…
ave = Average(a, b);
21
1*2
3 (1*2)
(1*2)*3
}
4 (1*2*3)
(1*2*3)*4
return result;
……
…
}
n (1*2*3*4*…)
(1*2*3*4*…)*n
C语言程序设计
监视窗(Watches)
26/114
7.3.2函数原型
第7章 函数
函数原型(Function Prototype)
调用函数前先声明返回值类型、函数名和形参类型
Function Call?
int main() {
int a=12, b=24, ave; … ave = Average(a, b); … return 0; }
int Average(int x, int y) {
int result;
c语言试题7

第七章结构型、共同型和枚举型一、单项选择题1.对以下结构定义:struct { int len; char *str ; } *p; 表达式(*p)->str++中的++加在(D)A. 指针str上B. 指针p上C. str所指的内容上D. 表达式语法有错2.存放100个学生的数据,包括学号,姓名,成绩。
在如下的定义中,不正确的是(B)。
A.struct student { int sno; char name[20]; float score } stu[100];B.struct student stu[100] { int sno; char name[20]; float score } ;C.struct { int sno; char name[20]; float score } stu[100];D.struct student { int sno; char name[20]; float score } ; struct student stu[100];3.设有定义语句struct { int x ; int y ;} d[2]={{1,3}, {2,7}};则printf (“%d\n”, d[0].y/d[0].x*d[1].x ); 的输出是(D)。
A.0 B.1 C.3 D.64.设有定义语句enum team {my, your = 4, his, her=his+10} ;则printf(“%d,%d,%d,%d\n”, my, your, his, her) ;的输出是(D)。
A.0,1,2,3 B.0,4,0,10 C.0,4,5,15 D.1,4,5,15 5.以下对枚举类型名的定义中正确的是(B)。
A.enum a={one, two, three}; B.enum a {a1, a2, a3} ;C.enum a={‘1’, ’2’, ’3’} ; D.enum a {“one”, ”two”, ”three”} ;6.若有如下定义,则printf (“%d\n”, sizeof (them)) ; 的输出是(C)。
C语言7数组课件教程

a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]
13
C 程序设计
第7章 数组
§遍历所有二维数组元素a[n][m] for(i=0;i<n;i++) for(j=0; j<m; j++) {
printf(“%d”,a[i][j]); }
14
C 程序设计
6
a[0]1例[0] ai[n0t]0a[[12]][a3[0]=0][{2{]1a,2[1}4],{[04]}}a;[15][1] a[10][2]
a[0111][0] a[0222][1] a[3034][2] a[4140][0] a[5150][1] a[6100][2]
aaa[[[000]]][[[1000]]] aaa[[[000]]][[2[111]]] aaa[[[000]]][0[[222]]] aaa[[[111]]][4[[000]]] aaa[[[111]]][0[[111]]] aaa[[[111]]]0[[[222]]]
1
3
5
7
a[1] a[210]0[08] a2[10]1[01] a2[10]1[22] a2[10]1[43] 9 11 13 15
a[2] a[2210]71[06] a2[210]91[81] a2[220]12[02] a2[220]32[23]
每个元素a[i]由包含4个元素 的一维数组组成
输出:max和row,colum
colum = j;
}
printf("max=%d,row=%d, \
colum=%d\n",max,row,colum); 16
C语言表达式(6、7、8)

表达式由运算符、常量及变量构成。
C语言的表达式基本遵循一般代数规则,有几点却是与C语言紧密相关的,以下将分别加以讨论。
2.7.1 表达式中的类型转换混合于同一表达式中的不同类型常量及变量,应均变换为同一类型的量。
C语言的编译程序将所有操作数变换为与最大类型操作数同类型。
变换以一次一操作的方式进行。
具体规则如下:1)所有char及shortint型量转为int型,所有float转换为double。
2)如操作数对中一个为longdouble,另一个转换为longdouble。
①要不然,一个为double,另一个转为double。
②要不然,一个为long,另一个转为long。
③要不然,一个为unsigned,另一个转为unsigned。
一旦运用以上规则。
每一对操作数均变为同类型。
注意,规则2)有几种必须依次应用的条件。
图2-1示出了类型转换。
首先,charch转换成int,且floatf转换成double;然后ch/i的结果转换成double,因为f*d是double;最后由于这次两个操作数都是double,所以结果也是double.2.7.2构成符cast可以通过称为cast的构成符强迫一表达式变为特定类型。
其一般形式为:(type)expression(type)是标准C语言中的一个数据类型。
例如,为确保表达式x/2的结果具有类型float,可写为:(float)x/2通常认为cast是操作符。
作为操作符,cast是一元的,并且同其它一元操作符优先级相同。
虽然cast在程序中用得不多,但有时它的使用的确很有价值。
例如,假设希望用一整数控制循环,但在执行计算时又要有小数部分。
若没有cast(float),就仅执行一次整数除;有了cast就可保证在屏幕上显示答案的小数部分。
2.7.3空格与括号为了增加可读性,可以随意在表达式中插入tab和空格符。
例如,下面两个表达式是相同的。
x=10/y*(127/x);x=10/y*(127/x);冗余的括号并不导致错误或减慢表达式的执行速度。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
元素,后5个元素为0。
一维数组的初始化: main( ) {int a[5]={1,2,3,4,5}; int b[5]={1,2,3}; int c[]={1,2,3,4,5}; for(i=0;i<5;i++) printf("%d",a[i]);printf("\n"); for(i=0;i<5;i++) printf("%d",b[i]);printf("\n"); for(i=0;i<5;i++) printf("%d",c[i]);printf("\n"); }
• 掌握一维、二维数组的定义和引用 方法、存储结构和初始化方法。 • 掌握有关一维数组的有关算法 • 掌握数组的运算。
7.1 一维数组的定义和引用
• 一个班学生的学习成绩 • 一行文字 • 一个矩阵 这些数据的特点是: 1.具有相同的数据类型 2.使用过程中需要保留原始数据
C语言为这些数据,提供了一种构造数据类型: 数组。所谓数组就是一组具有相同数据类型的数据 的有序集合。
5.常量表达式中可以包括常量和符号常量,但 不能包含变量。 例如: int n;
scanf(“%d″,&n); int a[n]; 数组说明中其他常见的错误: ① float a[0]; ② int b(2)(3); ③ int k, a[k]; /* 数组大小为0没有意义 */ /* 不能使用圆括号 */ /* 不能用变量说明数组大小*/
说明:
数组不初始化,其元素值为随机数 只能给元素逐个赋值,不能给数组整体赋值。
用赋值语句对数组元素逐个赋值: 一般使用循环来完成
如:int i,a[9];
for(i=0;i<9;i++)
scanf(“%d”,&a[i]);
例:用赋值语句对数组元素逐个赋值。 main()
{int i,a[9];
for(i=0;i<9;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++)
printf("%d",a[i]);
}
例:输入十个数,倒序输出
main() { int i,a[10]; for(i=0;i<=9;i++) for(i=0;i<=9;i++) scanf(“%d”,&a[i]); scanf(“%d”,&a[i]); for(i=9;i>=0;i--) for(i=9;i>=0;i--) printf(“%d”,a[i]); printf("%d ",a[i]); }
1.一维数组的定义格式为: 类型说明符 数组名[常量表达式];
例如: int a[10];
它表示定义了一个整形数组,数 组名为a,此数组有10个元素。
说明:
1. 数组名定名规则和变量名相同,遵循标识 符定名规则。
2、数组的类型实际上是数组元素的类型。对于同 一个数组,其所有元素的数据类型都是相同的。 3、在定义数组时,需要指定数组中元素的个数, 括号中的常量表达式用来表示元素的个数,即数组 长度。 4、数组名不能与其它变量名相同。 下面的定义是错误的。 main() { int a; float a[10]; ……}
第七章
问题:给一组数排序,这组 数该 如何存放呢 1 1 1 1 1 1 1 1 1 1 1 1 1 1 8 2 9 4 5 6 3 7 8 1 6 1 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 88 8 ??? 这些数据如何存放才便于排序
这便是本章所要解决的问题
本章要点及重难点
或int a[10]={0}; 不能写成:int a[10]={0*10};
4. 在对全部数组元素赋初值时,由于数据的个数已
经确定,因此可以不指定数组长度。
例如:int a[5]={1,2,3,4,5};
也可以写成
int a[]={1,2,3,4,5};
只初始化前5个
int a[10]={1,2,3,4,5};
2.一维数组元素引用的程序实例
#include <stdio.h> void main() { int i,a[10]; for (i=0; i<=9;i++) a[i]=i; for(i=9;i>=0; i--) printf("%d ″,a[i]); printf("\n″); }
运行结果如下: 9 8 7 6 5 4 3 2 1 0
程序使a[0]到 a[9]的值为0~9, 然后按逆序输出。
对数组元素初始化的实现方法: 1.在定义数组时对数组元素赋以初值,一般形式为: 类型说明符 数组名[常量表达]={值,……值};
例如:int a[10]={0,1,2,3,4,5,6,7,8,9};
将数组元素的初值依次放在一对花括弧内。经过上面的 定义和初始化之后,a[0]=0,a[1]=1,a[2]=2, a[3]=3,a[4]=4,a[5]=5,a[6]=6,a[7]=7, a[8]=8,a[9]=9。
7.1.2一维数组元素的引用
1.数组元素的引用方式 数组名[下标] 下标可以是整型常量或整型表达式。 例如: a[0]=a[5]+a[7]-a[2*3]
注意: 只能逐个引用数组元素,不能一次引用整个数组
定义数组时用到的“数组名[常量表达式]” 和引 例 int a[10]; 用数组元素时用到的“数组名[下标]” 是有区别的 printf(“%d”,a); ( ) 。 必须 for(j=0;j<10;j++) 例如∶ int a[10],i; printf(“%d\t”,a[j]); () t=a[i];
2. 可以只给一部分元素赋值。 例如: int a[10]={0,1,2,3,4}; 定义a数组有10个元素,但花括弧内只提供5个初值, 这表示只给前面5个元素赋初值,后5个元素值为0。 3. 如果想使一个数组中全部元素值为0,可以写成:
int
a[10]={0,0,0,0,0,0,0,0,0,0};
2.一维数组在内存中的存放 一维数组: float mark[100]; 低地址 每个数据元素占用 的字节数,就是基 类型的字节数 一个元素占4个字节
高地址
86.5 92.0 77.5 52.0
. . .
94.0
mark[0] mark[1] mark[2] mark[3]
. . .
mark[99]