程序设计基础I-单元测试3(机测)

7-1 sdut-C语言实验-顺序查找

输入n个正整数(1<= n <= 100),查找n个数中是否存在数x。如果存在则返回第一次出现的下标,否则输出"NO"。

输入格式:

第一行输入n,然后输入n个正整数。

第二行输入x。

输出格式:

如果数列中存在x则输出其下标,否则输出"NO"。

输入样例1:

10 7 0 9 4 3 8 2 1 5 4
6

输出样例1:

NO

输入样例2:

5 8 7 8 3 9 
8

输出样例2:

0

#include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    int a[n],i,j,z;
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    scanf("%d",&z);
    int t=0,k;
    for(i=0;i<n;i++)
    {
        if(a[i]==z)
        {
            k=i;
            t=1;
            break;
        }
    }
    if(t==1)
        printf("%d",k);
    if(t==0)
        printf("NO");
    return 0;
}

7-2 sdut- C语言实验-数组逆序(数组移位2)

有n个整数,使其最前m个数变成最后面的m个数,其他各数顺序向前移m(m < n < 100)个位置。

输入格式:

输入数据有2行,第一行的第一个数为n,后面是n个整数,第二行整数m。

输出格式:

按先后顺序输出n个整数。

输入样例:

5 1 2 3 4 5
2

输出样例:

3 4 5 1 2

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

7-3 sdut-C语言实验- 排序

给你N(N<=100)个数,请你按照从小到大的顺序输出。

输入格式:

输入数据第一行是一个正整数N,第二行有N个整数。

输出格式:

输出一行,从小到大输出这N个数,中间用空格隔开。

输入样例:

5
1 4 3 2 5

输出样例:

1 2 3 4 5

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

7-4 冒泡法排序之过程

本题要求使用冒泡法排序,将给定的n个整数从小到大排序后输出,并输出排序过程中每一步的中间结果。

冒泡排序的算法步骤描述如下:

第1步:在未排序的n个数(a[0]〜 a[n−1])中,从a[0]起,依次比较相邻的两个数,若邻接元素不符合次序要求,则对它们进行交换。本次操作后,数组中的最大元素"冒泡"到a[n−1];

第2步:在剩下未排序的n−1个数(a[0] 〜 a[n−2])中,从a[0]起,依次比较相邻的两个数,若邻接元素不符合次序要求,则对它们进行交换。本次操作后,a[0] 〜 a[n−2]中的最大元素"冒泡"到a[n−2];

......

第i步:在剩下未排序的n−k个数(a[0]〜a[n−i])中,从a[0]起,依次比较相邻的两个数,若邻接元素不符合次序要求,则对它们进行交换。本次操作后,a[0] 〜 a[n−i]中的最大元素"冒泡"到a[n−i];

......

第n−1步:在剩下未排序的2个数(a[0] 〜a[1])中,比较这两个数,若不符合次序要求,则对它们进行交换。本次操作后,a[0] 〜 a[1]中的最大元素"冒泡"到a[1]。

输入格式:

输入第一行给出一个不超过10的正整数n。第二行给出n个整数,其间以空格分隔。

输出格式:

在每一行中输出排序过程中对应步骤的中间结果,即每一步后a[0]〜 a[n−1]的值,相邻数字间有一个空格,行末不得有多余空格。

输入样例:

5
8 7 6 0 1

输出样例:

7 6 0 1 8
6 0 1 7 8
0 1 6 7 8
0 1 6 7 8

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

7-5 sdut-C语言实验-统计输出

编写一个程序,输入一个1到300之间的数据n,然后输入n个1到100范围内的数, 统计1到10、11到20等每10个分数段出现的数值个数,并输出相应的星号和个数。 如下图所示,在1到10范围内生成了4个值,而在11到20范围内并没有生成范围为11到20的值。如果输入的数据不在要求范围内则输出相应的错误提示信息。

输入格式:

输一个整数n(1<=n<=300)。

输入n个整数,取值范围在1到100之间。

输出格式:

输出每个数据段的星号和数据出现的次数。

输入样例1:

30
1 2 3 12 13 14 15 22 23 24 34 45 46 47 48 56 57 66 69 70 71 77 78 79 99 90 88 91 100 6

输出样例1:

  1 to  10: ****(4)
 11 to  20: ****(4)
 21 to  30: ***(3)
 31 to  40: *(1)
 41 to  50: ****(4)
 51 to  60: **(2)
 61 to  70: ***(3)
 71 to  80: ****(4)
 81 to  90: **(2)
 91 to 100: ***(3)

输入样例2:

301

输出样例1:

You must enter a number in the range 1 to 300

 #include<iostream>
