题目:编写input()和output()函数输入,输出5个学生得数据记录。
#include<cstdio>#define R registerstruct student{ char idx[10]; char name[20]; int score[4];}stu[10];inline void input()//递归函数尽量不要使用inline { for(R int i = 1;i <= 5;i++) { scanf("%s",stu[i].idx);//学号 scanf("%s",stu[i].name);//姓名 for(R int j = 1;j <= 3;j++)//语数英三科成绩 scanf("%d",&stu[i].score[j]); }}inline void output(){ printf("outputis:\n"); for(R int i = 1;i <= 5;i++,printf("\n")) { printf("idx: %-6s name:%-10s",stu[i].idx,stu[i].name); for(R int j = 1;j <= 3;j++) printf("%-8d",stu[i].score[j]); }}int main(){ input(); output();}
题目 72
题目:创建一个链表。
#include<cstdio>#include<cstdlib>#define R registertypedef struct list{ int data; struct list *next;}List, *Li;inline void init(Li &L){ L = (Li)malloc(sizeof(List)); L->next = NULL;}// 看看两个insert代码哪里不一样// 好久不写链表了,可能和主流得写法有出入,望指正 // 一般考虑使用得插入方法为insert2 inline void insert1(Li &L,R int x){ Li p; p = (Li)malloc(sizeof(List)); p->data = x; p->next = L->next; L->next = p;}inline void insert2(Li &L,R int x){ Li p; p = (Li)malloc(sizeof(List)); p->data = x; p->next = NULL; L->next = p; L = p;}inline void print(Li &L){ //输出链表 Li p; p = (Li)malloc(sizeof(List)); p = L->next; printf("Head"); for(;p != NULL;p = p->next) printf("->%d ",p->data); printf("->NULL\n");}int main(){ Li list,p,q; init(list); q = list;// 第二种插入方式会用到 for(R int x,i = 1;i <= 5;i++) { scanf("%d",&x); //insert1(list,x); insert2(q,x); } print(list);}
题目 73
题目:反向输出一个链表。
#include<cstdio>#include<cstdlib>#define R register// 按照上一个程序得内容,以另一种插入方式输出是不是可以了? // 希望能大家自己再次实现一次typedef struct list{ int data; struct list * next;}List,*Li;inline void init(Li &L){ L = (Li)malloc(sizeof(List)); L->next = NULL;}inline void insert(Li &L,R int x){ Li p; p = (Li) malloc(sizeof(List)); p->data = x; p->next = L->next; L->next = p;}inline void print(Li &L){ Li p; p = (Li)malloc(sizeof(List)); p = L->next; // 看看输出处怎么要求得,这里并没有考虑输出head和null反向 printf("Head"); for(;p != NULL;p = p->next) printf("->%d ",p->data); printf("->NULL\n");}int main(){ Li listt; init(listt); for(R int x,i = 1;i <= 5;i++) scanf("%d",&x),insert(listt,x);//代码开始变得奇怪了O。o print(listt);}
题目 74
题目:连接两个链表。
#include<cstdio>#include<cstdlib>#define R register// 其实写了一部分这个代码,大家应该会思考加不加&有何影响// 接触到得:&两种作用: 1.逻辑与 2.取地址符// 按照取地址符考虑,再尝试修改代码输出一下,就能知道有什么影响了// 这里不打算深入,读者可自行尝试 typedef struct list{ int data; struct list *next;}List,*Li;inline void init(Li &L){ L = (Li)malloc(sizeof(List)); L->next = NULL;}inline void insert(Li &L,R int x){ Li p; init(p); p->data = x; L->next = p; L = p;}inline void print(Li &L){ Li p; p = (Li)malloc(sizeof(List)); p = L->next; printf("Head"); for(;p != NULL;p = p->next) printf("->%d ",p->data); printf("->NULL\n");}// 这里实现得功能只有单纯得将两个链表拼接,如果要按顺序插入怎么处理? inline Li connect(Li l1,Li l2){ Li L; L = l1; while(l1->next != NULL) l1 = l1->next; l1->next = l2->next; return L;}int main(){ Li list1,list2; init(list1),init(list2); Li q; q = list1; for(R int x,i = 1;i <= 5;i++) scanf("%d",&x),insert(q,x); q = list2; for(R int x,i = 1;i <= 5;i++) scanf("%d",&x),insert(q,x); Li listt = connect(list1,list2); print(listt);}
题目 75
题目:放松一下,算是一道简单得题目。
感觉还是让大家体验一下手动模拟代码运行得过程比较好
#include <cstdio>#define R registerint n;// 这个代码感觉有点抽象- -// 建议大家手跑一下再运行程序 int main(){ for(R int i=1;i<5;i++) { n = 0; if(i != 1) n += 1; if(i == 3) n += 1; if(i == 4) n += 1; if(i != 4) n += 1; if(n == 3) printf("%c\n",64+i); }}