C语言编程题
1,最大公约数
//最大公约数
int a=4, b=12,temp;
while(a % b)
{
temp = a%b;
b = a;
a = temp;
}
printf("%d\n" , b);
思路:
- 求两数之间的最小值min
- for循环min一次递减
- if(两数是否都可以余i)
2,最小公倍数
//最小公倍数
int c = 4, d = 12,min,max;
min = c < b ? c : d;
max = c > b ? c : d;
for (int i = 1; i <= min; i++)
{
if ((max * i) % min == 0) {
printf("%d\n", max * i);
break;
}
}
3,求n的所有素数因子
/*求n的所有素数因子(12的因子有1,2,3,6,12,但素数因子只有 2,3),*/
void prime(int k) {
int i, j;
for (i = 2; i <= k/2; i++) {
if (k % i == 0) //求所有因子
{
for (j = 2; j < i; j++) { //判断该因子是否为素数
if (i % j == 0) break;
}
if (j == i)
{
printf("%5d", i);
}
}
}
}
4,将整数字符串转成数值
#include <string.h>
int chnum(char* p) {
int num = 0, k, len, j;
len = strlen(p);
for (;len!=0;p++)
{
k = *p - '0'; //将第一个字符转换成数字
j = len-1;
while (j > 0) { //判断有几位数 k*(int)pow(10,j)
k = k * 10;
j--;
}
num = num + k;
}
return num;
}
5,判断子串substr在母串str中出现的次数
int count(char* str,char *substr) {
int i, j, k, num = 0;
for (i = 0; str[i] != '\0'; i++)
for (j=i,k=0;substr[k]==str[j];k++,j++)
if (substr[k+1] == '\0') { num++; break; }
return num;
1,先遍历母串str
2,每次循环子串下标 初始值为0,并且j=i;
3,如果子串下一位的字符为‘\0’,num++; break;跳出循环
6,删除在a数组中全部删除k这个数字
void deleteNum(int a[],int n, int k) {
int i, j,x=0; //数组中有n个k
for (i = 0; i < n; i++) // 遍历a
{
if (k==a[i]) //在a数组中查找k
{
x++; //k的个数
for (j = i; j < n-x; j++) //从后面往前移动 最后一位为N-n
{
a[j] = a[j + 1];
}
i--; //删除连续的k值
}
a[n-x] = 0;
}
}
第六章
1,100以内的素数及素数的个数
int main() {
/*1,100以内的素数 */
int i, j, flag,num=0;
for ( i = 3; i < 100; i++)
{
flag = 1; //*******************
for (j = 2; j <= sqrt(i); j++)
{
if (i % j == 0) {
flag = 0;
break;
}
}
if (flag != 0)
{
printf("%5d", i);//输出100以内的素数
num++;
}
}
printf("\n100以内的素数个数有%d\n", num);
2,用选择法进行排序(升序)
int a[10], i, j, n, temp;
for (i = 0; i < 10; i++)
a[i] = 10 - i;//scanf("%d", &a[i]); 输