C语言练习题

C语言练习题

二维数组的玩法

二维数组的玩法_将二维数组中每个一维数组中的最大值与相应一维数组的最后一位进行交换

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

#define M 3
#define N 4

void cre(int arr[][N], int arr_hang, int arr_lie)
{
	int i = 0, j = 0;

	srand(getpid());

	for(i = 0; i < arr_hang; i++)
	{
		for(j = 0; j < arr_lie; j++)
			arr[i][j] = rand() % 100;
	}
}

void pri(int arr[][N], int arr_hang, int arr_lie)
{
	int i = 0, j = 0;

	for(i = 0; i < arr_hang; i++)
	{
		for(j = 0; j < arr_lie; j++)
			printf("%2d ", arr[i][j]);
		printf("\n");
	}
}

void cmp_1(int arr[][N], int arr_hang, int arr_lie)
{
	int i = 0, j = 0;
	int max = 0, temp = 0;

	for(i = 0; i < arr_hang; i++)
	{
		max = 0;
		for(j = 0; j < arr_lie; j++)
		{
			max = arr[i][max] > arr[i][j] ? max : j;
		}
		if(max != j - 1)
		{
			temp = arr[i][max];
			arr[i][max] = arr[i][j - 1];
			arr[i][j - 1] = temp;
		}
	}
}

int main(void)
{
	int arr[M][N] = {0};
	int arr_hang = sizeof(arr) / sizeof(arr[0]);
	int arr_lie = sizeof(arr[0]) / sizeof(arr[0][0]);
	int arr_num = sizeof(arr) / sizeof(arr[0][0]);

	printf("arr_hang = %d, arr_lie = %d, arr_num = %d\n", arr_hang, arr_lie, arr_num);

	cre(arr, arr_hang, arr_lie);
	pri(arr, arr_hang, arr_lie);
	printf("************分割线1************\n");
	cmp_1(arr, arr_hang, arr_lie);
	pri(arr, arr_hang, arr_lie);
	printf("************分割线2************\n");

	return 0;
}

对二维数组整体进行排序

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h>

void bubbleSort2D(int arr[][3], int rows, int cols) {
    for (int i = 0; i < rows * cols - 1; i++) {
        for (int j = 0; j < rows * cols - i - 1; j++) {
            if (arr[j / cols][j % cols] < arr[(j + 1) / cols][(j + 1) % cols]) {
                // 交换位置
                int temp = arr[j / cols][j % cols];
                arr[j / cols][j % cols] = arr[(j + 1) / cols][(j + 1) % cols];
                arr[(j + 1) / cols][(j + 1) % cols] = temp;
            }
        }
    }
}

void print2DArray(int arr[][3], int rows, int cols) {
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
}

int main(void) {
    int arr[3][3] = {{6, 7, 8}, {1, 2, 3}, {3, 4, 5}};

    printf("Original Array:\n");
    print2DArray(arr, 3, 3);

    bubbleSort2D(arr, 3, 3);

    printf("Sorted Array (Descending Order):\n");
    print2DArray(arr, 3, 3);

    return 0;
}

找出二维数组中出现次数最多的数作为返回值,同时还要知道这个数出现了多少次

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <stdio.h>

struct Occurrence {
    int number;
    int count;
};

struct Occurrence findMostFrequentNumber(int arr[][3], int rows, int cols) {
    struct Occurrence result;
    result.number = 0;
    result.count = 0;

    int frequency[100] = {0};  // 假设数组中的元素在 0 到 99 之间

    // 统计每个元素的出现次数
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            frequency[arr[i][j]]++;
        }
    }

    // 找出出现次数最多的元素
    for (int i = 0; i < 100; i++) {
        if (frequency[i] > result.count) {
            result.number = i;
            result.count = frequency[i];
        }
    }

    return result;
}

int main(void) {
    int arr[3][3] = {{1, 2, 3}, {3, 4, 5}, {3, 4, 2}};

    struct Occurrence result = findMostFrequentNumber(arr, 3, 3);

    printf("Most frequent number: %d\n", result.number);
    printf("Frequency: %d\n", result.count);

    return 0;
}

将10进制数转换为二进制数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
void itob(int In, int arr[8]);
void itob(int In, int arr[8])
{
	int i = 0, j = 0;

	do
	{
		arr[i] = In % 2;
		In = In / 2;
		i++;
		j++;
	}while(In != 0);
	for(j = i - 1; j >= 0; j--)
	{
		printf ("%d",arr[j]);
	}
}
int main (void)
{
	int In = 0;
	int arr[8] = {0};
	scanf ("%d",&In);

	itob(In, arr);

	return 0;
}

输出素数

例程1-输出1-1000内所有的素数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#include <stdio.h>
int main (void)
{
	int i = 0, j = 0;

	for(i = 2; i < 1000; i++)
	{
		for(j = 2; j < i; j++)
		{
			if(i % j == 0)
				break;
		}
		if(i == j)
			printf("%d\n",i);
	}
	return 0;
}

例程2-输出最小值与最大值之间所有的素数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
int main (void)
{
	int i = 0, j = 0;
	int In1 = 0, In2 = 0;
	int min = 0, max = 0;

	scanf ("%d%d",&In1,&In2);

	min = In1 < In2 ? In1 : In2;
	max = In1 > In2 ? In1 : In2;

	for(i = min; i < max; i++)
	{
		for(j = 2; j < i; j++)
		{
			if(i % j == 0)
				break;
		}
		if(i == j)
			printf ("%d\n",i);
	}
	return 0;
}

重新实现 strcpy strcat strcmp strlen

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <stdio.h>

char *mystrcpy(char *a, const char *b);
size_t mystrcmp(const char *a, const char *b);
char *mystrcat(char *a, const char *b);
size_t mystrlen(char *a);

int main (void)
{
	char a[10] = "good";
	char *b = "nice";
	//printf ("%s\n",a);
	//printf ("%s\n",b);
	//mystrcpy(a,b);	
	//printf ("%s\n",a);
	//printf ("%s\n",strcat(a,b));
	printf ("%ld\n",mystrcmp(a,b));
	//printf ("%ld\n",strlen(a));

		return 0;
}

