首页技术c语言程序设计题目及答案解析,c语言答案第五版答案

c语言程序设计题目及答案解析,c语言答案第五版答案

编程之家2026-06-121200次浏览

大家好,c语言程序设计题目及答案解析相信很多的网友都不是很明白,包括c语言答案第五版答案也是一样,不过没有关系,接下来就来为大家分享关于c语言程序设计题目及答案解析和c语言答案第五版答案的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

c语言程序设计题目及答案解析,c语言答案第五版答案

求这几题C语言程序设计题目的解析

14题首先理解n--和--n的区别此题看不出来

n=6执行n--(6-1=5)后为 n=5再执行--n(5-1)为 4

以此类推得B选项

15题运算b==c若b与c比较相等那么得出为1显然b与c不相等所以是0

16题 x[3][3]表示二维数组数组从0开始行列都是

二维数组表示出来就是三行三列的每行三个如下

c语言程序设计题目及答案解析,c语言答案第五版答案

012--0行

345--1行

678--2行

执行程序 x=0 x[0][2]=2

执行程序 x=1 x[1][1]=4

执行程序 x=2 x[2][0]=6

c语言程序设计题目及答案解析,c语言答案第五版答案

c语言程序设计题目

第一种:

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

#include<string.h>

struct student{

int id;

char name[10];

int age;

char sex[10];

char birthady[20];

int tel;

char nativeplace[50];

}st[50];

int i=0;

void shuru(){

char a;

do{

printf("\n请输入学号:");

scanf("%d",&st[i].id);

fflush(stdin);

printf("\n请输入姓名:");

gets(st[i].name);

printf("\n");

printf("请输入年龄:");

scanf("%d",&st[i].age);

fflush(stdin);

printf("\n请输入姓别:");

gets(st[i].sex);

fflush(stdin);

printf("\n请输入生日:");

gets(st[i].birthady);

printf("\n请输入电话:");

scanf("%d",&st[i].tel);

fflush(stdin);

printf("\n请输入籍贯:");

gets(st[i].nativeplace);

printf("\n是否继续输入另外一个学生信息?(y/n)");

fflush(stdin);

a=getchar();

i++;

}while(a=='y'&& i<=50);

}

void xianshi()

{

int j;

printf("\t学号\t姓名\t年龄\t性别\t生日\t\t电话\t籍贯\n");

for(j=0;j<i;j++)

printf("\t%d\t%s\t%d\t%s\t%s\t%d\t%s\n",

st[j].id,st[j].name,st[j].age,st[j].sex,st[j].birthady,st[j].tel,st[j].nativeplace);

}

void paixu()//按年龄从大到小排序函数

{

int j,k;

int temp;

for(j=0;j<i;j++)

{

for(k=0;k<i-1-j;k++)

{

if(st[k].age<st[k+1].age)

{

temp=st[k].age;

st[k].age=st[k+1].age;

st[k+1].age=temp;

}

}

}

xianshi();//排序后输出

}

void chazhao()

{

int m;

char name[20],b;

do

{

printf("\n请输入想查找的学生姓名:");

fflush(stdin);

gets(name);

for(m=0;m<i;m++)

{

if(strcmp(name,st[m].name)==0)

{

printf("\n\t您查找的学生在第%d个位置找到了!!!\n",m+1);

break;

}

}

if(m>=20)

printf("\n\t没有找到这个学生!!!\n");

else

{

printf("\t学号\t姓名\t年龄\t性别\t生日\t\t电话\t籍贯\n");

printf("\t%d\t%s\t%d\t%s\t%s\t%d\t%s\n",

st[m].id,st[m].name,st[m].age,st[m].sex,st[m].birthady,st[m].tel,st[m].nativeplace);

}

printf("\n是否查找另一个学生的信息?(y/n)");

fflush(stdin);

b=getchar();

}while(b=='y');

}

void shanchu()

{

char name[20],c;

int a,b;

do

{

printf("\n请输入要删除的学生姓名:\n");

fflush(stdin);

gets(name);

for(a=0;a<i;a++)

{

if(strcmp(name,st[a].name)==0)

break;

}

for(b=a;b<i;b++)

st[b]=st[b+1];

if(a>i)

printf("\t没有找到这个学生!!!\n");

else

{

i--;

xianshi();

}

printf("\n是否继续删除另一个学生信息?(y/n)");

fflush(stdin);

c=getchar();

}while(c=='y');

}

