31-结构体变量定义与输入输出

合集下载

C++题目作业7-8

C++题目作业7-8

HZAU-专业C++作业7-8一、判断题1.结构体的定义不为它分配具体的内存空间。

T (2分)2.C++语言结构体类型变量在程序执行期间,所有成员驻留在内存中。

T3.允许用户将不同类型的数据组合成一个有机的整体,这些数据互相联系;这种数据结构称为结构体(structure)。

(2分)T4.struct是关键字,不能省略:“结构体名”用作结构体类型的标志,是用户定义的标识符。

(2分)T5.结构体变量所占的内存长度等于每个成员长度之和(字符型特殊)。

T (2分)6.结构体中的成员(域),不可以单独使用。

F (2分)7.结构体变量能整体进行输入输出。

F (2分)8.如果成员本身又属于一个结构体类型,则要用若干个成员运算符,一级一级的找到最低一级的成员。

只能对最低一级的成员进行赋值、存取或运算。

T9.把整个结构体变量传递给函数默认情况下采取的是“值传递”方式,要求形参也必须是同类型的结构体变量。

当然也可由程序员控制用指针参数或引用参数传递。

(2分)T10.结构体变量的各个初值用花括号{、}括起来,花括号内各个成员变量的值之间用分号分隔,其值必须与成员变量一一对应,且数据类型应与成员变量一致。

F11.宏替换时先求出实参表达式的值,然后带入形参运算求值。

F (2分)12.宏替换不存在类型问题,它的参数也是无类型的。

T (2分)13.在C++语言标准库头文件中包含了许多系统函数的原型声明,因此只要程序中使用了这些函数,则应包含这些头文件。

T (2分)14.H头文件只能由编译系统提供。

F (2分)15.#include命令可以包含一个含有函数定义的C++语言源程序文件。

T (2分)16.#include <…>命令中的文件名是不能包括路径的。

t (2分)18.宏定义中的形参是标识符,在宏调用中的实参不可以是表达式。

F (2分)19.一个#include命令一次只能包含一个文件,若想包含多个文件,须用多个#include命令。

安徽2020年普通专升本计算机科学与技术专业《C语言程序设计》考试大纲

安徽2020年普通专升本计算机科学与技术专业《C语言程序设计》考试大纲

考试内容 顺序结构、选择结构(if\switch 语句)、循环结构(for\while\do-while 语句)、break 语句、continue 语句、复合语句、关系运算符及其表达式、逻辑运算符及其表达式。 考试要求 1、了解三大程序设计结构的特点。 2、掌握关系运算符、逻辑运算符及常用算术库函数的应用。 3、掌握 if 语句中单分支、双分支及嵌套结构的应用。 4、掌握 switch 语句语法及其应用。 5、掌握三种循环语句语法及嵌套循环结构的应用。 6、掌握 break 和 continue 语句的灵活应用。 第三部分 数组 考试内容 一维数组、二维数组、顺序存储结构中相关算法(查找、统计、排序、插入与删除等) 的实现及应用 考试要求 1、掌握一维数组定义、输入和输出操作。 2、掌握一维数组应用(查找、统计、排序等)。 3、掌握二维数组定义、输入和输出操作。 4、掌握二维数组应用(矩阵、行列式简单操作的实现)。 第四部分 字符串 考试内容 字符数组与字符串、字符串处理库函数等 考试要求 1、理解字符数组与字符串区别与联系。 2、掌握字符数组的输入输出与字符串读写操作。 3、掌握字符串操作库函数的应用。 第五部分 函数 考试内容 函数、局部变量、全局变量、库函数 考试要求 1、深层次了解 C 语言基本结构和执行过程。 2、理解形参、实参定义规则与应用。 3、理解局部变量和全局变量的使用。 4、掌握自定义函数申明、定义、实现和调用。
2、记分 卷面分 150 分,其中标准 C 语言的基础知识约占 40%,数据结构基础知识约点 10%, 程序设计能力测试约占 50%。 3、考试题型
(1)单项选择题; (2)填空题; (3)阅读程序题(描述程序输出结果); (4)程序改错题;Βιβλιοθήκη (5)程序填空题; (6)编程题。

中石大C语言程序设计第次在线作业答案

中石大C语言程序设计第次在线作业答案

