前言
某不知名学校C语言作业 这一次是结构体的使用和链表的操作 你会发现 这一期的分析变少了 因为写着写着就发现这次考的基本都是操作 思路并不是那么重要 如果硬要写反而变成了学习笔记 而且基本都是基础知识 更适合写一篇文章(绝对不鸽)
已经学过了指针知识 加上这次老师也给了答案(甚至有些还有注释)所以代码应该还是能看懂的
(好吧其实是我自己懒得写那么多注释了)
而且我们学校老师出题那是真的恶心 输入输出一点不给 一般的题还好 你结构体和链表这样搞我真的谢了 还有**的清览题库,输入到5行之后还自动给你省略,根本看不出自己错哪了, 卡输出了半个小时发现是逗号前面少一个空格 实在逆天 与其说在写程序 更觉得自己在玩找不同
算了 看题目吧 吐槽也改变不了什么
第一题
工资明细
编写程序用结构体存放下表中的数据,然后输出每人的姓名和工资实发数(基本工资+浮动工资-支出)。
分析:考的是结构体的基础知识点 等我有时间再补上一篇文章写结构体的知识点 这道题 只要学过结构体 基本都会
老师答案:
#include "stdio.h"
#include "string.h"
struct PERSON {
char name[10];
double bSalary;
double cSalary;
double pay;
} P[3]={"zhao",240.00,420.00,45.00,"qian",360.00,120.00,30.00,"sun",560.00,0.0,180.00};
int main()
{
for(int i=0;i <3;i++)
printf("%s:%.2lf\n",P[i].name,P[i].bSalary+P[i].cSalary-P[i].pay);
return 0;
}
个人答案:
# include <stdio.h>
struct person{//定义一个结构体 别名为person
char name[20];
float bwage;
float fwage;//输出用浮点数
float pay;
};
//struct person zhao;
//struct person qian;有很多种初始化方法
//struct person sun;
//struct person zhao = {"zhao",240.00,420.00,45.00};
//struct person qian = {"qian",360.00,120.00,30.00};
//struct person sun = {"sun",560.00,000.00,180.00};
//我跟老师答案一样用的是结构体数组的方法 最简便
struct person people[3]={
{"zhao",240.00,420.00,45.00},
{"qian",360.00,120.00,30.00},
{"sun",560.00,000.00,180.00}
};
int main()
{
//像遍历数组一样的操作
for(int i=0;i<3;i++){
//struct person per = people[i]; 一种简便的写法 后面有用到 这里不用先
printf("%s:%.2f",people[i].name,people[i].bwage+people[i].fwage-people[i].pay);
printf("\n");
}
return 0;
}
第二题
实现链表的反转
链表节点类型如下: struct linka { int data; linka* next; }; 创建一个这样的链表:1->2->3->4->5,编写程序实现该链表的反转,即5->4->3->2->1。
分析:暂无 知识点太大 感觉得写个文章
老师答案:
#include "stdio.h"
#include "stdlib.h"
#define N 5
int E[N];
typedef int ElemType;
typedef struct linka { //单链表结点类型
int data; //数据域
struct linka *next; //指针域:指向直接后继结点
} LNode, *LinkList; //LNode为单链表结构体类型,LinkList为单链表指针类型
void CreateLinkF(LinkList *L)
{ //头插法创建单链表
LinkList s;
*L=(LinkList)malloc(sizeof(LNode)); //创建头结点
(*L)->next=NULL; //初始时为空表
int n=N,i=0;
for (; n>0; n--,i++) { //创建n个结点链表
s=(LinkList)malloc(sizeof(LNode)); //创建新结点
s->data=E[i];
s->next=(*L)->next; //将s增加到开始结点之前
(*L)->next=s; //头结点之后
}
}
void CreateLinkR(LinkList *L)
{ //尾插法创建单链表
LinkList p,s;
p=*L=(LinkList)malloc(sizeof(LNode));
int n=N;
int c=1;
for (; n>0; n--,c++) { //创建n个结点链表
s=(LinkList)malloc(sizeof(LNode)); //创建新结点
s->data=c;
s->next=(*L)->next; //将s增加到开始结点之前
p->next=s, p=s;
}
p->next=NULL; //尾结点
}
void ListSave(LinkList L)
{ //遍历L中的每个元素,并将其节点数据按顺序存在数组中
LinkList p=L->next; //p指向开始结点
int i=0;
while(p!=NULL) { //若不是链尾继续
E[i]=p->data;
p=p->next; //p指向直接后继结点
i++;
}
}
void ListTraverse(LinkList L)
{ //遍历L中的每个元素
LinkList p=L->next; //p指向开始结点
int i=0;
while(p!=NULL) { //若不是链尾继续
printf("%d ",p->data);
p=p->next; //p指向直接后继结点
i++;
}
}
int main()
{
LinkList H;
CreateLinkR(&H);
ListSave(H);
CreateLinkF(&H);
ListTraverse(H);
return 0;
}
个人答案
#include<stdio.h>
#include<stdlib.h>
typedef struct Node{
int val;
struct Node *next;
}node;
node *initNode(){
node *end=(node *)malloc(sizeof(node));//尾指针
node *p=(node *)malloc(sizeof(node));//首元节点
p->val=1;
p->next=NULL;//习惯操作
end=p;
for(int i=2;i<=5;i++){
node *newnode=(node *)malloc(sizeof(node));
newnode->val=i;
newnode->next=NULL;
//尾插法 和老师相反
end->next=newnode;
end=newnode;
}
return p;
}
void print(node *p){
node *temp=p;
while(temp){
printf("%d ",temp->val);
temp=temp->next;
}
printf("\n");
}
node *iteration(node *p){
if(p==NULL||p->next==NULL){
return p;
}else{
node *pre=NULL;
node *mid=p;
node *end=p->next;
while(1){
mid->next=pre;
if(end==NULL){
break;
}
pre=mid;
mid=end;
end=end->next;
}
p=mid;
return p;
}
}
int main(){
node *p=initNode();
p=iteration(p);
print(p);
return 0;
}
第三题
结点插入到表中
已知带头结点的动态单向链表L中的结点是按整数值递增排列的,试编写函数将值x为的结点插入到表L中,使L仍然有序。
老师答案
#include "stdio.h"
#include "stdlib.h"
typedef int ElemType;
typedef struct linka { //单链表结点类型
int data; //数据域
struct linka *next; //指针域:指向直接后继结点
} LNode, *LinkList; //LNode为单链表结构体类型,LinkList为单链表指针类型
void CreateLinkR(LinkList *L,int n,int A[])
{ //尾插法创建单链表,调用input输入函数输入数据
LinkList p,s;
p=*L=(LinkList)malloc(sizeof(LNode)); //创建头结点
for (; n>0; n--) { //创建n个结点链表
s=(LinkList)malloc(sizeof(LNode)); //创建新结点
s->data=A[n-1]; //调用input输入数据域
p->next=s, p=s; //将s插入到当前链表末尾
}
p->next=NULL; //尾结点
}
int ListInsert(LinkList *L,int e)
{ //在链表中按照顺序插入元素e
LinkList s,p=*L,r=(*L)->next; //p指向头结点
while(p!=NULL &&r!=NULL&&r->data <e) { //寻找插入位置
p=p->next; //p指向直接后继结点
r=r->next;
}
if(p==NULL) return 0; //i值不合法返回假(0)
else{
s=(LinkList)malloc(sizeof(LNode)); //创建新结点
s->data=e;
s->next=p->next, p->next=s; //结点插入算法
}
return 1; //操作成功返回真(1)
}
void ListTraverse(LinkList L)
{ //遍历L中的每个元素
LinkList p=L->next; //p指向开始结点
while(p!=NULL) { //若不是链尾继续
printf("%d ",p->data); //调用函数visit()访问结点
p=p->next; //p指向直接后继结点
}
}
int main()
{
LinkList H;
int A[9]={10,9, 8,6,5,4,3,2,1};
CreateLinkR(&H,9,A);
int n;
scanf("%d",&n);
ListInsert(&H,n);
ListTraverse(H);
return 0;
}
个人答案
#include <stdio.h>
#include <stdlib.h>
#define N 9
struct LNode
{
int data;
struct LNode *next;
} ;
struct LNode* create_rear(int a[], int n)
{
/*新建一个链表h,每个结点依次插入到链尾,将链表的头指针返回 */
struct LNode *h = NULL;
struct LNode *s, *r; /*用s指向要插入结点,r指向链表的尾结点*/
int i;
for (i = 0; i < n; i++)
{
s = (struct LNode *)malloc(sizeof(struct LNode));
s->data = a[i];
s->next = NULL;
if (h == NULL)
h = s; /*如果链表为空,则头指针h指向s*/
else
r->next = s; /*否则将s链接到尾结点r之后*/
r = s; /*将r指向尾结点*/
}
return h; /*返回链表的头指针*/
}
void output(struct LNode *h)
{
/*将链表h的各个结点的数据域依次输出,即遍历该链表*/
struct LNode *p = h;/*从第一个结点开始,用p依次指向各个结点*/
while (p)
{
/*只要p是一个非空结点,则输出其数据域,然后将p后移*/
printf("%d ", p->data);
p = p->next; //将p后移
}
printf("\n");
}
struct LNode* insert_sort(struct LNode* h, int x)
{
//返回头指针。
struct LNode *s, *pre, *p;//s表示插入结点,pre为p的前驱
s = (struct LNode *)malloc(sizeof(struct LNode));
s->data = x;
if (h == NULL)
{
s->next = NULL;
h = s;
}
if (x <= h->data)
{
//防止x不大于链表中第一个结点的数据域,将s插入链首
s->next = h;
h = s;
}
else
{
p = h;
while (p && x > p->data)
{
//果p不空,且x不大于p所指结点的数据域,p后移,pre为p的前驱
pre = p;
p = p->next;
}
//将s插入到pre所指结点之后。
s->next = pre->next;
pre->next = s;
}
return h;
}
int main()
{
int i, x;
struct LNode* head;
int a[]={1,2,3,4,5,6,8,9,10};//初始化
// for (i = 0; i < N; i++)
// scanf("%d", &a[i]); 原来题目直接初始化...
//创建链表并利用数组初始化
head = create_rear(a, N);
scanf("%d", &x);
//插入x
head = insert_sort(head, x);
//调用函数输出
output(head);
return 0;
}
第四题
计算日期是当年的第几天
定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题
分析:复习一下闰年判断:能被4整除但不能被100整除 或者能被400整除
老师答案:
#include "stdio.h"
struct {
int year;
int month;
int day;
} date;
int main() {
int i,days;
int day_tab[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
scanf("%d %d %d",&date. year,&date.month,&date.day);
days=0;
for(i=1; i < date.month; i++)
days=days+day_tab[i];
days=days+date.day;
if((date.year%4==0 && date.year%100!=0 || date.year%400==0) && date.month>=3)
days=days+1;
printf("%d/%d is the %dth day in %d.\n",date.month,date.day,days,date.year);
return 0;
}
个人答案:
# include<stdio.h>
struct Date
{
int year;
int month;
int day;
}Date1;
int main()
{
int m,n=0,i,j,k,flag=0;
scanf("%d %d %d",&Date1.year,&Date1.month,&Date1.day);
if(Date1.year%4==0) //判断闰年问题
{
if(Date1.year%100!=0)
{
flag=1;
}
}
if(Date1.year%400==0)
{
flag=1;
}
for(i=1;i<Date1.month;i++) //天数的累加
{
//老师用数组存月份天数 我用swicth吧
switch(i)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: m=31;break;
case 4:
case 6:
case 9:
case 11: m=30;break;
}
if(i==2)
{
if(flag)
{
m=29;
}
else
{
m=28;
}
}
n+=m;
}
n+=Date1.day;
printf("%d/%d is the %dth day in %d.",Date1.month,Date1.day,n,Date1.year);
return 0;
}
第五题
输入10个学生数据,计算总平均成绩,以及最高分的学生数据
有5个学生,每个学生的数据包括学号、姓名、3门课程的成绩,从键盘输入10个学生数据,要求输出3门课程总平均成绩,以及最高分的学生数据(包括学号、姓名、3门课程平均成绩、平均分数)
分析:
老师答案:
#include "stdio.h"
#define N 5
struct student {
char num[6];
char name[8];
float score[3];
float avr;
} stu[N];
int main() {
int i,j,maxi;
float sum,max,average;
for (i=0; i <N; i++) {
scanf("%s",stu[i].num);
scanf("%s",stu[i].name);
for (j=0; j <3; j++) {
scanf("%f",&stu[i].score[j]);
}
}
average=0;
max=0;
maxi=0;
for (i=0; i <N; i++) {
sum=0;
for (j=0; j <3; j++)
sum+=stu[i].score[j];
stu[i].avr=sum/3.0;
average+=stu[i].avr;
if (sum>max) {
max=sum;
maxi=i;
}
}
average/=N;
printf("NO. name score1 score2 score3 average\n");
for (i=0; i <N; i++) {
printf("%s %s ",stu[i].num,stu[i].name);
for (j=0; j <3; j++)
printf("%.2f ",stu[i].score[j]);
printf("%.2f\n",stu[i].avr);
}
printf("average=%5.2f\n",average);
printf("The highest score is : student %s,%s\n",stu[maxi].num,stu[maxi].name);
printf("his scores are:%6.2f,%6.2f,%6.2f,average:%5.2f.\n",stu[maxi].score[0],stu[maxi].score[1],stu[maxi].score[2],stu[maxi].avr);
return 0;
}
个人答案:(小心卡输出
# include <stdio.h>
struct person{
int num;
char name[20];
float score;
float score2;
float score3;
};
struct person student[5];
int main()
{
float average[10],allaver;//开数组存平均数
float max,sum=0;
int cnt;
for(int i=0;i<5;i++){
scanf("%d%s%f%f%f",&student[i].num,student[i].name,&student[i].score,&student[i].score2,&student[i].score3);
}
printf("NO. name score1 score2 score3 average\n");
struct person temp;
for (int i = 0;i< 5; i++) {
average[i] = (student[i].score+student[i].score2+student[i].score3)/3;
sum+=average[i];
if(max<average[i]){
max=average[i];
cnt=i;
}
}
allaver=sum/5;
for(int i=0;i<5;i++){
struct person per = student[i];
printf("%d %s %.2f %.2f %.2f %.2f",per.num,per.name,per.score,per.score2,per.score3,average[i]);
printf("\n");
}
printf("average=%.2f\n",allaver);
printf("The highest score is : student %d,%s\n",student[cnt].num,student[cnt].name);
printf("his scores are:%.2f, %.2f, %.2f,average:%.2f.",student[cnt].score,student[cnt].score2,student[cnt].score3,max);
return 0;
}
第六题
剔除链表中的重复数据
有两个链表a和b,设结点中包含学号、姓名。从a链表中删去与b链表中有相同学号的那些结点。 链表a= {{101,"Wang"},{102,"Li"},{105,"Zhang"},{106,"Wei"}}; 链表b= {{103,"Zhang"},{104,"Ma"},{105,"Chen"},{107,"Guo"},{108,"lui"}};
老师答案:
#include "stdio.h"
#include "string.h"
#define LA 4
#define LB 5
struct student {
int num;
char name[8];
struct student *next;
} a[LA],b[LB];
int main() {
struct student a[LA]= {{101,"Wang"},{102,"Li"},{105,"Zhang"},{106,"Wei"}};
struct student b[LB]= {{103,"Zhang"},{104,"Ma"},{105,"Chen"},{107,"Guo"},{108,"lui"}};
int i;
struct student *p,*p1,*p2,*head1,*head2;
head1=a;
head2=b;
printf("list A:\n");
for (p1=head1,i=1; i <=LA; i++) {
if(i <LA)
p1->next=a+i;
else
p1->next=NULL;
printf("%d %s\n",p1->num,p1->name);
if(i <LA)
p1=p1->next;
}
printf("list B:\n");
for (p2=head2,i=1; i <=LB; i++) {
if (i <LB)
p2->next=b+i;
else
p2->next=NULL;
printf("%d %s\n",p2->num,p2->name);
if (i <LB)
p2=p2->next;
}
p1=head1;
while(p1!=NULL) {
p2=head2;
while ((p1->num != p2->num) && (p2->next!=NULL))
p2=p2->next;
if (p1->num == p2->num) {
if (p1==head1)
head1=p1->next;
else {
p->next=p1->next;
p1=p1->next;
}
} else {
p=p1;
p1=p1->next;
}
}
printf("result:\n");
p1=head1;
while(p1!=NULL) {
printf("%d %s\n",p1->num,p1->name);
p1=p1->next;
}
return 0;
}
个人答案:
#include <stdio.h>
typedef struct student
{
int num;
char name[20];
struct student *next;
} student;
student *del(student *a, student *b)
{
student *pre, *current, *head;
head = a;
while (b != NULL)
{
//重置指针指向a链表的头部
pre = head;
current = head->next;
//a 链表的头等于b
if (pre->num == b->num)
{
pre->next = NULL;
pre = current;
current = current->next;
//更新表头
head = pre;
}
else
{
while (pre->next != NULL)
{
if (current->num == b->num)
{
//找到就删除
pre->next = current->next;
break;
}
else
{
//否则继续遍历
pre = pre->next;
current = current->next;
}
}
}
b = b->next;
}
return head;
}
void printList(student *root)
{
while (root != NULL)
{
printf("%d %s\n", root->num, root->name);
root = root->next;
}
}
int main()
{
student a[4] = { { 101, "Wang" }, { 102, "Li" }, { 105, "Zhang" } ,{ 106, "Wei" } };
for (int i = 0; i < 3; i++)
{
a[i].next = &a[i + 1];
}
a[3].next = NULL;
printf("list A:\n");
printList(&a[0]);
student b[5] = { { 103, "Zhang" }, { 104, "Ma" }, { 105, "Chen" } , { 107, "Guo" }, { 108, "lui" }};
for (int i = 0; i < 4; i++)
{
b[i].next = &b[i + 1];
}
b[4].next = NULL;
printf("list B:\n");
printList(&b[0]);
student *combine = del(a, b);
printf("result:\n");
while (combine != NULL)
{
printf("%d %s\n", combine->num, combine->name);
combine = combine->next;
}
return 0;
}
第七题
按要求实现程序
编写程序,创建一个按学号(第一个成员)升序排列的新链表并输出链表中的数据,当学号相同时保留较高的成绩。链表中每个结点的学号、成绩来自结构数组,数组中数据用测试数据初始化 {20304,75},{20311,89},{20303,62},{20304,87},{20320,79}
分析:这题我没有用链表也写出来了 老师的答案还是用了链表 代码量比我高的不是一点。。但是用链表可以练练手 还是推荐看链表写法
老师答案:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
typedef struct node{
long num;
int score;
struct node *next;
}NODE;
NODE *creat(void){
NODE *head=NULL,*p1=NULL,*p2=NULL;
long num;
int score;
int n=0;
while(1){
scanf("%ld %d",&num,&score);
if(num==0)break;
n++;
p1=(NODE *)malloc(sizeof(NODE));
p1->num=num;
p1->score=score;
p1->next=NULL;
if(n==1)
head=p2=p1;
else
p2->next=p1;
p2=p1;
}
return head;
}
NODE *insert(NODE *head,NODE *p0){
NODE *p1=NULL,*p2=NULL;
if(head==NULL){
head=p0;
p0->next=NULL;
}
else{
p1=head;
while((p0->num>p1->num)&&(p1->next!=NULL)){
p2=p1;
p1=p1->next;
}
if(p1==head&&p0->num <=p1->num){
p0->next=head;
head=p0;
}
else if(p0->num <=p1->num){
p2->next=p0;
p0->next=p1;
}
else{
p1->next=p0;
p0->next=NULL;
}
}
return head;
}
NODE *sort(NODE *head){
NODE *p=NULL,*temp=NULL;
p=head->next;
head->next=NULL;
while(p!=NULL){
temp=p->next;
head=insert(head,p);
p=temp;
}
return head;
}
void print(NODE *head){
NODE *p=NULL;
p=head;
while(p!=NULL){
printf("%ld %d\n",p->num,p->score);
p=p->next;
}
}
NODE *delNODE(NODE *head,NODE *p1,NODE *p2){
if(p1==head){
head=p1->next;
free(p1);
}
else{
p2->next=p1->next;
free(p1);
}
return head;
}
int main(void){
NODE *p=NULL,*p1=NULL,*p2=NULL,*p3=NULL;
p=creat();
p=sort(p);
p1=p2=p;
while(p1!=NULL){
p2=p1->next;
if(p2==NULL)break;
if(p1->num==p2->num&&p1->score <=p2->score){
p=delNODE(p,p1,p3);
p1=p2;
}
else if(p1->num==p2->num&&p1->score>p2->score){
p=delNODE(p,p2,p1);
}
else{
p3=p1;
p1=p1->next;
}
}
print(p);
}
个人答案:
#include<stdio.h>
struct Student {
int number;
int score;
} stu[99], temp;
int main() {
int n, i, j,cnt;
for (int i = 0; i < 5; i++) {
scanf("%d", &stu[i].number);
scanf("%d", &stu[i].score);
}
for (i = 0; i < 4; i++) {
for (j = i + 1; j < 5; j++) {
if(stu[i].number==stu[j].number){
if(stu[i].score>stu[j].score){
cnt=j;
}
else cnt=i;
}
if (stu[j].number < stu[i].number) {
temp = stu[j];
stu[j] = stu[i];
stu[i] = temp;
}
}
}
for (int i = 0; i < 5; i++) {
if(i!=cnt)
printf("%d %d\n", stu[i].number, stu[i].score);
}
return 0;
}
第八题
比对结构体中的成绩,由高到低输出
有n个学生的信息(学号、姓名、成绩),要求按照成绩的高低输出各学生的信息 {{10101,"Zhang",78},{10103,"Wang",98.5},{10106,"Li",86},{10108,"Ling",73.5},{10110,"Fun",100}
分析:本质考的就是一个排序 把结构体中的data拿出来排序就好
老师答案:
#include "stdio.h"
struct student {
int num;
char name[20];
float score;
};
int main() {
struct student stu[5]= {{10101,"Zhang",78},{10103,"Wang",98.5},{10106,"Li",86},
{10108,"Ling",73.5},{10110,"Fun",100}
};
struct student temp;
const int n=5;
int i,j,k;
for(i=0; i <n-1; i++) {
k=i;
for(j=i+1; j <n; j++)
if(stu[j].score>stu[k].score)
k=j;
temp=stu[k];
stu[k]=stu[i];
stu[i]=temp;
}
for(i=0; i <n; i++)
printf("%d %s %.2f\n",stu[i].num,stu[i].name,stu[i].score);
printf("\n");
return 0;
}
个人答案:
# include <stdio.h>
struct person{
int num;
char name[20];
float score;
};
struct person student[5]={//推荐数据分开分行写 不然小心第二天拿工资
{10101,"Zhang",78},
{10103,"Wang",98.5},
{10106,"Li",86},
{10108,"Ling",73.5},
{10110,"Fun",100}
};
int main()
{
struct person temp;
for (int i = 0; i < 5; i++) {
for (int j = i + 1; j < 5; j++) {
if (student[j].score > student[i].score) {
temp = student[j];
student[j] = student[i];
student[i] = temp;
}
}
}
for(int i=0;i<5;i++){
struct person per = student[i];//简便写法 用指针也行
printf("%d %s %.2f",per.num,per.name,per.score);
printf("\n");
}
return 0;
}
第九题
输出使用结构体中的数据
有3个学生的信息,放在结构体数组中,要求输出全部学生的信息 {{10101,"Li Lin",'M',18},{10102,"Zhang Fun",'M',19},{10104,"Wang Min",'F',20}}
分析:水题?水题! 把第一题代码改一改而已
老师答案:
#include "stdio.h"
struct student {
int num;
char name[20];
char sex;
int age;
};
struct student stu[3]= {{10101,"Li Lin",'M',18},{10102,"Zhang Fun",'M',19},{10104,"Wang Min",'F',20}};
int main() {
struct student *p;
printf("No. Name sex age\n");
for (p=stu; p < stu+3; p++)
printf("%d %s %c %d\n",p->num, p->name, p->sex, p->age);
return 0;
}
个人答案:
# include <stdio.h>
struct person{
int num;
char name[20];
char sex;
int age;
};
struct person student[3]={
{10101,"Li Lin",'M',18},
{10102,"Zhang Fun",'M',19},
{10104,"Wang Min",'F',20}
};
int main()
{
printf("No. Name sex age\n");
for(int i=0;i<3;i++){
struct person per = student[i];
printf("%d %s %c %d",per.num,per.name,per.sex,per.age);
printf("\n");
}
return 0;
}
第十题
结构题指针应用
通过指向结构体变量的指针变量输出结构体变量中成员的信息
分析:这。。。硬要我用指针 直接放弃思考 化身打表哥
老师答案:
#include "stdio.h"
#include "string.h"
int main() {
struct student {
long num;
char name[20];
char sex;
float score;
};
struct student stu_1;
struct student * p;
p=&stu_1;
stu_1.num=10101;
strcpy(stu_1.name,"Li Lin");
stu_1.sex='M';
stu_1.score=89.5;
printf("No.:%ld\nname:%s\nsex:%c\nscore:%5.1f\n",stu_1.num,stu_1.name,stu_1.sex,stu_1.score);
printf("No.:%ld\nname:%s\nsex:%c\nscore:%5.1f\n",(*p).num,(*p).name,(*p).sex, (*p).score);
return 0;
个人答案:
# include <stdio.h>
//No.:10101
//name:Li Lin
//sex:M
//score: 89.5
//No.:10101
//name:Li Lin
//sex:M
//score: 89.5
struct person{
int No;
char name[20];
char sex;
float score;
};
struct person a={10101,"Li Lin",'M',89.5};
struct person b={10101,"Li Lin",'M',89.5};
struct person *pa=&a;
struct person *pb=&b;
int main()
{
printf("No.:%d\n", pa->No);
printf("name:%s\n", pa->name);
printf("sex:%c\n", pa->sex);
printf("score: %.1f\n", pa->score);
printf("No.:%d\n", pb->No);
printf("name:%s\n", pb->name);
printf("sex:%c\n", pb->sex);
printf("score: %.1f\n", pb->score);
return 0;
}
OKK 作业终于做完啦 伸个懒腰~
要期末了 心力憔悴~