C语言编程问题 C语言编程问题:约瑟夫问题求解

作者&投稿:毅忽 (若有异议请与网页底部的电邮联系)
先判断括号中的真假,--a是先将a自减1,得到值0,然后b++的意思是取得b的值和--a判断后才将b+1,括号中的表达式为真,所以x的值是--a,因为已经将a自减1了,此时再减1得到-1,赋给x。将a的值赋给y,然后a+1,所以y的值也是-1,在(--a==b++)因为已经将b+1了,所以z的值为1.

++i ;是执行前+1
i++;是执行后+1

我们一起来分析下:
先看这个
x=(--a==b++)?--a:++b;
1)这是一个三目运算
表达式1?表达式2:表达式3
表达式1 是条件,他的值 是一个逻辑值,就也0和1
表达式2 是为真的话,就执行 ;否则就执行表达式3
(--a ==b++) --a 等于0 ,b++ 等于0 所以这两个变量的值相等!所以执行--a
再把 (--a==b++)?--a:++b 这个表达式的值 赋给X
也就是x = -1;
2)
现在 b = 1,a= -1;
y = a++;
所以y = -1;
3)现在 a = 1,b=1;
z = b 那么
z=1.

如果有什么不懂,还可以再问

求同学采纳 呵呵

C语言编程问题~

#include
//缺少重要
头文件
#include
#include

