① 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]!='