C语言试题系列-第六章(数组)

目录

前言

一、选择法从大到小排序

二、实验6 - 数组(实验报告见资源下载)

三、编写程序,输入4个字符串,找出其中最大者

四、实验7 字符串及字符数组(实验报告见资源下载)

五、将数组中的数逆序存放

六、 输出冒泡法排序某一轮排序结果

七、方阵循环右移

八、字符古风排版

总结

前言

1.本专栏基于谭浩强先生写的《C程序设计(第五版)》与《C程序设计(第五版)学习辅导》配套的相关试题和实验,给出常见C语言基础试题相应代码,方便大家参考学习

2.本专栏所有代码均在本地及Online Judge(OJ)平台测试通过,注意各大OJ平台的测试标准不同,可能存在出入,若很遗憾无法提交,则仅作为程序实现思想交流

3.本专栏仅收录个人C实验,仅仅实现程序功能,不涉及高性能算法,当然也欢迎算法师傅交流优化

4.部分代码参考网上代码后经个人修改优化,望周知

5.部分代码存在与题目描述不符的情况,望周知

6.创作不易,整理不易,若对您有帮助请评论/点赞/收藏/转发,尊重每个技术人!

一、选择法从大到小排序

【问题描述】选择法从大到小排序:输入一个正整数n,再输入n个整数,将它们从大到小排序后输出。

【输入形式】
【输出形式】
【样例输入】5

                    4 5 1 7 9

【样例输出】The sorted order:9 7 5 4 1

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int i=0;
	int j=0;
	int tmp,n;
	int arr[20];
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&arr[i]);
	}
	for(i=0;i<n-1;i++)
		{
			for(j=i+1;j<n;j++)
			{
				if(arr[j]<arr[i])
				{
					tmp=arr[i];
					arr[i]=arr[j];
					arr[j]=tmp;
				}
			}
		}
	printf("The sorted order:");
	for(i=n-1;i>=0;i--)
	{
		printf("%d ",arr[i]);
	}
	system("pause");
	return 0;
}

二、实验6 - 数组(实验报告见资源下载)

实验6-数组-实验报告-C文档类资源-CSDN文库https://download.csdn.net/download/m0_66842854/87524078

三、编写程序,输入4个字符串,找出其中最大者

【问题描述】

编写程序,输入4个字符串(单个字符串最长为29),找出其中最大者。

【输入形式】

4个字符串
【输出形式】

4个字符串中的最大者

【样例输入】

abdc

./,!!

%%gogo

tests

【样例输出】

the largest string is:

tests

【提示】

① 先定义二维字符数组str[4][30],用于保存4个字符串,再定义字符数组str1[30],作为保存字符串的临时空间;

② 用循环语句输入4个字符串;

③ 用求最大值的算法找出4个字符串中的最大者并输出。

注意:可使用字符串函数strcmp()比较字符串的大小,使用字符串函数strcpy()将字符串保存到相应存储空间。

#include<stdio.h>
#include<string.h>
int main()
{
	char str1[4][30];
	char str2[30]; 
	int i;
	for (i=0;i<=3;i++)
	{
		gets(str1[i]); 
	}
	strcpy(str2,str1[0]);
	for(i=0;i<=3;i++){
		if(strcmp(str1[i],str2)>0){
			strcpy(str2,str1[i]);
		}
	}
    printf("the largest string is:\n%s\n",str2);
	return 0;
}



四、实验7 字符串及字符数组(实验报告见资源下载)实验7-字符串及字符数组-C文档类资源-CSDN文库https://download.csdn.net/download/m0_66842854/87524086

五、将数组中的数逆序存放

【问题描述】将数组中的数逆序存放:输入一个正整数n (1<n≤10),再输入n 个整数,存入数组a中,先将数组a中的这n个数逆序存放,再按顺序输出数组a中的n个元素。

【输入形式】
【输出形式】
【样例输入】

5

3 5 9 4 8

【样例输出】

After reversed: 8 4 9 5 3

#include <stdio.h>
int main()
{	
	int n;
	scanf("%d",&n);
	int a[n-1];
	for(int i=0;i<n;i++){
		scanf("%d",&a[i]);
	}	
	int temp; 
	for(int i=0;i<n/2;i++){
		temp=a[i];
		a[i]=a[n-i-1];
		a[n-i-1]=temp;
	}
	printf("After reversed: ");
	for(int i=0;i<n;i++){
		printf("%d ",a[i]); 
	} 
    return 0;
}