int
SIZE;struct
student{
char
name[20];
int
xh;
int
yw;


//语文
int
sx;


//数学
int
yy;


//英语}*stud;
void
save();int
srsj();int
cxsj();int
main();int
gzcx();int
gzcx(){
int
i,a,b;
char
name[10]={0};
FILE
*fp;
if((fp=fopen("stu.dat","rb"))==NULL)
{
printf("无法打开此文件
");
}
printf("


查看姓名,
学号

");
for(i=0;i<SIZE;i++)
{
fread(&stud[i],sizeof(struct
student),1,fp);
printf("%s
%d
%d
%d",stud[i].name,stud[i].xh,stud[i].sx,stud[i].yw,stud[i].yy);
}
printf("
***************************************
");
printf("请输入数字:1:按学号查询












2:按姓名查询
");
printf("***************************************
");
printf("你输入的数字:");
scanf("%d
",&b);
switch(b)
case
1:
{
printf("请输入工号,查看工资清单

");
printf("工号:");
scanf("%d
",&a);
printf("
");
for(i=0;i<SIZE;i++)
{
if(stud[i].xh==a)
{
printf("%s
%d
",stud[i].name,stud[i].xh);
}
}
break;
case
2:
{printf("请输姓中文姓名,查看学生信息查询

");
printf("姓名:");
scanf("%s",name);
for(i=0;i<SIZE;i++)
{
if(strcmp(name,stud[i].name)==0)
{
printf("%s
%d
",stud[i].name,stud[i].xh);
}
}
}
}
printf("
");
printf("

***************************************
");
printf("注意:但无法查询时,请按要求操作!或者是无此数据!
");
printf("***************************************



");
fclose(fp);
main();
return
0;}
void
save(){
FILE
*fp;
int
i;
if((fp=fopen("stu.dat","wb"))==NULL)
{
printf("cannot
open
file

");
return;
}
for(i=0;i<SIZE;i++)
if(fwrite(&stud[i],sizeof(struct
student),1,fp)!=1)
fclose(fp);}
int
srsj(){
int
i;
int
SIZE;
printf("输入学生格式:");
scanf("%d",&SIZE);
stud=new
struct
student[SIZE];
for(i=0;i<SIZE;i++)
scanf("%s%d%d%d%d",stud[i].name,&stud[i].xh,&stud[i].sx,&stud[i].yw,&stud[i].yy);
save();
return
0;}
int
cxsj(){
int
i;
FILE
*fp;
if((fp=fopen("stu.dat","rb"))==NULL)
{
printf("cannot
open
file
");
}
for(i=0;i<SIZE;i++)
{fread(&stud[i],sizeof(struct
student),1,fp);
printf("姓名:%s学号:%d
",stud[i].name,stud[i].xh);
}
fclose(fp);
return
0;}int
main() {
int
a;
printf("1:进入
输入数据

2:查询数据
3:查询
");
printf("输入数字:");
scanf("%d",&a);
if(a==1)
srsj();
if(a==2)
cxsj();
if(a==3)
gzcx();
return
0;//缺少返回}

用一个循环链表就可以完成了!
#include

struct node{
int data;
struct node *next;
}node,*list,*p,*r;

void JOSEPHU(int n,int k,int m)
{
int i,j;
list=NULL;
for(i=1;i<=n;i++)
{
p=(struct node*)malloc(sizeof(node));
p->data=i;
if(list==NULL)
list=p;
else
r->next=p;
r=p;
}
p->next=list; /*建立一个循环链表*/

p=list;
for(i=1;i<=n+1;i++)
{
printf("%d ",p->data);
p=p->next;
}
printf("
"); /*打印链表,并检查循环链表是不输入正确*/
p=list;
i=1;
while(p&&i<k)
{ r=p;
p=p->next;
++i;
}
for(i=1;i<n;i++)
{
for(j=1;j<m;j++)
{ r=p;
p=p->next;
}
printf("The out=%d
",p->data);
r->next=p->next;
}
}
void main()
{
int x, y, z;
printf("input the lenth n
");/*n,k,m分别代表总的人数,第一个报数的人,间隔的人数*/
scanf("%d",&x);
printf("input the start k
");
scanf("%d",&y);
printf("input the m
");
scanf("%d",&z);
JOSEPHU(x,y,z);
}

C语言问题编程问题?
答:include <stdio.h> int main(){ int i,j,n=-1;float scores[30],sum=0,temp;printf("请输入n的值(0~30):");while(n<0 || n>30) scanf("%d",&n);if(!n) return 0;for(i=0;i<n;scanf("%f",&scores[i]),sum+=scores[i],i++)printf("请输入学生%d分数:",i+1);p...

基础C语言编程时易犯错误有哪些
答:一、基础知识和数据类型、表达式 1、{},[],(),‘’,“”不配对。解决这个问题最好的方法就是每当写这些符号的时候就先写成一对,然后再在中间加内容。 2、忘记在语句的末尾加分号,或在预处理命令后多加分号。记住:每一个语句的后边都要加分号,而预处理命令并不是语句,所以不加分号...

C语言编程最常见的15个错误
答:C语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护。以下是关于C语言编程最常见的15个错误,希望大家认真阅读!1.书写标识符时,忽略了大小写字母的区别。main(){ int a=5;printf("%d",A); } 编译程序把a和A认为是两个不同的变量名,而显示出错信息。C认为大写字母...

编程语言的问题
答:面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送...

C语言编程问题
答:1、输入有范围,两个变量输入都需要验证,方法变量处置范围以外,循环判断输入。2、天数循环计数,日期0~6周期自增。用变量累加计数结果。下面是演示代码:include<stdio.h> int main(){ int i,j,a=7,n=366,cnt=0;while(a<0 || a>6)printf("请输入a的值(0~6):"),scanf("%d",&a)...

计算机程序c语言面试常见问题
答:c语言作为计算机程序设计语言,是考察软件工程师应聘者技术能力的关键。计算机程序c语言面试常见问题,我们来看看。c语言 面试题 精选(笔试)单选题部分 1、C语言程序的基本单位是___A.语句 B.函数 C.程序行 D.字符 答案:B 2、C语言程序由()组成 A.子程序 B.过程 C.函数 D.主程序段程序 ...

C语言求教。一个小小的编程问题,在线等
答:用100元人民币兑换10元,5元和1元的纸币(每一种都要有)共50张,请用穷举法编程计算共有几种兑换方案,每种方案各兑换多少张纸币. 数据输出格式: x = , y = , z = count = 输入输出样例: Input Sampl... 展开 老虎吉 | 浏览2192 次 |举报 我有更好的答案推荐...

c语言编程的问题
答:main() //主函数 { FILE *fp; int i=20,j=30,k,n;//定义一个文件指针,fp,整型i j k n fp=fopen("d1.dat""w"); //打开文件d1.dat也就是建立文件,后面的w就是write fprintf(fp,"%d\n",i); //写出文件函数,写出20,第二个写出30,就是d1.dat文件中的数据 fprintf...

C语言编程初学问题
答:(1)程序输出:c1=a;c2=b;c1=97;c2=98;因为:你用%c,就是你要输出一个字符,97的ascii码就是小写字母a,98为b;(2)如果你把c1=197,c2=198,应该会提示隐式转换吧,如果定义char c1,c2,默认为有符号的char型,取值范围为-128~127,因此输出的是197-256=-59,198-256=-58,貌似用...

C语言编程问题
答:是scanf()这个函数的问题, 当用scanf()输入字符串的时候, 该函数会在遇到第一个空格的时候返回, 所以你的程序只把Language读取了, 而后面的都没有处理, 对于这种处理字符串的情况, 推荐使用gets(char *str)输入和puts(char *str)输出 include<stdio.h> int main( ){ char str[30];gets(str)...