STACK *CreateNode(int num); STACK *PushStack(int num); int PopStack(void); int main() {
int pushNum[5] = {111, 222, 333, 444, 555}, popNum[5], i; for (i = 0; i < 5; i++) {
PushStack(pushNum[i]);
printf(\ }
for (i = 0; i < 5; i++) {
popNum[i] = PopStack();
printf(\ }
return 0; }
/* 函数功能:生成一个新的节点,并为该节点赋初值,返回指向新的节点的指针 */ STACK *CreateNode(int num) {
STACK *p;
p = (STACK *)malloc(sizeof(STACK)); if (p == NULL) {
printf(\ exit(0); }
p->next = NULL; /* 为新建的节点指针域赋空指针 */ p->data = num; /* 为新建的节点数据区赋值 */ return p; }
/* 函数功能:将整型变量num的值压入堆栈,返回指向链表新节点的指针 */ STACK *PushStack(int num) {
if (nodeNum == 0) /* 若为首节点,则保留该节点地址在head中*/ {
head = CreateNode(num); pr = head;
nodeNum++; /* 堆栈节点数寄存器+1 */ }
else /* 若不是首节点,则将新建节点连到链表的结尾处 */ {
pr->next = CreateNode(num);
pr = pr->next;
nodeNum++; /* 堆栈节点数寄存器+1 */ }
return pr; }
/* 函数功能:将当前栈顶的数据弹出堆栈,返回从堆栈中弹出的数据 */ int PopStack(void) {
STACK *p = head; int result; for (;;) {
if (p->next == NULL) /* 查找最后一个节点 */ {
break; } else {
pr = p; /* 记录最后一个节点的前一个节点的地址 */ p = p->next;
nodeNum--; /* 堆栈节点数寄存器-1 */ } }
pr->next = NULL; /* 将末节点的前一个节点置成末节点 */ result = p->data; free(p);
return result; }
Q1330.(50分)13个人围成一圈,从第1个人开始顺序报号1、2、3,凡报到3的人退出圈子。找出最后留在圈子里的人原来的序号。要求用结构体编程实现。 程序的运行示例如下:
出圈成员及顺序: 3 6 9 12 2 7 11 4 10 5 1 8 最后的成员是: 13 参考答案
#include
#define N 13
struct person {
int number; int nextp; } link[N + 1];
int main(void) {
int i, count, h;
/* 建立队列 */ for (i = 1; i <= N; i++) {
if (i == N) {
link[i].nextp = 1; } else {
link[i].nextp = i + 1; }
link[i].number = i; }
printf(\ count = 0; h = N;
printf(\出圈成员及顺序:\ while (count < N - 1) {
i = 0;
while (i != 3) {
h = link[h].nextp; if (link[h].number) {
i++; } }
printf(\ link[h].number = 0; count++; }
printf(\最后的成员是:\ for (i = 1; i <= N; i++) {
if (link[i].number) {
printf(\
} }
return 0; }
Q1332.(10分)创建并输出一个一维数组(含20个元素),数组元素的值分别是下标的3倍多2。
**输出格式要求:\程序的运行示例如下:
2 5 8 11 14 17 20 23 26 29 32 35 38 41 44 47 50 53 56 59 参考答案
#include
main() {
int a[20], k;
for (k = 0; k < 20; k++) {
a[k] = 3 * k + 2; printf(\ } }
Q539.(10分)从键盘输入某班学生某门课的成绩(已知每班人数最多不超过40人,具体人数由键盘输入,成绩为整数),试编程计算其平均分。
**输入格式要求:\提示信息:\ **输出格式要求:\程序的运行示例如下: Input n:3
Input score:80 100 60 Average score is 80 参考答案
#include
intmain() {
inti, result;
for(i = 1; i <= 20; i++) {
result = i * i; if(result > 100) break; else
printf(\ } }
Q1158.(10分)
下面程序的功能是读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*。找出其中的错误,并改正之。 #include \main()
{ int i,a,n=1; while(n<=7) { do {
scanf(\ }while(a<1 && a>50); for(i=1;i<=a;i++) printf(\ printf(\ n++; } }
参考答案
#include
int Average(int score[], int n); /* Average()函数原型 */ void ReadScore(int score[], int n); /* ReadScore()函数原型 */ int main() {
int score[N], aver, n; printf(\ scanf(\
ReadScore(score, n); /* 数组名作为函数实参调用函数ReadScore() */ aver = Average(score, n); /* 数组名作为函数实参调用函数Average() */ printf(\ return 0; }
/* 函数功能:计算n个学生成绩的平均分 */
int Average(int score[], int n) /* Average()函数定义 */ {
int i, sum = 0;
for (i = 0; i < n; i++) {
sum += score[i];