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语言第七章

/* 定义a、b和sum三个变量 */
a=3; b=4;
/* 为a,b赋值 */
sum=add(a,b);
/* 调用函数add,将得到的值赋给变量sum */
printf("sum=a+b=%d\n",sum); /* 屏幕输出sum变量的值 */
} int add(int x,int y) /* 定义add函数和形式参数 x,y */
全局变量说明 宏定义: #define PI 3.14159。
函数模块定义 ……
条件编译:#if…#else…#endif
函数模块定义 函数预说明:定义函数的原型
全局变量说明:函数外定义的变量
函数模块定义
2021/4/6
《C语言程序设计》-第七章
7
7.2 函数的定义、参数 及函数的值
7.2.1 函数定义的一般形式 7.2.2 函数的参数 7.2.3 函数的返回值
}
2021/4/6
《C语言程序设计》-第七章
18
/*63【 例1.1 】 C语言程序的函数应用*/
int add(int ,int );/*函数声明*/
main( )
/* 主函数 */
{
int a,b,sum;
a=3; b=4;
sum=add(a,b); /* 调用函数add,将得到的值赋给变量sum */
2021/4/6
《C语言程序设计》-第七章
24
7.4.3函数的递归调用
▪递归调用(自调 用函数)
在调用一个函数的过 程中,又出现直接或间 接地调用该函数本身。
2021/4/6
《C语言程序设计》-第七章
25
/*67谭例8.7*/

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语言程序设计教程第七章课后习题参考答案

C语言程序设计教程第七章课后习题参考答案P198 3 求主、副对角线元素之和#include#define M 4#define N 4int main(){int a[M][N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; int i,j,m=0,n=0;for(i=0;i<m;i++)< p="">{for(j=0;j<n;j++)< p="">{printf("%4d",a[i][j]);}printf("\n");}for(i=0;i<m;i++)< p="">{for(j=0;j<n;j++)< p="">{if(i==j)m+=a[i][j];}}printf("主对角线元素之和为:%d\n",m);for(i=0;i<m;i++)< p="">{for(j=0;j<n;j++)< p="">{if(i+j==3)n+=a[i][j];}}printf("副对角线元素之和为:%d\n",n); return 0;}P198 4数组逆序存放#includevoid input(int a[],int n);void reverse(int a[],int n);int main(){int a[5];int size=sizeof(a)/sizeof(int);input(a,size);reverse(a,size);printf("\n");return 0;}void input(int a[],int n){int i;printf("请输入%d个整数:\n",n);for(i=0;i<n;i++)< p="">{scanf("%d",&a[i]);}}void reverse(int a[],int n) {int i,t;for(i=0;i<="" p="">{t=a[i];a[i]=a[5-i-1];a[5-i-1]=t;}for(i=0;i<n;i++)< p=""> {printf("%-3d",a[i]);}}198 4数组逆序存放(2)#includevoid reverse(int a[],int n); void print(int a[],int n);int main(){int a[]={1,2,3,4,5,11,16,13}; int size=sizeof(a)/sizeof(int); 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++)< p="">{printf("%-4d",a[i]);}printf("\n");}void reverse(int a[],int n){int t,i;printf("逆序:\n");for(i=0;i<="" p="">{t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}for(i=0;i<n;i++)< p="">{printf("%-4d",a[i]);}}P198 5对称矩阵#includevoid print(int a[][3],int rows,int cols); int fun(int a[][3],int rows,int clos); void main(){int a[3][3],i,j;printf("input:\n");for(i=0;i<3;i++){for(j=0;j<3;j++)scanf("%d",&a[i][j]);}print(a,3,3);if(fun(a,3,3)==0)printf("此矩阵是对称矩阵\n");elseprintf("此矩阵不是对称矩阵\n"); } void print(int a[][3],int rows,int cols) {int i,j;for(i=0;i<rows;i++)< p="">{for(j=0;j<cols;j++)< p="">printf("%-4d",a[i][j]);printf("\n");}}int fun(int a[][3],int rows,int clos) {int i,j,x=0;for(i=0;i<rows;i++)< p="">{for(j=0;j<clos;j++)< p="">{if(a[i][j]!=a[j][i]) x++;}}if(x>0) return 1;else return 0;}P198 5对称矩阵(2)#include#define M 3#define N 3void print(int a[][N],int m,int n); int yan(int a[][N],int m,int n); int main(){int a[][N]={1,2,3,4,5,6,7,8,9}; print(a,M,N);if(yan(a,M,N))printf("YES\n");elseprintf("NO\n");return 0;}void print(int a[][N],int m,int n) {int i,j;for(i=0;i<m;i++)< p="">{for(j=0;j<n;j++)< p="">{printf("%-4d",a[i][j]);}printf("\n");}}int yan(int a[][N],int m,int n){int i,j,x=0;for(i=0;i<m;i++)< p="">{for(j=0;j<n;j++)< p="">{if(a[i][j]!=a[j][i]) x++;}}if(x>0) //不是对称矩阵return 0;return 1;}P198 6矩阵求和#include#define M 3#define N 3void input(int a[][N],int m,int n);void sum(int a[][N],int b[][N],int m, int n); void print(int a[][N],int m,int n);int main(){int a[M][N];int b[M][N];printf("请输入%d*%d阶矩阵A:\n",M,N);input(a,M,N);print(a,M,N);printf("请输入%d*%d阶矩阵B:\n",M,N);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++)< p="">{for(j=0;j<n;j++)< p="">{scanf("%d",&a[i][j]);}}}void print(int a[][N],int m,int n){int i,j;for(i=0;i<m;i++)< p="">{for(j=0;j<n;j++)< p="">{printf("%4d",a[i][j]);}printf("\n");}}void sum(int a[][N],int b[][N],int m,int n) {int i,j;int c[M][N];for(i=0;i<m;i++)< p="">{for(j=0;j<n;j++)< p="">{c[i][j]=a[i][j]+b[i][j];}}print(c,M,N);}P198 7模拟骰子投掷#include#include#define N 10000int main(){int a[N],i;double x=0,y=0,z=0,l=0,m=0,n=0; for(i=0;i<n;i++)< p="">{a[i]=rand()%6+1;if(a[i]==1)x++;if(a[i]==2)y++;if(a[i]==3)z++;if(a[i]==4)l++;if(a[i]==5)m++;if(a[i]==6)n++;}printf("出现1的概率为:%lf\n",x/N); printf("出现2的概率为:%lf\n",y/N); printf("出现3的概率为:%lf\n",z/N); printf("出现4的概率为:%lf\n",l/N); printf("出现5的概率为:%lf\n",m/N); printf("出现6的概率为:%lf\n",n/N); return 0;}P67 1最大奇、偶数#include#define M 10int main(){int i,a[M];int max1=-1,max2=-1;for(i=0;i<m;i++)< p="">{printf("请输入第%d个正整数:",i+1); scanf("%d",&a[i]);}for(i=0;i<m;i++)< p="">{if(a[i]%2!=0){if(a[i]>max1)max1=a[i];}else{if(a[i]>max2)max2=a[i];}}if(max1==-1)printf("没有奇数\n");elseprintf("最大奇数是%d\n",max1); if(max2==-1)printf("没有偶数\n");elseprintf("最大偶数是%d\n",max2); return 0;}P69 3#includeint main(){int a[20];int p=0,n=0,i,j=0;double avg,sum=0;printf("请输入非0整数:"); while(1){scanf("%d",&a[j]);if(a[j]==0)break;j++;}for(i=0;i<j;i++)< p="">{sum=sum+a[i];}avg=sum/j;printf("平均数:%lf",avg);for(i=0;i<j;i++)< p="">{if(a[i]>0)p++;if(a[i]<0)n++;}printf("正数个数:%d 负数个数:%d\n",p,n); return 0;}P75 2冒泡排序#include#define N 10void bubble_sort(int a[],int n);void main(){int i, a[N]={1,3,6,8,9,2,11,12,14,7}; printf("原数组为:\n");for(i=0;i<n;i++)< p="">{printf("%4d",a[i]);}bubble_sort(a,N);printf("\n");}void bubble_sort(int a[],int n) {int i,j,tmp;for(i=0;i<n-1;i++)< p=""> {for(j=0;j<n-i-1;j++)< p=""> {if(a[j]>a[j+1]){tmp=a[j];a[j]=a[j+1];a[j+1]=tmp;}}}printf("\n");printf("排序后的数组为:\n"); for(i=0;i<n;i++)< p=""> {printf("%4d",a[i]);}}P76 3 成绩#includevoid input(int cla[50][3],int n); void print(int cla[50][3],int n);void sort(int cla[50][3],int n);void main(){int cla[50][3];int n;printf("请输入学生人数(小于50):\n"); scanf("%d",&n);if(n<=0 || n>=50)printf("error,请输入正确的人数。

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语言程序设计(第九章)
形式1: #ifdef 标识符 程序段1 #else 程序段2 #endif 意义:若该标识 符已被#define 命令定义,则编 译程序段1,否 则编译程序段2 形式2: #ifndef 标识符 程序段1 #else 程序段2 #endif 意义:若该标识
符没有被#define 命令定义,则编 译程序段1,否则 编译程序段2
4
第九章 预处理命令
例:下列程序宏替换。
例 #include <stdio.h> #define N 2 #define M N+1 # define NUM (M+3)*M/2 void main() { int i; for (i=0; i<=NUM; i++); printf(“%d\n”,i); }
第九章 预处理命令
第九章 预处理命令
内容提要: ★宏定义
★文件包含
★条件编译
1
第九章 预处理命令 – 作用:对源程序编译之前做一些处理,生成扩展C 源程序 种类
• 宏定义 • 文件包含 • 条件编译 #define #include #if--#else--#endif等
– 格式:
• “#”开头 • 占单独书写行 • 语句尾不加分号
#ifdef DEBUG printf(“x=%d,y=%d,z=%d\n”,x,y,z); #endif
#define DEBUG
字符串(可为空)
调试时:加上此命令 调试完成后:删去此命令
15
第九章 预处理命令 例5: (选择性地编译不同功能) 。根据需要,有时要把 字母全改为大写输出,另一些时候则要把字母全改为 小写输出。如何适应这两种不同要求。
11
第九章 预处理命令

C语言 第七章

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()
四、 形式参数和实际参数
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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++)
答案:
1、boy.age=15; 2、boy.grade=75; 3、boy.initial,boy.age,boy.grade 4、girl.initial,girl.age,girl.grade
运行结果: boy:R is 15 years old and got a grade of 75 girl:H is 14 years old and got a grade of 82
与二维数组的初始化类似。 (3)结构体指针案例。 有一个结构体变量 stu,内含学生学号、姓名和三门课成绩。要求在 mian()中赋以值,
在函数 print 中打印输出。
本题涉及结构体指针作为函数参数的使用。
#include <stdio.h>
#include <string.h>
#define FORMAT “%d\n %s\n %.1f\n %.1f\n %.1f\n”
输入: Zhang Wang Li Zhang Wang
运行结果: Zhang:2 Wang:2 Li: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]的成员变量值,
1.填空题
(1)结构体变量案例。
编程输出两个小孩的记录信息。1 个男孩和 1 个女孩,其姓名首字母分别为“R”和“H”;
男孩 15 岁,女孩比男孩小 1 岁子;男孩的成绩为 75,女孩的成绩为 82。
该案例涉及结构体变量的定义和结构体变量成员的引用。
# include <stdio.h>
void main()
3.掌握文件处理程序的一般设计方法。
【实验内容】
1.程序分析题: 设有一文件 cj.dat 存放了 50 个人的成绩(英语、计算机、数学),存放格式为:每人一
行,成绩间由逗号分隔。计算每个人三门课平均成绩,统计个人平均成绩大于或等于 90 分 的学生人数。
#include <stdio.h>
void main() {
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”);
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); /*输入得票人姓名*/
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)
printf("%c",b[i]); } 答案:
1.将第一个 for 循环改为 while 循环;
2.将第二个 for 循环改用一条语句完成;
第八章 结构体与共同体的应用
【实验目的】
1.掌握结构体类型变量的定义、初始化和使用;
2.掌握结构体类型数组的概念和使用;
3.了解共用体的概念与使用。
【实验内容】
{
struct childrec /*定义结构体类型*/
{
char initial; /*姓名首字母*/
int age;
/*年龄*/
int grade;
/*成绩*/
}boy,girl;
boy.initial=’R’; girl. initial=’H’;
1 2 girl.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 ); }
for(j=0;j<3;j++)
if(strcmp(leader_name,stu[j].name)==0)
1
;
}
printf(“\n”);
for(i=0; 2 ; 3 )
printf(“%5s: %d\n”, stu[i].name , 4 );
}
答案: 1、 stu[j].count++ 2、i<3 3、i++
FILE *fp; int num=0; float x , y , z ; fp=fopen ("cj.dat","r"); while(!feof(fp)) {
fscanf (fp,"%f,%f,%f",&x,&y,&z); if((x+y+z)/3>=90) num=num+1; } printf("平均分数高于 90 的人数为:%d 人",num); fclose(fp); }
提示: (1) 结构体变量的定义:
struct 结构体名 { 成员变量定义 }结构体变量列表; 即在定义结构体的同时定义结构体变量。
(2)结构体成员变量的引用: 结构体变量名.成员变量名
(2)结构体数组案例。 设有三个候选人,Zhang,Wang 和 Li,设有 10 个人参加投票,每次输入一个得票的候 选人的名字,要求最后输出各候选人的得票结果,请设计程序对候选人的得票数进行统计。 该案例涉及结构体变量的定义、初始化和结构体变量成员的引用。 # include <stdio.h> # include <string.h> struct person /*候选人信息结构体,这是一个全局的结构体数组*/ {
scanf (“%s”,s)的结果为:
a
n
y
\0
gets (s)的结果为:
any
b o y \0
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; } …… }
else printf("%s,%s,%.1f\n",stu[i].cate,stu[i].name,stu[i].grade.grade_chu);
} }
输入: xiaoxue zhangli 85 chuzhong wangming 84.5
运行结果: xiaoxue,zhangli,85 chuzhong,wangming,84.5
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]
结构体指针变量名—>成员变量名 如:p->name
2.读程题 共用体案例。 现需要输入学生成绩,学生分为小学生和初中生,小学生成绩为整型,初中生成绩为浮
点型。其他信息一致,使用共用体来处理(将小学生与初中生的成绩放在同一段内存中)。
本题涉及共用体的应用。 #include <stdio.h> #include <string.h> struct student {
相关文档
最新文档