C语言小练习(肆)

练习:

一维数组练习题

1.键盘录入一组数列,利用冒泡排序将数据由大到小排序

#include <stdio.h>

int main()
{
	
	int a[5];
	int t;
	printf("请输入5个数\n");
	
	int length = sizeof(a) / sizeof(int);
	
	for(int i= 0;i < length;i++)
	{
		scanf("%d",&a[i]);
	}
	
	printf("\n");
	
	for(int i = 0;i < length-1;i++)
	{
		for(int j = 0;j < length - 1 - i;j++)
		{
			if(a[j] > a[j+1])
			{
				t = a[j];
				a[j] = a[j+1];
				a[j+1] = t;
			}
		}
	}
	
	printf("冒泡排序的数组:\n");
	
	for(int i= 0;i < length;i++)
	{
		printf("%4d",a[i]);
	}
	
	printf("\n");
	
	return 0;
}

运行结果:

在这里插入图片描述

2.从键盘输入年、月、日,计算并输出该日是该年第几天

#include <stdio.h>

int main()
{
	int year,month,day,sum,k;
	int t[] = {31,0,31,30,31,30,31,31,30,31,30,31};
	printf("请输入年,月,日\n");
	scanf("%d,%d,%d",&year,&month,&day);
	
	if((year % 4 == 0 && year % 100 != 0)|| year % 400 == 0 )
	{
		t[1] = 29;
	}
	else
	{
		t[1] = 28;
	}
	
	sum = day;
	
	for(k = 0;k < month -1;k++)
	{
		sum +=t[k];
	}
	printf("%d月%d日是%d年的第%d天\n",month,day,year,sum);
	
	return 0;
}

运行结果:

在这里插入图片描述

3.键盘录入一组数列,求最大数、最小数、均值

#include <stdio.h>

int main()
{
	int a[8];
	int max,min,length,t,sum;
	float averge;
	printf("请输入八个数\n");

	length = sizeof(a) / sizeof(int);
	
	for(int i = 0;i < length;i++)
	{
		scanf("%d",&a[i]);
		sum += a[i];
		averge = (double)sum / 8;
		
	}
	for(int i = 0;i <length - 1;i++)
	{
		for(int j = 0;j < length - 1 - i;j++)
		{
			if(a[j] < a[j+1])
			{
				t = a[j];
				a[j] = a[j+1];
				a[j+1] = t;
			}
		}
	}
	printf("\n");
	max = a[0];
	min = a[7];
	
	printf("该队列的最大数为:%d,最小数为:%d,均值为:%.2f",max,min,averge);	
	
	return 0;
}

运行结果:

在这里插入图片描述

4.从键盘录入一组数列,判断是否是回文,举例:12321,abba,121

#include <stdio.h>

int main()
{
    char a[5];
    int num, count, recount, other;
    printf("请输入5个数\n");
    
    // 读取字符输入并转换为整数进行判断
    for (int i = 0; i < sizeof(a) / sizeof(char); i++)
    {
        scanf("%c", &a[i]);
        num = a[i] - '0';  // 将字符转换为整数
        
        count = num;
        recount = 0;
        int temp = num;  // 保存原始数字
        
        // 整数的逆转
        while (temp != 0)
        {
            other = temp % 10;
            recount = recount * 10 + other;
            temp /= 10;
        }
        
        // 判断是否为回文数
        if (count == recount)
        {
            printf("%d 是回文数\n", count);
        }
        else
        {
            printf("%d 不是回文数\n", count);
        }
        
        // 清空缓冲区中的换行符
        getchar();
    }
    
    printf("\n");
    
    return 0;
}

运行结果:

在这里插入图片描述

5.用数组存储10个整型数,通过键盘输入一个数,找出该数在数组中的下标值;

#include <stdio.h>

int main()
{
    // 定义数组和变量
    int a[10];
    int search_num; // 用于存储要查看下标的数

    printf("请输入10个数,并输入您想查看下标的数:\n");

    // 录入数据
    for (int i = 0; i < sizeof(a) / sizeof(int); i++)
    {
        scanf("%d", &a[i]); 
    }

    // 输入要查看下标的数
    scanf("%d", &search_num);

    // 查找并输出下标
    for (int i = 0; i < sizeof(a) / sizeof(int); i++)
    {
        if (a[i] == search_num)
        {
            printf("数 %d 的下标是 %d\n", search_num, i);
            return 0; // 找到后直接退出程序
        }
    }

    // 如果未找到
    printf("未找到数 %d\n", search_num);

    return 0;
}

