【程序71】 题目:编写input()和output()函数输入,输出5个学生的数据记录。 1.程序分析: 2.程序源代码: #define N 5 struct student { char num[6]; char name[8]; int score[4]; }stu[N]; input(stu) struct student stu[]; { int i, j; for(i=0; i<N; i++) { printf("/n please input %d of %d/n", i+1, N); printf("num: "); scanf("%s", stu[i].num); printf("name: "); scanf("%s", stu[i].name); for(j=0; j<3; j++) { printf("score %d.", j+1); scanf("%d", &stu[i].score[j]); } printf("/n"); } } print(stu) struct student stu[]; { int i, j; printf("/nNo. Name Sco1 Sco2 Sco3/n"); for(i=0; i<N; i++) { printf("%-6s%-10s", stu[i].num, stu[i].name); for(j=0;j<3;j++) printf("%-8d", stu[i].score[j]); printf("/n"); } } main() { input(); print(); } 【程序72】 题目:创建一个链表。 1.程序分析: 2.程序源代码: /* creat a list */ #include "stdlib.h" #include "stdio.h" struct list { int data; struct list *next; }; /* 欢迎访问 C++Builder研究 - www.ccrun.com */ typedef struct list node; typedef node *link; void main() { link ptr, head; int num, i; ptr = (link)malloc(sizeof(node)); ptr = head; printf("please input 5 numbers==>/n"); for(i=0; i<=4; i++) { scanf("%d", &num); ptr->data = num; ptr->next = (link)malloc(sizeof(node)); if(i==4) ptr->next = NULL; else ptr = ptr->next; } ptr = head; while(ptr != NULL) { printf("The value is ==>%d/n", ptr->data); tr = ptr->next; } } 【程序73】 题目:反向输出一个链表。 1.程序分析: 2.程序源代码: /*reverse output a list*/ #include "stdlib.h" #include "stdio.h" struct list { int data; struct list *next; }; typedef struct list node; typedef node *link; void main() { link ptr, head, tail; int num, i; tail = (link)malloc(sizeof(node)); tail->next = NULL; ptr = tail; printf("/nplease input 5 data==>/n"); for(i=0; i<=4; i++) { scanf("%d", &num); ptr->data = num; head = (link)malloc(sizeof(node)); head->next = ptr; ptr = head; } ptr = ptr->next; while(ptr != NULL) { printf("The value is ==>%d/n", ptr->data); ptr = ptr->next; } } 【程序74】 题目:连接两个链表。 1.程序分析: 2.程序源代码: #include "stdlib.h" #include "stdio.h" struct list { int data; struct list *next; }; typedef struct list node; typedef node *link; link delete_node(link pointer, link tmp) { if(tmp == NULL) /* delete first node */ return pointer->next; else { if(tmp->next->next == NULL) /* delete last node */ tmp->next = NULL; else /* delete the other node */ tmp->next = tmp->next->next; return pointer; } } void selection_sort(link pointer, int num) { link tmp, btmp; int i, min; for(i=0; i<num; i++) { tmp = pointer; min = tmp->data; btmp = NULL; while(tmp->next) { if(min > tmp->next->data) { min = tmp->next->data; btmp = tmp; } tmp = tmp->next; } printf("/40: %d/n", min); pointer = delete_node(pointer, btmp); } } link create_list(int array[], int num) { link tmp1, tmp2, pointer; int i; pointer = (link)malloc(sizeof(node)); pointer->data = array[0]; tmp1 = pointer; for(i=1; i<num; i++) { tmp2 = (link)malloc(sizeof(node)); tmp2->next = NULL; tmp2->data = array[i]; tmp1->next = tmp2; tmp1 = tmp1->next; } return pointer; } link concatenate(link pointer1, link pointer2) { link tmp; tmp = pointer1; while(tmp->next) tmp = tmp->next; tmp->next =pointer2; return pointer1; } void main(void) { int arr1[] = {3, 12, 8, 9, 11}; link ptr; ptr = create_list(arr1, 5); selection_sort(ptr, 5); } 【程序75】 题目:放松一下,算一道简单的题目。 1.程序分析: 2.程序源代码: /* 63 63 72 75 6E 2E 63 6F 6D */ main() { int i, n; for(i=1; i<5; i++) { n = 0; if(i != 1) n = n + 1; if(i == 3) n = n + 1; if(i == 4) n = n + 1; if(i != 4) n = n + 1; if(n == 3) printf("zhu hao shi de shi:%c", 64+i); } } 【程序76】 题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n, 当输入n为奇数时,调用函数 1/1+1/3+...+1/n(利用指针函数) 1.程序分析: 2.程序源代码: main() #include "stdio.h" main() { float peven(), podd(), dcall(); float sum; int n; while (1) { scanf("%d", &n); if(n > 1) break; } if(n % 2 == 0) { printf("Even="); sum = dcall(peven, n); } else { printf("Odd="); sum = dcall(podd, n); } printf("%f", sum); } float peven(int n) { float s; int i; s = 1; for(i=2; i<=n; i+=2) s += 1 / (float)i; return(s); } float podd(n) int n; { float s; int i; s = 0; for(i=1; i<=n; i+=2) s += 1 / (float)i; return(s); } float dcall(fp, n) float (*fp)(); int n; { float s; s = (*fp)(n); return(s); } 【程序77】 题目:填空练习(指向指针的指针) 1.程序分析: 2.程序源代码: main() { char *s[] = {"man", "woman", "girl", "boy", "sister"}; char **q; int k; for(k=0; k<5; k++) { ; /* 这里填写什么语句 */ printf("%s/n", *q); } } 【程序78】 题目:找到年龄最大的人,并输出。请找出程序中有什么问题。 1.程序分析: 2.程序源代码: #define N 4 #include "stdio.h" static struct man { char name[20]; int age; }person[N]={"li", 18, "wang", 19, "zhang", 20, "sun", 22}; /* 欢迎访问 C++Builder研究 - www.ccrun.com */ main() { struct man *q, *p; int i, m=0; p=person; for (i=0; i<N; i++) { if(mage) q = p++; m = q->age; } printf("%s, %d", (*q).name, (*q).age); } 【程序79】 题目:字符串排序。 1.程序分析: 2.程序源代码: main() { char *str1[20], *str2[20], *str3[20]; char swap(); printf("please input three strings/n"); scanf("%s", str1); scanf("%s", str2); scanf("%s", str3); if(strcmp(str1, str2)>0) swap(str1, str2); if(strcmp(str1, str3)>0) swap(str1, str3); if(strcmp(str2, str3)>0) swap(str2, str3); printf("after being sorted/n"); printf("%s/n%s/n%s/n", str1, str2, str3); } char swap(p1, p2) char *p1, *p2; { char *p[20]; strcpy(p, p1); strcpy(p1, p2); strcpy(p2, p); } 【程序80】 题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子? 1.程序分析: 2.程序源代码: main() { int i, m, j, k, count; for(i=4; i<10000; i+=4) { count = 0; m = i; for(k=0; k<5; k++) { j = i / 4 * 5 + 1; i = j; if(j % 4 == 0) count++; else break; } i = m; if(count == 4) { printf("%d/n", count); break; } } } |