size_t mystrlen(char *a)
{
	int i = 0;
	
	for(i = 0; a[i] != '\0'; i++);

	return i;
}

size_t mystrcmp(const char *a, const char *b)
{
	int i = 0;

	for(i = 0; a[i] == b[i] && a[i] != '\0'; i++);
	
	//printf ("%d",a[i]-b[i]);

	return a[i] - b[i];
}

char *mystrcat(char *a, const char *b)
{
	int i = 0, j = 0;
	for(i = 0; a[i] != '\0'; i++);
	for(j = 0; b[j] != '\0'; i++, j++)
		a[i] = b[j];
	a[i] = b[j];

	return a;
}

char *mystrcpy(char *a,const char *b)
{
	int  i = 0; 

	for(i = 0; b[i] != '\0'; i++)
		a[i] = b[i];
	a[i] = b[i];

	return a;
}

函数指针操作实例

第一种用法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#include <stdio.h>
#include <stdlib.h>
 
void (*pfun)(int data);
void myfun(int data)
{
	printf("get data:%d\n",data);
}
int main(int argc,char *argv[])
{
	pfun = myfun;
	(*pfun)(100);
	return 0;
}

第二种用法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#include <stdio.h>
#include <stdlib.h>
 
typedef void (*pfun)(int data);
/*typedef的功能是定义新的类型。第一句就是定义了一种 pfun 的类型,并定义这种类型为指向某种函数的指针,这种函数以一个 int 为参数并返回 void 类型。*/
void myfun(int data)
{
	printf("get data:%d\n",data);
}
int main(int argc,char *argv[])
{
	pfun p= myfun;      //函数指针指向执行函数的地址
	p(100);
	return 0;
}

用结构体和共用体通过位域测试系统是大端格式还是小端格式

第一种方法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <stdlib.h>

union U
{
	int i;
	char c[4];
};

int main(int argc, char *argv[])
{
	union U u;

	u.i = 13;
	
	printf("u.i = %d\n", u.i);
	printf("u.c[0] = %d-%p\n", u.c[0], &u.c[0]);
	printf("u.c[1] = %d-%p\n", u.c[1], &u.c[1]);
	printf("u.c[2] = %d-%p\n", u.c[2], &u.c[2]);
	printf("u.c[3] = %d-%p\n", u.c[3], &u.c[3]);

	return 0;
}

第二种方法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#include<stdio.h>

int main()
{
	int a = 0x12345678;
	char *p = (char*)&a;
       if(*p == 0x78)
	   printf("小端\n");//低位在低地址
	else
		printf("大端\n");//高位在高地址
}

库的制作

静态库的制作

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#!/bin/bash

# 假设有多个文件 main.c func.c func.h
var_1="main"
var_2="func"

# 静态库的制作
cp $var_2.h /usr/include && ls /usr/include 	# 可以将头文件移动到 该目录下
gcc -c -o $var_2.o $var_2.c
ar -cr lib$var_2.a $var_2.o						# libfunc.a 是自定义的名字,
												# 也可以是其它名字,由于 /usr/下的库文件以 lib 开头,因此我们也以 lib 开头
ranlib lib$var_2.a
cp lib$var_2.a /lib && ls /lib
gcc $var_1.c -l$var_2 							# -lfunc 相当于 -libfunc,-l(相当于 -lib)
# 如果没有把 lib$var_2.a 和 $var_2.h 文件放到指定目录下,则执行下边这条命令
	# gcc $var_1.c -I[头文件的路径] -L[库文件的路径] -l$var_2
rm /lib/lib$var_2.a && ls /lib && rm /usr/include/$var_2.h && ls /usr/include && rm $var_2.o lib$var_2.a && ./a.out

# 注意 : [头文件的路径] 和 [库文件的路径]只写路径不写文件名
# -I	指定头文件的路径
# -L	指定库文件的路径
# -l	链接库的名字



# 文件代码
# "func.h"
# #include <func.h>
# 
# int func(int a, int b)
# {
# 	return a + b;
# }
# 
# "func.h"
# #ifndef __FUNC_H
# #define __FUNC_H
# 
# int func(int a, int b);
# 
# #endif
# 
# "main.c"
# #include <stdio.h>
# #include <func.h>
# 
# int main(void)
# {
# 	int a = 13, b = 7;
# 	int sum = 0;
# 
# 	sum = func(a, b);
# 
# 	printf("sum = %d\n", sum);
# 
# 	return 0;
# }

动态库的制作

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/bin/bash

# 假设有多个文件 main.c func.c func.h
var_1="main"
var_2="func"

# gcc -fPIC -c -o $var_2.o $var_2.c			# 把 .c 文件编译成 .o 目标文件
# gcc -shared -o lib$var_2.so $var_2.o		# 把 .o 文件编译成动态库文件
# cp lib$var_2.so /lib && ls /lib				# 把动态库文件拷贝到 /lib 
# cp $var_2.h /usr/include && ls /usr/include # 把头文件移动到 /usr/include 目录中
# gcc main.c -l$var_2  						# 编译文件
# rm /lib/lib$var_2.so && rm /usr/include/$var_2.h && rm lib$var_2.so && rm $var_2.o


# 动态库的制作
gcc -fPIC -c -o $var_2.o $var_2.c				
	# -fPIC	使用gcc编译必须与位置无关
gcc -shared -o lib$var_2.so $var_2.o
cp lib$var_2.so /lib
cp $var_2.h /usr/include/
gcc $var_1.c -l$var_2
rm $var_2.o lib$var_2.so && ./a.out

# 文件代码
# "func.h"
# #include <func.h>
# 
# int func(int a, int b)
# {
# 	return a + b;
# }
# 
# "func.h"
# #ifndef __FUNC_H
# #define __FUNC_H
# 
# int func(int a, int b);
# 
# #endif
# 
# "main.c"
# #include <stdio.h>
# #include <func.h>
# 
# int main(void)
# {
# 	int a = 13, b = 7;
# 	int sum = 0;
# 
# 	sum = func(a, b);
# 
# 	printf("sum = %d\n", sum);
# 
# 	return 0;
# }

C语言50道练习题

