C语言结构体习题及答案
- 格式:docx
- 大小:224.15 KB
- 文档页数:4
C语言程序设计结构习题与答案1. 介绍C语言是一种广泛应用于系统软件和应用软件开发的高级程序设计语言。
C语言程序设计结构是指程序的组织形式和编写规范。
在学习C 语言时,我们需要通过练习习题来提升自己的编程能力。
本文将介绍一些C语言程序设计结构习题,并给出相应的答案。
2. 基本语法习题2.1 输出Hello, World!要求:编写一个程序,在屏幕上输出"Hello, World!"。
答案:```c#include <stdio.h>int main() {printf("Hello, World!\n");return 0;}```2.2 输入输出整数要求:编写一个程序,从键盘输入一个整数,然后将其加1后输出。
答案:```c#include <stdio.h>int main() {int num;printf("请输入一个整数:");scanf("%d", &num);printf("加1后的值为:%d\n", num + 1);return 0;}```3. 控制结构习题3.1 判断奇偶数要求:编写一个程序,判断一个输入的整数是奇数还是偶数,并输出相应的结果。
答案:```c#include <stdio.h>int main() {int num;printf("请输入一个整数:");scanf("%d", &num);if (num % 2 == 0) {printf("输入的整数为偶数\n");} else {printf("输入的整数为奇数\n");}return 0;}```3.2 计算阶乘要求:编写一个程序,计算输入的正整数的阶乘并输出。
答案:```c#include <stdio.h>int main() {int num, factorial = 1, i;printf("请输入一个正整数:");scanf("%d", &num);for (i = 1; i <= num; i++) {factorial *= i;}printf("%d的阶乘为:%d\n", num, factorial);return 0;}```4. 数组与函数习题4.1 求数组元素和要求:编写一个程序,计算一个整型数组中所有元素的和并输出结果。
一、单项选择题(在每小题列出的四个备选项中只有一个是符合题目要求的。
) 1.若有定义 int a[4] = {l, 2, 3, 4};则 a[a[0]+2 * a[2]-a[3]]等于A. 1B. 2C. 3D. 42 .设有数组定义:char array [ ]=〃China 〃;则数组array 所占的空间为A. 4个字节B. 5个字节C. 6个字节D. 7个字节3 .设有定义 char a 口=“xyz”, b □二{'x',' y',' z'};,则语句 cout«sizeof (a)«* ,,«sizeof (b) «endl;的输出结果为 A. 3 3B. 3 4C. 4 3D. 4 44 .设 int b[ ][5]={1,2,3,4,5,6,7};,则元素 b[l] [2]的值是A. 0B. 2C. 6D. 75 .数组定义为int a L2J [3j={1, 2, 3, 4, 5, 6},值为1的数组元素是A. a [0] [0] B, a [1] [1] C. a [1] [2] D. a [2] [3]6 . C++中,若有说明:int a[3] [4];则对a 数组元素的正确引用是9 .设 char x[][10] = {〃Windows 〃,〃dos 〃,〃unix 〃};,执行 cout«x[l][2];后输出的结果是A. nB. iC. oD. s10 .以下叙述中错误的是A.对于double 类型数组,不可以直接用数组名对数组进行整体输入或输出B.数组名代表的是数组所占存储区的首地址,其值不可改变C.当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界” 的出错信息D.可以通过赋初值的方式确定数组元素的个数11 .设#pragma pack(l),则结构体类型变量占用内存的字节数是A.各成员占用内存字节数之和B.第一个成员占用的内存字节数C.占用内存最大成员所需的字节数D.最后一个成员占用的内存字节数12 .下面程序运行后,输出结果是#include <iostream> using namespace std;数组与结构体A. a[2][4] B, a[l + l][0] 7 .定义二维数组并初始化,正确的是A.mta[][]={l,2,3,4,5,6}; C.inta[][3]={ 1、2,3,4,5,6}; 8 .以下数组定义中,不正确的是A. inta[2][3];C. int c[100][100]={0};C. a(2)(l)D. a[l,3] B.int a[2][]={ 1,2,3,4,5,6};D.inta[2,3]={ 1,2,34,5,6};B. mt b[][3]={0,l,2,3);D. mt d[3][]={]l,2},{l,2,3},{l,2,3,4}};21int/mtp[8]={l,2,3,4,5,6,7,8}J=0,j=0;while(i++<7)if(p[i]%2) j+=p[i];cout<<j«endl;return 0;}A. 15B. 16C. 20D. 3613.下面程序运行后,输出结果是#include <iostream>using namespace std;int main()int a[3][3]={{l,2},{3,4},{5,6}},ij,s=0;fbr(i=l;i<3;i++)砧i(J=0jv=i;j++)s+=a[i][j];cout«s«endl;retuin 0;}A. 18B. 19C. 20D. 2114.下面程序运行后,输出结果是#mclude<iostieam>using namespace std;int main(){ mt a[3][3]={l,2,3,4,5,6,7,8,9},n,sum=0;fdi(n=0;n<3;n++)sum=sum+a [n] [n];cout«sum«endl;return 0:}A. 6B. 12C. 15D. 4515.下面程序运行后,输出结果是#include <iostream>using namespace std;stmct abc{ mt a, b, c; };int main。
第八章结构体和共同体一、单项选择1. 若有以下定义:struct link{int data;struct link *next;}a,b,c,*p,*q;且变量a和b之间已有如下图所示的链表结构,若指针p指向a,指针q指向c。
则能把c插入到a和b之间形成新的链表的语句是( C )2. 若有以下程序段:int a=1,b=2,c=3;struct dent {int n ; int *m ;} s[3] = {{101,&a},{102,&b},{103,&c}};struct dent *p=s ;则以下表达式中值为2的是( D )。
3. 下面程序的运行结果是( D )。
#iunclude<stdio.h>int main ( ) {struct complx {int x; int y ;}cnum[2]={1,3,2,7} ;printf(“%d\n”,cnum[0].y/cnum[0].x*cnum[1].x) ;return 0;}二、程序设计1. /*学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s 中,请编写函数fun,它的功能是:按分数的高低排列学生的记录,高分在前。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序: */#include <stdio.h>#define N 16typedef struct{ char num[10];int s ;}STREC;void fun (STREC a[]){/*********Begin*********//*********End**********/}int main (){FILE *wf,*in;STREC s[N]={{ "GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},{"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87},{"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},{"GA011",66},{"GA017",64},{"GA018",64},{"GA016",72}};int i;fun(s);printf("The data after sorted :\n");for (i=0; i<N; i++)printf("%s %4d\n",s[i].num,s[i].s);printf("\n");/******************************/in=fopen("in001.dat","r");i=0;while(!feof(in)){fscanf(in,"%s %d",s[i].num,&s[i].s);i++;}fun(s);wf=fopen("out.dat","w");for (i=0; i<N; i++)fprintf(wf,"%s %4d\n",s[i].num,s[i].s);fclose(wf);fclose(in);/*****************************/return 0;}【参考代码】int i,j;STREC t;for(i=0;i<N;i++)for(j=0;j<N-1-i;j++)if(a[j].s<a[j+1].s){t=a[j];a[j]=a[j+1];a[j+1]=t;}2. /*某学生的记录由学号、8门课成绩和平均分组成,学号和8门课的成绩已在主函数中给出。
国家二级C语言机试(结构体、共同体、位运算及文件操作)模拟试卷13 (总分50, 做题时间90分钟)1. 选择题1.下列说法正确的是( )。
SSS_SINGLE_SELA 使用typedef可以定义新的数据类型B 使用struct可以定义新的数据类型C 使用typedef可以对现有类型起别名,但不能定义数据类型D 使用new关键字可以定义新的数据类型分值: 2答案:C解析:C语言中只能通过struct关键字定义新的结构体,使用typedef对现有类型起别名,但不能定义新的数据类型,所以答案C正确。
2.以下说法正确的是( )。
SSS_SINGLE_SELA typedef和struct可以联合使用来定义新数据类型B typedef只能单独使用C struct只能单独使用D 以上说法都不正确分值: 2答案:D解析:typedef和struct可以联合使用来定义新的结构体,但不能定义新的数据类型。
所以A,B,C选项的说法均不正确。
答案选D项。
3.若typedef char T[3];T*a;上述定义中a的类型与下面选项中完全相同的是( )。
SSS_SINGLE_SELA char(*A)[3];B char*a;C char a[3];D char*a[3];分值: 2答案:D解析:C语言允许用typed说明一种新类型名。
题目中利用typedef定义了字符数组类型T,而后定义了该类型的指针a,因此a为指针数组。
4.关于typedef的叙述中正确的是( )。
SSS_SINGLE_SELA 在使用typedef改变原类型的名称后,只能使用新的类型名B 使用typedef说明新类型名时,后面不能加分号C 在程序中,允许用typedef来说明一种新的类型名D 使用typedef说明新类型名时,其格式是:typedef新类型名原类型名分值: 2答案:C解析:C语言允许用typedef说明一种新类型名。
typedef语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并未产生新的数据类型,原有类型名依然有效。
国家二级C语言机试(结构体、共同体、位运算及文件操作)模拟试卷12 (总分50, 做题时间90分钟)1. 选择题1.关于typedef的叙述中错误的是( )。
SSS_SINGLE_SELA 用typedef可以为各种类型起别名,但不能为变量起别名B 可以通过typedef增加新的类型C 用typedef定义新的类型名后,原有类型名仍有效D 可以用typedef将已存在的类型用一个新的名字来代表分值: 2答案:B解析:C语言允许用typedef说明一种新类型名或为现有类型起个别名,而不是创建新类型,说明新类型名的语句一般形式为:typedef类型名标识符;在此,“类型名”必须是在此语句之前已有定义的类型标识符。
标识符是一个用户定义标识符,用作新的类型名。
typedef语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并未产生新的数据类型,原有类型名依然有效。
2.正确的结构体类型说明和变量定义是( )。
SSS_SINGLE_SELA typedef struct f{int n;char c;}STR;STR t1,t2;B struct STR;{int n;char C;};STR t1,t2;C typedef stmct STR;{int n=0;char c='A';}t1,t2;D struct{int n;char c;}STR;STR t1,t2;分值: 2答案:A解析:定义结构体类型的一般形式为:struct结构体名{成员列表};struct结构体名后不能加“:”号。
但定义完之后要在句末加分号,所以选项B、C有误,选项D中定义无名称的结构体类型同时定义结构体变量形式应为“stmct t1,t2;”。
选项A为用户自定义类型,其为正确的定义形式。
3.若typedef int*T;T a[5];则与a的定义相同的是( )。
SSS_SINGLE_SELA int*a[5];B int(*a)[5]C int,*a;D int a[5];分值: 2答案:A解析:typedef的主要功能是为存在的类型指定一个新的别名,后面的代码中可以利用该新定义的别名定义变量,题目定义了整型指针类型T,而后利用T 定义了整型指针数组a,含有5个元素,选项A中定义了整型指针数组a,选项B定义了一个指向一维数组的指针a,选项C定义指针变量,而选项D为定义整型数组最常用的形式,数组a中可以存放5个数据元素。
数据结构试题及答案c语言版一、选择题(每题2分,共20分)1. 在C语言中,以下哪个选项是正确的链表定义?A. struct Node { int data; struct Node *next; };B. struct Node { int data; Node *next; };C. struct Node { int data; struct Node *next; } *Node;D. struct Node { int data; Node *next; };答案:A2. 下列关于栈的描述中,错误的是?A. 栈是一种后进先出(LIFO)的数据结构。
B. 栈的插入操作称为push。
C. 栈的删除操作称为pop。
D. 栈可以存储任意数量的数据。
答案:D3. 在C语言中,以下哪个关键字用于定义一个结构体?A. structB. unionC. enumD. typedef答案:A4. 下列关于队列的描述中,正确的是?A. 队列是一种先进先出(FIFO)的数据结构。
B. 队列只能从队尾进行插入操作。
C. 队列的插入操作称为pop。
D. 队列的删除操作称为push。
答案:A5. 在C语言中,以下哪个函数用于创建一个动态数组?A. mallocB. callocC. reallocD. all of the above答案:D6. 下列关于二叉树的描述中,错误的是?A. 二叉树的每个节点最多有两个子节点。
B. 二叉树的子节点被称为左子树和右子树。
C. 二叉树的遍历方式包括前序、中序、后序。
D. 二叉树的每个节点只能有一个子节点。
答案:D7. 在C语言中,以下哪个函数用于释放动态分配的内存?A. freeB. mallocC. callocD. realloc答案:A8. 下列关于图的描述中,错误的是?A. 图是由顶点和边组成的数据结构。
B. 图的边可以是有向的,也可以是无向的。
C. 图的顶点可以是孤立的,没有边与之相连。
第八单元结构体和共用体一、选择题1、说明一个结构体变量时系统分配给它的内存是。
A. 各成员所需要内存量的总和B. 结构体中第一个成员所需内存量C. 成员中占内存量最大者所需的容量D. 结构中最后一个成员所需内存量2、 C 语言结构体类型变量在程序执行期间。
A. 所有成员一直驻留在内存中B. 只有一个成员驻留在内存中C. 部分成员驻留在在内存中D. 没有成员驻留在内存中3、设有以下说明语句struct stu { int a ; float b ; } stutype ;则下面的叙述不正确的是。
A. struct 是结构体类型的关键字B. struct stu 是用户定义的结构体类型C. stutype 是用户定义的结构体类型名D. a 和b 都是结构体成员名4、程序中有下面的说明和定义struct abc { int x;char y;}struct abc s1,s2;则会发生的情况是。
A. 编译出错B. 程序将顺利编译、连接、执行C. 能顺利通过编译、连接、但不能执行D. 能顺利通过编译、但连接出错5、有如下定义struct person { char name[9]; int age;};struct person class[10]={ " Johu", 17,"Paul", 19,"Mary", 18,"Adam",16};根据上述定义,能输出字母M 的语句是。
A. prinft(" %c\n",class[3].name);B. printf(" %c\n",class[3].name[1]);C. prinft(" %c\n",class[2].name[1]);D. printf(" %c\n",class[2].name[0]);6、下面程序的输出是。
1.编写input()和output()函数输入,输出5个学生的数据记录。
参考答案
2.创建一个链表。
参考答案
3.反向输出一个链表。
参考答案
4.建立一个单向链表,链表中每个结点包含成绩和指针两个域。
之后,①输出该链表;②
对该链表排序并输出;③任意输入一个成绩,将其插入链表中的适当位置;④任意输入一个成绩,将链表中相同的结点删除。
参考答案
5.连接两个链表。
参考答案
6.利用结构体类型,编程计算一名同学5门课的平均分。
参考答案
7.用结构体型数组初始化建立一工资登记表。
然后键入其中一人的姓名,查询其工资情况。
参考答案
8.用子函数求出worker数组中每个工人的实发工资。
参考答案
9.例、显示时、分、秒的软件延时
参考答案。
c语言结构体类型的编程题当涉及到C语言结构体类型的编程题时,通常会涉及到定义结构体、访问结构体成员、结构体数组、结构体指针、结构体作为函数参数等方面的内容。
以下是一些可能涉及到的编程题目和解答:1. 定义一个表示学生的结构体,包括学生的姓名、年龄和成绩。
然后编写一个函数来打印学生的信息。
c.#include <stdio.h>。
struct Student {。
char name[50];int age;float score;};void printStudent(struct Student s) {。
printf("Name: %s\n", );printf("Age: %d\n", s.age);printf("Score: %.2f\n", s.score);}。
int main() {。
struct Student s1 = {"Alice", 20, 85.5}; printStudent(s1);return 0;}。
2. 定义一个表示日期的结构体,包括年、月和日。
然后编写一个函数来比较两个日期的先后顺序。
c.#include <stdio.h>。
struct Date {。
int year;int month;int day;};int compareDate(struct Date d1, struct Date d2) {。
if (d1.year > d2.year) {。
return 1;} else if (d1.year < d2.year) {。
return -1;} else {。
if (d1.month > d2.month) {。
return 1;} else if (d1.month < d2.month) {。
return -1;} else {。
1.有以下定义和语句:struct student{ int age;int num; };struct student stu[3]={{1001,20},{1002,19},{1003,21}};main(){ struct student *p;p=stu;…… }则以下不正确的引用是。
A) (p++)->num B) p++ C) (*p).num D) p=&stu.age2.有以下结构体定义:struct example{ int x;int y; }v1;则正确的引用或定义是。
A) example.x=10 B) example v2; v2.x=10;C) struct v2; v2.x=10; D) struct example v2={10};3.对于如下结构体定义,若对变量person的出生年份进行赋值,正确的赋值是。
struct date{ int year,month,day;};struct worklist{ char name[20];char sex;struct date birth;}person;A) year=1976 B) birth.year=1976C) person.birth.year=1976 D) person.year=19764.根据下述定义,可以输出字符'A'的语句是。
struct person{ char name[11];struct{ char name[11];int age;}other[10];};struct person man[10]={ {"Jone",{"Paul",20}},{"Paul",{"Mary",18}},{"Mary",{"Adam",23}},{"Adam",{"Jone",22}}};A) printf("%c",man[2].other[0].name[0]); B) printf("%c",other[0].name[0]);C) printf("%c",man[2].(* other[0])); D) printf("%c",man[3].name);5.若有以下程序段:struct st{ int n;struct st *next; };struct st a[3]={5,&a[1],7,&a[2],9, '\0'} ,*p=a;则值为6的表达式为。
9.4课后习题9.4.1项目练习一.练习目的1.进一步巩固结构体类型和共用体类型的定义与引川2.进一步复习链表的建立过程3.进一步巩固枚举类型的定义与枚举元索的引用方法二.练习内容1.用结构体变量表示平面上的一个点(横坐标和纵坐标),输入两个点,求两点Z间的距离。
#include "stdio.h"include "math.h"struct pin{float x;float y;}a,b;main(){printfC*请输入a点的横纵坐标:“);scanf("%f%f"/&a.x,&a.y);printfC'Xn");printf("请输入b点的横纵坐标scanf(,,%f%f"/&b.x,&b.y);printf("\n n);printff"输出a、b 两点之间的距离是:%f",sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)));getch();}2.16个同学围成一-圈,从笫1个人开始按1、2、3的顺序报号,凡报到3者退出圈子。
找出最后昭在圈子中的人原来的序号。
ttinclude "stdio.h"#include "stdlib.h"#define LEN sizeof(struct game)struct game{int num;struct game *next;};struct game *creat(){ struct game *head,*p;head=p=(struct game *) malloc(LEN);p->num=l;int i=2;while(i<=16){ p・>next=(struct game *) malloc(LEN);p->next-:>nu m=i;i++;p=p->n ext; }p->next=head; return(head);} struct game *delete(struct game *head) { struct game*pl=head,*p2=head,*x; int k=l;while(pl->next!=pl) {if(k==3) {x=pl; pl=pl->next;p2・>n ext=pl; free(x); x=NULL; k=0;} else {P2=pl; pl=pl->next;}pl->next=NULL;return(pl);}void print(struct game *head){ struct game *p;p=head;while(p!=NULL) {printf("%d\t",p->num);p=p->n ext;}printfCAn");}main(){ struct game *pt,*p;pt=creat();p=delete(pt);print(p);free(p);getch();}3.建立一个链表,每个结点包含的成员为:职工号、工资。
c语言试题及答案解析一、选择题(每题2分,共20分)1. C语言中,以下哪个选项是正确的标识符?A. 2abcB. intC. _abcD. 3d答案:C解析:在C语言中,标识符可以包含字母、数字和下划线,但不能以数字开头。
因此,只有选项C是合法的标识符。
2. 下面哪个选项不是C语言的基本数据类型?A. intB. floatC. doubleD. string答案:D解析:C语言的基本数据类型包括int、float、double等,但不包括string。
string在C语言中是通过字符数组或指针来实现的。
3. 在C语言中,以下哪个选项是正确的二维数组声明?A. int a[3][2];B. int a[][];C. int a[2][];D. int a[3,2];答案:A解析:在C语言中,二维数组的正确声明方式是指定第一维的大小,第二维的大小可以省略,但必须在编译时确定。
因此,只有选项A是正确的。
4. C语言中,以下哪个选项是正确的字符串字面量?A. "Hello, World!"B. 'Hello, World!'C. "Hello, World!", "Goodbye!"D. 'Hello, World!', 'Goodbye!'答案:A解析:在C语言中,字符串字面量使用双引号括起来,因此选项A是正确的。
选项B和D使用了单引号,它们表示单个字符。
选项C中使用了逗号,这在C语言中不是有效的字符串字面量表示。
5. 在C语言中,以下哪个选项是正确的函数声明?A. int add(int x, int y);B. int add();C. int add(int x, int y) {}D. int add(int, int);答案:A解析:在C语言中,函数声明需要指定返回类型和参数列表。
C语言结构体习题及答
案
集团企业公司编码:(LL3698-KKI1269-TM2483-LUI12689-ITT289-
第9章 结构体
1.定义以下结构体类型
struct s
{
int a;
char b;
float f;
};
则语句printf("%d",sizeof(struct s))的输出结果为【 】。
A) 3 B) 7 C) 6 D) 4
2.当定义一个结构体变量时,系统为它分配的内存空间是【 】
A)结构中一个成员所需的内存容量
B)结构中第一个成员所需的内存容量
C)结构体中占内存容量最大者所需的容量
D)结构中各成员所需内存容量之和
3.定义以下结构体类型
struct s
{ int x;
float f;
}a[3];
语句printf("%d",sizeof(a))的输出结果为 【 】
A) 4 B) 12 C) 18 D) 6
7.定义以下结构体类型
struct student
{
char name[10];
int score[50];
float average;
}stud1;
则stud1占用内存的字节数是【 】。
A) 64 B) 114 C) 228 D) 7
9、设有一结构体类型变量定义如下:
struct date
{ int year;
int month;
int day;
};
struct worklist
{ char name[20];
char sex;
struct date birthday;
} person;
若对结构体变量person的出生年份进行赋值时,下面正确的赋值语句
是。。。。
A. year=1976 B. birthday.year=1976
1、若程序中有以下的说明和定义:
struct abc
{ int x;char y; } 花括号后少了分号。
struct abc s1,s2;
则会发生的情况是______。
A) 编译时错 B) 程序将顺序
编译、连接、执行
C) 能顺序通过编译、连接、但不能执行 D) 能顺序通过编译、
但连接出错