C语言习题练习12--二级指针

1.喝汽水

1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水(编程实现)。

int main()
{
    int n = 0;
    scanf("%d", &n);
    int tmp = n;
    int a= 0;
    int b = 0;
    int sum = n;
    while(tmp/2)
    {
        a = tmp / 2;
        b = tmp % 2;
        tmp = a + b;
        sum = sum+a;
    }
    printf("你可以买%d瓶饮料", sum);
    return 0;
}
//喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水(编程实现)。
//
int main()
{
	int money = 0;
	int total = 0;
	int empty = 0;
	scanf("%d", &money);//20
	//total += money;//买
	//empty = money;
	置换
	//while (empty >= 2)
	//{
	//	total += (empty / 2);
	//	empty = empty / 2 + empty%2;
	//}
//规律:
	if(money > 0)
		total = 2 * money - 1;

	printf("%d\n", total);

	return 0;
}

 2.第一行包含一个整数n,表示一个方阵包含n行n列,用空格分隔。 (1≤n≤10)

从2到n+1行,每行输入n个整数(范围-231~231-1),用空格分隔,共输入n*n个数。

3.

struct student
{
	int num;
	char name[32];
	float score;
} stu;
//stu 是结构体变量的

typedef struct Student
{
	int num;
	char name[32];
	float score;
} Stu;
//Stu 是类型

int main()
{
	Stu s1;
	return 0;
}

4.

int* arr[10];//指针数组

int (*arr)[10];//数组指针

5.上三角矩阵的判定

输入描述:

第一行包含一个整数n,表示一个方阵包含n行n列,用空格分隔。 (1≤n≤10)

从2到n+1行,每行输入n个整数(范围-231~231-1),用空格分隔,共输入n*n个数。

输出描述:

一行,如果输入方阵是上三角矩阵输出"YES"并换行,否则输出"NO"并换行。

#include<stdio.h>
int main()
{
    int n = 0;
    scanf("%d", &n);
    //int arr[n][n];//C99 变长数组
    int arr[10][10];//vc不能上述
    int i = 0;
    //输入
    for (i = 0; i < n; i++)
    {
        int j = 0;
        for (j = 0; j < n; j++)
        {
            scanf("%d", &arr[i][j]);
        }
    }
    //判断,下三角都为0,此时i>j
    int flag = 1;//默认是上三角矩阵
    for (i = 0; i < n; i++)
    {
        int j = 0;
        for (j = 0; j < i; j++)
        {
            if (arr[i][j] != 0)
            {
                flag = 0;
                goto end;//跳出循环的另一种形式
            }
        }
    }
    end:
        if (flag == 1)
            printf("YES\n");
        else
            printf("NO\n");
    
        return 0;
    }

6.矩阵判断

输入描述:

第一行包含两个整数n和m,表示两个矩阵包含n行m列,用空格分隔。

从2到n+1行,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示第一个矩阵中的元素。

从n+2行到2n+1,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示第二个矩阵中的元素。------1 < n,m < 10

输出描述:

一行,如果两个矩阵相等输出"Yes"并换行,否则输出"No"并换行。

#include <stdio.h>

int main()
{
    int n = 0;
    int m = 0;
    scanf("%d %d", &n, &m);
    //int arr1[10][10];
    //int arr2[10][10];
    int arr1[n][m];//c99版本
    int arr2[n][m];
    //输入数据
    //第一个数组
    int i = 0;
    int j = 0;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            scanf("%d", &arr1[i][j]);
        }
    }
    //第二个数组
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            scanf("%d", &arr2[i][j]);
        }
    }
    //比较
    int flag = 1;//默认2个矩阵相等
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            if (arr1[i][j] != arr2[i][j])
            {
                flag = 0;
                goto end;
            }
        }
    }
end:
    if (flag == 1)
        printf("Yes\n");
    else
        printf("No\n");

    return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#define n 3
#define m 3
#include<stdio.h>
int main()
{
	//int n = 0;
	//int m = 0;
	//scanf("%d %d", &n, &m);
	int i = 0;
	int j = 0;
	int flag = 0;
	int arr1[n][m];
	int arr2[n][m];
	//读入arr1
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++)
		{
			scanf("%d", &arr1[i][j]);
		}
	}
	//读入arr2
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++)
		{
			scanf("%d", &arr2[i][j]);
		}
	}
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++)
		{
			if (arr1[i][j] != arr2[i][j])
			{
				flag = 1;
				goto end;
			}
		}
	}
	//break只能跳一个循环
	end:
	if (flag == 0)
		printf("Yes");
	else
		printf("No");
	return 0;
}

