
正文
choose函数c语言,choose函数的功能和语法
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
请用C语言编写一个堆栈函数程序
//该程序简单并可正确运行,希望kutpbpb的回答能对你有所帮助!
#includestdio.h
#define N 100
typedef struct
{
int value[N];
int base;
int top;
}Sta;
void print()
{
printf("\n菜单:");
printf("\n1.入栈:");
printf("\n2.出栈:");
printf("\n3.退出:");
}
void printS(Sta S)
{
printf("\n请输出栈中元素:");
for(int i=S.top;i!=S.base;i--)
printf("%d ",S.value[i-1]);
}
void pushS(Sta S,int e)
{
if(S.top==N)
printf("\n栈满");
else
S.value[S.top++]=e;
}
void popS(Sta S,int e)
{
if(S.top==S.base)
printf("\n栈空");
else
{
e=S.value[--S.top];
printf("\n请输出出栈元素: %d",e);
}
}
void main()
{
Sta S;
int e,choose;
S.base=S.top=0;
do{
print();
printf("\n请输入你的选项:");
scanf("%d",choose);
switch(choose)
{
case 1:
printf("\n请输入入栈元素:");
scanf("%d",e);
pushS(S,e);
printS(S);
break;
case 2:
popS(S,e);
printS(S);
break;
case 3:
default:
break ;
}
if(choose==3)
break;
}while(1);
}
相关问答
Q1: C语言如何给用函数二维数组动态赋值
1、当成普通数组使用,用for循环即可赋值。
2、例程:
#include
#include
int
main(void)
{
int
*a=NULL;
int
i;
a=malloc(sizeof(int)*10);/*动态创建一个有10个int元素的数组*/
if
(a==NULL)
{
/*a==NULL表示空间分配失败*/
fprintf(stderr,"MEMORY
ERROR");
return
-1;
}
for
(i
=
0;
i
10;
i++)
{
a[i]=i;
/*对数组进行赋值操作*/
}
free(a);/*动态分配的空间需要用free()函数释放*/
return
0;
}
Q2: C语言懂的来
C 语言学生成绩管理系统
#includestdio.h
#includemalloc.h
#includeconio.h
#includestring.h
typedef struct STUDENT
{
char studentNumber[20];/*学生学号*/
char studentName[20];/*学生姓名*/
char className[20];/*班级名称*/
float mark1;/*第1门成绩*/
float mark2;/*第2门成绩*/
float mark3;/*第3门成绩*/
struct STUDENT *next;
}STUDENT;
STUDENT *headLink; /*链表表头指针*/
/*函数声明*/
void ReadInfoFormFile();
void Menu();
void CreateHeadLink();
STUDENT *MallocNode();
void GetInformation(STUDENT *t);
void OutputInformation();
void DesplayInfoBystudentName();
void DesplayInfoBystudentNumber();
void DesplayOneNode(STUDENT *t);
void InsertOneNode(STUDENT *t);
void DeleteNodeBystudentNumber();
void ChangeMarkByName();
void ChangeMarkByNumber();
void SaveLinkToFile();
void paixu();
void DesplayMarkSegment();
int choose;/*用于接受用户的选择*/
/*主函数*/
main()
{
system("color 2a");
printf("\n\t\t欢迎进入***学院***班学生成绩管理系统\n\n\n");
printf("\t\t\t\tO(∩_∩)O\n\n\n\n");
printf("\t\t\t^_^\t\t\t^_^\n\n");
printf("\n\t\t 注意:请按照要求输入相应信息,谢谢!\n\n\n\n\n");
printf("\t\t\t\t\t\t\t\t制作人:***\n\n\n");
printf("\t\t\t 按任意键进入…………");
getch();
system("cls");
CreateHeadLink();
ReadInfoFormFile();
Menu();
}
/*从文件中读学生信息到链表中*/
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%f%f%f",p-studentNumber,p-studentName,p-className,(p-mark1),(p-mark2),(p-mark3))0)
{
InsertOneNode(p);
p=MallocNode();
}
fclose(fp);
}
/*显示菜单,根据用户的输入完成相应的功能*/
void Menu(void)
{
STUDENT *p;
printf("\t\t (^o^)欢迎使用学生成绩管理系统(^o^)\n\n");
printf("\t ※--------------------请选择相应功能---------------------※\n\n");
printf("\t 1: 显示所有学生的信息 |");
printf(" \t 2: 按姓名查询 |\n\n");
printf("\t 3: 按学号查询 |");
printf(" \t\t 4: 增加学生 |\n\n");
printf("\t 5: 删除学生 |");
printf(" \t\t 6: 按姓名修改学生成绩 |\n\n");
printf("\t 7: 按学号修改学生成绩 |");
printf(" \t 8: 保存所有学生信息 |\n\n");
printf("\t 9: 按成绩输出学生信息 |");
printf("\t 10: 显示不及格及优秀学生 |\n\n");
printf("\t 11: 返回主菜单 |");
printf("\t\t 12: 退出 |\n\n");
printf("\t ※----------------------O(∩_∩)O------------------------※\n\n");
printf("\t 请输入对应数字:");
scanf("%d",choose);/*取得用户的选择*/
switch(choose)
{
case 1:system("cls");
OutputInformation();/*显示所有学生的信息*/
break;
case 2: system("cls");
DesplayInfoBystudentName();
break;
case 3: system("cls");
DesplayInfoBystudentNumber();/*根据用户输入的学号显示该学生的信息*/
break;
case 4: system("cls");
p=MallocNode();/*先申请一个新结点*/
GetInformation(p);/*要求用户输入信息到新结点中*/
InsertOneNode(p);/*将新结点加到链表中*/
break;
case 5: system("cls");
DeleteNodeBystudentNumber();/*根据用户输入的学号删除该学生*/
break;
case 6: system("cls");
ChangeMarkByName();/*根据用户输入的姓名修改学生成绩*/
break;
case 7: system("cls");
ChangeMarkByNumber();/*根据用户输入的学号修改学生成绩*/
break;
case 8: system("cls");
SaveLinkToFile();/*保存数据*/
break;
case 9: system("cls");
paixu();break;
case 10: system("cls");
DesplayMarkSegment();break;
case 11: system("cls");
break;
case 12: system("cls");
SaveLinkToFile();/*保存数据后再退出*/
free(headLink);
exit(1);
break;
default: system("cls"); break;
}
Menu();/*递归调用*/
}
/*建立链表表头*/
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;i10;i++)
p-studentNumber='\0';
for(i=0;i20;i++)
p-studentName='\0';
for(i=0;i20;i++)
p-className='\0';
p-mark1=0.0;
p-mark2=0.0;
p-mark3=0.0;
p-next=NULL;
return p;
}
/*取得用户输入的学生信息*/
void GetInformation(STUDENT *t)
{
printf("请输入学生学号:");
scanf("%s",t-studentNumber);
printf("请输入学生姓名:");
scanf("%s",t-studentName);
printf("请输入该生所在班级:");
scanf("%s",t-className);
printf("请输入第1门成绩:");
scanf("%f",(t-mark1));
printf("请输入第2门成绩:");
scanf("%f",(t-mark2));
printf("请输入第3门成绩:");
scanf("%f",(t-mark3));
}
/*在链表的结尾处增加一个结点*/
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("请输入学生姓名:");
scanf("%s",studentName);
while(p)
{
if(strcmp(p-studentName,studentName)==0)
{system("cls");
printf("\t学号\t姓名\t班级\t成绩1\t成绩2\t成绩3\t总成绩\t平均成绩\n");
DesplayOneNode(p);
flag=1;
break;
}
p=p-next;
}
if(!flag) {system("cls");
printf("\t 对不起,不存在姓名为 %s 的学生\n",studentName);}
}
/*根据用户输入的学号显示该学生的信息*/
void DesplayInfoBystudentNumber(void)
{
STUDENT *p;
char studentNumber[20];
char flag=0;
p=headLink-next;
printf("请输入学生学号:");
scanf("%s",studentNumber);
while(p)
{
if(strcmp(p-studentNumber,studentNumber)==0)
{ system("cls");
printf("\t学号\t姓名\t班级\t成绩1\t成绩2\t成绩3\t总成绩\t平均成绩\n");
DesplayOneNode(p);
flag=1;
break;
}
p=p-next;
}
if(!flag) {system("cls");
printf("\t 对不起,不存在学号为 %s 的学生\n",studentNumber);
}}
/*输出一个结点的信息*/
void DesplayOneNode(STUDENT *t)
{
printf("\t%s\t",t-studentNumber);
printf("%s\t",t-studentName);
printf("%s\t",t-className);
printf("%.2f\t",t-mark1);
printf("%.2f\t",t-mark2);
printf("%.2f\t",t-mark3);
printf("%.2f\t",t-mark1+t-mark2+t-mark3);
printf("%.2f\t\n",(t-mark1+t-mark2+t-mark3)/3);
}
/*根据用户输入的学号删除该学生*/
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)
{ system("cls");
printf("\t 不存在该学号的学生\n");
return;
}
system("cls");
printf("\t 成功删除\n");
}
/*显示所有学生的信息*/
void OutputInformation(void)
{
STUDENT *p;
p=headLink-next;
if(p==NULL)
{
printf("\t 现在没有学生信息,请先输入学生信息\n\n");
return;
}
printf("\t学号\t姓名\t班级\t成绩1\t成绩2\t成绩3\t总成绩\t平均成绩\n");
while(p)
{
DesplayOneNode(p);
p=p-next;
}
}
/*根据输入的姓名修改成绩*/
void ChangeMarkByName(void)
{
STUDENT *p;
char studentName[20];
char flag=0;
float mark1,mark2,mark3;
p=headLink-next;
printf("请输入学生姓名:");
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);
p-mark1=mark1;
p-mark2=mark2;
p-mark3=mark3;
flag=1;
printf("修改成功\n");
break;
}
p=p-next;
}
if(!flag) {system("cls");
printf("\t 对不起,不存在姓名为 %s 的学生\n",studentName);
} }
/*根据输入的姓名修改成绩*/
void ChangeMarkByNumber(void)
{
STUDENT *p;
char studentNumber[20];
char flag=0;
float mark1,mark2,mark3;
p=headLink-next;
printf("请输入学生学号:");
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);
p-mark1=mark1;
p-mark2=mark2;
p-mark3=mark3;
flag=1;
printf("修改成功\n");
break;
}
p=p-next;
}
if(!flag){system("cls");
printf("\t 对不起,不存在学号为 %s 的学生\n",studentNumber);
}}
/*保存链表数据到文件中*/
void SaveLinkToFile(void)
{
STUDENT *p;
FILE *fp;
p=headLink-next;
if(p==NULL)
{
printf("\t 现在没有学生信息,请先输入学生信息\n\n");
return;
}
fp=fopen("student.txt","w+");
if(!fp)
{
printf("文件不存在\n");
return;
}
while(p)
{
fprintf(fp,"%s %s %s %f %f %f\n",p-studentNumber,p-studentName,p-className,p-mark1,p-mark2,p-mark3);
p=p-next;
}
fclose(fp);
}
/*显示优秀和不及格学生成绩*/
void DesplayMarkSegment(void)
{
STUDENT *p;
int count=0;
p=headLink-next;
printf("\t60分以下(不及格)的学生成绩如下:\n");
printf("\t学号\t姓名\t班级\t成绩1\t成绩2\t成绩3\t总成绩\t平均成绩\n\n");
while(p)
{
if((6((int)(p-mark1/10)))||(6((int)(p-mark2/10)))||(6((int)(p-mark3/10))))/*只要有一科不及格就认为该生不及格*/
{
count++;
DesplayOneNode(p);
}
p=p-next;
}
printf("\t不及格的学生一共有%d人\n",count);
p=headLink-next;
printf("\t成绩优秀的学生成绩如下:\n");
printf("\t学号\t姓名\t班级\t成绩1\t成绩2\t成绩3\t总成绩\t平均成绩\n\n");
count=0;
while(p)
{
if((8=((int)(p-mark1/10)))(8=((int)(p-mark2/10)))(8=((int)(p-mark3/10))))
{
count++;
DesplayOneNode(p);
}
p=p-next;
}
printf("\t成绩优秀的学生一共有%d人\n",count);
}
/*按总成绩排序*/
void paixu(void)
{
STUDENT exchange,*r,*p,*q;
r=headLink-next;
if(r==NULL)
{
printf("\t 现在还没学生信息,请先输入学生信息\n");
return;
}
while(r)/*两层while循环实现排序*/
{
p=r;
q=r-next;
while(q)
{
if((q-mark1+q-mark2+q-mark3)(p-mark1+p-mark2+p-mark3))
{
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;
strcpy(q-studentNumber,p-studentNumber);/*再复制p结点信息到q*/
strcpy(q-studentName,p-studentName);
strcpy(q-className,p-className);
q-mark1=p-mark1;
q-mark2=p-mark3;
q-mark3=p-mark3;
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;
}
q=q-next;
}
r=r-next;
}
OutputInformation();
}
Q3: c语言2个英文问题
Choose
Choose函数
返回
从参数列表中选择并返回一个值。
语法
Choose(index,
choice-1[,
choice-2,
...
[,
choice-n]])
Choose
函数的语法具有以下几个部分:
部分
描述
index
必要参数,数值表达式或字段,它的运算结果是一个数值,且界于
1
和可选择的项目数之间。
choice
必要参数,Variant
表达式,包含可选择项目的其中之一。
说明
Choose
会根据
index
的值来返回选择项列表中的某个值。如果
index
是
1,则
Choose
会返回列表中的第
1
个选择项。如果
index
是
2,则会返回列表中的第
2
个选择项,以此类推。
可以使用
Choose
来查阅一个列表中的项目。例如,如果
index
所指定的值为
3,而
choice-1
=
"one"、choice-2
=
"two"、且
choice-3
=
"three",那么
Choose
将返回
"three"。当
index
代表一选项组中的值时,则这项功能将会特别有用。
即使它只返回一个选项值,Choose
仍然会计算列表中的每个选择项。所以应该注意到这项副作用。例如,当在每个选择项表达式中使用了
MsgBox
函数作为其中的一部分时,每计算一个选择项,就会显示一次消息框。
当
index小于
1
或大于列出的选择项数目时,Choose
函数返回
Null。
如果
index
不是整数,则会先四舍五入为与其最接近的整数。
getchar
函数名:
getchar
功
能:
从stdio流中读字符
用
法:
int
getchar(void);
注解:
getchar有一个int型的返回值.当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).当用户键入回车之后,getchar才开始从stdio流中每次读入一个字符.getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,且将用户输入的字符回显到屏幕.如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取.也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键.
getch与getchar基本功能相同,差别是getch直接从键盘获取键值,不等待用户按回车,只要用户按一个键,getch就立刻返回,
getch返回值是用户输入的ASCII码,出错返回-1.输入的字符不会回显在屏幕上.getch函数常用于程序调试中,在调试时,在关键位置显示有关的结果以待查看,然后用getch函数暂停程序运行,当按任意键后程序继续运行.
这个版本忽略了个重点,getch()是非缓冲输入函数,就是不能用getch()来接受缓冲区已存在的字符,如以下C++程序,
int
i;while(cini);cin.clear();getchar();运行时如果输入1
2
3
a时必须用getchar()才能在后面程序获得正常输入,即使先前已经恢复流了,此处用getch()是万万不行的。
程序例:
#include
stdio.h
int
main(void)
{
int
c;
int
a;
a
=
getch();
printf
("%c",a);
/*
Note
that
getchar
reads
from
stdin
and
is
line
buffered;
this
means
it
will
not
return
until
you
press
ENTER.
*/
while
((c
=
getchar())
!=
'\n')
{
printf("%c",
c);
}
return
0;
}
注:可以利用getchar()函数让程序调试运行结束后等待编程者按下键盘才返回编辑界面,用法:在主函数结尾,return
0;之前加上getchar();即可
Q4: C语言编程实现求组合数P=C(n,k)的值
double lnchoose(int n, int m)
{
if (m n)
{
return 0;
}
if (m n/2.0)
{
m = n-m;
}
double s1 = 0;
for (int i=m+1; i=n; i++)
{
s1 += log((double)i);
}
double s2 = 0;
int ub = n-m;
for (int i=2; i=ub; i++)
{
s2 += log((double)i);
}
return s1-s2;
}
double choose(int n, int m)
{
if (m n)
{
return 0;
}
return exp(lnchoose(n, m));
}
用之前调用math.h头文件,用的话直接把值赋给choose()这个函数即可,直接调用上面的函数,返回一个double数值,可追问