第三次在线作业单选题共20道题收起1.2.5分在C语言中,当函数调用时;A、A. 实参和形参各占一个独立的存储单元B、B. 实参和形参共用存储单元C、C. 可以由用户指定实参和形参是否共用存储单元D、D. 由系统自动确定实参和形参是否共用存储单元我的答案:A 此题得分:2.5分2.2.5分以下函数调用语句中实参的个数为; excev1,v2,v3,v4,v5,v6;A、A. 3B、B. 4C、C. 5D、D. 6我的答案:A 此题得分:2.5分3.2.5分如果在一个函数的复合语句中定义了一个变量,则该变量;A、A. 只在该符合语句中有效,在该符合语句外无效B、B. 在该函数中任何位置都有效C、C. 在本程序的原文件范围内均有效D、D. 此定义方法错误,其变量为非法变量我的答案:A 此题得分:2.5分4.2.5分 C语言允许函数值类型缺省定义,此时该函数值隐含的类型是;A、A. float型B、B. int型C、C. long型D、D. double型我的答案:B 此题得分:2.5分5.2.5分 C语言规定,函数返回值的类型是由;A、A. return语句中的表达式类型所决定B、B. 调用该函数时的主调函数类型所决定C、C. 调用该函数时系统临时决定D、D. 在定义该函数时所指定的函数类型决定我的答案:D 此题得分:2.5分6.2.5分在C语言程序中,以下描述正确的是;A、A. 函数的定义可以嵌套,但函数的调用不可以嵌套B、B. 函数的定义不可以嵌套,但函数的调用可以嵌套C、C. 函数的定义和函数的调用均不可以嵌套D、D. 函数的定义和函数的调用均可以嵌套我的答案:B 此题得分:2.5分7.2.5分以下叙述中正确的是;A、A. 全局变量的作用域一定比局部变量的作用域范围大B、B. 静态static类别变量的生存期贯穿于整个程序的运行期间C、C. 函数的形参都属于全局变量D、D. 未在定义语句中赋初值的auto变量和static变量的初值都是随机值我的答案:B 此题得分:2.5分8.2.5分以下程序的运行结果是; include< stdio_h> void subint s,int y { static int t=3; y=st;t--; } main { int a={1,2,3,4},i,x=0; fori=0;i< 4;i++{ suba,x;printf"%d",x;} printf"\n"; }A、A.1234B、B.432lC、C.0000D、D.4444我的答案:C 此题得分:2.5分9.2.5分以下程序的运行结果是: main { int w=5; funw; } funint k { ifk> O funk-1; printf" %d" ,k; }A、A.5 4 3 2 lB、B.0 1 2 3 4 5C、C.1 2 3 4 5D、D.5 4 3 2 1 0我的答案:B 此题得分:2.5分10.2.5分当调用函数时,实参是一个数组名,则向函数传送的是A、A.数组的长度B、B.数组的首地址C、C.数组每一个元素的地址D、D.数组每个元素中的值我的答案:B 此题得分:2.5分11.2.5分在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是;A、A.地址传递B、B.单向值传递C、C.由实参传给形,再由形参传回实参D、D.传递方式由用户指定我的答案:B 此题得分:2.5分12.2.5分定义一个结构体变量时系统分配给它的内存是;A、A. 各成员所需要内存量的总和B、B. 结构体中第一个成员所需内存量C、C. 成员中占内存量最大者所需的容量D、D. 结构中最后一个成员所需内存量我的答案:A 此题得分:2.5分13.2.5分设有如下定义:struct sk {int a ;float b ;}data ,p ;若有p=& data ; ,则对data 中的a 域的正确引用是;A、A.p.data.aB、B.p.aC、C.p-> data.a我的答案:B 此题得分:2.5分14.2.5分当定义一个共用体变量时系统分配给它的内存是;A、A. 各成员所需要内存量的总和B、B. 共用体中第一个成员所需内存量C、C. 成员中占内存量最大者所需的容量D、D. 共用体中最后一个成员所需内存量我的答案:C 此题得分:2.5分15.2.5分设有如下枚举类型定义:enum language { Basic=3 ,Assembly ,Ada=100 ,COBOL ,Fortran} ;枚举量Fortran 的值;A、A. 4B、B. 7C、C. 102D、D. 103我的答案:C 此题得分:2.5分16.2.5分若x=5,y=5,则x& y的结果是;A、A. 0B、B. 2C、C. 3D、D. 5我的答案:D 此题得分:2.5分17.2.5分在位运算中,操作数每左移两位,则结果相当于;A、A. 操作数乘以2B、B. 操作数除以2C、C. 操作数除以4D、D. 操作数乘以4我的答案:D 此题得分:2.5分18.2.5分 C语言可以处理的文件类型是;A、A. 文本文件和数据文件B、B. 文本文件和二进制文件C、C. 数据文件和二进制文件D、D. 数据代码文件我的答案:B 此题得分:2.5分19.2.5分在执行fopen函数时,若执行不成功,则函数的返回值是;A、A.TRUEB、B.–1C、C.1D、D.NULL我的答案:D 此题得分:2.5分20.2.5分在C程序中,可把整型数以二进制形式存放到文件中的函数是;A、A.fprintf函数B、B.fread函数C、C.fwrite函数D、D.fputc函数我的答案:C 此题得分:2.5分判断题共20道题收起21.2.5分下面程序段运行时输出结果是:0,0 1,3 void main { int i; fori=0;i< 2;i++ add; } add { int x=0; static int y=0; printf" %d,%d " ,x,y; x++; y=y+3; }正确错误我的答案:错误此题得分:2.5分22.2.5分下面程序段运行时输出结果是:38.5 int x; void main { x=7; s; printf" %d\n" ,x; } void s { x=5x+x/2; }正确错误我的答案:错误此题得分:2.5分23.2.5分下面程序段运行时输出结果是2 int fint n { int s; ifn==1||n==2 s=1; else s=n-fn-1; return s; } void main { printf“%d”,f3;}正确错误我的答案:正确此题得分:2.5分24.2.5分下面程序段运行时输出结果是29 funint x,int y,int z {z=xx+yy;} main { int a=31; fun5,2,a; printf"%d",a; }正确错误我的答案:错误此题得分:2.5分25.2.5分编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述的结果;判断以下程序是否正确: include< stdio.h> include< string.h> void fltjchar str,int a { int ll,i; ll=strlenstr; for i=0;i< ll;i++ { if stri> =' a' & & stri< =' z' ||stri> =' A' & & stri< =' Z' a0++; else if stri> =' 0' & & stri< =' 9' a1++; else if stri==' ' a2++; else a3++; } } void main { static char str60; static int a4={0,0,0,0}; getsstr; fltjstr,a;printf" %s char:%d digit:%d space:%d other:%d" , str,a0,a1,a2,a3; }正确错误我的答案:正确此题得分:2.5分26.2.5分打印出1-100之间的全部素数要求编写两个函数,一个用于判断一个数是否是素数,另一个是main函数,在main函数中调用该函数实现打印1-100之间的全部素数;判断以下程序是否正确: include < stdio.h> int primeint m { int i; fori=2;i< m;i++ ifm%i==0 return 0; return 1; } void main { int i; fori=2;i< 100;i++ ifprimei printf" %d " ,i; }正确错误我的答案:正确此题得分:2.5分27.2.5分对10个数进行从小到大排序;要求排序在函数sort内完成,用起泡算法;main函数内进行数据输入、调用排序函数sort、并输出排序后的数据;判断以下程序是否正确:include < stdio.h> void sortint a,int n { int i,j,k; for i=0; i< n-1; i++ for j=0; j< n-1-i; j++ if aj> aj+1 { k=aj;aj=aj+1;aj+1=k; } } void main { int a10, i, j, k; printf" 请任意输入10个整数:\n" ; for i=0 ; i< 10 ; i++ scanf" %d" , & ai ; printf" \n" ; sorta,10; printf" 按由小到大的顺序输出10个整数是:\n" ; for i=0; i< 10; i++ printf“%d," ,ai; }正确错误我的答案:正确此题得分:2.5分28.2.5分fun函数用来统计各分数段的分数个数,其中所有分数存放在数组a中,各分数段的分数个数存放在数组b中,85-100分的个数存放到b0,60-84分的个数存放到b1,60以下的个数存放到b2;main函数中输入所有的分数值,调用fun函数,打印各分数段的分数个数;判断以下程序是否正确:includedefine N 20void funint a,int b,int n{ int i;for i=0;i if ai>=85 && ai<=100 b0++;else ifai>=60&&ai<=84 b1++;else ifai<60&&ai>=0 b2++;return;}void main{ int aN,b3,i;funa,b,N;fori=0;i<3;i++ printf“%d\n”,bi;}正确错误我的答案:正确此题得分:2.5分29.2.5分在定义函数时,函数名后面的括号中的变量名称为实参;正确错误我的答案:错误此题得分:2.5分30.2.5分在调用一个函数的过程中又出现直接或间接调用该函数本身,称为函数的递归调用;正确错误我的答案:正确此题得分:2.5分31.2.5分在函数内定义的变量是局部变量,在函数外定义的变量是外部变量;外部变量是全局变量;正确我的答案:正确此题得分:2.5分32.2.5分函数的参数不仅可以是整型、字符型、浮点型等数据,还可以是指针类型;它的作用是将一个变量的地址传送到另一个函数中;正确错误我的答案:正确此题得分:2.5分33.2.5分结构体的成员不能是结构体变量;正确错误我的答案:错误此题得分:2.5分34.2.5分一个结构体变量的指针就是该变量所占内存段的起始地址;正确错误我的答案:正确此题得分:2.5分35.2.5分“按位或”运算指两个运算数相应的二进制位中只要有一个为1,则该位结果值为1,比如0|0=0,1|0=1;正确错误我的答案:正确此题得分:2.5分36.2.5分异或运算指两个运算数相应的二进制位相同则结果为0,相异则结果为1,比如0∧1=1,0∧0=0;正确错误我的答案:正确此题得分:2.5分37.2.5分若fp是指某文件的指针,且已读到文件的末尾,则表达式feoffp的返回值是NULL错误我的答案:错误此题得分:2.5分38.2.5分 C语言库函数fgetsstr,n,fp的功能是从文件fp中读取n个字符串存入str指向的内存;正确错误我的答案:错误此题得分:2.5分39.2.5分函数rewind的作用是使位置指针自动移至下一个字符位置;正确错误我的答案:错误此题得分:2.5分40.2.5分 C语言中以w+方式打开文件后,可执行的文件操作是可任意读写;正确错误我的答案:错误此题得分:2.5分。

练习题八-改

练习题八-改

练习八一、选择题1. 下列描述正确的是(A) 用户可通过类型定义产生一种新的数据类型(B) 类型定义格式要求中的标识符必须是大写字母序列(C) 类型定义格式要求中的类型名必须是在此之前有定义的类型标识符(D) 以上描述均不正确2. 下列描述说明正确的是(A) typedef int INTEGER; INTEGER j,k; (B) typedef int char ; char j,k;(C) typedef a[3] ARRAY; ARRAY b; (D) 以上描述均不正确3.下面对typedef的叙述中不正确的是(A) 用typedef可以定义各种类型名,但不能用来定义变量(B) 用typedef可以增加新类型(C) 用typedef只是将已存在的类型用一个新的标识符来代表(D) 使用typedef有利于程序的通用和移植4. 下列描述说明正确的是(A) 对于一个具体的结构体,它的成员数目可以根据自己的需要随时更改(B) 结构体与数组一样,其每个成员的数据类型都相同(C) 结构体的每个成员的数据类型必须是基本数据类型(D) 以上描述均不正确5. 下列描述说明正确的是(A) 定义结构体时,它的每个成员的数据类型可以不同(B) 不同结构体的成员名不能相同(C) 结构体定义时,其成员的数据类型不能是结构体本身(D) 结构体定义时各成员项之间可用分号也可用逗号隔开6. 下列描述说明正确的是(A) 定义结构体时,系统按照各成员项的大小分配相应的存储空间(B) 定义结构体时,系统按照成员项中占用空间最大的成员项分配存储空间(C) 结构体定义时,结构体本身并不占用存储空间,即系统并不给结构体分配存储空间(D) 以上说法均不正确7. 下列描述说明正确的是(A) 结构体变量说明时,系统按照结构体定义时所需空间的大小实际分配存储空间(B) 结构体变量说明时,系统按照成员项中占用空间最大的成员项分配存储空间(C) 结构体说明时,系统并不给结构体分配存储空间(D) 以上说法均不正确8. 下列描述说明错误的是(A) 结构体变量各的成员项各自占用各自的存储空间,而共用体各成员项共同占用同一存储空间(B) 结构体定义时并不分配存储空间,只有在结构体变量说明时,系统才分配存储空间(C) 结构体变量占用空间的大小为各成员项占用空间大小之和,而共用体占用空间大小为其成员项中占用空间最大的成员项所需存储空间大小(D) 以上说法均不正确9. 下列描述说明正确的是(A) 结构体变量可以作为一个整体进行其值的输入和输出(B) 结构体成员项不可以是结构体(C) 结构体成员项可以是结构体或其他任何C语言的数据类型(D) 结构体变量和结构体是相同的概念10. 下列描述说明错误的是(A) 结构体变量的名称为该结构体变量的存储首地址(B) 结构体数组的名称为该结构体数组的存储首地址(C) 结构体变量本身的地址即各成员项存储空间的开始地址(D) 结构体数组中不同元素的同名成员项具有相同的数据类型11. 下列说法不正确的是(A) 下列结构体定义时,占据了5个字节的空间struct s{ int num;int age; char sex; }(B) 结构体的成员名可以与程序中的变量名相同(C) 对结构体中的成员可以单独使用,它的作用相当于普通变量(D) 结构体的成员可以是一个结构体变量12.当说明一个结构体变量时系统分配给它的内存是(A) 各成员所需内存量的总和(B) 结构中第一个成员所需内存量(C) 成员中占内存量最大者所需的容量(D) 结构中最后一个成员所需内存量13. 结构体类型变量在程序执行期间1(A) 所有成员一直驻留在内存中(B) 只有一个成员驻留在内存中(C) 部分成员驻留在内存中(D) 没有成员驻留在内存中14. 若有以下的定义struct stru{ int a;long b;char c[6]; }sampl;则以下赋值正确的是(A) sampl.c="abcd"; (B) strcpy(sampl.c,"abcd");(C) sampl->c="abcd" (D) 以上均不正确15. 结构体定义struc student{ int num;char sex;int age; } s1,s2;下列语句中错误的是(A) printf("%d,%c,%d",s1); (B) s2.age=s1.age;(C) s1.age++; (D) printf("%o",&s1);16. 若有以下说明,则能打出Y un的语句是struct sampl{ char name[10];int number; };struct sampl test[3]={{"WangBing",10},{"LiY un",20},{"LiuHua",30}}; (A) printf("%s\n",test[1].name+2); (B) printf("%s\n",test[1].name[2]);(C) printf("%s\n",test[2].name+2); (D) printf("%s\n",test[2].name[2]);17. 以下选项中,能定义s为合法的结构体变量的是(A)typedef struct abc (B)struct (C)struct ABC (D)typedef ABC{ double a;{ double a;{ double a;{ double a;char b[10];char b[10];char b[10];char b[10];} s;} s;} }ABC s;ABC s;18.设有以下说明语句struct stu{int a;float b;}stutype;则下面的叙述不正确的是(A) struct是结构体类型的关键字(B) struct stu是用户定义的结构体类型(C) stutype是用户定义的结构体类型名(D) a和b都是结构体成员名19.根据下面的定义,能打印出字母M的语句是struct person{char name[9];int age; };struct person class[10]={“John”,17,“Paul”,19,“Mary”,18,“adam”,16};(A) printf(“%c\n”,class[3].name); (B) printf(“%c\n”,class[3].name[1]);(C) printf(“%c\n”,class[2].nam e[1]); (D) printf(“%c\n”,class[2].name[0]);20. 已知结构体com类型的变量a,其初始化赋值如下:static struct com a={"20",5,1.7691}:则以下结构体com的类型定义正确的是(A) com struct { char name( ); int kodo;float shuki; }(B) struct com { char name[];int kodo;double shuki; }(C) struct com { int name; int kodo;float shuki; }(D) com struct { int name;int kodo;float shuki; }21. 以下程序的输出结果是main(){ struct cmplx{ int x; int y; } cnum[2]={1,3,2,7};printf("%d\n",cnum[0].y/cnum[0].x*cnum[1].x);}(A) 0 (B) 1 (C) 3 (D) 622. 设有如下定义:struct st{ int a;float b; }st1,*pst;若有pst=&st1;,则对st中的a域的正确引用是(A) (*pst).st1.a (B) (*pst).a (C) pst->st1.a (D) pst.st1.a223. 设有如下定义:struct sk{int a;float b;}data,*p;若有p=&data;,则对data中的a域的正确引用是(A)(*p).data.a (B)(*p).a (C)p->data.a (D)p.data.a24. 设有如下定义:struct sample{ int a;int b;};struct st{ int a;float b;struct sample *p; }st1,*pst;若有pst=&st1;,则以下引用正确是(A) (*pst).p.a (B) (*pst)->p.a (C) pst->p->a (D) pst.p->a25. 若有以下说明,则下列表达式中值为20的是struct sampl{ int a;int b; };struct sampl test[3]={{1,10},{2,20},{3,30}},*p=test;(A) (p++)->b (B) (p++)->a (C) (*++p).b (D) (*++p).a26. 若有以下说明和语句,则值为6的表达式是struct st{ int n;struct st *next; };struct st a[3],*p;a[0].n=5; a[0].next=&a[1];a[1].n=7; a[1].next=&a[2];a[2].n=9; a[0].next='\0';p=&a[0];(A) p++->n (B) p->n++ (C) (*p).n++ (D) ++p->n27.以下scanf函数调用语句中对结构体变量成员的不正确引用是stuct pupil {char name[20];int age ;int sex; }pup[5],*p;p=pup;(A) scanf("%s",pup[0].name); (B) scanf("%d",&pup[0].age);(C) scanf("%d",&p.sex); (D) scanf("%d",p->age);28.若要利用下面的程序片段使指针变量p指向一个存储整型变量的存储单元,则[ ]中应填入的内容是int *p;P=[ ]malloc(sizeof(int));(A)int (B)int* (C)(*int) (D)(int*)29. 以下程序的输出结果是struct st{ int x;int *y;} *p;int dt[4]={10,20,30,40 };struct st aa[4]={ 50,&dt[0],60,&dt[0],60,&dt[0], 60,&dt[0]};main(){ p=aa;printf("%d\n",++p->x);printf("%d\n",(++p)->x);printf("%d\n",++(*p->y));}(A) 10 (B) 50 (C) 51 (D) 6020 60 60 7020 21 11 3130.以下程序的运行结果是#include “stdio.h”main(){ struct data{3int year,month,day;}today;printf(“%d\n”,sizeof(struct data)); }(A) 6 (B) 8 (C) 10 (D) 1231. 以下程序的输出结果是#include <stdio.h>main(){ struct stru{ int a,b;char c[6]; };printf("%d\n",sizeof(struct stru));}(A) 2 (B) 4 (C) 8 (D) 1032. 以下程序的输出结果是#include <stdio.h>main(){ struct stru{ int a;long b;char c[6];};printf("%d\n",sizeof(struct stru));}(A) 2 (B) 4 (C) 6 (D) 1233. 设有以下定义和语句,则输出的结果是(用small模式编译,指针变量占2个字节) struct date{ long *cat;struct date * next;double dog;} too;printf("%d",sizeof(too));A)20 B)16 C)14 D)1234. 有以下程序#include <stdio.hstruct stu{ int num;char name[10];int age;};void fun(struct stu *p){ printf("%s\n",(*p).name); }main(){ struct stu students[3]={ {9801,"Zhang",20},{9802,"Wang",19},{9803,"Zhao",18} };fun(students+2);} 输出结果是A) Zhang B)Zhao C) Wang D) 1835. 若已建立下面的链表结构,指针p、s分别指向图中所示结点,则不能将s所指的结点插入到链表末尾的语句组是(A) s->next=NULL; p=p->next; p->next=s; (B) p=p->next; s->next=p->next; p->next=s;(C) p=p->next; s->next=p; p->next=s; (D) p=(*p).next; (*s).next=(*p).next; (*p).next=s;36. 下列描述说明正确的是(A) 共用体定义时,系统按照各成员项所需空间的大小之和实际分配存储空间(B) 结构体定义时并不分配存储空间,只有在结构体变量说明时,系统才分配存储空间(C) 共用体定义时,系统按照占用空间最大的成员项分配存储空间(D) 以上说法均不正确37. 下列描述说明正确的是(A) 共用体定义时,系统按照成员项中占用空间最大的成员所需空间大小实际分配存储空间(B) 共用体定义时并不分配存储空间,只有在共用体变量说明时,系统才分配存储空间(C) 共用体定义时,系统按照各成员项各自占用空间大小之和分配存储空间(D) 以上说法均不正确38.当说明一个共用体变量时系统分配给它的内存是(A) 各成员所需内存量的总和(B) 结构中第一个成员所需内存量4(C) 成员中占内存量最大者所需的容量(D) 结构中最后一个成员所需内存量39.C语言共用体型变量在程序运行期间(A) 所有成员一直驻留在内存中(B) 只有一个成员驻留在内存中(C) 部分成员驻留在内存中(D) 没有成员驻留在内存中40.以下对C语言中共用体类型数据的叙述正确的是(A) 可以对共用体变量名直接赋值(B) 一个共用体变量中可以同时存放其所有成员(C) 一个共用体变量中不可能同时存放其所有成员(D) 共用体类型定义中不能出现结构体类型的成员41.以下程序的运行结果是#include “stdio.h”main(){ union {long a;int b;char c;}m;printf(“%d\n”,sizeof(m)); }(A) 2 (B) 4 (C) 6 (D) 842. 以下程序的输出结果是#include <stdio.h>main(){ union un{ int a[2];long b;char c; };printf("%d\n",sizeof(union un));}(A) 9 (B) 4 (C) 1 (D) 843. 以下程序的输出结果是typedef union { long x[2];int y[4];char z[8]; } MYTYPE;MYTYPE them;main(){ printf("%d\n",sizeof(them)); }(A) 32 (B) 16 (C) 8 (D) 2444. 以下程序的输出结果是#include <stdio.h>main( ){ union un{ int i;long k;char c; };struct byte { int a;long b; union un c; }r;printf("%d\n",sizeof(r));}(A) 10 (B) 13 (C) 7 (D) 845. 设有以下说明和定义:typedef union{ long i; int k[5]; char c; }DATE;struct date{ int cat; DATE cow; double dog; } too;DATE max;则下列语句的执行结果是printf ("%d",sizeof (struct date ) +sizeof(max));(A) 26 (B) 30 (C) 18 (D) 846. 以下程序的输出结果是main( ){ union{ char i[2];int k;} r;r,i[0]=2;r,i[1]=0;printf("%d \n",r,k);}(A)2 (B)1 (C)0 (D)不确定547. 下列程序的输出结果是#include <stdio.h>main(){ union{ int i[2];long k;char c[4];}r,*s=&r;s->i[0]=0x39;s->i[1]=0x38;printf("%c\n",s->c[0]);}(A) 39 (B) 9 (C) 38 (D) 848. 下列程序的输出结果是#include <stdio.h>main( ){ union{ int i[2];long k;char c[4];}r,*s=&r;s->i[0]=0x39;s->i[1]=0x38;printf("%lx\n",s->k);}(A) 390038 (B) 380039 (C) 3938 (D) 383949. 以下程序的输出结果是#include <stdio.h>main( ){ union{int i[2];long k;char c[2];}r,*s=&r;s->k=0x12345678;printf("%x\n",s->c[0]);}(A) 12 (B) 78 (C) 1234 (D) 567850. 以下程序的输出结果是#include <stdio.h>main(){ struct byte {int a;char b;};union{int i[2];long k;char c[2];struct byte d;}r,*s=&r;s->k=0x12345678;printf("%x,%x\n",s->d.a,s->d.b);}(A) 34,56 (B) 56,78 (C) 1234,5678 (D) 5678,3451. 有下列程序#include<stdio.hmain(){ union{ int k;char i[2];} *s,a;s=&a;s->i[0]=0x39;s->i[1]=0x38;printf("%x\n",s-k);} 输出结果是(A) 3839 (B) 3938 (C) 380039 (D) 39003852. 以下对枚举类型名的定义中正确的是(A)enum a={one,two,three}; (B)enum a {one=9,two=-1,three};(C)enum a={"one","two","three"}; (D)enum a {"one","two","three"};二、多选题1.若有以下定义和语句:struct student{int age;int num ; };struct student stu [3]={{1001,20 },{1002,19},{1003,21}};main(){struct student *p;p=stu;…}6则以下不正确的引用是(A) (p++)->num (B) (p++).age (C) (*p).num (D) p=&stu.age三、填空题1. 在C语言中,用关键字__________来表示结构体类型。

第7章 结构体和联合体数据类型

第7章  结构体和联合体数据类型

结构体数组

结构体数组元素的使用




通过操作数组的每一个元素达到操作数组的目的。结构体 数组元素需要用下标变量的形式表示。 结构体数组元素就相当于一个结构体变量,将引用数组元 素的方法和引用结构体变量的方法结合起来就形成了引用 结构体数组元素成员分量的方法,其一般形式为: 数组名[下标].成员名 不能将结构体数组元素作为一个整体直接进行输入输出, 也需要通过输入输出数组元素的每一个成员分量达到输入 输出结构体数组元素的目的。 可以将结构体数组元素作为一个整体赋给同类型数组的另 外一个元素,或赋给一个同类型的结构体变量。
Ex0707 结构体数组操作(数组元素引用、数组元素的输入输出)示例。
结构体数组

结构体数组作函数的参数



在函数调用期间实参结构体数组将它的全部存储区域或者 部分存储区域提供给形参结构体数组共享。 如果需要把整个实参结构体数组传递给被调函数中的形参 结构体数组,可以使用实参结构体数组的名字或者实参结 构体数组第一个元素(0号元素)的地址。 如果需要把实参结构体数组中从某个元素值后的部分传递 给被调函数中的形参结构体数组,则使用实参结构体数组 某个元素的地址。
Ex0704 结构体变量的输入/输出示例。
结构体类型的定义和使用

结构体变量的使用——做函数参数



结构体类型变量和结构体类型变量的成员都可以作为函数 的参数在函数间进行传递,数据的传递仍然是“值传递方 式”。 使用结构体类型变量作为函数参数时,被调函数的形参和 主调函数的实参都是结构体类型的变量,而且属于同一个 结构体类型。 使用结构体类型变量的成员作为函数参数时,其中被调函 数中的形参是普通变量,而主调函数中的实参是结构体类 型变量中的一个成员,并且形参和实参的数据类型应该对 应一致。

《C语言程序设计》(第2版)苏小红-13章 12

《C语言程序设计》(第2版)苏小红-13章 12
作用
2021/7/31
40/60
struct sample {
short i; char ch; float f; };
union sample {
short i; char ch; float f; };
2021/7/31
共用体
【例12.8】
printf("%d\n", sizeof(struct sample));
Before function call:1999/04/23 After function call:2000/05/22
指针作函数形参 实参必须为地址值
2021/7/31
33/60
struct date
{
int year; int month;
结构体变量
int day; };
作函数返回值
struct date Func(struct date p)
2021/7/31
【例12.3】利用 结构体数组计 算每个学生的 平均分
25/60
结构体指针的定义和初始化
如何定义指向结构体变量的指针?
pt STUDENT stu1; STUDENT *pt; pt = &stu1;
等价于
STUDENT *pt = &stu1;
stu1 成员1 成员2 成员3 成员4
i ch
f
8个字节
printf("%d\n", sizeof(union sample));
0x0037b00
cfih
4个字节 41/60
共用体
sizeof(union number)取决于占空间最多的那个成员 变量
同一内存单元在每一瞬时只能存放其中一种类型的成员 起作用的成员是最后一次存放的成员,不能作为函数参数 不能进行比较操作,只能对第一个成员初始化

C语言程序设计实训教程第2章 基础实验

C语言程序设计实训教程第2章  基础实验

19
(2)编写程序求出任一输入字符的 ASCII码。 提示:从键盘输入一个字符赋给字符变量,以 整型格式输出该变量。 (3)编写程序,由键盘任意输入 3个 1位整数 (第一个整数不为 0),将它们按输入顺序组合为 一个 3位数输出,如输入 2,5,8,则输出为258。 提示:输入 a,b,c3个整数,组合整数为 d =a﹡100 +b﹡10 +c。
(3)写一个函数,用“冒泡法”对输入的 10 个数字由小到大顺序排列,并输出。 提示: ①排序的函数名为 Sort。 ②排序前后的输入输出都应在主函数中完成。 ③使用数组作为函数参数。 ④使用“冒泡法”排序。
67
(4)写一函数,使给定的一个二维数组(5 ×5)转置,即行列互换。 提示: ①使用 5 ×5的二维数组存放数据。 ②矩阵转置的函数名为 Turn。 ③转置前后的输入输出都应在主函数中完成。 ④使用数组作为函数参数。
20
2.3
数据的输入和输出
1)实验目的 ①熟悉顺序结构的程序设计方法。 ②熟练使用 C 的赋值语句和各种表达式。 ③熟练掌握各种数据的输入、输出方法,能正 确使用各种格式转换符。
21
2)实验内容 程序验证性实验
22
23
24
25
程序填空性实验 程序功能:可以计算两个整数的商和余数。
26
程序设计性实验 (1)编写程序由键盘输入任意一个数字字符 (0 ~ 9),将其转换为数字输出。 提示:将该字符和“0”字符相减(字符的 ASCII码值相减)即得到数字。 (2)输入三角形三边长 a,b,c,求三角形 周长 l和面积 s。用 scanf()函数输入数据,printf ()函数输出计算结果,输出时要求有文字说明。
2)实验内容 程序验证性实验