7.调整奇数偶数顺序

前面找偶数,后面找奇数

//注意防止越界

//输入一个整数数组,实现一个函数,
//来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,
//所有偶数位于数组的后半部分。

void move(int arr[], int sz)
{
	int left = 0;
	int right = sz - 1;
	while (left<right)
	{
		//找偶数的过程
		while ((left<right) && (arr[left] % 2 == 1))
		{
			left++;
		}
		//找奇数的过程
		while ((left < right) && (arr[right] % 2 == 0))
		{
			right--;
		}
		if (left < right)
		{
			int tmp = arr[left];
			arr[left] = arr[right];
			arr[right] = tmp;
			left++;
			right--;
		}
	}
}

int main()
{
	int arr[10] = { 0 };
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);
	//输入
	for (i = 0; i < sz; i++)
	{
		scanf("%d", &arr[i]);
	}
	//调整
	move(arr, sz);
	
	//输出
	for (i = 0; i < sz; i++)
	{
		
		printf("%d ", arr[i]);
	}

	return 0;
}

8.两个有序数组的合并

//有序数组的合并
//有序数组1和有序数组2比较
//有序数组1[0]小于有序数组[0],将有序数组1[0]放入数组3,后有序数组1[1]和0比较

#include<stdio.h>
int main()
{
//	int m = 0;
//	int n = 0;
    /*scanf("%d %d",&n,&m)*/
	int arr1[n];
    int arr2[m];
    int arr[m + n];
    int k = 0;
    int i = 0;
    int j = 0;
    //输入arr1数组
    for (i = 0; i < n; i++)
    {
        scanf("%d", &arr1[i]);
    }
    for (j = 0; j < m; j++)
    {
        scanf("%d", &arr2[j]);
    }
    //比较
    i = 0;
    j = 0;
    while (i < n && j < m)
    {
        if (arr1[i] < arr2[j])
        {
            arr[k] = arr1[i];
            i++;
            k++;
        }
        else
        {
            arr[k] = arr2[j];
            j++;
            k++;
        }
    }
    //如果n,m数目不同,则比较后,必定会剩下一部分
    if (i == n)
    {
        //把arr2中剩余的元素放在arr3中
        //1 2 3
        //1 3 4 5
        //1 1 2 3 3(4 5)
        while (j < m)
        {
            arr[k] = arr2[j];
            j++;
            k++;
         }
    }
    else
    {
        //把arr1中剩余的元素放在arr3中
        //1 2 3
        //1 3 4 5
        //1 1 2 3 3(4 5)
        while (i < n)
        {
            arr[k] = arr1[i];
            i++;
            k++;
        }
    }
    for(k=0;k<n+m;k++)
    {
        printf("%d ", arr[k]);
    }
    return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#define n 3
#define m 3
#include<stdio.h>
int main()
{
	int arr1[m];
	int arr2[n];
	int arr3[n + m];
	int i = 0;
	int j = 0;
	int k = 0;
	for (i = 0; i < 3; i++)
	{
		scanf("%d", &arr1[i]);
	}
	for (j = 0; j < 3; j++)
	{
		scanf("%d", &arr2[j]);
	}
	i = 0;
	j = 0;
	while (i < n && j < m)
	{
		if (arr1[i] < arr2[j])
		{
			arr3[k] = arr1[i];
			k++;
			i++;
		}
		else
		{
			arr3[k] = arr2[j];
			k++;
			j++;
		}
	}
	//肯定有一部分是用尽了
	//如果n,m数目不同,则比较后,必定会剩下一部分
	//1 2 3--i
	//1 3 /5 6 8--j
	//1 1 2 3 3 /5 6 8
	if (i == n)
	{
		while (j < m)
		{
			arr3[k] = arr2[j];
			j++;
			k++;
		}
	}
	else
	{
		while (i < n)
		{
			arr3[k] = arr1[i];
			i++;
			k++;
		}
	}
	for (i = 0; i < m + n; i++)
	{
		printf("%d ", arr3[i]);
	}

	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值