C语言程序题(一)

一.三个整数从大到小输出

        首先做这个题目需要知道理清排序的思路,通过比较三个整数的值,使之从大到小输出。解这道题有很多方法我就总结了两种方法:一是通过中间变量比较和交换,二是可以用冒泡排序法(虽然三个数字排序用这个效率低,就是一块总结一下它的大概思路)。

中间变量比较和交换

       无论多乱顺序三个数之间都要进行比较(a与b,b与c,c与a),才能比较它们之间的大小。输出从大到小分别把这些数据进行交换,a显示的是三个数字中最大的,c则是最小的数字,其次就是b。

       在a和b中,需要比较a与b的大小,a需要三个数字最大的,所以a大于b的话就不需要进行交换,反之用中间变量t进行交换;然后再用a和b中最大的a与c比较,同样的原理大的值复制给a,小的则给另一个(只要有交换就需要用到中间变量t);最后就是b和c之间的大小比较了,同样c最小,把大的值赋值给b,小的值给c。这样下来三个数就比较好了,下面是代码:

int main()
{
	int a = 0;
	int b = 0;
	int c = 0;
	int t = 0;
	scanf("%d %d %d", &a, &b, &c);
	if (a < b)//比较a和b,大的值给a,小的值给b
	{
		t = b;
		b = a;
		a = t;
	}
	if (b < c)//比较b和c,大的值给b,小的值给c
	{
		t = c;
		c = b;
		b = t;
	}
	if (a < c)//比较a和c,大的值给a,小的值给c
	{
		t = c;
		c = a;
		a = t;
	}
	printf("%d %d %d\n", a, b, c);//从大到小输出
	return 0;
}
冒泡排序比较

       首先把这些个数依次放入数组里。然后进入第一次循环,先将前两个数进行从大到小(从小到大),把大的数放入前面,小(大)的放后面,再将小的数和下一个数比较继续小(大)的放后面,直至最后一个数是所有数中最小(大)的,这一趟下来需要比较n-1次;接着我讲下一趟,下一趟和之前差不多,就是数组中最后一个数已经确定了就不需要比大小了,所以两个数比较需要n-2;依次往下推,可以发现规律n-i(其中i为趟数)。(还有这里的趟数是从1开始的)

       那需要多少趟呢?按照上面所说的,一趟则确定一个无序数列中最小(大)的,那就需要n趟。但是呢,你想想看就三个数而言,已经确定了两个数那最后一个也确定了,所以一共需要n-1趟。

int main()
{
	int a[3] = { 0 };
	int i = 0;
	int j = 0;
	int t = 0;
	for (i = 0; i < 3; i++)
	{
		scanf("%d", &a[i]);//输入三个数字
	}
	for (i = 1; i < 3; i++)//三个数,当两个数确定了位置,最后一个也就确定了。所以需要两趟。
	{
		for (j = 0; j < 3-i ; j++)
		{
			if (a[j] < a[j + 1])//两个相邻的元素进行比较,第一趟完后,最小的数就在末尾了
			{                   //类推下去。每一趟最小的都在最后,顺序就排好了
				t = a[j];
				a[j] = a[j + 1];
				a[j + 1] = t;
			}
		}
	}
	for (i = 0; i < 3; i++)
	{
		printf("%d ", a[i]);//打印从大到小的数
	}
	return 0;
}

二.输入多个学生的多个成绩,输出学生们的成绩及总分

        这里我是用了一个二维数组来存取学生们的成绩,   在这里我强调一下用scanf时需要谨慎使用空格( )和换行(\n)。其次就是打印各项成绩及总成绩。

        也可以用一个一维数组,用二维数组更占空间,但二维数组更方便一些。

int main()
{
    int i = 0;
    int j = 0;
    float sum = 0.0f;
    float arr[5][5] ;
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5; j++)
        {
            scanf("%f", &arr[i][j]);//输入多个学生的多项成绩
        }
    }
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5; j++)
        {
            printf("%.1f ", arr[i][j]);//打印学生的各个成绩
            sum += arr[i][j];//累加计算总成绩
        }
        printf("%.1f\n", sum);//打印一个学生的总成绩
        sum = 0;//初始化
    }
    return 0;
}

三. 多组数据比较两个数的大小关系 

       我一开始做这题程序只能运行一组数据,当时也没有理解多组数据什么意思,后面理解了,所以想记录一下这道题。想要多组数据可以这样写: 

int main()
{
    int a = 0;
    int b = 0;
    while (scanf("%d %d", &a, &b) == 2)//重点在这行代码,也可以写成 != EOF
        {
            if (a > b)
               printf("%d>%d\n",a,b);
            else if (a < b)
               printf("%d<%d\n",a,b);
            else
               printf("%d=%d\n",a,b);
        }
    return 0;
}

 打印scanf数值取决于输入的个数,如下图:

相关推荐

  1. C语言程序10

    2024-07-10 06:24:03       26 阅读
  2. C语言程序10

    2024-07-10 06:24:03       29 阅读
  3. C语言程序设计10】

    2024-07-10 06:24:03       58 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 06:24:03       99 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 06:24:03       107 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 06:24:03       90 阅读
  4. Python语言-面向对象

    2024-07-10 06:24:03       98 阅读

热门阅读

  1. C#中序列化和反序列化

    2024-07-10 06:24:03       31 阅读
  2. 微服务节流阀:Eureka中服务限流策略的精妙实现

    2024-07-10 06:24:03       28 阅读
  3. LVS集群

    LVS集群

    2024-07-10 06:24:03      25 阅读
  4. 力扣 设计链表707

    2024-07-10 06:24:03       32 阅读
  5. Apache部署与虚拟主机

    2024-07-10 06:24:03       32 阅读
  6. Linux——网络编程——UDP

    2024-07-10 06:24:03       25 阅读
  7. 2024.7.9总结(找对象的逻辑)

    2024-07-10 06:24:03       31 阅读
  8. 使用ADB命令控制logcat日志本地存储功能

    2024-07-10 06:24:03       34 阅读
  9. matlab实现pid控制空调温度

    2024-07-10 06:24:03       30 阅读