/*
make exec && ./exec
 */
/*
1.输入一个不超过五位的正整数,输出其逆数。例如输入12345,输出应为54321。
2.计算1+2+3…+n的值,n是从键盘输入的自然数。
3.从终端(键盘)读入20个数据到数组中,统计其中正数的个数,并计算这些正数之和。
4.从终端(键盘)将5个整数输入到数组a中,然后将a逆序复制到数组b中,并输出b中各元素的值。
5.要将5张100元的大钞票,换成等值的50元,20元,10元,5元一张的小钞票,每种面值至少1张,编程求需要多少张纸币。
6.求n以内(不包括n)同时能被3和7整除的所有自然数之和的平方根s,n从键盘输入。例如若n为1000时,函数值应为:s=153.909064。
7.一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都没有记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同;丙是数学家,他说:四位的车号刚好是一个整数的平方。请根据以上线索找出车号。
8.输入1~10之间的一个数字,输出它对应的英文单词。
9.个位数为6且能被3整除但不能被5整除的三位自然数共有多少个,分别是哪些?
10.输入某年某月某日,判断这一天是这一年的第几天?
11.两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
12.有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后 问第一个人,他说是10岁。请问第五个人多大?
13.输入某三角形的三个边的长度,判断出这是个什么三角形(等腰、等边、任意,或不能构成)。
14.输入10个数,分别统计其中正数、负数、零的个数。
15.先随机产生N个三位自然数输出,然后再输出其中同时是3、5、7倍数的数。(设N为100)
16.用for编程找出100~200中的完全平方数。
17.从终端输入三个正实数,判断这三个数能否构成直角三角形。
18.输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
19.输入一个字串,判断它是否是对称串。如”abcdcba”是对称串,”123456789”不是。
20.随机产生N个大写字母输出,然后统计其中共有多少个元音字符。(设N为50)
21.找出三位自然数中的所有素数,要求判断x素数用自定义函数data(x)实现。
22.输出n行由“#”组成的矩形,每行“#”的个数为m个,其中n、m由终端(键盘)输入。要求输出m个“#”功能由函数satr(m)函数实现。
23.若ax2+bx+c=0有实根,则求之。
24.从键盘输入两个字串,判断它们是否相同。
25.从键盘输入两个字串,输出其中较短的那个字串,并输出它的长度。
26.从键盘输入长度不等的两个字串,将短串连接于长串之后输出。
27.从键盘输入长度不等的两个字串,将长串连接于短串之后输出。
28.随机产生N个两位自然数,降序排列后输出。(设N为20)
29.从键盘输入两个字串,输出其中较长的那个字串,并输出它的长度。
30.从键盘输入10个战士的身高,输出平均身高,并找出哪些身高低于平均身高。
31.从键盘输入10个战士的身高,输出平均身高,并找出哪些身高高于平均身高。
32.从键盘输入10个战士的身高,输出最高、最低的身高。
33.“百钱百鸡”问题。百钱买百鸡,鸡翁一值钱三,鸡母一值钱二,鸡雏三值钱一,问鸡翁、鸡母、鸡雏各几何?
34.有三个小孩,一个比一个大2岁,已知其年龄之和为39,问这三个小孩各几岁?
35.键盘输入长方体的长宽高l、w、h,求其体积及表面积。要求用自定义函数val(l,w,h)计算长方体的体积和表面积,计算结果使用全局变量带回主函数。
36.计算:1/2+1/4+……+1/n,设n是由键盘输入的正偶数。
37.计算:1/1+1/3+……+1/n,设n是由键盘输入的正奇数。
38.计算:1/2-2/3+3/4-4/5……,前100项。
39.有一个数组{1,4,80,23,47,76,14,52}。现输入一个数,要求按原来的规律将它插入数组中并从大到小输出
40.公安人员审问四名窃贼嫌疑犯。已知,这四人当中仅有一名是窃贼,还知道这四人中每人要么是诚实的,要么总是说谎的。在回答公安人员的问题中:甲说“乙没有偷,是丁偷的”,  乙说“我没有偷,是丙偷的”,丙说“甲没有偷,是乙偷的”,丁说“我没有偷”。请根据这四人的答话判断谁是盗窃者。
41.求s=a+aa+aaa+aaaa+......+aa...a的值,其中a是1~9之间的一个数字,表达式项数从键盘输入(设不超过10项)。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
42.设N是一个四位数,它的9倍恰好是其反序数,求N。反序数就是将整数的数字倒过来形成的整数。例如:1234的反序数是4321。
43.爱因斯坦出了一道这样的数学题:有一条长阶梯,若每步跨2阶,则最后剩一阶,若每步跨3 阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶则最后剩5阶。只有每次跨7阶,最后才正好一阶不剩。请问这条阶梯至少有多少阶?
44.输入任意一行字符,降序排列之。
45.输入一行字符串,按如下规则加密:如果是英文字母则大写变小写、小写变大写,对非英文字符则保持不变。试写加密程序。
46.输入一行小写英文字母,按如下规则加密:a→c、b→d、…、x→z、y→a、z→b,试写加密程序。
47.输入一行英文,已知各单词之间用1个空格相隔(设第一个单词前没有空格),统计这行英文有多少个单词。
48.求1+12+123+……前n项之和,其中n是从键盘输入的一个数字(1~9)。
49.随机生成10道100以内的加减乘除数学题 回答正确的加10分错误不加分 然后显示成绩 。
50.有1000发子弹 要提前装道10箱子里面,接收键盘输入,要取多少颗子弹数,只能显示整箱的个数,问这10个箱子怎么装(定义一个数组10个元素,分别装子弹的个数,比如取走100发子弹 程序运行结果,比如2箱)

//1.输入一个不超过五位的正整数,输出其逆数。例如输入12345,输出应为54321。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>

int main(void)
{
	int num = 0, new_num = 0;
	int a = 0, b = 0, c = 0, d = 0, e = 0;


	printf("请输入不超过五位的正整数:");

	scanf("%d", &num);
//12345

	a = num / 10000;
	b = num / 1000 % 10;
	c = num / 100 % 10;
	d = num / 10 % 10;
	e = num % 10;

	new_num = e * 10000 + d * 1000 + c * 100 + b * 10 + a;
	printf("new_num = %d\n", new_num);

	return 0;
}

//2.计算1+2+3…+n的值,n是从键盘输入的自然数。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>

int main(void)
{
	int num = 0;
	int num_out = 1;

	printf("请输入一个自然数:");
	scanf("%d", &num);

	while(num)
	{
		num_out = num_out * num;
		num--;
	}
	printf("%d\n", num_out);
	
	return 0;
}

//3.从终端(键盘)读入20个数据到数组中,统计其中正数的个数,并计算这些正数之和。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <string.h>

int main(void)
{
	int i = 0;
	int num = 0, num_out = 0;
	int arr[20] = {4, -2, 1, 3 ,5, -5, -4, -3, 2, 1, 8, 9, 10, -19, -10, 3, 1, 5, -9, 0};

	for(i = 0; i < 20; i++)
	{
		if(arr[i] > 0)
			num_out += arr[i];
		else
			continue;
	}
	printf("%d\n", num_out);	

	return 0;
}

//4.从终端(键盘)将5个整数输入到数组a中,然后将a逆序复制到数组b中,并输出b中各元素的值。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>

int main(void)
{
	int num = 0;
	int i = 0, j = 4;
	int arr[5] = {0};
	int swap_arr[5] = {0};
	printf("输入5个整数,整数与整数之间用空格隔开:");

	for(i = 0; i < 5; i++)
	{
		scanf("%d", &arr[i]);
	}
	for(i = 0; i < 5; i++)
	{
		swap_arr[i] = arr[j];
		j--;
	}

	for(i = 0; i < 5; i++)
	{
		printf("%d ", swap_arr[i]);
	}
		
	return 0;
}

//5.要将5张100元的大钞票,换成等值的50元,20元,10元,5元一张的小钞票,每种面值至少1张,编程求需要多少张纸币。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>

int main(void)
{
	int a50 = 0, a20 = 0, a10 = 0, a5 = 0, a = 0;
	
	for(a50 = 1; a50 < 10; a50++)
	{
		for(a20 = 1; a20 < 22; a20++)
		{
			for(a10 = 1; a10 < 43; a10++)
			{
				for(a5 = 1; a5 < 85; a5++)
				{
					if((a50*50 + a20*20 + a10*10 + a5*5) == 500)
					{
						a++;
						printf("********\n");
						printf("第%d次:\na50:%d\na20:%d\na10:%d\na5:%d\n", a, a50, a20, a10, a5);

											
					}
				}
			}
		}
	}
	printf("a = %d\n", a);
	
	return 0;
}

//6.求n以内(不包括n)同时能被3和7整除的所有自然数之和的平方根s,n从键盘输入。例如若n为1000时,函数值应为:s=153.909064。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <math.h>

int main(void)
{
	int i = 0, n = 0, s = 0, out = 0;
	float j = 0;

	printf("请输入自然数:");
	scanf("%d", &n);

	for(i = 0; i < n; i++)
	{
		if(i % 3 == 0 && i % 7 == 0)
		{
			s += i;
		}
	}
	printf("s = %d\nsqrt(s) = %f\n", s, sqrt(s));
	
	return 0;
}

//7.一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都没有记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同;丙是数学家,他说:四位的车号刚好是一个整数的平方。请根据以上线索找出车号。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
#include <math.h>

int main(void)
{
	int num = 0;
	int i = 0, j = 0, k = 0, temp = 0;

	for(i = 1; i < 10; i++)
	{
		for(j = 1; j < 10; j++)
		{
			if(i != j)
			{
				k = i*1000 + i*100 + j*10 + j;
				for(temp = 1; temp < 9999; temp++)
				{
					if(k == temp * temp)
					{
						printf("%d\n", k);
					}
				}
			}
		}
	}

	return 0;
}

//8.输入1~10之间的一个数字,输出它对应的英文单词。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <stdio.h>

int main(void)
{
	int num = 0;

	printf("输入1~10之间的一个数字:");
	scanf("%d", &num);

	switch(num)
	{
	case 1:
		printf("one\n");
		break;
	case 2:
		printf("two\n");
		break;		
	case 3:
		printf("three\n");
		break;
	case 4:
		printf("four\n");
		break;
	case 5:
		printf("five\n");
		break;
	case 6:
		printf("six\n");
		break;
	case 7:
		printf("seven\n");
		break;
	case 8:
		printf("eight\n");
		break;		

	case 9:
		printf("nine\n");
		break;
	case 10:
		printf("ten\n");
		break;
	default:
		break;
	}		

	return 0;
}

//9.个位数为6且能被3整除但不能被5整除的三位自然数共有多少个,分别是哪些?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>

int main(void)
{
	int i = 0, j = 0, temp = 0, out = 0;

	for(i = 1; i < 10; i++)
	{
		for(j = 0; j < 10; j++)
		{
			temp = i*100 + j*10 + 3;
			if(temp % 3 == 0 && temp % 5 != 0)
				printf("%d\n", temp);
		}
	}
	
	
	return 0;
}

//10.输入某年某月某日,判断这一天是这一年的第几天?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <stdio.h>

int main(void)
{
	int year = 0, month = 0, day = 0, days = 0, flag = 0;

	printf("请输入 年.月.日:");
	scanf("%d.%d.%d", &year, &month, &day);

	flag = (!(year%4) && (year%100)) || !(year % 400);
	if(flag == 1)
		printf("这一年是闰年\n");
	else
		printf("这一年是平年\n");
	
	switch(month)
	{
	case 12 : days += 31;
	case 11 : days += 30;
	case 10 : days += 31;
	case 9  : days += 30;
	case 8  : days += 31;
	case 7  : days += 31;
	case 6  : days += 30;
	case 5  : days += 31;
	case 4  : days += 30;
	case 3  : days += 31;
	case 2  : days += (28 + flag);
	case 1  : days += day;
	default : break;
	}
 
	printf("这一天是这一年的第%d天\n", days);

	return 0;
}

//11.两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>

int main(void)
{
	char i = '\0', j = '\0', k = '\0';

	for(i = 'x'; i <= 'z'; i++)
	{
		for(j = 'x'; j <= 'z'; j++)
		{
			if(i != j)
			{
				for(k = 'x'; k <= 'z'; k++)
				{
					if(k != i && k!= j)
					{
						if((i != 'x') && (k != 'x') && (k != 'z'))
						{
							printf("a-%c\tb-%c\tc-%c\n", i, j, k);
						}
					}
				}
			}
		}
	}

	return 0;
}

//12.有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后 问第一个人,他说是10岁。请问第五个人多大?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>

int age(int n);

int main(void)
{
	printf("%d\n", age(5));

	return 0;
}

int age(int n)
{
	int c = 0;
	if(n == 1)
		c = 10;
	else
		c = age(n-1)+2;
	return c;
}

//13.输入某三角形的三个边的长度,判断出这是个什么三角形(等腰、等边、任意,或不能构成)。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>

int main(void)
{
	int a = 0, b = 0, c = 0;

	printf("请输入三角形的三条边a b c:");
	scanf("%d %d %d", &a, &b, &c);

	if((a+b)>c && (a+c)>b && (b+c)>a)
	{

		if((a==b) && (a==c) && (b==c))
			printf("等边三角形\n");
		else if((a==b) || (a==c) || (b==c))
			printf("等腰三角形\n");		
		else
			printf("任意三角形\n");
	}
	else
		printf("不能构成三角形\n");

	return 0;
}

//14.输入10个数,分别统计其中正数、负数、零的个数。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>

int main(void)
{
	int arr[10] = {0};
	int i = 0;
	int a = 0, b = 0, c = 0;

	printf("请输入10个数:");
	for(i = 0; i < 10; i++)
	{
		scanf("%d", &arr[i]);
	}

	for(i = 0; i < 10; i++)
	{
		if(arr[i] < 0)
			a++;
		if(arr[i] > 0)
			b++;
		if(arr[i] == 0)
			c++;
	}
	printf("小于零的个数:%d\n大于零的个数:%d\n等于0的个数:%d\n", a, b, c);

	return 0;
}

//15.先随机产生N个三位自然数输出,然后再输出其中同时是3、5、7倍数的数。(设N为100)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(void)
{
	int i = 0, out = 0;
	srand(getpid());

	for(i = 100; i < 1000; i++)
	{
		out = (rand() % 100 + 100);
		if((out%3==0) && (out%5==0) && (out%7)==0)
			printf("%d\n", out);
	}
		

	return 0;
}

//16.用for编程找出100~200中的完全平方数。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <math.h>

int main(void)
{
	int i = 0, j = 0;

	for(i = 100; i <= 200; i++)
	{
		for(j = 1; j < i; j++)
		{
			if(j*j == i)
			{
				printf("j = %d\ti = %d\n", j, i);
			}
		}
	}

	return 0;
}

//17.从终端输入三个正实数,判断这三个数能否构成直角三角形。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#include <stdio.h>

int main(void)
{
	int a = 0, b = 0, c = 0;
	printf("请输入三个正实数:");
	scanf("%d,%d,%d", &a, &b, &c);

	if((a+b>c) && (a+c)>b && (b+c)>a)
	{
		printf("%d %d %d", a, b, c);
		if((a*a+b*b==c*c) || (a*a+c*c==b*b) || (b*b+c*c==a*a))
			printf("能够构成直角三角形\n");
	}

	return 0;
}

//18.输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include <string.h>

int main(void)
{
	char c = '\0';
	int spaces = 0, others = 0, words = 0, digits = 0;

	printf("请输入字符:");
	while((c = getchar()) != '\n')
	{
		if((c>=65 && c<=90) || (c>=97 && c<=122))
			words++;
		else if((c>=48 && c<=57))
			digits++;
		else if(c == ' ')
			spaces++;
		else
			others++;
	}
	printf("words:%d\nspaces:%d\ndigits:%d\nothers:%d\n", words, spaces, digits, others);
			
	return 0;
}

//19.输入一个字串,判断它是否是对称串。如”abcdcba”是对称串,”123456789”不是。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
#include <string.h>

int main(void)
{
	char *p = NULL, *q = NULL;
	char a[100] = {0};
	int size = 0;
	gets(a);
	size = strlen(a)-1;

	p = &a[0];
	q = &a[size];

	while(1)
	{
		if(*p != *q)
			break;
		else
		{
			p++;
			q--;
		}
	}
	if(p >= q)
		printf("对称串\n");
	else
		printf("非对称串\n");		

	return 0;
}

//20.随机产生N个大写字母输出,然后统计其中共有多少个元音字符。(设N为50)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

int main(void)
{
	int i = 0;
	char c = 0;
	int num = 0;
	char arr[51] = {0};
	srand(getpid());
	
	while(1)
	{
		c = (rand() % 97) + 25;
		if(c >= 97 && c <= 122)
		{
			arr[i] = c;
			i++;
			if(strlen(arr) == 50)
				break;			
		}
	}
	for(i = 0; i < 51; i++)
	{
		if((arr[i]=='a') || (arr[i]=='e') || (arr[i]=='i') || (arr[i]=='o') || (arr[i]=='u'))
		{
			num++;
		}
		printf("%c\n", arr[i]);		
	}
	printf("num = %d\n", num);

	return 0;
}

//21.找出三位自然数中的所有素数,要求判断x素数用自定义函数data(x)实现。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>

int main(void)
{
	int i = 0, j = 0;

	for(i = 2; i < 1000; i++)
	{
		for(j = 2; j < i; j++)
		{
			if(i % j == 0)
				break;
		}
		if(i == j)
			printf("%d\n", i);
	}

	return 0;
}

//22.输出n行由“#”组成的矩形,每行“#”的个数为m个,其中n、m由终端(键盘)输入。要求输出m个“#”功能由函数satr(m)函数实现。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>

void satr(int m);

int main(void)
{
	int i = 0, j = 0;
	int n = 0, m = 0;
	printf("请输入n和m的值:");
	scanf("%d,%d", &n, &m);
	
	for(i = 0; i < n; i++)
	{
		satr(m);
	}
}

void satr(int m)
{
	int i = 0;
	for(i = 0; i < m; i++)
		printf("#");
	printf("\n");
}

//23.若ax2+bx+c=0有实根,则求之。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#include <math.h>

int main(void)
{
	int  x1 = 0, x2 = 0, x3 = 0;
	int a = 0, b = 0, c = 0;
	int deta = 0;
	printf("请输入a,b,c的值:");
	scanf("%d,%d,%d", &a, &b, &c);
	deta = ((b*b) - 4*a*c);

	if(deta < 0)
	{
		printf("无实根\n");
	}
	if(deta == 0)
	{
		printf("有一个实根\n");
		x3 = -b + sqrt((deta/(2*a)));
		printf("x3 = %d\n", x3);
	}
	if(deta > 0)
	{
		printf("有两个实根\n");
		x1 = -b + sqrt((deta/(2*a)));
		x2 = -b - sqrt((deta/(2*a)));		
		printf("x1 = %d\nx2 = %d\n", x1, x2);		
	}	

	return 0;
}

//24.从键盘输入两个字串,判断它们是否相同。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <string.h>

int main(void)
{
	char a[100] = {0};
	char b[100] = {0};
	int size_a = 0, size_b = 0;
	printf("请输入两组字符串,回车换行:\n");
	scanf("%s", a);
	scanf("%s", b);	
	printf("a = %s\nb = %s\n", a, b);
	if(strcmp(a, b) == 0)
		printf("两个字串相同\n");
	else
		printf("两个字串不同");
	
	return 0;
}

//25.从键盘输入两个字串,输出其中较短的那个字串,并输出它的长度。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <string.h>

int main(void)
{
	char a[100] = {0};
	char b[100] = {0};
	int size_a = 0, size_b = 0;

	printf("请输入字串:\n");
	scanf("%s", a);
	scanf("%s", b);
	size_a = strlen(a);
	size_b = strlen(b);
	
	size_a < size_b ? printf("a = %s\nsize_a = %d\n", a, size_a) : printf("b = %s\nsize_b = %d\n", b, size_b);

	return 0;
}

//26.从键盘输入长度不等的两个字串,将短串连接于长串之后输出。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <string.h>

int main(void)
{
	char a[100] = {0};
	char b[100] = {0};

	int size_a = 0, size_b = 0;
	printf("请输入两个长度不等的字串:\n");
	scanf("%s", a);
	scanf("%s", b);
	size_a = strlen(a);
	size_b = strlen(b);

	size_a > size_b ? printf("%s\n", strcat(a, b)) : printf("%s\n", strcat(b, a));
	
	return 0;
}

//27.从键盘输入长度不等的两个字串,将长串连接于短串之后输出。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <string.h>

int main(void)
{
	char a[100] = {0};
	char b[100] = {0};

	int size_a = 0, size_b = 0;
	printf("请输入两个长度不等的字串:\n");
	scanf("%s", a);
	scanf("%s", b);
	size_a = strlen(a);
	size_b = strlen(b);

	size_a < size_b ? printf("%s\n", strcat(a, b)) : printf("%s\n", strcat(b, a));
	
	return 0;
}

//28.随机产生N个两位自然数,降序排列后输出。(设N为20)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(void)
{
	int i = 0, j = 0, temp = 0;
	int arr[20] = {0};

	srand(getpid());
	
	for(i = 0; i < 20; i++)
	{
		arr[i] = rand() % 100;
	}
	for(i = 0; i < 19; i++)
	{
		for(j = 0; j < 19 - i; j++)
		{
			if(arr[j] < arr[j + 1])
			{
				temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
	for(i = 0; i < 20; i++)
		printf("%d ", arr[i]);
	printf("\n");
	
	return 0;
}

//29.从键盘输入两个字串,输出其中较长的那个字串,并输出它的长度。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <string.h>

int main(void)
{
	char a[100] = {0};
	char b[100] = {0};
	int size_a = 0, size_b = 0;

	printf("请输入字串:\n");
	scanf("%s", a);
	scanf("%s", b);
	size_a = strlen(a);
	size_b = strlen(b);
	
	size_a > size_b ? printf("a = %s\nsize_a = %d\n", a, size_a) : printf("b = %s\nsize_b = %d\n", b, size_b);

	return 0;
}

//30.从键盘输入10个战士的身高,输出平均身高,并找出哪些身高低于平均身高。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>

int main(void)
{
	int i = 0;
	float average_hieght = 0;
	int arr[10] = {0};
	printf("请输入10个战士的身高:\n");

	for(i = 0; i < 10; i++)
	{
		scanf("%d", &arr[i]);
		average_hieght += arr[i];
	}
	average_hieght /= 10;
	printf("average_hieght = %.2f\n", average_hieght);
	for(i = 0; i < 10; i++)
	{
		if(arr[i] < average_hieght)
			printf("arr[i] = %d\n", arr[i]);
	}

	return 0;
}

//31.从键盘输入10个战士的身高,输出平均身高,并找出哪些身高高于平均身高。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>

int main(void)
{
	int i = 0;
	float average_hieght = 0;
	int arr[10] = {0};
	printf("请输入10个战士的身高:\n");

	for(i = 0; i < 10; i++)
	{
		scanf("%d", &arr[i]);
		average_hieght += arr[i];
	}
	average_hieght /= 10;
	printf("average_hieght = %.2f\n", average_hieght);
	for(i = 0; i < 10; i++)
	{
		if(arr[i] > average_hieght)
			printf("arr[i] = %d\n", arr[i]);
	}

	return 0;
}

//32.从键盘输入10个战士的身高,输出最高、最低的身高。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h>

int main(void)
{
	int i = 0, j = 0, k = 0, temp = 0;
	float average_hieght = 0, max_height = 0, min_height = 0;
	int arr[10] = {0};
	printf("请输入10个战士的身高:\n");

	for(i = 0; i < 10; i++)
	{
		scanf("%d", &arr[i]);
		average_hieght += arr[i];
	}
	average_hieght /= 10;
	printf("average_hieght = %.2f\n", average_hieght);
	for(i = 0; i < 9; i++)
	{
		k = i;
		for(j = i + 1; j < 10; j++)
		{
			if(arr[j] < arr[k])
				k = j;
		}
		if(i != k)
		{
			temp = arr[k];
			arr[k] = arr[i];
			arr[i] = temp;
		}
	}
	max_height = arr[9];
	min_height = arr[0];
	printf("max_height = %.2f\nmin_height = %.2f\n", max_height, min_height);
	
	return 0;
}

//33.“百钱百鸡”问题。百钱买百鸡,鸡翁一值钱三,鸡母一值钱二,鸡雏三值钱一,问鸡翁、鸡母、鸡雏各几何?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>

int main(void)
{
	int a = 0, b = 0, c = 0;
	for(a = 0; a < 34; a++)
	{
		for(b = 0; b < 50; b++)
		{
			for(c = 0; c < 100; c++)
			{
				if(((a*3) + (b*2) + (c*1)) == 100)
					printf("%d %d %d\n", a, b, c);
			}
		}
	}

	return 0;
}

//34.有三个小孩,一个比一个大2岁,已知其年龄之和为39,问这三个小孩各几岁?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>

int main(void)
{
	int x = 0;
	int x_up = 0, x_down = 0;

	for(x = 1; x < 39; x++)
	{
		if(x + (x+2) + (x-2) == 39)
		{
			x_up = x + 2;
			x_down = x - 2;
			printf("x = %d\nx_up = %d\nx_down = %d\n", x, x_up, x_down);			
		}

	}
	
	return 0;
}

//35.键盘输入长方体的长宽高l、w、h,求其体积及表面积。要求用自定义函数val(l,w,h)计算长方体的体积和表面积,计算结果使用全局变量带回主函数。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>

void val(int l, int w, int h);
int s = 0, v = 0;

int main(void)
{
	int l = 0, w = 0, h = 0;
	printf("请输入长方体的长,宽,高:\n");
	scanf("%d,%d,%d", &l, &w, &h);

	val(l, w, h);

	printf("s = %d\nv = %d\n", s, v);

	return 0;
}

void val(int l, int w, int h)
{
	s = (l*w) + (l*h) + (w*h);
	v = l * w * h;
}

//36.计算:1/2+1/4+……+1/n,设n是由键盘输入的正偶数。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#include <stdio.h>

int main(void)
{
	float a = 1, n = 0, out = 0;
	float i = 0;
	printf("请输入正偶数n:\n");
	scanf("%f", &n);
	
	for(i = 2; i <= n; i+=2)
	{
		out += a/i;
	}
	printf("out = %f\n", out);	

	return 0;
}

//37.计算:1/1+1/3+……+1/n,设n是由键盘输入的正奇数。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#include <stdio.h>

int main(void)
{
	float a = 1, n = 0, out = 0;
	float i = 0;
	printf("请输入正奇数n:\n");
	scanf("%f", &n);
	
	for(i = 1; i <= n; i+=2)
	{
		out += a/i;
	}
	printf("out = %f\n", out);	

	return 0;
}

//38.计算:1/2-2/3+3/4-4/5……,前100项。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>

int main(void)
{
	float a = 1, b = 2, n = 0, out = 0;
	int i = 0;
	printf("请输入正奇数n:\n");
	scanf("%f", &n);
	
	for(i = 2; i <= n; i++)
	{
		if(i % 2 == 0)
		{
			out += a/i;
		}
		else
		{
			out -= a/i;
		}
	}
	printf("out = %f\n", out);	

	return 0;
}

//39.有一个数组{1,4,80,23,47,76,14,52}。现输入一个数,要求按原来的规律将它插入数组中并从大到小输出

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <stdio.h>
#include <string.h>

int main(void)
{
	int arr[100] = {1, 4, 80, 23, 47, 76, 14, 52};
	int size_arr = 0;
	int i = 0, j = 0, temp = 0;

	while(arr[size_arr])
		size_arr++;
	printf("请输入要插入的数:\n");
	scanf("%d", &arr[size_arr]);
	while(arr[size_arr])
		size_arr++;

	for(i = 0; i < size_arr - 1; i++)
	{
		for(j = 0; j < size_arr - 1 - i; j++)
		{
			if(arr[j] < arr[j + 1])
			{
				temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}

	for(i = 0; i < size_arr; i++)
	{
		printf("%d ", arr[i]);
	}
	
	return 0;
}

//40.公安人员审问四名窃贼嫌疑犯。已知,这四人当中仅有一名是窃贼,还知道这四人中每人要么是诚实的,要么总是说谎的。在回答公安人员的问题中:甲说“乙没有偷,是丁偷的”, 乙说“我没有偷,是丙偷的”,丙说“甲没有偷,是乙偷的”,丁说“我没有偷”。请根据这四人的答话判断谁是盗窃者。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <stdio.h>

int main(void)
{
	int i = 0, a = 1, b = 0, c = 0, d = 0;

	for(i = 0; i < 4; i++)
	{
		if((b+d)==1 && (b+c)==1 && (a+b)==1)
			break;
		else
		{
			if(i == 0)
			{
				a = 0;
				b = 1;
			}
			if(i == 1)
			{
				b = 0;
				c = 1;
			}
			if(i == 2)
			{
				c = 0;
				d = 1;
			}			
		}
	}
	if(i == 0)
		printf("甲是窃贼\n");
	if(i == 1)
		printf("乙是窃贼\n");
	if(i == 2)
		printf("丙是窃贼\n");
	if(i == 3)
		printf("丁是窃贼\n");	

	return 0;
}

//41.求s=a+aa+aaa+aaaa+……+aa…a的值,其中a是1~9之间的一个数字,表达式项数从键盘输入(设不超过10项)。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>

int main(void)
{
	int i = 0;
	int n = 0, num = 0;
	int temp = 0, sum = 0;

	printf("请输入数值:\n");
	scanf("%d,%d", &n, &num);
	temp = num;

	for(i = 0; i < n; i++)
	{
		sum += temp;
		temp = temp*10+num;
	}
	printf("%d", sum);
	
	return 0;
}

//42.设N是一个四位数,它的9倍恰好是其反序数,求N。反序数就是将整数的数字倒过来形成的整数。例如:1234的反序数是4321。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>

int main(void)
{
	int i = 0;
	int temp = 0;
	int a = 0, b = 0, c = 0, d = 0;
	int e = 0, f = 0, g = 0, h = 0;

	for(i = 1000; i < 10000; i++)
	{
		a = i / 1000;
		b = i % 1000 / 100;
		c = i / 10 % 10;
		d = i % 10;
		temp = i*9;
		e = temp / 1000;
		f = temp % 1000 / 100;
		g = temp / 10 % 10;
		h = temp % 10;
		if((a==h) && (b==g) && (c==f) && (d==e))
			printf("%d\n", i);
	}

	return 0;
}

//43.爱因斯坦出了一道这样的数学题:有一条长阶梯,若每步跨2阶,则最后剩一阶,若每步跨3 阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶则最后剩5阶。只有每次跨7阶,最后才正好一阶不剩。请问这条阶梯至少有多少阶?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>

int main(void)
{
	int n = 1;

	while(1)
	{
		if((n%2)==1 && (n%3)==2 && (n%5)==4 && (n%6)==5 && (n%7)==0)
		{
			printf("%d\n", n);
			break;
		}
		else
		n++;
	}

	return 0;
}

//44.输入任意一行字符,降序排列之。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h>
#include <string.h>

int main(void)
{
	int i = 0, j = 0, temp = 0;
	char arr[100] = {0};
	char c = 0;
	int size_arr = 0;
	printf("请输入一行字符:\n");

	while((arr[i] = getchar()) != '\n')
	{
		i++;
	}

	size_arr = strlen(arr);

	for(i = 0; i < size_arr - 1; i++)
	{
		for(j = 0; j < size_arr - 1 - i; j++)
		{
			if(arr[j] < arr[j + 1])
			{
				temp = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = temp;
			}
		}
	}

	for(i = 0; i < size_arr; i++)
		printf("%c ", arr[i]);
	printf("\n");
	
	return 0;
}

//45.输入一行字符串,按如下规则加密:如果是英文字母则大写变小写、小写变大写,对非英文字符则保持不变。试写加密程序。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>

int main(void)
{
	int i = 0, j = 0;
	char c[100] = {0};
	
	printf("请输入字符串:\n");
	while((c[i] = getchar()) != '\n')
	{
		i++;
	}
	for(j = 0; j < i; j++)
	{
		if((c[j]>='a') && c[j]<='z')
		{
			c[j] -= 32;
			printf("%c", c[j]);
		}
		else if((c[j]>='A') && c[j]<='Z')
		{
			c[j] += 32;
			printf("%c", c[j]);
		}
	}

	return 0;
}

//46.输入一行小写英文字母,按如下规则加密:a→c、b→d、…、x→z、y→a、z→b,试写加密程序。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>

int main(void)
{
	int i = 0, j = 0;
	char a[100] = {0};
	int num = 0;

	while((a[num] = getchar()) != '\n')
	{
		num++;
	}

	for(i = 0; i < num; i++)
	{
		if(a[i] < 120)
			a[i] += 2;
		else
			a[i] -= 24;
	}
	
	for(i = 0; i < num; i++)
		printf("%c", a[i]);
	printf("\n");

	return 0;
}

//47.输入一行英文,已知各单词之间用1个空格相隔(设第一个单词前没有空格),统计这行英文有多少个单词。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>

int main(void)
{
	int i = 0;
	char arr[100] = {0};
	int arr_num = 0;
	int arr_sapces = 0;

	printf("请输入一行英文:\n");
	while((arr[arr_num] = getchar()) != '\n')
		arr_num++;
	for(i = 0; i < arr_num; i++)
	{
		if(arr[i] == ' ')
			arr_sapces++;
	}
	arr_sapces++;
	printf("arr_spaces = %d", arr_sapces);

	return 0;
}

//48.求1+12+123+……前n项之和,其中n是从键盘输入的一个数字(1~9)。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#include <stdio.h>

int main(void)
{
	int n = 0;
	int i = 0;
	int sum = 0;

	printf("请输入数字n:\n");
	scanf("%d", &n);
	for(i = 1; i <= n; i++)
	{
		sum += i;
	}
	printf("sum = %d\n", sum);

	return 0;
}

//49.随机生成10道100以内的加减乘除数学题 回答正确的加10分错误不加分 然后显示成绩 。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(void)
{
	int i = 0;
	int a = 0, b = 0;
	int right = 0, answer = 0;
	int ch = 0;
	srand(getpid());

	for(i = 0; i < 10; i++)
	{
		a = rand() % 10;
		b = rand() % 10;
		ch = rand() % 4;

		switch(ch)
		{
		case 0 :
			printf("%d + %d = ", a, b);
			break;
		case 1 :
			printf("%d - %d = ", a, b);
			break;
		case 2 :
			printf("%d * %d = ", a, b);
			break;
		case 3 :
			if(b == 0)
				b = rand() % 10;
			printf("%d / %d = ", a, b);
			break;
		}
		if(ch == 0)
			right = a+b;
		else if(ch == 1)
			right = a-b;
		else if(ch == 2)
			right = a*b;
		else if(ch == 3)
			right = a/b;
		scanf("%d", &answer);
		if(answer == right)
			printf("回答正确\n");
		else
			printf("回答错误\n");		
		printf("正确答案:%d\n", answer);
		printf("**************\n");
	}

	return 0;
}

//50.有1000发子弹 要提前装道10箱子里面,接收键盘输入,要取多少颗子弹数,只能显示整箱的个数,问这10个箱子怎么装(定义一个数组10个元素,分别装子弹的个数,比如取走100发子弹 程序运行结果,比如2箱)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>

int main(void)
{
	int arr[10] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 489};
	int num = 0;
	int i = 0;

	printf("请录入要取走的子弹数:\n");
	scanf("%d", &num);
	
	for(i = 9; i >= 0; i--)
	{
		if(arr[i] <= num)
		{
			printf("arr[%d] = %d\n", i, arr[i]);
			num -= arr[i];
		}
	}

	return 0;
}

*/

Licensed under CC BY-NC-SA 4.0