c语言问题,麻烦大佬帮忙看看
提示:个位只需要用x%10就可以算出来,不需要象你写的这复杂
错误1:你的符合条件的元素个数是由count或者i来计算的,所以在输出的时候就可以用比如i<count来获取,而不能用i<N
错误2:你输出的时候数字之间没有间隔,可以改为比如printf("%d",a[i]);
输入5个数之后没有反应的原因是while(x!=5||y!=5);这里死循环了,由于你的if(a[x]>a[y])前面没有加else,会造成x和y出现循环一次就递增2的情况,也就是它们都可能直接跳过5到达6,所以循环条件应该改为while(x<5&&y<5);
并且由于跳出while循环后x和y必然有一个数已经超出了数组的下标范围,所以你紧接着执行if(a[x]>a[y])是错误的,应该改成if(x<5)
还有,你的while循环体里,没有对a[x]与a[y]相等的情况进行判断,一旦出现相等的情况,就会发生死循环。
同样的min函数里也有一样的问题,而且你的min函数逻辑有问题,if(a[x]<a[y])成立时,应该去改变y,而不是去改变x,因为x所指向的元素才是最小值啊。
另外,你的scanf("%c",&a[i]);应该改为scanf("%d",&a[i]);
修正了以上所有问题后的代码如下:
#include
void max(int a[])
{
int x,y,c;
x=0;y=1;
do
{
if(a[x]<a[y])
{
if(x>y)
x++;
else
x=y+1;
}
else if(a[x]>=a[y])
{
if(x>y)
y=x+1;
else
y++;
}
}while(x<5&&y<5);
if(x<5)
printf("the max number subscript is:%d",x);
else
printf("the max number subscript is:%d",y);
}
void min(int a[])
{
int x,y,c;
x=3;y=4;
do
{
if(a[x]<a[y])
{
if(x>y)
y--;
else
y=x-1;
}
else if(a[x]>=a[y])
{
if(x>y)
x=y-1;
else
x--;
}
}while(x>=0&&y>=0);
if(y>=0)
printf("the min number subscript is:%d",y);
else
printf("the min number subscript is:%d",x);
}
int main()
{
int i;
int a[5];
printf("please enter five number:
");
for(i=0;i<5;i++)
{
scanf("%d",&a[i]);
getchar();
}
max(a);
min(a);
return 0;
}
%x是输出十六进制数的意思,故题目需要你进行十六进制运算,不过是把十六进制的194与十进制的18相加而已,可以统一转换进制为十六进制,然后运算,不需要进位。运算过程是:0x194+18==0x194+0x12 而 0x194+0x12==0x1A6。
p+9,就是a[9]的地址
若第一个输出的是194
则第二个输出的就是:
194+2*9=212(因为每个int占2个字节)
c语言问题,麻烦大佬帮忙看看
x是输出十六进制数的意思,故题目需要你进行十六进制运算,不过是把十六进制的194与十进制的18相加而已,可以统一转换进制为十六进制,然后运算,不需要进位。运算过程是:0x194+18==0x194+0x12 而 0x194+0x12==0x1A6。下面的watch框是验算
这个c语言题目有点难,求大佬帮忙
您说的这个问题,难点就在正确使用\/和%这两个符号。c语言中%只能使用在两个整数之间,且得到的结果也只能是整数,表示的是将前者除以后者后得到的余数,所以叫取余符号。\/表示除号,但是用在两个整数之间时,得到的结果也只能是整数。比如1\/2的结果是0,1%2的结果是1。根据以上说明,千位和各位应该...
c语言scanf输入之后的数据离奇失踪麻烦大佬看一看?
改为 for(int i=0;i<cnt;i++){ printf("%d\/%d\/%d\\n",d[i].mon,d[i].day,d[i].year);} 非常低级的错误!
C语言输入换行问题,求大佬赐教!
输入1个字符可以实现,如何说是数字,你必须确认是几位数,否则程序怎么知道什么时候换行 数字长度自己改常量 include<stdio.h>#include <conio.h>#define numSize 3 \/\/这里假设输入的是3位数 可改!!!int main(){ char n[numSize+1] ; int i=0;aa: printf("输入一个%d位数:",num...
C语言大佬麻烦看下为什么输入两次0才能运行
不是需要两个“0”,是你的scanf_s语句中不应该有 '\\n' 的,你把它删掉再试试
请教c语言大佬
6 因为在C语言中,形参向实参进行的,都是“值传递”,换言之,只是形参向实参单向进行传递的。所以,虽然在函数调用期间,把a和b的地址传递到了函数中,并把a和b的地址值进行了交换。但是这两个地址所指向的单元中的值并没有变化。所以,主函数中并没有任何一个变量的值发生了变化。
C语言求e的近似值 ,麻烦大佬检查下问题
应该是while(n>1E-7)
C语言 念数字?
你一共提出三个问题:1、为什么不写成int?此处也可以写成int。如果写成int型,还要求出各位上的数字是多少,才能将数字转换为拼音。写成char型,省去了转换各位数字的环节,可以用str[i]任意取出各位上的数字。两位,也方便负号的处理。2、为什么是*?如果不加*,只能定义一个字符数组(或叫字符串),...
你觉得c语言难吗?为什么
1. 我觉得c语言语法功能不够强大 我现在在学python语言,c语言是我大一的一门课,当时学的时候不觉得,现在学了python之后,我才真的发现c语言的语法功能实在是不强大。用python的时候根本就不用指定变量的类型,而且python处理数据特别方便,字符串是可以切片的,但是在c语言里就不行,非常麻烦。其他...
c语言问题,输出结果是乱码
你在定义x结构体的同时,已经定义了一个x型的全局变量student1并赋了初值,然而,你的main函数里又定义了同名的局部变量student1并没有赋初值。main函数执行时,这里的student1是未赋初值的,所以student1.name的值并不是"星哥",你以%s输出它,自然会显示为“乱码”。改正方法是,既然你已经定义了...