c经典100题

1.有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?能组成多少?

已知:

1,1、2、3、4   

2,组成3位数互不相同

求:能组成多少?    能组成多少?

#include<stdio.h>
int main()
{
    int i, j, k;
    int count = 0;
    for (i = 1; i <= 4; i++)
    {
        for (j = 1; j <= 4; j++)
        {
            for (k = 1; k <= 4; k++)
            {
                if (i != j && i != k && j != k)
                {
                    printf("%d\n", i * 100 + j * 10 + i);
                    count++;
                }
            }
        }
    }
    printf("能组成%d个三位数",count);

    return 0;
}

2.企业发放的奖金根据利润提成

      利润(I)低于或等于10万元时,奖金可提10%;
      利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部 分,   可提成7.5%;
    20万到40万之间时,高于20万元的部分,可提成5%;
    40万到60万之间时高于40万元的部分,可提成3%;
    60万到100万之间时,高于60万元的部分,可提成1.5%;
    高于100万元时,超过100万元的部分按1%提成。

从键盘输入当月利润I,求应发放奖金总数?
————————————————

#include<stdio.h>
int main()
{
    double pro, sum;
    printf("请输入本月利润\n");
    scanf("%d", &pro);
    double bonus1, bonus2, bonus3, bonus4,bonus5;
    bonus1 = 100000 * 0.1; //10w
    bonus2 = bonus1 + 100000 * 0.075;//20w
    bonus3 = bonus2 + 200000 * 0.05;//40w
    bonus4 = bonus3 + 200000 * 0.03;//60w
    bonus5 = bonus4 + 400000 * 0.015;//100w

    if (pro <= 100000)
        sum = pro * 0.1;
    else if (pro <= 200000)
        sum = bonus1 + (pro - 100000) * 0.075;
    else if (pro <= 4000000)
        sum = bonus2 + (pro - 200000) * 0.05;
    else if (pro <= 600000)
        sum = bonus3 + (pro - 400000) * 0.03;
    else if (pro <= 1000000)
        sum = bonus4 + (pro - 600000) * 0.15;
    else if (pro > 1000000)
        sum = bonus5 + (pro - 100000) * 0.01;

    printf("提成为:%lf", sum);
    return 0;
}

3.一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

#include<stdio.h>
#include<math.h>
int main()
{
	long int x, y, i;//定义数据类型为长整型
	for (i = 1; i < 100000; i++)
	{
		x = sqrt(i + 100);//x为i+100开平方
		y = sqrt(i + 268);//y为i+268开平方
		if (x * x == i + 100 && y * y == i + 268)//判断i是否同时满足条件
			printf("这个数是%ld\n", i);
	}
	return 0;
}

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

1.数组储存月份代表天数   

2.输入年月日

3.该年的第几天 = 月份对应天数+day

