一道C語言程式設計 利用指標作函式引數,將從鍵盤輸入的字串逆序

時間 2022-10-16 02:41:07

1樓:祖印枝譚寅

main()

2樓:齋寄竹夫春

//問題出在區域性變數使用不當,fun中處理並沒有對main函式中的a陣列處理,

//而是對fun內的a陣列處理。當fun退出後,fun內的a陣列將不存在

//下面是我該的**

int main()

,*pt=a;

gets(a);

puts(a);

printf("%d\n",strlen(a));

fun(pt, strlen(a));

puts(a);

return 0;

}void fun(char *pt, int size)}

3樓:梅秀雲焉嫻

完全按照你的意願

改的問題1:你用指標pt傳遞陣列a,但是在fun函式裡,卻沒有使用該指標反而新建區域性陣列a;

問題2:fun函式裡,定義的b陣列,你是指定下標賦值的,缺少結束符『\0』,如果字元未滿,那麼輸出時無法判斷字串結束符,這裡我用memset函式把b每乙個字元都初始成『\0』,你也可以在迴圈賦值結束後,在b最後乙個字元後面再賦乙個字元『\0』.注意定義字元陣列,如希望放10個字元,建議定義11大小,因為要留1個『\0』

問題3:你的賦值迴圈for(i=0;i<10;i++),直接寫的上限10,如果輸入小於10字元。那麼就會取到空值。這裡我用strlen函式讀取了a的字元長度作為上限

#include

#include

int main()

void fun(char *pt)

c語言程式設計 把十進位制轉換為十六進製制

4樓:黑白say晚安

方法一:

#include

#include

using namespace std;

string decinttohexstr(long long num)

string decstrtohexstr(string str)int main()

return 0;}

方法二:

#include

#include

#include

#include

#include

using namespace std;int main()

reverse(v.begin(), v.end()); string hexstr; if (v.

size() % 4 == 0)    if (temp <= 9) hexstr += temp; else hexstr += ('a' + temp - 10); } }

else

if (temp <= 9) else hexstr += ('a' + temp - 10); } } cout << hexstr << endl; return 0;}

擴充套件資料:

還有3種方式可以實現,其中兩種是使用系統函式,另一種是直接自己編寫。

下面的**就是3種方式的實現,包括2位的整數和任意整數(2的31次方以內)都可以。可自己選擇需要的實現方式。

利用系統函式有

1. char *  itoa ( int value, char * str, int base );value是要轉化的數字,str是轉化後的字串儲存的位置,base是進製數(但是這個函式不是標準c函式,有些編譯器是不支援的!)。

所以**可以為:

char buffer [33]; //用於存放轉換好的十六進製制字串,可根據需要定義長度 char * inttohex(int aa)

2. sprintf(str,"%x",value);str是轉化儲存的位置,%x表示十六進製制格式,value是要轉化的數字。所以**可以為:

char buffer [33]; //用於存放轉換好的十六進製制字串,可根據需要定義長度 char * inttohex(int aa)

3. 自己編寫

如果引數只要兩位數的整數,那麼很簡單。

**如下:

#include #include char buffer [33]; //用於存放轉換好的十六進製制字串,可根據需要定義長度 char * inttohex(int aa)

int main ()

5樓:匿名使用者

#include #include char buffer [33]; //用於存放轉換好的十六進製制字串,可根據需要定義長度 char * inttohex(int aa) int main ()

擴充套件資料:

16進製制數的第0位的權值為16的0次方,第1位的權值為16的1次方,第2位的權值為16的2次方……

所以,在第n(n從0開始)位上,如果是是數 x (x 大於等於0,並且x小於等於 15,即:f)表示的大小為 x * 16的n次方。

例:2af5換算成10進製:

用豎式計算:

第0位: 5 * 16^0 = 5

第1位: f * 16^1 = 240

第2位: a * 16^2= 2560

第3位: 2 * 16^3 = 8192

-------------------------------------

10997

直接計算就是:

5 * 16^0 + f * 16^1 + a * 16^2 + 2 * 16^3 = 10997

16進製製到二進位制

由於在二進位制的表示方法中,每四位所表示的數的最大值對應16進製制的15,即16進製制每一位上最大值,所以,我們可以得出簡便的轉換方法,將16進製製上每一位分別對應二進位製上四位進行轉換,即得所求

6樓:我是乙個麻瓜啊

程式設計程式如下:

擴充套件資料

十六進製制轉換十進位制

16進製制就是逢16進1,但我們只有0~9這十個數字,所以我們用a,b,c,d,e,f這六個字母來分別表示10,11,12,13,14,15。字母不區分大小寫。

十六進製制數的第0位的權值為16的0次方,第1位的權值為16的1次方,第2位的權值為16的2次方,以此類推。在第n(n從0開始)位上,如果是數β (β大於等於0,並且β小於等於 15,即:f)表示的大小為 β×16的n次方。

假設有乙個十六進數 2af5直接計算就是:5×160+f×161+a×162+2×163=10997

7樓:澀錦無弦

1、方法一:使用進製轉換。

#include

#include

/* 十六進製制數轉換為十進位制數 */

long hextodec(char *source);

/* 返回ch字元在sign陣列中的序號 */

int getindexofsigns(char ch);

