c语言实现循环队列初始化从键盘输入,2013年上半年计算机等级考试二级C语言考前密卷(8)...

本文包含计算机程序设计基础知识,涉及排序算法、队列操作、面向对象技术、软件测试、关系运算等内容,并通过具体示例加深理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二、填空题(1)排序是计算机程序设计中的一种重要操作,常见的排序方法有插入排序、【1】和选择排序等。【命题目的】需要考生记住常见的排序方法。【解题要点】常见的排序方法有插入排序(包括简单插入排序法和希尔排序法等)、交换排序(包括冒泡排序和快速排序法等)和选择排序(包括简单选择排序和堆排序等)。【考点链接】常见的排序方法及其作用机制和区别。(2)当循环队列非空且队尾指针等于队头指针时,说明循环队列已满,不能进行入队运算。这种情况称为【2】。【命题目的】本题考查了队列的基本性质。【解题要点】入队运算是指在循环队列的队尾加入一个新元素。这个运算有两个基本操作:首先将队尾指针进一(即rear=rear+1),并当rear=m+1时置rear=1;然后将新元素插入队尾指针指向的位置。当循环队列非空(s=1)时且队尾指针等于队头指针时,说明循环队列已满,不能进行入队运算,这种情况称为“上溢”。(3)【3】是一种信息隐蔽技术,目的在于将对象的使用者和对象的设计者分开。【命题目的】本题考查了面向对象技术中的一些基本概念。【解题要点】面向对象技术中包括以下几个基本概念,即对象、类、方法、消息、继承和封装,其中封装是一种信息隐蔽技术,目的在于将对象的使用者对象的和设计者分开。(4)为了便于对照检查,测试用例应由输入数据和预期的【4】两部分组成。【命题目的】本题主要考查测试的步骤。【考点链接】测试的基本方法和步骤。(5)【5】是从二维表列的方向进行的运算。【命题目的】本题考查了关系运算的基本知识。【解题要点】在关系模型的数据语言中,一般除了运用常规的集合运算,(并、交、差、笛卡尔积等)外,还定义了一些专门的关系运算,如投影、选择、连接等。前者是将关系(即二维表)看成是元组的集合,这些运算主要是从二维表的行的方向来进行的;后者主要是从二维表的列的方向来进行的运算。两者统称为关系代数。(6)定义int a=5,b=20;若执行语句printf("%d\n",++a*--b/5);后,输出的结果为【6】。解析:++和--做前缀使用的时候,先对变量进行增1或减1,之后进行其他的运算,之后按照同级运算符自左向右依次运算。(7)执行程序时的输入为123456789,则程序的运行结果为【7】。#include "stdio.h"

main(){  int a,b;

scanf("-%*2d",&a,&b);

printf("%d\n",a-b);}解析:按照函数scanf中的格式控制符的描述:"-"控制前2个数字赋给变量a,变量a的值为12,""控制将随后的1个数字作为输入数据存入变量b中,变量b的值为5,所以随后的输出为7。注意:在%和格式控制符号之间加*号,表示的是跳过相对应的输入数据。(8)阅读下面程序,则在执行时候的输出为【8】。#include "stdio.h"

main(){int x=1,y=2,z=0;

if(x=2)z=x,x=y,y=z;

printf("%d,%d\n",x,y);}解析:if语句的执行过程为:首先计算紧跟在if后面一对圆括号中的表达式,如果表达式的值为非零,则执行其后的if子句,然后去执行if语句后的下一个语句,如果表达式为零,则跳过if子句直接执行if语句后的下一个语句,if(x=2)的值为真,即x的值为2。(9)语句printf("%d\n",′H′-′0′+64);的执行结果为【9】。解析:在C程序中的字符量可参与任何整数运算,在运算的时候都是以ASCII值进行的。(10)阅读下面程序,则程序的执行结果为【10】。#include "stdio.h"

main(){ int a=10;

fun(a);

printf("%d\n",a);}

fun(int x){ x=50;}解析:函数调用的时候,函数名字必须与所调用的函数名完全一致,形参与实参类型要一致,在没有给出函数返回值类型的情况下,默认为整形,当返回值为整型放到主函数后面时,可以不需要事先说明就调用这个函数。(11)以下程序的输出结果是【11】。int fun(int x,int y,int *p,int *q){ *p=x*y;

*q=x/y;}

main(){int a,b,c,d;

a=4;b=3;

fun(a,b,&c,&d);

printf("%d,%d\n",c,d);}解析:通过地址传递可以在被调函数中对调用函数中的变量进行引用,通过地址的传递,在经过函数调用以后,改变了c,d变量的值。(12)下面程序是求出数组arr的两条对角线上元素之和,请填空。#include "stdio.h"

main(){int arr[3][3]={2,3,4,8,3,2,7,9,8},a=0,b=0,i,j;

for(i=0;i<3;i++)for(j=0;j<3;j++)if(【12】)a=a+arr[i][j];

for(i=0;i<3;i++)for(【13】;j>=0;j--)if(【14】)b=b+ arr[i][j];

printf("%d,%d\n",a,b);}解析:由于是求对角线元素的和,所以【12】是判断是否为对角线元素的,填i==j这个判断条件;对于次对角线的求和,初始化的时候应该是从数组的列最大开始,由于判断条件是j>=0,所以初始化时候应该为最大值减1,即j=2,所以【13】应填j=2;【14】是对次对角线的判断,所以填i+j==2。(13)下面程序的功能是:对字符串从小到大进行排序并输出,请填空。#include "string.h"

#include "stdio.h"

sort(char *a[],int n){ int i,j;

char *p;

for(j=1;j<=n-1;j++)for(i=0;【15】;i++)if(【16】>0){ p=a[i];

a[i]=a[i+1];

a[i+1]=p;}}

main(){ int i;

char *book[]={"itisme","itisyou","howareyou","fine","goodnight","goodbye"};

sort(【17】);

for(i=0;i<6;i++)printf("%s\n",book[i]);}解析:这个题目其实用的是冒泡排序法,每一次都找一个最大的,之后顺序的从头开始排列。所以【15】是一次循环的判定条件,填i

if(k==1)【18】;

else【19】;}解析:由于题目没有给循环语句,所以实现累加一定是用递归算法。(15)阅读下列程序,则程序实现的功能是【20】。#include "stdio.h"

struct node

{ char data;

struct node *next; } *head;

fun(struct node *q){ if(head == NULL){q->next=NULL;

head=q;}

else

{ q->next=head;

head=q;}}

main(){char ch;

struct node *p;

head = NULL;

while((ch=getchar())!=′\n′){p=(struct node *)malloc(sizeof(struct node));

p->data=ch;

fun(p); }

p=head;

while(p!=NULL){printf("%c",p->data);

p=p->next; }}解析:本题目的功能是从键盘输入一行字符,调用函数建立反序的链表,然后输出整个链表,从主函数开始依次向下对程序进行分析,分析初始化状态的程序,之后再分析函数的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值