void charu()

{

shuru();

paixu();

}

void main()//主函数

{

int change;

do{

system("cls");

printf("============================学生信息管理系统===================================\n");

printf("\t\t一:输入学生信息\n");

printf("\t\t二:显示学生信息\n");

printf("\t\t三:查找学生信息\n");

printf("\t\t四:删除学生信息\n");

printf("\t\t五:插入学生信息\n");

printf("\t\t六:退出程序\n");

fflush(stdin);

printf("\t\t请输入功能选项:");

scanf("%d",&change);

switch(change)

{

case 1:

shuru(); break;

case 2:

xianshi(); break;

case 3:

chazhao(); break;

case 4:

shanchu(); break;

case 5:

charu(); break;

case 6:

break;

}

getch();

}while(change!=6);

}

第二种

#include<stdio.h>

#include<conio.h>

#include<string.h>

typedef struct STUDENT

{

char studentNumber[10];/*学生学号*/

char studentName[20];/*学生姓名*/

char studentSEX[10];/*学生性别*/

char className[20];/*班级名称*/

float mark1;/*第1门成绩*/

float mark2;/*第2门成绩*/

float mark3;/*第3门成绩*/

float mark4;/*第4门成绩*/

float mark5;/*第5门成绩*/

struct STUDENT*next;

}STUDENT;

STUDENT*headLink;/*链表表头指针*/

/*以下是函数声明*/

void ReadInfoFormFile(void);

void DesplayMenu(void);

void CreateHeadLink(void);

STUDENT*MallocNode(void);

void GetInformation(STUDENT*t);

void OutputInformation(void);

void DesplayInfoBystudentName(void);

void DesplayInfoBystudentNumber(void);

void DesplayOneNode(STUDENT*t);

void InsertOneNode(STUDENT*t);

void DeleteNodeBystudentNumber(void);

void ChangeMarkByName(void);

void ChangeMarkByNumber(void);

void SaveLinkToFile(void);

void DesplayMarkSegment(void);

void CompositorByTotalMark(void);

int choose;/*用于接受用户的选择*/

/*主函数*/

void main()

{

CreateHeadLink();

ReadInfoFormFile();

DesplayMenu();

}

/************************************

函数功能:从文件中读学生信息到链表中

************************************/

void ReadInfoFormFile(void)

{

FILE*fp;

STUDENT*p;

fp=fopen("student.txt","r");

if(!fp)

{

printf("文件不存在\n");

return;

}

p=MallocNode();

while(fscanf(fp,"%s%s%s%s%f%f%f",p->studentNumber,p->studentSEX,p->studentName,p->className,&(p->mark1),&(p->mark2),&(p->mark3),&(p->mark4),&(p->mark5))>0)

{

InsertOneNode(p);

p=MallocNode();

}

fclose(fp);

}

/************************************

函数功能:显示菜单,根据用户的输入

完成相应的功能

************************************/

void DesplayMenu(void)

{

STUDENT*p;

printf("-------请选择相应功能------------\n\n");

printf("| 1显示所有学生的信息|\n");

printf("| 2按姓名查询|\n");

printf("| 3按学号查询|\n");

printf("| 4增加学生|\n");

printf("| 5删除学生|\n");

printf("| 6按姓名修改学生成绩|\n");

printf("| 7按学号修改学生成绩|\n");

printf("| 8保存所有学生信息|\n");

printf("| 9显示优秀和不及格学生成绩|\n");

printf("| 10排序结果并输出成绩|\n");

printf("| 11退出|\n\n");

scanf("%d",&choose);/*取得用户的选择*/

switch(choose)

{

case 1:

OutputInformation();/*显示所有学生的信息*/

break;

case 2:

DesplayInfoBystudentName();

break;

case 3:

DesplayInfoBystudentNumber();/*根据用户输入的学号显示该学生的信息*/

break;

case 4:

p=MallocNode();/*先申请一个新结点*/

GetInformation(p);/*要求用户输入信息到新结点中*/

InsertOneNode(p);/*将新结点加到链表中*/

break;

case 5:

DeleteNodeBystudentNumber();/*根据用户输入的学号删除该学生*/

break;

case 6:

ChangeMarkByName();/*根据用户输入的姓名修改学生成绩*/

break;

case 7:

ChangeMarkByNumber();/*根据用户输入的学号修改学生成绩*/

break;

case 8:

SaveLinkToFile();/*保存数据*/

break;

case 9:

DesplayMarkSegment();/*显示各分数段的学生成绩*/

break;

case 10:

CompositorByTotalMark();

break;

case 11:

SaveLinkToFile();/*保存数据后再退出*/

free(headLink);

exit(1);

break;

default:

break;

}

DesplayMenu();/*递归调用*/

}