六、 输出冒泡法排序某一轮排序结果

【问题描述】

将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们。通过一遍扫描,则最后一个元素必定是最大的元素。然后用同样的方法对前N−1个元素进行第二遍扫描。依此类推,最后只需处理两个元素,就完成了对N个数的排序。

本题要求对任意给定的K(<N),输出扫描完第K遍后的中间结果数列。

【输入形式】

输入在第1行中给出N和K(1≤K<N≤100),在第2行中给出N个待排序的整数,数字间以空格分隔。

【输出形式】

在一行中输出冒泡排序法扫描完第K遍后的中间结果数列,数字间以空格分隔,但末尾不得有多余空格。

【样例输入】

6 2

2 3 5 1 6 4

【样例输出】

2 1 3 4 5 6


#include <stdio.h>
#include <stdlib.h>
#define N 100
 
int main()
{
    int n,k,arr[N],i,j,t;
    scanf("%d%d",&n,&k);
    for(i=0;i<n;i++)
    {
        scanf("%d",&arr[i]);
    }
    for(j=0;j<k;j++)
    {
        for(i=0;i<n-1;i++)
        {
            if(arr[i]>arr[i+1])
            {
                t=arr[i];
                arr[i]=arr[i+1];
                arr[i+1]=t;
            }
        }
    }
    for(i=0;i<n-1;i++)
    {
        printf("%d ",arr[i]);
    }
    printf("%d",arr[n-1]);
    return 0;
}

七、方阵循环右移

【问题描述】

本题要求编写程序,将给定n×n方阵中的每个元素循环向右移m个位置,即将第0、1、⋯、n−1列变换为第n−m、n−m+1、⋯、n−1、0、1、⋯、n−m−1列。

【输入形式】

输入第一行给出两个正整数m和n(1≤n≤6,m可能会大于n)。接下来一共n行,每行n个整数,表示一个n阶的方阵。

【输出形式】

按照输入格式输出移动后的方阵:即输出n行,每行n个整数,每个整数后输出一个空格。

【样例输入】

2 3

1 2 3

4 5 6

7 8 9

【样例输出】

2 3 1 

5 6 4 

8 9 7

#include <stdio.h>
int main()
{
    int a[10][10];
    int i, j, n, m;
    scanf("%d%d",&m,&n);
    for (i = 0; i<n; i++)
    {
        for (j = 0; j<n; j++)
        {
            scanf("%d", &a[i][j]);
        }
    }
    m=m % n;
    for (i = 0; i<n; i++)
    {
        for (j = 0; j<n; j++)
        {
            printf("%d ", a[i][(n - m + j) % n]);
        }
    	printf("\n");
    }
    return 0;
}

八、字符古风排版

【问题描述】

我国古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版

【输入形式】

输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。

【输出形式】

按古风格式排版给定的字符串,每列N个字符(除了最后一列可能不足N个)。

【样例输入】

5

it is a good poem

【样例输出】

【说明】

为了保证每列对齐,当要排版的字符不能被N整除时,输出的字符,最左边一列最后空的位置需增加' ',即使用单个空格字符填充。

#include <stdio.h>
#include <string.h>
int main()
{
	char arr[100][100] ;
	char str[1005] ;
	int n = 0;
	scanf("%d", &n);
	getchar();
	gets(str);
	int L = strlen(str) / n;
	if (strlen(str) % n != 0)
	{
		L++;
	}
	int k = 0;
	for (int i = L-1; i >= 0; i--)
	{
		for (int j = 0; j < n; j++)
		{
			if (str[k] == '\0')
			{
				arr[j][i] = ' ';
			}
			else
			{
				arr[j][i] = str[k];
				k++;
			}
		}
	}
	for (int p=0;p<n; p++)
	{
		for (int q = 0; q < L; q++)
		{
			printf("%c", arr[p][q]);
		}
		printf("\n");
	}
	return 0;
}


总结

本专栏旨在帮助C语言初学者学习编程,仅供学习交流!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

及辞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值