运行结果:

在这里插入图片描述

6.通过键盘输入 10 个学员成绩,

1)输出不及格学员的成绩和下标。

2)求最高分的下标值

3)求最低成绩的下标值

4)求总成绩及平均成绩

#include <stdio.h>

int main() {
    int a[10];
    int length = sizeof(a) / sizeof(int);
    int sum = 0;
    int score = 0; // 用于记录不及格的成绩
    int highest_index = 0; // 最高分的下标
    int lowest_index = 0;  // 最低分的下标

    printf("请输入10个学员的成绩:\n");

    // 录入成绩并计算总分
    for (int i = 0; i < length; i++) 
	{
        scanf("%d", &a[i]);
        sum += a[i];

        // 输出不及格的成绩和下标
        if (a[i] < 60) 
		{
            printf("不及格学员的成绩:%d,下标:%d\n", a[i], i);
            score = a[i]; // 记录最后一个不及格的成绩
        }

        // 求最高分的下标
        if (a[i] > a[highest_index]) 
		{
            highest_index = i;
        }

        // 求最低分的下标
        if (a[i] < a[lowest_index]) 
		{
            lowest_index = i;
        }
    }

    // 输出最高分和最低分的下标
    printf("最高分的下标:%d,最低分的下标:%d\n", highest_index, lowest_index);

    // 计算平均成绩
    int average = sum / length;

    // 输出总成绩和平均成绩
    printf("总成绩为:%d,平均成绩为:%d\n", sum, average);

    return 0;
}

运行结果:

在这里插入图片描述

二维数组练习题:

7.一个二维数组赋了初值,用户输入一个数,在该二维数组中查找。找到则返回行列位置,没找到则提示。

#include <stdio.h>

int main() 
{
    int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
    int search_value;
    int found = 0; // 标记是否找到该值
    int row, col; // 用于记录找到的行列位置

    printf("请输入一个值:\n");
    scanf("%d", &search_value);

    // 遍历二维数组进行查找
    for (int i = 0; i < 3; i++) 
	{
        for (int j = 0; j < 3; j++) 
		{
            if (a[i][j] == search_value) 
			{
                found = 1; // 找到值,将found标记为1
                row = i;   // 记录行位置
                col = j;   // 记录列位置
                break;     // 找到后退出内层循环
            }
        }
        if (found) 
		{
            break; // 找到后退出外层循环
        }
    }

    // 根据找到与否输出结果
    if (found) 
	{
        printf("找到值 %d,位置为第 %d 行第 %d 列。\n", search_value, row + 1, col + 1);
    } else 
	{
        printf("未找到值 %d。\n", search_value);
    }

    return 0;
}

运行结果:

在这里插入图片描述

8.二维整型数组,求所有元素平均值,求每行最大值,求每列最小值。

#include <stdio.h>

int main() 
{
    int sum = 0, average, max_row, min_col,i,j;
    int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

    // 求所有元素的平均值
    for (i = 0; i < 3; i++) 
	{
        for (j = 0; j < 3; j++) 
		{
            sum += a[i][j];
        }
    }
    average = sum / (i+j+2);

    // 求每行的最大值
    for (i = 0; i < 3; i++) 
	{
        max_row = a[i][0]; // 假设每行的第一个元素为最大值
        for (j = 1; j < 3; j++) 
		{
            if (a[i][j] > max_row) 
			{
                max_row = a[i][j];
            }
        }
        printf("第 %d 行的最大值为:%d\n", i + 1, max_row);
    }

    // 求每列的最小值
    for (j = 0; j < 3; j++) 
	{
        min_col = a[0][j]; // 假设每列的第一个元素为最小值
        for (i = 1; i < 3; i++) 
		{
            if (a[i][j] < min_col) 
			{
                min_col = a[i][j];
            }
        }
        printf("第 %d 列的最小值为:%d\n", j + 1, min_col);
    }

    printf("所有元素的平均值为:%d\n", average);

    return 0;
}