/************************************

函数功能:建立链表表头

************************************/

void CreateHeadLink(void)

{

STUDENT*p;

p=(STUDENT*)malloc(sizeof(STUDENT));

headLink=p;

p->next=NULL;

}

/************************************

函数功能:申请一个新结点,并将其初始化

************************************/

STUDENT*MallocNode(void)

{

STUDENT*p;

int i;

p=(STUDENT*)malloc(sizeof(STUDENT));

if(p==NULL)

return NULL;

for(i=0;i<10;i++)

p->studentNumber[i]='\0';

for(i=0;i<20;i++)

p->studentName[i]='\0';

for(i=0;i<10;i++)

p->studentSEX[i]='\0';

for(i=0;i<20;i++)

p->className[i]='\0';

p->mark1=0.0;

p->mark2=0.0;

p->mark3=0.0;

p->mark4=0.0;

p->mark5=0.0;

p->next=NULL;

return p;

}

/************************************

函数功能:取得用户输入的学生信息

************************************/

void GetInformation(STUDENT*t)

{

printf("请输入学生学号:\n");

scanf("%s",t->studentNumber);

printf("请输入学生姓名:\n");

scanf("%s",t->studentName);

printf("请输入学生性别:\n");

scanf("%s",t->studentSEX);

printf("请输入该生所在班级:\n");

scanf("%s",t->className);

printf("请输入第1门成绩:\n");

scanf("%f",&(t->mark1));

printf("请输入第2门成绩:\n");

scanf("%f",&(t->mark2));

printf("请输入第3门成绩:\n");

scanf("%f",&(t->mark3));

printf("请输入第4门成绩:\n");

scanf("%f",&(t->mark4));

printf("请输入第5门成绩:\n");

scanf("%f",&(t->mark5));

}

/************************************

函数功能:在链表的结尾处增加一个结点

************************************/

void InsertOneNode(STUDENT*t)

{

STUDENT*p;

p=headLink;

while(p->next)

{

p=p->next;

}

p->next=t;

}

/************************************

函数功能:根据用户输入的学生姓名显示该学生的信息

************************************/

void DesplayInfoBystudentName(void)

{

STUDENT*p;

char studentName[20];

char flag=0;

p=headLink->next;

printf("请输入学生姓名:\n");

scanf("%s",studentName);

while(p)

{

if(strcmp(p->studentName,studentName)==0)

{

printf("学号\t姓名\t性别\t班级\t成绩1\t成绩2\t成绩3\t成绩4\t成绩5\t总成绩\t平均成绩\n\n");

DesplayOneNode(p);

flag=1;

break;

}

p=p->next;

}

if(!flag)

printf("对不起,不存在姓名为%s的学生\n",studentName);

}

/************************************

函数功能:根据用户输入的学号显示该学生的信息

************************************/

void DesplayInfoBystudentNumber(void)

{

STUDENT*p;

char studentNumber[10];

char flag=0;

p=headLink->next;

printf("请输入学生学号:\n");

scanf("%s",studentNumber);

while(p)

{

if(strcmp(p->studentNumber,studentNumber)==0)

{

printf("学号\t姓名\t性别\t班级\t成绩1\t成绩2\t成绩3\t成绩4\t成绩5\t总成绩\t平均成绩\n\n");

DesplayOneNode(p);

flag=1;

break;

}

p=p->next;

}

if(!flag)

printf("对不起,不存在学号为%s的学生\n",studentNumber);

}

/************************************

函数功能:输出一个结点的信息

************************************/