int main()

/* 十六進製制數轉換為十進位制數 */

long hextodec(char *source)

return sum;

}/* 返回ch字元在sign陣列中的序號 */

int getindexofsigns(char ch)

if(ch >= 'a' && ch <='f')

if(ch >= 'a' && ch <= 'f')

return -1;

}2、方法二:可以使用sscanf函式將以字串形式的十六進製制數轉換為整型的十六進製制。

sscanf函式的用法與printf函式很像,都是以格式化的形式進行操作。例如如下的例子中是將字串a23cd以十六進製制形式輸入a中,如果將"%x"換成為"%d"的話,就是將字串a23cd以十進位制形式輸入a中,這顯然是錯誤的,因為將a23cd轉換為十進位制的時候,無法解析a,cd等字元,所以得出的結果就是錯誤的。

int a;

sscanf("a23cd", "%x", &a);

printf("%x\n",a);

printf("%d\n",a);

linux@ubuntu:~/test$ ./a.out

a23cd

664525

擴充套件資料

c語言是一門通用計算機程式語言,廣泛應用於底層開發。c語言的設計目標是提供一種能以簡易的方式編譯、處理低階儲存器、產生少量的機器碼以及不需要任何執行環境支援便能執行的程式語言。

儘管c語言提供了許多低階處理的功能,但仍然保持著良好跨平台的特性,以乙個標準規格寫出的c語言程式可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(微控制器或稱mcu)以及超級電腦等作業平台。

參考資料

8樓:岔路程式緣

稍等一會兒好嗎~~

#include

main()

else

else

a=a/16;

w++;}}

printf("\n");

printf("%d(10)轉換為16進製制數字為:",u10);

for(i=w-1;i>=0;i--)

printf("\n");}

9樓:匿名使用者

通過鍵盤輸入乙個十進位制數,然後將其

10樓:匿名使用者

#include

int main(void)

i=0;

while(x)

for(j=i-1;j>=0;j--)

if(a[j]<=9)

printf("%d",a[j]);

else if(a[j]<=15)

printf("%c",a[j]+'a'-10);

printf("\n");

return 0;}

11樓:匿名使用者

#include

int main()

i = 0;

while(a > 0)

for(i--; i >= 0; i--)printf("%c", s[i]);

return 0;}

c語言程式設計中,sinx怎麼表示?

12樓:我是果瘋

在寫c語言的程式時,在開頭加上乙個標頭檔案math.h即可。

即可直接使用sin(x),特別注意x應該為弧度制,如果不是弧度制需要轉化為弧度制。

新增標頭檔案方法:#include。

13樓:匿名使用者

首先,要用到數學函式,需要包含標頭檔案math.h

其次,如果x不是弧度,需要轉換為弧度,如果x本身是弧度,則可以寫為:sin(x)

如果x不是弧度,可以寫為:sin(60*3.1415926/180)

14樓:匿名使用者

#include

#include

int main()

15樓:匿名使用者

寫成sin(x),這是庫函式,標頭檔案是math.h

16樓:匿名使用者

sin(x)就可以吧

17樓:匿名使用者

標頭檔案裡加入math.h,就有sin函式了。

c語言初學者、什麼程式設計軟體適合初學者

18樓:祿楊氏況辛

初學者建議學習中文版的程式設計軟體,因為英文版的什麼也看不懂。目前我一直用的是c++6.0中文企業版的,簡單易上手,c語言**,c++的**都可以編譯。

你如果想要的話,告訴我qq號,我把安裝包發給你。

一道C語言程式設計題 哪裡有錯,c語言一道程式設計題,求大神給看哪錯了

c語言沒有bool型別 程式的目的是統計乙個大數字中不重複的數字 已經修正如下 include int main void int digit,i long n printf enter a number scanf ld n while n 0 printf repeated digit s fo...

一道c語言的指標題改錯,跪求,一道C語言的指標題改錯,跪求!

如果用乙個指標指向乙個陣列,請使用malloc分配空間例如你的 a,這是乙個野指標,它指向任何你不可控制的記憶體空間,讓這個指標偏移sizea個sizeof int 絕不可能 第乙個for迴圈執行第一遍的時候a已經超界 c d不指向任何空間,執行 c p 同樣會越界修改 include includ...

求一道C語言程式設計題 求n的階乘,c語言程式設計 輸入整數n,求n的階乘 並輸出。

思路 所謂n的階乘就是從1到n的累積,所以可以通過乙個for迴圈,從1到n依次求積即可。參考 include stdio.h int main 執行結果 例如求5的階乘 5120 求一道c語言程式設計題 求n的階乘 include long int fun int n int main void i...

c語言一道題目,C語言一道題目

static int count 4 這個count是在for迴圈中定義的,他的作用於只限於for迴圈中,因此 for i 0,sum 0 i count i 2,count 以及倒數第二句的sum count 處的count都是全域性變數的count,而迴圈體內部的count每次迴圈都會重新定義一...

一道c語言問題,一道C語言問題

void large of double x,double y 這裡是指標,它指向了main中a,b的位址。所以可以交換。void large of double x,double y 這裡是普通變數,在函式large of中,是乙個新的變數,與呼叫時傳入的變數無關,只是完成賦值而已。修改如下就可以...