1.最大公倍數的求法(gcd已知)
2.報數
3.字符串最后必須有’\0’!!!
4.例題
5.例題
6.例題
1.最大公倍數的求法(gcd已知)
int lcm=gcd*(a/gcd)*(b/gcd);
2.報數
報數游戲是這樣的:有n個人圍成一圈,按順序從1到n編好號。從第一個人開始報數,報到m(<n)的人退出圈子;下一個人從1開始報數,報到m的人退出圈子。如此下去,直到留下最后一個人。
本題要求編寫函數,給出每個人的退出順序編號。
函數接口定義:
void CountOff( int n, int m, int out[] );
其中n
是初始人數;m
是游戲規定的退出位次(保證為小于n的正整數)。函數CountOff
將每個人的退出順序編號存在數組out[]
中。因為C語言數組下標是從0開始的,所以第i
個位置上的人是第out[i-1]
個退出的。
鄙人思路:做一個n次的循環來給每一個人編號(按照退出順序從1~n),每次循環里用一個m次的循環來跳到下一個編號的人那里(因為中間如果有人已經被編過號,那個人已經退出了,不算在內。所以要跳過他。所以我覺得只能用m個循環+1+1+1……來判斷中間已經被編過號的人,而不能直接加m)每次判斷,如果這個人被編過號跳到下一個;如果超過了第n個人回到開頭。
void CountOff( int n, int m, int out[] )
{int a=0,b=1;for(int i=0;i<n;i++){for(int j=0;j<m;j++){a++;if(a>n)a-=n;while(out[a-1]!=0){a++;if(a>n)a-=n;}}out[a-1]=b;b++;}return;
}
對了,但是運行超時(循環里有循環里有循環里有判斷,超麻煩)
4.(南京林業大學)將十進制數轉換成十六進制數并輸出。
這道題里面的亮點不少,就在代碼中加注釋說明。
#include<stdio.h>
#include<string.h>
int main()
{int n;//n是待轉換的數字char *table="0123456789abcdef";char result[9];int i=7;result[8]='\0';//字符串結束符if(n>=0){memset(result,'0',8);//memset函數將一段內存空間全部設置成某個字符do{result[i--]=table[n%16];}while(n=n/16);//這樣寫,當n=0時循環停止}else{int j;memset(result,'f',8);for(j=0;j<8;j++){result[i--]=table[n & 0x0f];//未知,好像是取后4位n>>=4;}}printf("0x%s\n",result);//未知
}
5.下面語句的輸出結果是?
long a=0xffff;
int b=a;
輸出b
因為long 占4個字節,而int 占2個字節,
b在內存中的二進制碼是0000 0000 0000 0000 1111 1111 1111 1111
傳遞給a時,高于16位被自動截斷:1111 1111 1111 1111
再轉換為十進制:-1
6.輸出結果是?
int x;
printf("%d",(x=4*5,x*5),x+25);
按理說printf()中格式符%d的數量少于后面表達式的數量,應該輸出第一個式子的值,