void DesplayOneNode(STUDENT*t)

{

printf("%s\t",t->studentNumber);

printf("%s\t",t->studentName);

printf("%s\t",t->studentSEX);

printf("%s\t",t->className);

printf("%.2f\t",t->mark1);

printf("%.2f\t",t->mark2);

printf("%.2f\t",t->mark3);

printf("%.2f\t",t->mark4);

printf("%.2f\t",t->mark5);

printf("%.2f\t",t->mark1+t->mark2+t->mark3+t->mark4+t->mark5);

printf("%.2f\t\n",(t->mark1+t->mark2+t->mark3+t->mark4+t->mark5)/5);

}

/************************************

函数功能:根据用户输入的学号删除该学生

************************************/

void DeleteNodeBystudentNumber(void)

{

char studentNumber[10];

STUDENT*p,*q;

char flag=0;

printf("请输入要删除的学生学号:");

scanf("%s",studentNumber);

p=headLink;

q=headLink->next;

while(q)

{

if(strcmp(q->studentNumber,studentNumber)==0)

{

p->next=q->next;

free(q);

flag=1;

break;

}

p=p->next;

q=q->next;

}

if(!flag)

{

printf("不存在该学号的学生\n");

return;

}

printf("成功删除\n");

}

/************************************

函数功能:显示所有学生的信息

************************************/

void OutputInformation(void)

{

STUDENT*p;

p=headLink->next;

if(p==NULL)

{

printf("现在没有学生信息,请先输入学生信息\n\n");

return;

}

printf("学号\t姓名\t性别\t班级\t成绩1\t成绩2\t成绩3\t成绩4\t成绩5\t总成绩\t平均成绩\n\n");

while(p)

{

DesplayOneNode(p);

p=p->next;

}

}

/************************************

函数功能:根据输入的姓名修改成绩

************************************/

void ChangeMarkByName(void)

{

STUDENT*p;

char studentName[20];

char flag=0;

float mark1,mark2,mark3,mark4,mark5;

p=headLink->next;

printf("请输入学生姓名:\n");

scanf("%s",studentName);

while(p)

{

if(strcmp(p->studentName,studentName)==0)

{

printf("请输入新的第1门成绩:\n");

scanf("%f",&mark1);

printf("请输入新的第2门成绩:\n");

scanf("%f",&mark2);

printf("请输入新的第3门成绩:\n");

scanf("%f",&mark3);

printf("请输入新的第4门成绩:\n");

scanf("%f",&mark4);

printf("请输入新的第5门成绩:\n");

scanf("%f",&mark5);

p->mark1=mark1;

p->mark2=mark2;

p->mark3=mark3;

p->mark4=mark4;

p->mark5=mark5;

flag=1;

printf("修改成功\n");

break;

}

p=p->next;

}

if(!flag)

printf("对不起,不存在姓名为%s的学生\n",studentName);

}

/************************************

函数功能:根据输入的学号修改成绩

************************************/

void ChangeMarkByNumber(void)

{

STUDENT*p;

char studentNumber[20];

char flag=0;

float mark1,mark2,mark3,mark4,mark5;

p=headLink->next;

printf("请输入学生学号:\n");

scanf("%s",studentNumber);

while(p)

{

if(strcmp(p->studentNumber,studentNumber)==0)

{

printf("请输入新的第1门成绩:\n");

scanf("%f",&mark1);

printf("请输入新的第2门成绩:\n");

scanf("%f",&mark2);

printf("请输入新的第3门成绩:\n");

scanf("%f",&mark3);

printf("请输入新的第4门成绩:\n");

scanf("%f",&mark4);

printf("请输入新的第5门成绩:\n");

scanf("%f",&mark5);

p->mark1=mark1;

p->mark2=mark2;

p->mark3=mark3;

p->mark4=mark4;

p->mark5=mark5;

flag=1;

printf("修改成功\n");

break;

}

p=p->next;

}

if(!flag)

printf("对不起,不存在学号为%s的学生\n",studentNumber);

}

/************************************

函数功能:保存链表数据到文件中

************************************/

void SaveLinkToFile(void)

