‘壹’ c语言中第二个z1,z2的结果是怎么算出来的,如图,请说一下详细步骤,谢谢啦
注意++和--,从左往右,先看到变量,就先用值,先看到运算符,就先自增(自减)
第二个z1:
先看到第一个(x++),于是先用值-4,x再自增到-3,然后再看到第二个(x++),于是先用值-3,x再自增到-2
所以该z1=-4+-3=-7
同样第二个z2:
先看的(--y)所以y先从16自减为15,再看第二个(--y),y再从15减为14
所以z2=15+14=29
‘贰’ C语言的一个问题。 为什么我用z1 z2 ... 输出不行, printf的语句可以啊 我明明x1 和n的值都对的啊!
z1=x1/n;
x1和n都是整型,x1/n就是整数除法,你应该将其中一个强制类型转换成double
‘叁’ 在C语言中z1=0x06,z2=0x06,if(z1==0x06&&z2==0x7d)什么意思
下面一句一句的解释:
①z1=0x06//将十六进制数06赋值给变量z1
②z2=0x06//将十六进制数06赋值给变量z2
③if(z1==0x06&&z2=0x7d)//这是一个判断分支语句,if后面的括号内是一个逻辑表达式,如果逻辑表达式的值为真,则执行if后面的语句;如果为假,则越过if后面的语句。
z1==0x06&&z2==0x7d里面的&&是逻辑“与”运算符,只有当它前面的z1==0x06与后面的z2=0x7d都成立时,整个逻辑表达式的值才是“真”。
由前面的赋值可知,z1==0x06成立,而z2==0x7d不成立。所以,整个逻辑表达式的值为“逻辑假”。
if语句判断完毕后,后面要做什么,在这三句后面的程序中。
有什么问题请留言。
‘肆’ 求教关于毕业论文参考文献的中(Z1)的意思
Z就是其他文献的意思
‘伍’ C语言指针编程问题
#include<stdio.h>
intmain()
{
doublex,y,z;
double*px,*py,*pz;
px=&x;
py=&y;
pz=&z;
printf("输入3个数据:");
scanf("%lf%lf%lf",px,py,pz);
printf("输出数据:%8.2lf%8.2lf%8.2lf ",*px,*py,*pz);
printf("输出变量地址: ");
printf("x的内存地址为:%x ",px);
printf("y的内存地址为:%x ",py);
printf("z的内存地址为:%x ",pz);
return0;
}
‘陆’ C语言中 if ((Z1==1)&&(X1==1)) {B1=1;}什么意思
&& 是“逻辑与”, (A && B)的意思是 A事件发生,同时B事件叶会发生。
上数语句就是:
如果(if):
Z1与1相等(Z1==1),并且(&&),B1与1相等(B1==1)
那么:{
将B1赋值为1.(B1 = 1;)
}。
&&就是表明“ 并且”的意思。
‘柒’ c语言小问题
全给你了,一次性帮你解决所有问题。
全部程序在Dev-c++和win-tc或vs2005下编译确认。
/* 大数相加简洁代码 */
#include <stdio.h>
#include <string.h>
char* add(char* a, char* b, char* c)
{
const char *s1 = a, *s2 = b; /* strrev()函数用来将字符串(数字)反序排列 */
size_t m = strlen(strrev(a)), n = strlen(strrev(b)), i = 0;
char u = 0;
if(m > n)
{ size_t tmp = m;
m = n; n = tmp;
s1 = b; s2 = a;
}
for( ; i < m; i++)
{ c[i] = s1[i] - '0' + s2[i] + u;
u = c[i] > '9' ? c[i] -= 10, 1 : 0;
}
for( ; i < n; i++)
{ c[i] = s2[i] + u;
u = c[i] > '9' ? c[i] -= 10, 1 : 0;
}
if(u > 0) c[i++] = '1';
c[i] = 0;
strrev(a);
strrev(b);
return strrev(c);
}
char a[501], b[501], c[501]; /*这里设最多可以处理500位的大数相加,可更改*/
int main()
{ int n, i;
printf("Please input times you want to plus:\n"); /*做加法的次数*/
scanf("%d", &n);
for(i = 1; i <= n; i++)
{ printf("Please input two digits you want to plus:\n");
fflush(stdin);
gets(a);
gets(b);
printf("Case %d:\n%s + %s = %s\n\n", i, a, b, add(a, b, c));
}
system("pause");
return 0;
}
--------------------------------------------------------------------
下面是带小数部分的高精度大数相减代码,我已经运行通过:
#include <stdio.h>
#include <string.h>
int main()
{
char s1[101],s2[101]; /*最后一位存放字符串结尾标识符'\0'*/
char s3[101];
int z1=0,z2=0,x1=0,x2,t,i,flag=0,m,j;
printf("请输入被减数:");
gets(s1);
printf("请输入减数:");
gets(s2);
while(s1[z1]>='0'&&s1[z1]<='9') /*统计被减数的整数部分的位数*/
z1++;
while(s2[z2]>='0'&&s2[z2]<='9') /*统计减数的整数部分的位数*/
z2++;
x1=strlen(s1)-z1-1;/*统计被减数的小数部分的位数*/
x2=strlen(s2)-z2-1;/*统计减数的整数部分的位数*/
t=strlen(s1);
/*下面部分是对两数的小数和整数部分的位数进行判断,并对位数少的进行补零操作*/
if (x1<x2)
{ for(i=t;i<t+x2-x1;i++)/*被减数的小数后面补零,使其位数与减数相同*/
s1[i]='0';
}
s1[i]='\0';
t=strlen(s2);
if (x1>x2)
{ for (i=t;i<t+x1-x2;i++)/*减数的小数后面补零,使其位数与被减数相同*/
s2[i]='0';
}
s2[i]='\0';
if (z1<z2)/*被减数的整数前面补零,使其位数与减数的整数位数相同*/
{ for(i=strlen(s1);i>=0;i--)
s1[i+z2-z1]=s1[i];
for (i=0;i<z2-z1;i++)
s1[i]='0';
}
else
if (z1>z2)/*减数的整数前面补零,使其位数与被减数位数相同*/
{ for(i=strlen(s2);i>=0;i--)
s2[i+z1-z2]=s2[i];
for(i=0;i<z1-z2;i++)
s2[i]='0';
}
for (i=0;i<strlen(s1);i++)
{ if(s1[i]>s2[i]) break; /*判断被减数是否大于减数*/
if(s2[i]>s1[i]) /*被减数与减数交换,并置标志位flag*/
{ strcpy(s3,s1);
strcpy(s1,s2);
strcpy(s2,s3);
flag=1;
break;
}
}
s3[strlen(s1)]='\0';
/*下面部分是对两数进行按位相减*/
for(i=strlen(s1)-1;i>=0;i--)
{ if (s2[i]>s1[i]) /*判断被减数的对应位的树是否大于减数的对应位*/
{ m=1; /*置1,表示有借位*/
j=i-1;
while(s1[j]=='0'||s1[j]=='.') /*改变借位后前几位的值*/
{ if(s1[j]=='.') /*若是小数点,无须改变*/
j--;
else
{ s1[j]='9';/*若为零,则借位后为9*/
j--;
}
}
s1[j]--;/*若不为零,则借位后应减1*/
}
else m=0; /*清零表示无借位*/
if (s1[i]=='.')
s3[i]='.';
else
s3[i]=10*m+s1[i]-s2[i]+48;/*根据m,对两数对应的位进行相减,并转换成ASCII码*/
}
printf("结果为:");
if(flag) printf("-");/*若结果为负数,则应先打印一个负号*/
i=0;
while(s3[i++]=='0'&&s3[i]!='.');/*略去前面的零*/
for(i=i-1;i<strlen(s3);i++)
printf("%c",s3[i]);
printf("\n");
getch();
return 0;
}
------------------------------------------------------------------
大数相乘简练代码
/* 大数相乘简洁代码 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 200
void multiply(char *num1, char *num2, char *mul)
{
int i, j, k, len1, len2, s[MAXLEN]={0};
char *p;
len1 = strlen(num1);
len2 = strlen(num2);
for (i=len1-1; i>=0; i--)
for (j=len2-1; j>=0; j--)
{
k = len1+len2-2-i-j;
s[k] += (num1[i] - '0') * (num2[j] - '0');
}
i = 0;
while ( i<=k || s[i]>=10 )
{
s[i+1] += s[i] / 10;
s[i] %= 10;
i++;
}
while ( i>0 && s[i]==0 ) i--;/* 除去开头可能产生的0 */
p = mul;
while ( i>=0 ) *p++ = s[i--] + '0';
*p = '\0';
}
int main(void)
{
char s1[50], s2[50], *ps;
printf("Input two numbers: \n");
gets(s1);
gets(s2);
ps = (char *)malloc(sizeof(strlen(s1)+strlen(s2)+1));
multiply(s1, s2, ps);
printf("%s\n", ps);
free(ps);
system("pause");
return 0;
}
‘捌’ 这个c语言的赋值语句是什么错误
你应该是写错了,YEAR[z]而不是YEAR[z1],z1这个变量没有声明。
另外,你这个程序,UartBuffer.rcv_buf[y]有越界的可能(最后一次循环,y有可能大于255)。
回答补充:
你举的例子中应该没有错误。下面是我的测试程序,编译及运行成功
#include<stdio.h>
#define buffer_size 256
typedef struct
{
char rcv_buf[buffer_size];
char Send_buf[buffer_size];
char RcvGetIndex; //指向当前最后读取的数据位,下次读取时先步进一位.
char RcvPutIndex; //指向当前最后写入的数据位,下次写入时先步进一位.
char SendGetIndex;
char SendPutIndex;
int bOverFLow;
int bEnableTskTxd;
int TxdCnt;
} UART_BUFFER_TYPE;
UART_BUFFER_TYPE UartBuffer;
char YEAR[4];
int main()
{
int y, z;
for(y=0;y<250;y++)
for(z=0;z<4;z++) {
y++;
YEAR[z] = UartBuffer.rcv_buf[y] ;
printf("%d, %d, %d\n", y, z, YEAR[z]);
}
return 0;
}
‘玖’ C语言问题
来个最笨的3个循环实现 算法想计算成小额到大额度 先兑换1元的 在兑换1张5元和1元的组合,以次类推,给你个代码
根据你的需求完善了;输入金额后 罗列出所有兑换策略并计算张数总和 最后给你需要张数最少的策略
2;如果仅仅是求最少张数的话给你的 最简单的算法 rmb/10得到10元的张数 人民(rmb%10)/5的到5元的张数 (rmb%10)%5得到1元的张数
#include<stdio.h>
int main(void)
{
int x=50,y=20,z=5;
int x1=0,y1=0,z1=0,count=1;
int x2=0,y2=0,z2=0,sum;
int rmb;
printf("请输入需要兑换的RMB数额(1~50)\n");
while(scanf("%d",&rmb))
{
if(rmb<1||rmb>50)
printf("请重新输入");
else break;
}
printf("输入金额是%d\n",rmb);
getchar();
for(z1=0;z1<=z;z1++)
{
for(y1=0;y1<=y;y1++)
{
for(x1=0;x1<=x;x1++)
{
if(x1+5*y1+10*z1==rmb)
{
printf("第%d种兑换方法:%d元可以兑换成%d张1元 %d张5元 %d张10元,共计%d张\n",count,rmb,x1,y1,z1,x1+y1+z1);
x2=x1;y2=y1;z2=z1;sum=x1+y1+z1;
count++;
}
else continue;
}
}
}
printf("最少张数的兑换方法:%d元兑换成%d张1元 %d张5元 %d张10元,仅仅需要%d张\n",rmb,x2,y2,z2,sum);
}
‘拾’ 关于c语言问题
过程是自左向右结合:
int i=3,j=5;
float x=2.5;
double y=5.0,z;
计算:y+=i-=j*=++x 和i-=j*=x+y
y+=i-=j*=++x先计算++x,x=3.5再计算j*=++x j=3.5*5=17.5
再执行i-=j i=-15.5 再执行 y+=i 结果y=-10.5
i-=j*=x+y 先执行 x+y=7.5 再执行j*=x+y j=37.5 再执行i-=j
结果i=-34.5