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的数量少于后面表达式的数量,应该输出第一个式子的值,