{

STUDENT*p;

FILE*fp;

p=headLink->next;

if(p==NULL)

{

printf("现在没有学生信息,请先输入学生信息\n\n");

return;

}

fp=fopen("student.txt","w+");

if(!fp)

{

printf("文件不存在\n");

return;

}

while(p)

{

fprintf(fp,"%s%s%s%s%f%f%f%f%f\n",p->studentNumber,p->studentName,p->studentSEX,p->className,p->mark1,p->mark2,p->mark3,p->mark4,p->mark5);

p=p->next;

}

fclose(fp);

}

/************************************

函数功能:显示优秀和不及格学生成绩

************************************/

void DesplayMarkSegment(void)

{

STUDENT*p;

int count=0;

p=headLink->next;

printf("60分以下(不及格)的学生成绩如下:\n");

printf("学号\t姓名\t性别\t班级\t成绩1\t成绩2\t成绩3\t成绩4\t成绩5\t总成绩\t平均成绩\n\n");

while(p)

{

if((6>((int)(p->mark1/10)))||(6>((int)(p->mark2/10)))||(6>((int)(p->mark3/10)))||(6>((int)(p->mark4/10)))||(6>((int)(p->mark5/10))))/*只要有一科不及格就认为该生不及格*/

{

count++;

DesplayOneNode(p);

}

p=p->next;

}

printf("不及格的学生一共有%d人\n",count);

p=headLink->next;

printf("成绩优秀的学生成绩如下:\n");

printf("学号\t姓名\t性别\t班级\t成绩1\t成绩2\t成绩3\t成绩4\t成绩5\t总成绩\t平均成绩\n\n");

count=0;

while(p)

{

if((8<=((int)(p->mark1/10)))&&(8<=((int)(p->mark2/10)))&&(8<=((int)(p->mark3/10)))&&(8<=((int)(p->mark4/10)))&&(8<=((int)(p->mark5/10))))

{

count++;

DesplayOneNode(p);

}

p=p->next;

}

printf("成绩优秀的学生一共有%d人\n",count);

}

/************************************

函数功能:按总成绩排序

************************************/

void CompositorByTotalMark(void)

{

STUDENT exchange,*r,*p,*q;

r=headLink->next;

if(r==NULL)

{

printf("现在还没学生信息,请先输入学生信息\n");

return;

}

while(r)/*两层while循环实现排序*/

{

p=r;

q=r->next;

while(q)

{

if((q->mark1+q->mark2+q->mark3+q->mark4+q->mark5)>(p->mark1+p->mark2+p->mark3+p->mark4+p->mark5))

{

strcpy(exchange.studentNumber,q->studentNumber);/*先复制q结点信息到exchange*/

strcpy(exchange.studentName,q->studentName);

strcpy(exchange.className,q->className);

exchange.mark1=q->mark1;

exchange.mark2=q->mark2;

exchange.mark3=q->mark3;

exchange.mark4=q->mark4;

exchange.mark5=q->mark5;

strcpy(q->studentNumber,p->studentNumber);/*再复制p结点信息到q*/

strcpy(q->studentName,p->studentName);

strcpy(q->studentSEX,p->studentSEX);

strcpy(q->className,p->className);

q->mark1=p->mark1;

q->mark2=p->mark2;

q->mark3=p->mark3;

q->mark4=p->mark4;

q->mark5=p->mark5;

strcpy(p->studentNumber,exchange.studentNumber);/*最后复制exchange结点信息到p*/

strcpy(p->studentName,exchange.studentName);

strcpy(p->className,exchange.className);

p->mark1=exchange.mark1;

p->mark2=exchange.mark2;

p->mark3=exchange.mark3;

p->mark4=exchange.mark4;

p->mark5=exchange.mark5;

}

q=q->next;

}

r=r->next;

}

OutputInformation();

}

我比较倾向于第二种,因为是自己调试的,呵呵~~

你只要把"成绩"改成你需要的其他信息就OK了~~

c语言程序设计 题目一道,求解

恩,只写出思考过程,编码很简单。

把12只球分为这三组球分别编号为 A组、B组、C组。

首先,选任意的两组球放在天平上称。例如,我们把A、B两组放在天平上称。这就会出现两种情况:

第一种情况,天平两边平衡。那么,不合格的坏球必在c组之中。