运行结果:

在这里插入图片描述

9.在行列相等数组计算主对角线元素的和

#include <stdio.h>

int main()
{
	int a[3][3];
	int sum,i,j;
	printf("请输入三行三列的数组\n");
	for(i = 0;i < 3;i++)
	{
		for(j = 0;j < 3;j++)
		{
			scanf("%d",&a[i][j]);
		}
		
	}
	
	for(i = 0;i < 3;i++)
	{
		sum += a[i][i];
	}
	
	printf("该数组的主对角线之和为:%d\n",sum);
	return 0;
}

运行结果:

在这里插入图片描述

10计算一个矩阵下三角元素的和

#include <stdio.h>

int main()
{
	int a[3][3];
	int i,j,sum;
	
	printf("请输入一个3×3的矩阵\n");
	//初始化
	for(i = 0;i < 3;i++)
	{
		for(j = 0;j < 3;j++)
		{
			scanf("%d",&a[i][j]);
		}
	}
	//获取并计算
	for(i = 0;i < 3;i++)
	{
		for(j = 0;j <= i;j++)
		{
			sum += a[i][j];
		}
	}
	
	printf("该矩阵下三角的和为%d",sum);
	
	return 0;
}

运行结果:

在这里插入图片描述

11.电影院为了答谢影迷的支持,在某一排的某一列座位上放置了一个大礼包,放置礼物的位置具有这样的规则(行和列的平方和为开店日期 512(5月12日));

请设计程序找出大礼包的位置,(假定电影院有20排,每排25个座位)

#include <stdio.h>  
  
int main() 
{  
    int i, j;  
    int found = 0; // 用来标记是否找到大礼包的位置  
  
    for (i = 0; i < 20; i++) 
	{  
        for (j = 0; j < 25; j++) 
		{ 
            if (i * i + j * j == 512) 
			{ 
                printf("礼物在%d行%d列\n", i + 1, j + 1);  
                found = 1; // 标记已找到  
                break; // 找到后跳出内层循环  
            }  
        }  
        if (found) 
		{  
            break; // 如果已经找到,跳出外层循环  
        }  
    }  
  
    if (!found) 
	{  
        printf("在电影院内没有找到满足条件的位置。\n");  
    }  
  
    return 0;  
}

运行结果:

在这里插入图片描述

字符数组练习题:

12.编写一个程序,读取用户输入的字符串,并将其反转输出。

#include <stdio.h>

int main() 
{
    char a[5]; 
    printf("请输入长度为5的字符串: \n");
	 int length = sizeof(a) / sizeof(char);
    // 读取字符串
    for (int i = 0; i < length; i++) 
	{
        scanf(" %c", &a[i]);
    }
    // 反转字符串
   
    for (int i = length - 1; i >= 0; i--) 
	{
        printf("%c", a[i]);
    }
    printf("\n");

    return 0;
}

运行结果:

在这里插入图片描述

13.编写一个程序,判断用户输入的字符串是否为回文(即正反读都一样的字符串)。

#include <stdio.h>  
  
int main()  
{  
    char a[7], a2[7];  
    int i;  
    int isPalindrome = 1;  
  
    printf("请输入长度为6的字符串(不包含空格)\n");  
    scanf("%6s", a); // 读取最多6个字符,自动添加'\0'  
  
    // 复制并反转字符串到a2  
    for(i = 0; i < 6; i++) // 假定用户输入了6个字符(或更少)  
    {  
        a2[6 - 1 - i] = a[i];  
    }  
    a2[6] = '\0'; // 确保字符串正确结束  
  
    // 比较字符串a和a2  
    for(i = 0; i < 6; i++) // 同样假定用户输入了6个字符  
    {  
        if(a[i] != a2[i])  
        {  
            isPalindrome = 0;  
            break;  
        }  
    }  
  
    // 输出结果  
    if(isPalindrome)  
    {  
        printf("该字符串是回文\n");  
    }  
    else  
    {  
        printf("该字符串不是回文\n");  
    }  
  
    return 0;  
}

运行结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值