① c语言编程输出结果的疑问
楼上各位有说的正确的,也有欠妥的,我总结一下:
首先,对于第一个结果可以肯定:你的程序和输出结果不符!
(1)如果你程序是对的:
第一个结果就是43,正常的10进制常量43赋值给c,又把c赋值给i,再以10进制形式输出i,也就是输出43了。
(2)如果想得到教材的输出结果,程序应为
c=043;i=c
printf("i=%d\n",i);
这里043表示8进制常量
其次,对于第二个结果,'\376'表示ASCII的8进制表示为376的字符,10进制为254,这时由于超过了127,因此用了2个Byte来表示,而系统对2Byte将会当成扩展ASCII字符集进行处理,所以如果用%c输出的话,会看到这么个汉字“”……,至于输出的-2是这样来的:
尽管(8进制)376=(2进制)011 111 110=(10进制)254
但从char型的c向int型的i赋值时,默认char只占一个Byte,所以只有后面8位赋值给了i,因此i的值只是11111110,又最高位是符号位,因而该值转换成10进制(除符号位外取反:10000001,再加1:10000010)得-2。
② C语言中的A=41,B=42,C=43是怎么来的
这是将A,B,C的ASCII十进制数65,66,67转换成十六进制数41,42,43;就是这样的
③ C语言进制转换
计算机中常用的数的进制主要有:二进制、八进制、十进制、十六进制。
2进制,用两个阿拉伯数字:0、1;
8进制,用八个阿拉伯数字:0、1、2、3、4、5、6、7;
10进制,用十个阿拉伯数字:0到9;
16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这五个字母来分别表示10,11,12,13,14,15。字母不区分大小写。
下面用余数短除法把十进制数转化为二进制数为例进行说明
1、明确问题。举个例子,我们现在是要将一个十进制数字156转换成二进制数字。先将这个十进制数作为被除数写在一个倒着的“长除法”的符号里。把目标数系的基数(在这里二进制是“2”)作为除数写在这个除法符号的外面。用这个方法将计算过程可视化会更方便理解,因为整个计算过程只需将数字一直除以2。
活用这个方法可以将所有十进制数字转换成任何进制表达。除数为2是因为我们最终想得到的以2为基数的数(即二进制数值) 。如果最终想得到其他数系的数字,用目标数系的基数代替这个方法里二进制的基数2 就可以了。例如,要得到基数为9的数,就用9来代替2作为除数 。最终的结果就是目标数系的数字表达。
(3)在c语言中43等于多少扩展阅读:
十进制--->二进制
对于整数部分,用被除数反复除以2,除第一次外,每次除以2均取前一次商的整数部分作被除数并依次记下每次的余数。另外,所得到的商的最后一位余数是所求二进制数的最高位。
对于小数部分,采用连续乘以基数2,并依次取出的整数部分,直至结果的小数部分为0为止。故该法称“乘基取整法”
十进制--->八进制
10进制数转换成8进制的方法,和转换为2进制的方法类似,唯一变化:除数由2变成8。
④ C语言中的A=41,B=42,C=43是怎么来的
char c='A';
这里c的asc码值其实就是65,65在十六进制中就是41。
⑤ C语言求救=。=帮忙补全程序
程序1代码:
/*
功能:产生20个[30,120]上的随机整数放入二维数组a[5][4]中,求每行元素的和
*/
#include<stdio.h>
voidwwjt();
voidrow_sum(inta[5][4],intb[5])
{
inti=0,j=0,sum=0;
for(i=0;i<5;i++)
{
sum=0;
for(j=0;j<4;j++)
{
sum+=a[i][j];
}
b[i]=sum;
}
}
main()
{
voidrow_sum();
inta[5][4],b[5],i,j;
for(i=0;i<5;i++)
for(j=0;j<4;j++)
a[i][j]=rand()%(120-30+1)+30;
FILE*fp=fopen("in.dat","w");//将随机产生的数组写入到in.dat中,供wwjt()函数使用
for(i=0;i<5;i++)
{
for(j=0;j<4;j++)
{
printf("%5d",a[i][j]);
fprintf(fp,"%5d",a[i][j]);
}
printf(" ");
fprintf(fp," ");
}
fclose(fp);
row_sum(a,b);
for(i=0;i<5;i++)
printf("%6d",b[i]);
printf(" ");
wwjt();
}
voidwwjt()
{
FILE*IN,*OUT;
intm,n;
inti[5][4];
into[5];
IN=fopen("in.dat","r");
if(IN==NULL)
{
printf("ReadFILEError");
}
OUT=fopen("out.dat","w");
if(OUT==NULL)
{
printf("WriteFILEError");
}
for(m=0;m<5;m++)
for(n=0;n<4;n++)
fscanf(IN,"%d",&i[m][n]);
row_sum(i,o);
for(n=0;n<5;n++)
fprintf(OUT,"%d ",o[n]);
fclose(IN);
fclose(OUT);
}
运行结果:
108 104 67 112
31 96 68 46
31 89 32 98
43 34 120 44
117 66 53 67
391 241 250 241 303
程序2代码:
/*
功能:实现两个整数的交换。
例如:给a和b分别输入:60和65,输出为:a=65b=60
*/
#include<stdio.h>
voidwwjt();
voidfun(int*a,int*b)
{
inttmp;
tmp=*a;
*a=*b;
*b=tmp;
}
main()
{
inta,b;
printf("Entera,b:");
scanf("%d%d",&a,&b);
fun(&a,&b);
printf("a=%db=%d ",a,b);
wwjt();
}
voidwwjt()
{
FILE*IN,*OUT;
inta,b,n;
IN=fopen("in.dat","r");
if(IN==NULL)
{
printf("ReadFILEError");
}
OUT=fopen("out.dat","w");
if(OUT==NULL)
{
printf("WriteFILEError");
}
for(n=0;n<5;n++)
{
fscanf(IN,"%d%d",&a,&b);
fun(&a,&b);
fprintf(OUT,"a=%db=%d ",a,b);
}
fclose(IN);
fclose(OUT);
}
运行结果:
Enter a,b: 60 65
a=65 b=60
程序3代码:
/*
题目:编写函数,要求输入一行字符,统计其中字母、数字、空格及其他字符的个数
(用指针作为函数参数)。
*/
#include<stdio.h>
#defineN100
voidfun(charstr[],int*p1,int*p2,int*p3)
{
inti;
i=0;
while(str[i]!='