#include <stdio.h>
#include <math.h>
int main()
{
	int y, m, d;
	int day[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
	printf("请输入年月日\n");
	scanf("%d%d%d", &y, &m, &d);

	if (m > 12 || d > 31) {
		printf("输入有误\n");
		return 0;
	}

	if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
	{
		day[2 - 1] = 29;
	}
	int sum = 0, i;
	for (i = 0; i < m-1; i++)
	{
		sum = sum + day[i + 1];
	}
	printf("%d年%d月%d日是这一年第%d天\n", y, m, d, sum + d);

	return 0;
}

5.输入三个整数x,y,z,请把这三个数由小到大输出

#include <stdio.h>
int main()
{
	int x, y, z,temp;
	printf("请输入三个整数\n");
	scanf("%d%d%d", &x, &y, &z);
	
	if( x>y)
	{
		temp = y; y = x; x = temp;
	}
	if (x > z)
	{
		temp = z; z = x; x = temp;
	}
	if (y > z)
	{
		temp = z; z = y; y = temp;
	}
	printf("%d %d %d", x, y, z);

	return 0;
}

8.输出9*9口诀

9.要求输出国际象棋棋盘

11.古典问题(兔子生崽)

题目:古典问题(兔子生崽):有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(输出前40个月即可)

#include <stdio.h>

//递归
int fib(int i)
{
	if (i <= 2)
		return 1;
	else
		return fib(i - 1) + fib(i - 2);
}
int main()
{
	int k = 0;
	for (int i = 1; i <= 40; i++, k++)
	{
		if (k % 4 == 0)printf("\n");
		printf("%12d", fib(i));
	}
	return 0;
}
#include <stdio.h>
//循环
int main()
{
	int f1 = 1, f2 = 1, f3, k = 0;
	for (int i = 1; i <= 40; i++, k++)
	{
		if (k % 4 == 0)printf("\n");
		printf("%12d", f1);
		f3 = f1 + f2;
		f1 = f2;
		f2 = f3;
	}
	return 0;
}

//数组

12.判断100到200之间的素数 

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
int main()
{
	int i,j;
	for (i = 100; i <= 200; i++)
	{
		for (j = 2; j < i; j++)
		{
			if (i % j == 0) break;
		}
		if (j >= i)printf("%d ",i);
 
	}
	printf("\n");
 
	return 0;
}

13.打印出所有的"水仙花数"

题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数 本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。

14.将一个正整数分解质因数(短除法)

题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:

    (1)如果这个质数恰等于(小于的时候,继续执行循环)n,则说明分解质因数的过程已经结束,另外 打印出即可。
    (2)但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n.重复执行第二步。
    (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

#include<stdio.h>
int main()
{
    int n,i;
    printf("请输入整数:");
    scanf("%d",&n);
    printf("%d=",n);
    for(i=2;i<=n;i++)
    {
        while(n%i==0)
        {
            printf("%d",i);
            n/=i;
            if(n!=1) printf("*");
        }
    }
    
    printf("\n");
    return 0;
}
#include <stdio.h>
int main()
{
	int n, i, j;
	scanf("%d", &n);

	for (int i = 1; i <= n; i++)  //遍历1~n

	{

		for (int j = 2; j <= i; j++)

		{

			if (i % j == 0 && i == j && n % i == 0)
				printf("%d ", i);
			else if (i % j == 0 && i != j)
				break;
			
		}
	}
}

16.最大公约数和最小公倍数

辗转相除法

1,保证 n>m

2,保存n*m的乘积  求最小公倍数

3,辗转法

#include <stdio.h>
int main()
{
    int m, n, t; //p用来接收原始值m和n的乘积,r接余数
    printf("请输入两个正整数n,m:");
    scanf("%d%d", &m, &n);
    if (m < n) { t = m; m = n; n = t; }

    int p = m * n;
    while (n != 0)   //m/n n小于0无意义 作为退出循环的条件
    {
        t = m % n;
        m = n;
        n = t;
    }
    printf("最大公约数%d", m);

    printf("最小公倍数%d", p / m);
    return 0;
}

递归法

#include <stdio.h>
int gcd(int a, int b)
{
    if (b == 0)
        return a;
    else
        return gcd(b, a % b);
}

int main()
{
    int m, n, temp;
    printf("请输入两个正整数n,m:");
    scanf("%d%d", &m, &n);
    if (m < n)  // 让m必须大于n
    {
        temp = m;
        m = n;
        n = temp;
    }
    int k = m * n;
    temp = gcd(m, n);  //保存最大公因数
    printf("最大公因数:%d\n", temp);
    printf("最小公倍数:%d\n", k / temp);

    return 0;
}

求一个整数的所有因素

#include <stdio.h>
int main()
{
    int number, i;
    printf("输入一个整数: ");
    scanf("%d",&number);
 
    printf("%d 的因数有: ", number);
    for(i=1; i <= number; ++i)
    {
        if (number%i == 0)
          printf("%d ",i);
    }
 
    return 0;
}

寻找两个数所有公因数

#include <stdio.h>
int main()
{
    int num1, num2, i;
    printf("输入两个数:");
    scanf("%d%d", &num1, &num2);
    for (i = 1; i <= (num1 > num2 ? num2 : num1); ++i)
    {
        if (num1 % i == 0 && num2 % i == 0)
        {
            printf("%d ", i);
        }
    }
    return 0;
}

寻找两个数所有最大公约数

#include <stdio.h>
int main()
{
    int n1, n2, i, gcd;
    printf("输入两个正整数,以空格分隔: ");
    scanf("%d %d", &n1, &n2);
 
    for(i=1; i <= n1 && i <= n2; ++i)
    {
        // 判断 i 是否为最大公约数
        if(n1%i==0 && n2%i==0)
            gcd = i;
    }
 
    printf("%d 和 %d 的最大公约数是 %d", n1, n2, gcd);
    return 0;
}

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

#include<stdio.h>
int main()
{
    char c;
    int letters = 0, spaces = 0, digits = 0, others = 0;
    printf("请输入一些字母:\n");
    while ((c = getchar()) != '\n')
    {
        if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
            letters++;
        else if (c >= '0' && c <= '9')
            digits++;
        else if (c == ' ')
            spaces++;
        else
            others++;
    }
    printf("字母=%d,数字=%d,空格=%d,其他=%d\n", letters, digits, spaces, others);
    return 0;
}

18.求s=a+aa+aaa+aaaa+aa...a的值

变量a,n由键盘输入:

2    

22=2*10+2    

222=2*100+22   

2222=2*1000+222

#include <stdio.h>
int main()
{
	int a, n;
	printf("请输入a和n:");
	scanf("%d%d", &a, &n);

	int i, s = 0, k = 0;
	for (i = 1; i <= n; i++)
	{
		k = k + a;   //pow(10,i)
		s = s + k;
		a = a * 10;
	}
	printf("累加结果为:%d\n", s);

	return 0;
}

求x=1-1/22 + 2/333-3/4444.....n-1/nnnnn的值,n<=9

1,22 333 4444 55555、、、、

2,-1/t    2/t   -3/t、、、、

#include<stdio.h>
#include<math.h>
int gac(int n)
{
    int k = 0;
    for (int i = 1; i <= n; i++) //控制位数
    {
        k = k + n * pow(10, i - 1);
    }
    return k;
}

int main()
{
    int n;
    printf("请输入一个小于9的自然数:");
    scanf("%d", &n);
    double sum = 1.0,sige=-1.0;
    for (int i = 1; i < n; i++)
    {
        sum += (i * sige) / gac(i + 1);
        sige = sige * -1;

    }
    printf("%lf", sum);
    return 0;
}

1  22  333  4444  55555......

1=1

22=2*10 +2

333=3*100+3*10+3

.......

 int gac(int n)
{
    int k = 0;
    for (int i = 1; i <= n; i++) //控制位数
    {
        k = k + n * pow(10, i - 1);
    }
    return k;
}

int main()
{
    for (int i = 1; i <= 5; i++)
    {
        printf("%d ", gac(i));
    }
    return 0;
}

19.一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数

1,1000以内

2,一个数是其因子之和

3,打印完数  打印因子

#include <stdio.h>
int main()
{
	int i, j;
	for (i = 1; i <= 1000; i++)  //1.编程找1000以内完数
	{
		int sum = 0;
		for (int j = 1; j < i; j++)
		{
			if (i % j == 0)
			{
				sum += j;//记录因数之和
			}
		}
		if (sum == i)
		{
			printf("%d是完数:", i);

			for (j = 1; j < i; j++) //2.因子打印出来
			{
				if (i % j == 0)
				{
					printf("%d,", j);
				}
			}
			printf("\n");
		}
	}
	return 0;
}

20.小球自由下落

题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

#include <stdio.h>
int main()
{
	double sumcm =0.0, cm=100.0;
	for (int i = 1; i <= 10; i++)
	{
		sumcm += cm;
		cm = cm / 2;
		sumcm += cm;
	}
	sumcm = sumcm - cm;
	printf("第10次落地时共经过%lfcm\n", sumcm);
	printf("第10次反弹%lfcm", cm);
	return 0;
}

21.猴子吃桃问题

题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

题目分析:采用逆向思维

下一天桃子=上一天桃子/2 - 1  《==》 上一天桃子=(下一天桃子+1)*2

#include <stdio.h>

int peachNum(int day)
{
	if (day == 10)
		return 1;
	else
		return (peachNum(day + 1) + 1) * 2;
}
int main()
{
	
	printf("第一天共摘桃%d", peachNum(1));
}
#include <stdio.h>

int main()
{
	int day = 9, crenum = 1, prenum;
	while (day--)
	{
		prenum = (crenum + 1) * 2;
		crenum = prenum;
	}
	printf("第一天共摘桃%d", crenum);
	return 0;
	
}

22.两个乒乓球队进行比赛,各出三人

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

#include <stdio.h>
int main()
{
	int A, B, C;
	//1.列举A的所有对战对象
	for (A = 'X'; A <= 'Z'; A++)
	{
		//2.列举B的所有对战对象
		for (B = 'X'; B <= 'Z'; B++)
		{
			//3.列举C的所有对战对象
			for (C = 'X'; C <= 'Z'; C++)
			{
				if (A != B && A != C && B != C && A != 'X' && C != 'X' && C != 'Z')
				{
					printf("A对战%c,B对战%c,C对战%c\n", A, B, C);
				}
			}
		}
	}
	
	return 0;
}

23.打印出如下图案(菱形)

#include <stdio.h>
int main()
{
	int i, j;
	for (i = 1; i <= 4; i++)
	{
		for (j = 4; j > i; j--)
			printf(" ");
		for (j = 1; j <= i; j++)
			printf("*");
		for (j = 1; j < i; j++)
			printf("*");

		printf("\n");
	}
	for (i = 1; i <= 3; i++)
	{
		for (j = 1; j <= i; j++)
			printf(" ");
		for (j = 3; j >= i; j--)
			printf("*");
		for (j = 2; j >= i; j--)
			printf("*");
		printf("\n");

	}

	return 0;
}

24.有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和

#include <stdio.h>
int main()
{
	double sum = 0.0, f1 = 2.0, f2 = 1.0, f3;
	for (int i = 1; i <= 20; i++)
	{
		sum += f1 / f2;
		f3 = f1 + f2;
		f2 = f1; f1 = f3;
	}
	printf("sum=%.2lf", sum);

	return 0;
}

25.求1+2!+3!+...+20!的和 (递归)

n!  { 1               n=0,1

     {  (n-1)*n     n>=2

#include <stdio.h>
int main()
{
	//1!--20!阶乘
	int fac(int n);
	int i, sum = 0;
	for (i = 1; i <= 20; i++)
	{
		sum = sum + fac(i);
	}
	printf("1!+2!..+20!=%d\n", sum);
	
	return 0;
}
int fac(int n)
{
	int sum;
	if (n < 0)
		printf("数据错误");
	else if (n == 0 || n == 1)
		sum = 1;
	else
		sum = fac(n - 1) * n;  // 反复调用 int f( int n )函数然后返回出去。
	return sum;
}
#include <stdio.h>
int main()
{
	int sum = 0, i, j;
	for (i = 1; i <= 20; i++)
	{
		int k = 1;
		for (j = 1; j <= i; j++)
			k = k * j;
		sum += k;

	}
	printf("1-20的阶乘为:%d", sum);
	
	return 0;
}

27.利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来

#include<stdio.h>
int main()
{
	void plain(int n);
	int i=5;
	plain(i);
	printf("\n");
	return 0;
}
void plain(int n)
{
	char next;
	if(n<=1)
	{
		next=getchar();
		putchar(next);
	}
    else
	{
		next=getchar();
		plain(n-1);
		putchar(next);
	}
}

29.给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字

#include <stdio.h>
int main()
{
	int WeiNum(int);
	void convert(int);
	int n;
	printf("请输入不多于五位的正整数\n");
	scanf("%d", &n);
	printf("%d是%d位数\n", n, WeiNum(n));
	convert(n); //逆序输出

	return 0;
}
int WeiNum(int n)
{
	int count = 0;
	while (n != 0)
	{
		count++;
		n = n / 10;
	}
	return count;
}
void convert(int i)
{
	if (i / 10 == 0)
	{
		printf("%d", i % 10);
	}
	else
	{
		printf("%d", i % 10);
		convert(i / 10);
	}
}

30.回文数

题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

程序分析:学会分解出每一位数。

#include <stdio.h>
int main()
{
	int n,k=0,t;  //错误 少定义一个t
	printf("请输入一个整数\n");
	scanf("%d", &n);
	t = n;
	while (t!= 0)
	{
		k = k * 10 + t % 10;
		t = t / 10;
		printf("%d\n", k);
	}
	if (k == n)
		printf("是回文数\n");
	else
		printf("不是回文数\n");
	return 0;
}
#include <stdio.h>
int main()
{
    int a;
    printf("请输入一个整数");
    scanf("%d",&a);
 
    int s=0;
    for(int i=1;i<a;i*=10)
    {
        s=a%(10*i)/i +s*10;
    }
    if (a == s)
	    printf("%d是回文数",a);
    else
	    printf("%d不是回文数", a);
 
    return 0;
}

32.删除一个字符串中的指定字母,如:字符串 "aca",删除其中的 a 字母

#include <stdio.h>
#include <string.h>

void deleteChar(char a, char str[]) {
    int strLength = strlen(str); // 计算字符串的长度
    int point = 0; // 字符串位置标号,用于保存当前有效字符位置
    for (int i = 0; i < strLength; i++) {
        if (str[i] == a) {
            continue; // 若当前字符为要删除的字符,则直接跳过继续进行循环
        } else {
            str[point] = str[i]; // 当前字符为非删除字符,则往前覆盖
            point++; // 有效字符标号位置递增
        }
    }
    str[point] = '\0'; // 循环结束,最后一个字符为结束符
}

int main(void) {
    char a; // 要删除的字母
    char str[200]; // 保存字符串
    scanf("%s", str);
    deleteChar('a', str); // 这里把要删除的字符写死了,为`a`,你也可以换成输入语句,自行输入
    puts(str);
	return 0;
}


33.判断一个数字是否为质数

质数:即素数 除1和其本身不能被整除的数

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
int main()
{
	int a,i;
	printf("请输入一个正整数哦\n");
	scanf("%d", &a);
	if (a <= 1)
		printf("不是素数");
	else if (a == 2)
		printf("素数%d", a);
	else {
		//sqrt()函数 求一个数的平方根
		//16  1 2 4 8 16   16平方根4
		//可  1 2取余判断素数 a变sqrt(a)  #include <math.h> 
		for (i = 2; i < a; i++) {
			if (a % i == 0) break;
		}
		if (i < a)printf("%d不是素数\n", a);
		else printf("%d是素数\n", a);
	}
 
	return 0;
}

35.字符串反转,如将字符串 "www.runoob.com" 反转为 "moc.boonur.www" 

#include<stdio.h>
#include<string.h>
int main()
{
    char str[40], temp;
    gets(str);
    int len, i;
    len = strlen(str);//strlen是计算有效的内存长度
    for (i = 0; i < len / 2; i++) {//用/2 来进行反转
        temp = str[i];
        str[i] = str[len - 1 - i];
        str[len - 1 - i] = temp;
    }
    puts(str);
    //	for(i=0;i<len;i++){
//    	printf("%c",str[i]);
//	}
    return 0;
}
#include<stdio.h>
int main()
{
	char arr[40];
	gets(arr);
	int len = strlen(arr);
	char temp;
	int low = 0, high = len - 1;
	while (low < high)
	{
		temp = arr[low];
		arr[low] = arr[high];
		arr[high] = temp;
		low++;
		high--;
	}
	puts(arr);
	return 0;
}

36.求100之内的素数(筛选法)

#include <stdio.h>
 
int main()
{
	int i,j;
	int a[100];
	//向a数组中填充1-100的数据
	for (i = 0; i < 100; i++)
	{
		a[i] = i + 1;
	}
	//1不是素数,将1划掉-----使用0进行赋值
	a[0] = 0;
 
	for (i = 1; i < 100; i++)
	{
		if (0 == a[i]) {
			continue;
		}
		//现在用a[i]去模之后的所有的元素
		for (j = i + 1; j < 100; j++)
		{
			if (a[j] % a[i] == 0 && 0 !=a[j])
				a[j] = 0;
		}
	}
	//输出素数
	for (i = 0; i < 100; i++)
	{
		if (a[i] != 0)
		{
			printf("%d ", a[i]);
		}
	}
	printf("\n");
	return 0;
}
#include <stdio.h>
int main()
{
	int i, j;
	for (i = 2; i <= 100; i++)
	{
		for (j = 2; j < i; j++)
		{
			if (i % j == 0) break;
		}
		if (j >= i)printf("%d ", i);

	}
	printf("\n");

	return 0;
}

37.对10个数进行排序(选择法)

38.求一个3*3矩阵对角线元素之和

39.有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中

61.杨辉三角形

题目:打印出杨辉三角形(要求打印出10行)。

程序分析:

结构如下所示:

  1. 1

  2. 1 1

  3. 1 2 1

  4. 1 3 3 1

  5. 1 4 6 4 1

#include <stdio.h>
 
int Back_Print(int i, int j)
{
	if (j == 0 || i == j)
	{
		return 1;
	}
	else
	{
		return Back_Print(i - 1, j) + Back_Print(i - 1, j - 1);
	}
}
 
int main()
{
	//杨辉三角的递归打印
	int i, j;
	int blank = 0;
	for (int i = 0; i < 7; i++)
	{
		for (j = 0; j < -i + 6; j++)
			printf("  ");
		for (int j = 0; j <= i; j++)
		{
			printf("%4d ", Back_Print(i, j));
		}
		printf("\n");
	}
	return 0;
}
#include <stdio.h>
int main()
{
	//保存杨辉三角数据
	int a[10][10];
	int i, j;
	
	for (i = 0; i < 10; i++)
	{
		//对每一行进行赋值
		for (j = 0; j <= i; j++)
		{
			//第0列与对角线上的数据都为1
			if (j == 0 || j==i)
			{
				a[i][j] = 1;
			}
			else
			{
				//其他位置
				a[i][j] = a[i - 1][j] + a[i - 1][j - 1];
			}
		}
	}
	for (i = 0; i < 10; i++)
	{
		for (j = 0; j <= i; j++)
		{
			printf("%4d", a[i][j]);
		}
		printf("\n");
	}
 
	return 0;
}

66.输入3个数a,b,c,按大小顺序输出

程序分析:利用指针方法。

#include <stdio.h>
int main()
{
	int a, b, c,t;
	printf("请输入3个数\n");
	scanf("%d%d%d", &a, &b, &c);
	int* p1 = &a, * p2 = &b, * p3 = &c;
	if (*p1 > *p2)
	{
		t = *p1; *p1 = *p2; *p2 = t;
	}
	else if (*p1 > *p3)
	{
		t = *p2; *p2 = *p1; *p1 = t;
	}
	else if (*p2 > *p3)
	{
		t = *p2; *p2 = *p3; *p3 = t;
	}
	printf("%d %d %d", a, b, c);
	return 0;
}

67.输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组

1.输入数组

2.记录最大与最小元素下标   

3.用下标交换

#include<stdio.h>
#define N 5
int main()
{
	int a[N] = { 2,1,5,21,6 };
	int i;
	printf("原数组:\n");
	for (i = 0; i < N; i++)
	{
		printf("%d ", a[i]);
	}

	int maxindex = 0, mineindex = 0; //定义最大值与最小值  下标为0
	for (i = 1; i < 5; i++)
	{
		if (a[maxindex] < a[i])
			maxindex = i;
		if (a[mineindex] > a[i])
			mineindex = i;
	}

	int temp;
	//最大值与首元素交换
	temp = a[maxindex]; a[maxindex] = a[0]; a[0] = temp;
	//最小值与最后元素交换
	temp = a[mineindex]; a[mineindex] = a[N - 1]; a[N - 1] = temp;
	printf("\n交换后数组\n");
	for (i = 0; i < 5; i++)
	{
		printf("%d ", a[i]);
	}

	return 0;
}

68.有 n个整数,使其前面各数顺序向后移 m 个位置,最后m个数变成最前面的 m 个数(队循环)

#include<stdio.h>
void move(int num[], int n, int m);
int main()
{
	int arr[20];
	int n, m;
	printf("输入整数个数\n");
	scanf("%d", &n);
	printf("输入移动个数\n");
	scanf("%d", &m);
	printf("输入%d个整数:\n",n);
	for (int i = 0; i < n; i++)
		scanf("%d", &arr[i]);
	move(arr, n, m);
	//输出移动后数值
	for (int i = 0; i < n; i++)
		printf("%d ", arr[i]);
	printf("\n");
	
	return 0;
}
void move(int num[], int n, int m)
{
	for (int i = 0; i < m; i++)
	{
		int t = num[n - 1];
		for (int j = n - 1; j > 0; j--)
			num[j] = num[j - 1];
		num[0] = t;
	}

}

#include <stdio.h>
void move(int number[20], int n, int m);
int main()
{
    int number[20], n, m;
    printf("请输入整数个数:\n");
    scanf("%d", &n);
    printf("请输入移动位数:\n");
    scanf("%d", &m);
    printf("请输入%d个整数", n);

    for (int i = 0; i < n; i++)
    {
        scanf("%d", &number[i]);
    }
    for (int i = 0; i < n; i++)
    {
        printf("%d ", number[i]);
    }
    printf("\n");
    move(number, n, m);
    for (int i = 0; i < n; i++)
    {
        printf("%d ", number[i]);
    }
    return 0;
}

void move(int number[20], int n, int m)
{
    for (int i = 0; i < m; i++)
    {
        int t = number[n - 1];
        for (int j = n - 1; j > 0; j--)
        {
            number[j] = number[j - 1];
        }
        number[0] = t;
    }
}

69.有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位

1,输入n人数

2,

70.写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度

#include<stdio.h>
int main()
{
	int str[20];
	printf("请输入字符串\n");
	scanf("%s", str);
	int len = length(str);
	printf("字符串长度为%d", len);
	return 0;
}
int length(char* s)
{
	int count = 0;
	while (*s != '\0')
	{
		count++;
		s++;
	}
	return count;
}

71.编写input()和output()函数输入,输出5个学生的数据记录

#include<stdio.h>
#define N 5
struct student
{
	char name[20];
	char sex[6];
	int age;
}stu[5];
void input(struct student st[N])
{
	int i;
	for (i = 0; i < N; i++)
	{
		scanf("%s%s%d", stu[i].name, stu[i].sex, &stu[i].age);
	}
}
void output(struct student stu[N])
{
	for (int i = 0; i < N; i++)
	{
		printf("%s  %s  %d\n", stu[i].name, stu[i].sex, stu[i].age);
	}
}

int main()
{
	printf("请输入5个学生信息:姓名 性别 年龄:\n");
	input(stu);
	printf("5个学生的信息如下:\n姓名 性别 年龄\n");
	output(stu);

	return 0;
}

72.创建一个链表

 

75.输入一个整数,并将其反转后输出(递归)

#include<stdio.h>
void convert(int);
int main()
{
	int n;
	printf("输入一个整数:\n");
	scanf("%d", &n);
	convert(n);
	return 0;
}
void convert(int n)
{
	if (n / 10 == 0)
		printf("%d", n);
	else
	{
		printf("%d", n % 10);
		convert(n / 10);
	}
}

 整数反转:类似回文数

#include<stdio.h>
int main()
{
	int n,t=0;
	printf("请输入一个整数:");
	scanf("%d", &n);
	while (n != 0)
	{
		t = t * 10 + n % 10;
		n = n / 10;
	}
	printf("反转后的整数:%d", t);
	return 0;
}


#include<stdio.h>
int main()
{
	int n,t=0;
	printf("请输入一个整数:");
	scanf("%d", &n);
	for (int i = 1; i < n; i = i * 10)
	{
		t = t * 10 + n % (10 * i) / i;
	}
	printf("%d", t);


	return 0;
}

76.编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数)

#include<stdio.h>
double even(int);
double odd(int);
int main()
{
	int n;
	double sum;
	double (*pfunc)(int); // 定义函数指针
	printf("请输入n:");
	scanf("%d", &n);
	if (n % 2 == 0) { // 判断奇偶
		pfunc = even; // 偶数函数
	}
	else {
		pfunc = odd; // 奇数函数
	}
	sum = (*pfunc)(n); // 通过指针调用函数
	printf("%lf\n", sum);
	return 0;
}
double even(int n)
{
	double sum=0.0, t = 1.0;
	for (int i = 2; i <= n; i += 2)
	{
		sum = sum + t / i;
	}
	return sum;
}
double odd(int n)
{
	double sum = 0.0, t = 1.0;
	for (int i = 1; i <= n; i+=2)
	{
		sum = sum + t / i;
	}
	return sum;
}

81.809*??=800*??+9*?? 其中??代表的两位数, 809*??为四位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果

#include<stdio.h>
int main()
{
	int i;
	for (i = 10; i < 100; i++)
	{
		if ((809 * i >= 1000 && 809 * i < 10000) && (8 * i >= 10 && 8 * i < 100)
			&& (9 * i >= 100 && 9 * i < 10000))
		{
			printf("%d=%d*%d+%d*%d", 809 * i, 800, i, 9, i);
		}
	}
	return 0;
}

82.八进制转换为十进制

1.输入8进制数 存入数组中

2.取出每位数字进行   转十进制

#include<stdio.h>
int main()
{
    char s[20];
    printf("请输入一个8进制数:\n");
    gets(s);
    int n = 0, i = 0;
    while (s[i] != '\0') {
        n = n * 8 + s[i] - '0';  //进制转换
        i++;
    }
    printf("刚输入的8进制数转化为十进制为\n%d\n", n);

    return 0;
}

十六进制转换为十进制

#include<stdio.h>
int main()
{
    char s[20];
    printf("请输入一个16进制数:\n");
    gets(s);
    int n = 0, i = 0;
    while (s[i] != '\0') {
         //进制转换
        if (s[i] >= '0' && s[i] <= '9')
            n = n * 16 + (s[i] - '0');
        else if (s[i] >= 'a' && s[i] <= 'f')
            n = n * 16 + (s[i] - 'a' + 10);
        else if (s[i] >= 'A' && s[i] <= 'F')
            n = n * 16 + (s[i] - 'A' + 10);
        i++;
    }
    printf("刚输入的8进制数转化为十进制为\n%d\n", n);

    return 0;
}

十进制转换为八进制

83.求0—7所能组成的奇数个数

84.一个偶数总能表示为两个素数之和

#include<stdio.h>
int prime(int);
int main()
{
	int odd;
	printf("请输入一个偶数:");
	scanf("%d", &odd);
	int i;
	for (i = 1; i < odd; i++)
	{
		if (prime(i) && prime(odd - i))
			break;
	}
	printf("偶数%d能被分解成%d,%d两素数的和", odd, i, odd - i);
	return 0;
}

int prime(int n)
{
	if (n < 2)
		return 0;
	else if (n == 2)
		return 1;
	else
	{
		int i;
		for (i = 2; i < n; i++)
		{
			if (n % i == 0)break;
		}
		if (i >= n)
			return 1;
		else
			return 0;
	}
}

85.判断一个素数能被几个9整除

1.输入一个素数

2.判断能整除几个9

#include <stdio.h>
int main()
{
    int n;
    printf("请输入一个素数:");
    scanf("%d", &n);
    int sum = 9, i;
    for (i = 1; ; i++) {
        if (sum % n == 0) {
            break; // 能被一个9整除
        }
        else {
            sum = sum * 10 + 9; // 累加
        }
    }
    printf("素数%d能整除%d个9组成的数%d", n, i, sum);
    return 0;
}

88.读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的 *

1.读取7位1-50整数值

2.读取第几个值,程序打印几个※

#include<stdio.h>
int main()
{
	int n, i, j;
	printf("请输入要7个数(1-50)");
	for (i = 1; i <= 7; i++)
	{
		scanf("%d", &n);
		if (n >= 1 && n <= 50)
		{
			for (j = 1; j <= i; j++)
				printf("*");
			printf("\n");
		}
		else
		{
			printf("请重新输入");
			i--;
		}

	}

	return 0;
}

89.电话号码加密

题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下: 每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。

1.输入四位整数

2.数字都加上5,然后用和除以10的余数代替该数字

3.将第一位和第四位交换,第二位和第三位交换。

#include<stdio.h>
int main()
{
	int a, aa[4];
	printf("请输入四位整数");
	scanf("%d", &a);
	if (a >= 1000 && a < 10000)
	{
		aa[3] = a % 10;
		aa[2] = a % 100 / 10;
		aa[1] = a % 1000 / 100;
		aa[0] = a / 1000;
	}
	int i, t;
	//每位数字都加上5,然后用和除以10的余数代替该数字
	for (i = 0; i < 4; i++)
	{
		aa[i] = (aa[i] + 5) % 10;
	}
	//交换
	for (i = 0; i < 4 / 2; i++)
	{
		t = aa[i];
		aa[i] = aa[3 - i];
		aa[3 - i] = t;
	}
	//输出加密数据
	for (i = 0; i < 4; i++)
	{
		printf("%d", aa[i]);
	}
	return 0;
}

101.矩阵交换行

3X3二维数组转置,行列互换

1.行列互换,即对角线以为进行互换

#include<stdio.h>
void convert(int a[3][3]);  //函数声明
int main()
{
    int a[3][3] = { {1,2,3},{4,5,6},{7,8,9} };
    int i, j; 
    //打印原数组
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 3; j++)
        {
            printf("%d ", a[i][j]);
        }
        printf("\n");
    }

    convert(a); //行列元素交换
    printf("\n");
    //打印交换数组
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 3; j++)
        {
            printf("%d ", a[i][j]);
        }
        printf("\n");
    }

    return 0;
}

void convert(int a[3][3])
{
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < i; j++)
        {
            int temp = a[i][j];
            a[i][j] = a[j][i];
            a[j][i] = temp;
        }
    }
}

将一个二维数组行和列的元素互换,存到另一个二维数组中。

 

 有一个3X4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在行号和列号。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值