结构体类型与结构体变量

结构体类型与结构体变量
19
结构体类型与结构体变量
❖1.6 指向结构体的指针
▪ 可以用一个指针指向结构体变量,指向结构体变量的指针的值是该结构体变量所分 配的存储区域的首地址。
▪ 结构指针变量的定义
struct student
P
{ int num;
10001
char name[20];
zhang
char sex;
M
int age; 19
float score;
88
}stu1={10001,"zhang",'M',19,88};
struct student *p=&stu1;
20
结构体类型与结构体变量
❖ 通过指针访问结构体变量的成员(结构体类型数据的间接引用)
▪ 结构变量中简单成员的引用形式有下面3种:
• 结构变量名.成员名(名字引用) • 结构指针->成员名(指针引用) • (*结构指针).成员名
struct date { int year; int month; int day; };
struct student { int num; char name[20]; char sex; struct date birthday;
float score;
};
9
结构体类型与结构体变量
▪ 结构体定义可以在函数内部,也可在函数外部。在函数内部定义的结构体,只有在 函数内部使用,在函数外部定义的结构体,从定义点起到源文件尾之间的所有函数 都可使用。
▪ 结构体变量的引用格式
• 结构体变量名.成员名 stu1.num=10001; strcpy(,"zhang");/* 此处不能写成 ="zhang" */ stu1.sex='M'; stu1.age=19; stu1.score=88; 不能把结构变量作为整体进行输入输出,下面的引用方式是错误的: scanf("%d%s%c%d%f",stu1); 正确的引用方式可以是: gets(); scanf("%d%c%d%f",&stu1.num,&stu1.sex,&stu1.age,&stu1.score);
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。