using namespace std;
const int N=310;
int ge,yi,er,sa,si,wu,li,qi,ba,ji;
int main()
{
	int n;
	scanf("%d",&n);
	if(n<1||n>300) printf("You must enter a number in the range 1 to 300");
	else
	{
		for(int i=0;i<n;i++)
		{
			int x;
			scanf("%d",&x);
			if(x<1||x>100) printf("You must enter a number in the range 1 to 300");
			else if(x>=1&&x<=10) ge++;
			else if(x>=11&&x<=20) yi++;
			else if(x>=21&&x<=30) er++;
			else if(x>=31&&x<=40) sa++;
			else if(x>=41&&x<=50) si++;
			else if(x>=51&&x<=60) wu++;
			else if(x>=61&&x<=70) li++;
			else if(x>=71&&x<=80) qi++;
			else if(x>=81&&x<=90) ba++;
			else if(x>=91&&x<=100) ji++;
		}
		printf(" 1 to 10: ");
		for(int i=0;i<ge;i++) printf("*");printf("(%d)\n",ge);
		printf("11 to 20: ");
		for(int i=0;i<yi;i++) printf("*");printf("(%d)\n",yi);
		printf("21 to 30: ");
		for(int i=0;i<er;i++) printf("*");printf("(%d)\n",er);
		printf("31 to 40: ");
		for(int i=0;i<sa;i++) printf("*");printf("(%d)\n",sa);
		printf("41 to 50: ");
		for(int i=0;i<si;i++) printf("*");printf("(%d)\n",si);
		printf("51 to 60: ");
		for(int i=0;i<wu;i++) printf("*");printf("(%d)\n",wu);
		printf("61 to 70: ");
		for(int i=0;i<li;i++) printf("*");printf("(%d)\n",li);
		printf("71 to 80: ");
		for(int i=0;i<qi;i++) printf("*");printf("(%d)\n",qi);
		printf("81 to 90: ");
		for(int i=0;i<ba;i++) printf("*");printf("(%d)\n",ba);
		printf("91 to 100: ");
		for(int i=0;i<ji;i++) printf("*");printf("(%d)\n",ji);
	}
	return 0;
}

7-6 sdut-C语言实验-求一个3*3矩阵对角线元素之和

给定一个3*3的矩阵,请你求出对角线元素之和。

输入格式:

按照行优先顺序输入一个3*3矩阵,每个矩阵元素均为整数。

输出格式:

从左下角到右上角这条对角线上的元素之和。

输入样例:

1 2 3
3 4 5
6 0 1

输出样例:

在这里给出相应的输出。例如:

13

#include<stdio.h>
int main()
{
    int i,j,sum;
    int a[3][3];
    for(i=0;i<=2;i++)
    {
        for(j=0;j<=2;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    sum=a[2][0]+a[1][1]+a[0][2];
    printf("%d",sum);
    return 0;
}

7-7 sdut- C语言实验-矩阵转置

输入N*N的矩阵,输出它的转置矩阵。

输入格式:

第一行为整数N(1≤N≤100)。

接着是一个N*N的矩阵。

输出格式:

转置矩阵。

输入样例:

2
1 2
1 2

输出样例:

1 1
2 2

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

7-8 sdut-C语言实验- 杨辉三角

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

上面的图形熟悉吗?它就是我们中学时候学过的杨辉三角。

杨辉三角,是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲,帕斯卡(1623----1662)在1654年发现这一规律,所以这个表又叫做帕斯卡三角形。帕斯卡的发现比杨辉要迟393年,比贾宪迟600年。

21世纪以来国外也逐渐承认这项成果属于中国,所以有些书上称这是"中国三角形"(Chinese triangle)。

其实,中国古代数学家在数学的许多重要领域中处于遥遥领先的地位。中国古代数学史曾经有自己光辉灿烂的篇章,而杨辉三角的发现就是十分精彩的一页。

让我们开始做题吧!

输入格式:

输入数据包含多组测试数据。

每组测试数据的输入只有一个正整数n(1≤n≤30),表示将要输出的杨辉三角的层数。

输入以0结束。

输出格式:

对应于每一个输入,请输出相应层数的杨辉三角,每一层的整数之间用一个空格隔开,每一个杨辉三角后面加一个空行。

输入样例:

2
3
0

输出样例:

1
1 1

1
1 1
1 2 1

#include<stdio.h>
int main()
{
    int n,i,j;
    int a[30][30];
    while(scanf("%d",&n)!=EOF)
    {
    a[0][0]=1;
    a[1][0]=1;
    a[1][1]=1;
    for(i=2;i<n;i++)
    {
        a[i][0]=1;
        a[i][i]=1;
    }
    for(i=2;i<n;i++)
    {
        for(j=1;j<=n-1;j++)
        {
            a[i][j]=a[i-1][j-1]+a[i-1][j];
        }
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<=i;j++)
        {
            if(j==i)
                printf("%d\n",a[i][j]);
            else
                printf("%d ",a[i][j]);

        }            if(i==n-1)
                printf("\n");
    }
    }
    return 0;
}
相关推荐
XH华1 小时前
初识C语言之二维数组(下)
c语言·算法
南宫生1 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
不想当程序猿_2 小时前
【蓝桥杯每日一题】求和——前缀和
算法·前缀和·蓝桥杯
落魄君子2 小时前
GA-BP分类-遗传算法(Genetic Algorithm)和反向传播算法(Backpropagation)
算法·分类·数据挖掘
菜鸡中的奋斗鸡→挣扎鸡2 小时前
滑动窗口 + 算法复习
数据结构·算法
Lenyiin2 小时前
第146场双周赛:统计符合条件长度为3的子数组数目、统计异或值为给定值的路径数目、判断网格图能否被切割成块、唯一中间众数子序列 Ⅰ
c++·算法·leetcode·周赛·lenyiin
郭wes代码2 小时前
Cmd命令大全(万字详细版)
python·算法·小程序
scan7242 小时前
LILAC采样算法
人工智能·算法·机器学习
菌菌的快乐生活3 小时前
理解支持向量机
算法·机器学习·支持向量机
大山同学3 小时前
第三章线性判别函数(二)
线性代数·算法·机器学习