其次,从c组中任意取出两个球(例如C1、C2)来,分别放在左右两个盘上,称第二次。这时,又可能出现两种情况:

1·天平两边平衡。这样,坏球必在C3、C4中。这是因为,在12个乒乓球中,只有一个是不合格的坏球。只有C1、C2中有一个是坏球时,天平两边才不平衡。既然天平两边平衡了,可见,C1、C2都是合格的好球。

称第三次的时候,可以从C3、C4中任意取出一个球(例如C3),同另一个合格的好球(例如C1)分别放在天平的两边,就可以推出结果。这时候可能有两种结果:如果天平两边平衡,那么,坏球必是C4;如果天平两边不平衡,那么,坏球必是C3。

2·天平两边不平衡。这样,坏球必在C1、C2中。这是因为,只有C1、C2中有一个是坏球时,天平两边才不能平衡。这是称第二次。

称第三次的时候,可以从C1、C2中任意取出一个球(例如C1),同另外一个合格的好球(例如C3),分别放在天平的两边,就可以推出结果。道理同上。

以上是第一次称之后出现第一种情况的分析。

第二种情况,第一次称过后天平两边不平衡。这说明,c组肯定都是合格的好球,而不合格的坏球必在A组或B组之中。

我们假设:A组(有A1、A2、A3、A4四球)重,B组(有B1、B2、B3、B4四球)轻。这时候,需要将重盘中的A1取出放在一旁,将A2、A3取出放在轻盘中,A4仍留在重盘中。同时,再将轻盘中的B1、 B4取出放在一旁,将B2取出放在重盘中,B3仍留在轻盘中,另取一个标准球C1也放在重盘中。经过这样的交换之后,每盘中各有三个球:原来的重盘中,现在放的是A4、B2、C1,原来的轻盘中,现在放的是A2、A3、B3。

这时,可以称第二次了。这次称后可能出现的是三种情况:

1·天平两边平衡。这说明A4B2C1=A2A3B3,亦即说明,这六只是好球,这样,坏球必在盘外的A1或B1或B4之中。已知A盘重于B盘。所以,A1或是好球,或是重于好球;而B1、B4或是好球,或是轻于好球。

这时候,可以把B1、B4各放在天平的一端,称第三次。这时也可能出现三种情况:(一)如果天平两边平衡,可推知A1是不合格的坏球,这是因为12只球只有一只坏球,既然B1和B4重量相同,可见这两只球是好球,而A1为坏球;(二)B1比B4轻,则B1是坏球;(三) B4比B1轻,则B4是坏球,这是因为B1和B4或是好球,或是轻于好球,所以第三次称实则是在两个轻球中比一比哪一个更轻,更轻的必是坏球。

2·放着A4、B2、C1的盘子(原来放A组)比放A2、A3、B3的盘子(原来放B组)重。在这种情况下,则坏球必在未经交换的A4或B3之中。这是因为已交换的B2、A2、A3个球并未影响轻重,可见这三只球都是好球。

以上说明A4或B3这其中有一个是坏球。这时候,只需要取A4或B3同标准球C1比较就行了。例如,取A4放在天平的一端,取C1放在天平的另一端。这时称第三次。如果天平两边平衡,那么B3是坏球;如果天平不平,那么A4就是坏球(这时A4重于C1)。

3.放A4、B2、C1的盘子(原来放A组)比放在A2、A3、B3的盘子(原来放B组)轻。在这种情况下,坏球必在刚才交换过的A2、A3、B23球之中。这是因为,如果A2、A3、B2都是好球,那么坏球必在A4或B3之中,如果A4或B3是坏球,那么放A4、B2、C1的盘子一定重于放A2、A3、B3的盘子,现在的情况恰好相反,所以,并不是A2、A3、B2都是好球。

以上说明A2、A3、B2中有一个是坏球。这时候,只需将A2同A3相比,称第三次,即推出哪一个是坏球。把A2和A3各放在天平的一端称第三次,可能出现三种情况:(一)天平两边乎衡,这可推知B2是坏球;(二)A2重于A3,可推知A2是坏球;(三)A3重于A2,可推知A3是坏球。

关于c语言程序设计题目及答案解析和c语言答案第五版答案的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

php正则函数?php正则输出特殊字符的正则表达式,正则表达式 菜鸟