结构体变量的输入、输出


讲练 2
授课班级
授课时数
教学目标
1、掌握结构体类型的说明、结构体变量(数组)的定义及初始化 2、掌握结构体变量成员的引用和初始化
教学重点
结构体类型的说明、结构体变量的定义、结构体变量成员的引用
教学难点
结构体数组的定义与使用
学情分析
在此之前,学生已经学习了大部分的 C 语言知识,变量定义,数组 等等,对于结构体这样一个数据类型尚属首次接触,但对其概念容 易理解,对结构体类型数据的使用还会存在问题。
wang=zhang; 不允许用赋值语句将一组常量直接赋值给一个结构体变量。如下面 的赋值语句是不合法的: wang={2345678,“Li Qiang Zhuang”,2003,5,1, 23456.98 }; 3、结构体变量的初始化 同其它数据类型一样,结构体类型变量在定义时也可以直接对其进 行初始化。 例如:在主程序中定义并直接初始化结构体变量。 main() { struct worker {char *name; char *address; int num[3]; }w1={“Li Hua”,“Bei Jing”,{95,89,93}};
char name[20]; struct date Date; float money; }; #include “stdio.h” main()
{struct account zhang,wang; /*用赋值语句给结构体变量 zhang 的各个成员项赋值*/ zhang.id=1234567; =“ zhang Hong”; zhang.Date.year=2002; zhang.Date.month=10; zhang.Date.day=19; zhang.money=21353.33; /*通过键盘输入结构体变量 wang 的各个成员项的值*/ printf(“\nThe wang id:”); scanf(“%ld”,&wang.id); printf(“\nThe wang name:”); gets(); printf(“\nThe wang Date:”); scanf(“%d%d%d”,& wang.Date.year,&wang.Date.month,&wang.Date.day); printf(“\nThe wang money:”); scanf(“%f”,&wang.money); printf(“\n money ”); id name year month day
wang.Date.year, wang.Date.month, wang.Date.day, wang.money); printf(“\n--------------------------------------------------------------------------” ); } 2、一个结构体变量作为一个整体来引用 、 C 语言允许两个相同类型的结构体变量之间相互赋值,这种结构体 变量之间赋值的过程是一个结构体变量的成员项的值赋给另一个结构 体变量的相应部分。如下面的赋值语句是合法的:
赋值、存取或运算时只针对变量进行,不对类型进行; 编译时,只对结构变量分配空间,对结构类型不分配空间;结 构变量的存储空间是各成员类型占用存储空间的总和; 三.结构体变量的引用和初始化 1、引用结构体变量的成员项。 、引用结构体变量的成员项。 对结构体变量的使用,一般情况下不把它作为一个整体参加数据处 理,而是用结构体的各个成员项来参加各种运算和操作。引用结构体变 量中的成员项的一般形式为: 结构体变量名.成员项名 例如,将日期 2011 年 5 月 28 日赋给 struct date 型变量 Date 可表 示成: Date.year=2011; Date.month=5; Date.day=28; 如果一个结构体成员本身又是一个结构体类型变量,则要通过两个 “.”运算符来访问该结构成员的结构成员。下面例题中用到的 zhang.Date.year、zhang.Date.month、zhang.Date.day 就是这种情况。 例 1:下面给出一个应用结构体变量的完整例子 struct date {int year; int month; int day; }; struct account {long id; /*定义一个客户的基本信息的结构体类型*/ /*定义一个表示日期的结构体类型*/
printf("%6d%10s%8d%10s\n",a.num,,a.cre,a.t); printf("%6d%10s%8d%10s\n",b.num,,b.cre,b.t); }
教学效果
教 后 记
[引入]: 引入]
前面我们已经学习了一种构造数据类型:数组,使用数组可以带来 很多方便。但是数组要求被处理数据必须有相同的类型。日常工作中经 常需要处理由不同数据类型组合起来的整体,对于这样的问题使用数组 是不可能实现的,使用多个变量是可以描述,但这样做无法反映出同一 事物的各个属性间的相互关系。为此,C 语言提供了一种全新的构造数 据类型—结构体类型(或者称为结构类型) 。 如:新生入学登记表如下: 学号 011 012 姓名 ZhuPing LiMing 性别 女 男 年龄 19 20 住址 Suzhou Beijing 总分 498 518 个对象由多个数据描述 一 个对象由多个数据描述
#include"string.h" struct course { int num; char name[20]; int cre; char t[20]; }; void main() { struct course a,b,temp; printf("课程编号 课程名称 学分 教师\n"); scanf("%6d%10s%8d%10s\n",&a.num,&,&a.cre,&a.t); scanf("%6d%10s%8d%10s\n",&b.num,&,&b.cre,&b.t); printf("课程编号 课程名称 学分 教师\n");
int cre; char t[20]; }; void main() { struct course a,b; a.num=1; strcpy(,"电路"); strcpy(a.t,"张三"); a.cre=2; b.num=2; strcpy(b .name,"C语言"); strcpy(b.t,"李四"); b.cre=4; printf("课程编号 课程名称 学分 教师\n"); printf("%6d%10s%8d%10s\n",a.num,,a.cre,a.t); printf("%6d%10s%8d%10s\n",b.num,,b.cre,b.t); } 方法二: #include "stdio.h" #include"string.h" struct course { int num; char name[20]; int cre; char t[20]; }; void main() { struct course a={ 1,"电路",2,"张三"}; struct course b={ 2,"C语言",4,"李四"}; printf("课程编号 课程名称 学分 教师\n"); printf("%6d%10s%8d%10s\n",a.num,,a.cre,a.t);
printf(“%s,%s,%d,%d,%d”,,w1.address,w1.num[0],w1.num[1],w1. num[2]); } 这种结构体变量的初始化形式,只需在结构体变量后面加上赋值运 算符,把成员项的对应值用一对花括号括起来,放在赋值运算符后面即 可。 假设为学生选课提供的 2 门课程信息分别存放在变量 a 和 b 中 (信 例 2: 息包括课程编号、课程名称、学分、任课老师) 。编写程序,输出这 2 门课程的的所有信息。 算法: 分析过程: (略) 程序: #include "stdio.h" #include"string.h" struct course { int num; char name[20];
printf("%6d%10s%8d%10s\n",b.num,,b.cre,b.t); } 假设为学生选课提供的 2 门课程信息分别存放在变量 a 和 b 中 (信 例 3: 息包括课程编号、课程名称、学分、任课老师) 。编写程序,将两个变 量中的内容交换。 算法: 程序: #include "stdio.h" #include"string.h" struct course { int num; char name[20]; int cre; char t[20]; }; void main() { struct course temp; struct course a={ 1,"电路",2,"张三"}; struct course b={ 2,"C语言",4,"李四"}; printf("课程编号 课程名称 学分 教师\n"); printf("%6d%10s%8d%10s\n",a.num,,a.cre,a.t); printf("%6d%10s%8d%10s\n",b.num,,b.cre,b.t); temp=a; a=b; b=temp; printf("交换后的内容\n"); printf("课程编号 课程名称 学分 教师\n"); printf("%6d%10s%8d%10s\n",a.num,,a.cre,a.t); printf("%6d%10s%8d%10s\n",b.num,,b.cre,b.t); } 从键盘上输入: #include "stdio.h"
相关文档
最新文档