本文目錄一覽:
5、算24點的問題
c語言char和int的轉換問題
a是一個四字節整數,對a賦值為'48'相當於對a的最後一個字節賦值為‘8’=56,倒數第二個字節賦值為‘4’=52.因此a=52*256+56=13368,printf("%c",a);相當於printf("%c",char(a%256));
下面程序的輸出是? int a=3366 printf("|%-08d|",a) "|%-08d|"什麼意思?
輸出
|3368□□□□|
c語言的輸出方式為,在printf函數里,如果遇到格式化字符,如\t,表示輸出一個tab鍵,就按格式化字符表示的意思處理,否則就原樣輸出.
在上面語句中,第一個字符"|"及最後面的"|"原樣輸出.
%表示輸出後面的參數的格式,%後面的"-"號,表示輸出值靠左,08表示應該是8的8進制寫法,表示輸出數值佔8位字符,d表示輸出後面a值的十進制樣式,所以綜合起來就是,
輸出a這個數的十進制形式,輸出佔8個字符寬,也就是8位,靠左輸出,不足8位,右邊補空格.
有一個C語言的編程問題,求大神幫忙看看下面的碼哪有錯,運行時總是計算不對
我和 solidco2 是同一個人,原回答不知道為什麼不能修改,所以用小號來貼代碼:
intmain()
{
intn=0;
intm=0;
double*name;/*真正動態大小的只能用指針*/
double*avarage1;
inti,j;
doubleavarage_all1,max1;
//賦值
printf("Pleaseentertwonumberstodecidethelengthofarray:");
scanf("%d%d",n,m);
name=(double*)malloc(sizeof(double)*m*n);/*然後動態分配空間*/
avarage1=(double*)malloc(sizeof(double)*n);
printf("Pleaseenter%dnumbersforthearray:",n*m);
for(i=0;in;i++)
{
for(j=0;jm;j++)
scanf("%lf",((double(*)[m])name)[i][j]);/*這裡要加強制轉換,也可以換成name[i*m+j]*/
}
//開始調用
for(i=0;in;i++)
avarage1[i]=avarage(n,m,i,(double(*)[m])name);/*下面的調用也一樣要強制轉換*/
avarage_all1=avarage_all(n,m,(double(*)[m])name);
max1=max(n,m,(double(*)[m])name);
print(n,avarage1,avarage_all1,max1);
//getch();
free(name);/*用完記得回收*/
free(avarage1);
return0;
}
我是儘可能保留樓主原來的思路來修改的代碼,所有 /* */ 標註的注釋的地方,都是我改過的。另外,不知道樓主用的什麼編譯器,一般double型變量,輸入輸出的時候用%lf小寫的,樓主的%Lf表示的是long double,也就是long long float,為了編譯不出警告,我統一換成了%lf了。
下面說明一下所有改動,按照solidco2裡面的引用所說,數組用變長來表示的時候,在函數開始執行的時候,長度就是已經確定了的,name也一樣,按照樓主的寫法,在main函數一開始,name就被確定為m=0,n=0了,所以sizeof(name)是0。而不管後面m和n輸入什麼值。或許樓主會想,那把name的定義放到m和n被輸入之後呢?很遺憾,這樣仍然不行,因為編譯過程,變量定義會被移到所有初值賦值的前方。所以這裡只能在輸入之後,使用malloc來重新劃定空間。而傳參為了能夠正常傳給變參二維數組的函數,malloc出來的一維數組要模擬成二位數組,也就是指針的強制轉換。於是便有了上面的代碼。看出來裡面有很多轉換,可讀性不高,寫起來也麻煩。
那麼真的沒有辦法按樓主的方法去寫代碼嗎?有一個,繼續拆函數。
原代碼更改如下:main2函數和樓主的就幾乎一樣了(除了輸入m和n的過程)
intmain2(intm,intn,doublename[n][m],doubleavarage1[n])
{
inti,j;
doubleavarage_all1,max1;
printf("Pleaseenter%dnumbersforthearray:",n*m);
for(i=0;in;i++)
{
for(j=0;jm;j++)
scanf("%lf",name[i][j]);
}
//開始調用
for(i=0;in;i++)
avarage1[i]=avarage(n,m,i,name);
avarage_all1=avarage_all(n,m,name);
max1=max(n,m,name);
print(n,avarage1,avarage_all1,max1);
//getch();
return0;
}
intmain(){
intm=0,n=0;
void*name,*avarage1;
//賦值
printf("Pleaseentertwonumberstodecidethelengthofarray:");
scanf("%d%d",n,m);
name=malloc(sizeof(double)*m*n);/*然後動態分配空間*/
avarage1=malloc(sizeof(double)*n);
main2(m,n,(double(*)[m])name,(double*)avarage1);
free(name);/*用完記得回收*/
free(avarage1);
return0;
}
C語言編程 1 2 3 4 5 6 7 8 9 10 由大到小排序
#includestdio.h
#includeconio.h
void bubble_sort(int[], int);
void main() {
int arr[30]={0,1,2,3,4,5,6,7,8,9,10};
bubble_sort(arr, num);
getch();
}
void bubble_sort(int iarr[], int num) {
int i, j, k, temp;
printf("\nUnsorted Data:");
for (k = 0; k num; k++) {
printf("%5d", iarr[k]);
}
for (i = 1; i num; i++) {
for (j = 0; j num – 1; j++) {
if (iarr[j] iarr[j + 1]) {
temp = iarr[j];
iarr[j] = iarr[j + 1];
iarr[j + 1] = temp;
}
}
printf("\nAfter pass %d : ", i);
for (k = 0; k num; k++) {
printf("%5d", iarr[k]);
}
}
}
算24點的問題
計算24點(加、減、乘、除、括號)
玩法:從撲克中任意抽出四張(數字表示為1-13),用加、減、乘、除的方法使結果成為24,每張牌只能用一次。一副牌(52張)中,任意抽取4張可有1820種不同組合,其中有458個牌組算不出24點。現在再和別人玩這個遊戲,不怕了吧?Let's play cards!
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/157721.html