首页 > 编程语言 >c/c++零基础坐牢第十二天

c/c++零基础坐牢第十二天

时间:2023-05-15 13:25:55浏览次数:46  
标签:输出 第十二天 int 样例 c++ 坐牢 -- 数组 输入

c/c++从入门到入土(12)

开始时间2023-05-14 23:01:13

结束时间2023-05-15 13:06:16

前言:学习数组,少不了练习,让我们通过实验,在实践中出真知。

实验四 数组程序设计

函数题 

第一题 应用字符数组反序字符串

一、问题描述

程序应用字符数组存储用户输入的一行字符(长度小于80),并将该字符串按照反序重新存放于原字符数组中,要求完善程序代码。

裁判测试程序样例:
#include <stdio.h>
int main(){
    const int N=80;
    char a[N];
    gets(a);
    {
     
/* 请在这里填写答案 */
   
    }
    printf("%s\n",a);
}
输入格式:
请输入一行字符(字符个数小于80)。

输出格式:
输出反序存放的字符串。

输入样例:
Students are required to be in school by 8:00.
输出样例:
.00:8 yb loohcs ni eb ot deriuqer era stnedutS
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

二、设计思路

  这个题相对简单,从裁判样例中知道,字符数组长度为80,且已给字符数组赋值。函数要求是将字符数组反序,它的意思是比如说将我爱你,变为你爱我。首先我们要做的第一件事是通过strlen函数获取字符数组的长度,随着i++,j--,将首元素和尾元素交换。最后将数组输出即可。

三、源代码

int i,j,k;
j=strlen(a)-1;
for(i=0;i<j;i++,j--)
{
    k=a[i];
    a[i]=a[j];
    a[j]=k;
}

 第二题 应用字符数组统计字符

一、问题描述

程序应用字符数组存储从键盘输入的一行英文(100个以内),统计各个字符出现的次数。请完善程序。

裁判测试程序样例:
#include <stdio.h>
int main(){
    char c[100];
    gets(c);
    {

/* 请在这里填写答案 */

    }
    return 0;
}
输入格式:
请输入一行字符(字符个数小于100)。

输出格式:
统计个字符的数量,一行一个字符地按照以下格式输出数量不为0的字符及其数量:

<字符>--><数量>

输入样例:
Having an active youngster about the house can be quite wearing.
输出样例:
 -->10
.-->1
H-->1
a-->6
b-->2
c-->2
e-->7
g-->3
h-->2
i-->4
n-->5
o-->3
q-->1
r-->2
s-->2
t-->5
u-->4
v-->2
w-->1
y-->1
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

二、设计思路

  从裁判样例中我们知道,题目将字符存入长度为100的字符c数组,再从输出样例中可知,收集字母顺序为从小到大按ascll码排序。我们要做的事情首先将c数组按照ascll码顺序从小到大排序,比如说abcabc变为aabbcc,这时候我们要用到冒泡排序。排序排好了,那么我们先在另外一个数组中将数组c中具有的各类元素一一放置其中,接着记录各元素出现的个数,在一个循环中,c数组中的元素与该数组特定元素相同,统计变量加一。最后按照格式将其输出。

三、源代码

int b[100]={0};
    char m;
    char a[100];//用于存储不重复的字符 
    int i,j=0;
    int num=1;
    int e=0;//输出次数的结束标志 
    
    for(i=0,m=c[i];c[i]!='\0';i++)//按照ASCII码升序入c数组 
    {
        for(j=i+1;c[j]!='\0';j++)
        {
            if(c[i]>c[j])
            {
                m=c[i];
                c[i]=c[j];
                c[j]=m;
            }
        }
    }
    
    j=1;
    a[0]=c[0]; 
    for(i=0;c[i+1]!='\0';i++)// 存储不重复的字符到a数组 
    {
        if(c[i]!=c[i+1])
        {
        a[j]=c[i+1];
        j++;    
        }
    }
    
    for(i=0,j=0;c[i]!='\0';i++)
    {
        if(a[j]==c[i])
        {
            b[j]+=1;
        }
        else
        {
            i--;
            j++;
            continue;
        }
    }    
    for(i=0;c[i]!='\0',b[i]!=0;i++)
    {
        printf("%c-->%d\n",a[i],b[i]);
    }

第三题 逆序数组

一、问题描述

(谭浩强,《C程序设计(第四版)》,清华大学出版社,P168,第5题)

程序应用数组存储用户输入的正整数序列(个数不大于20)。并在原数组空间完成逆序存放,要求完善程序代码。

裁判测试程序样例:
#include <stdio.h>
#define N 20
int main(){
    int i=0,a[N];
    do{
        scanf("%d",a+i);
    }while(a[i++]>0);
    {

/* 请在这里填写答案 */

    }
    for(i=0; a[i]>0; i++)
        printf("%5d",a[i]);
    return 0;
}
输入格式:
一行中输入若干正整数,数据间以空格为间隔,负数表示输入结束。

输出格式:
输出逆序后的整数序列,每个数显示格式:占5位,右对齐。。

输入样例:
10 11 12 13 14 15 -5
输出样例:
   15   14   13   12   11   10
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

二、设计思路

  在裁判样例中我们知道,将所需要的整数序列给了数组a,题目的要求是我们要做到逆序输出。什么是逆序输出?比如说将我爱你变为你爱我。说到这儿,就和第一题差不多了。

三、源代码

        int b[100], k=0;
        for(;i>=0;i--){
            b[k]=a[i];
            k++;
        }
        for(int j=2;j<k;j++){
            if(b[j]>0)
            a[j-2]=b[j];
            a[k]=-1;
        }

编程题

第一题 应用数组求解最值问题

一、问题描述

请应用数组存储用户输入的10个实数,编写算法输出这个数组中的最大值和最小值。

输入格式:
请在一行中输入10实数,数据间以空格为间隔。

输出格式:
对每一组输入的实数,以以下格式输出这组实数中的最值:

Min=<最小数>

Max=<最大数>

输入样例:
0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0
输出样例:
Min=0.000000
Max=9.000000
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

二、设计思路

  首先输入实数序列,然后按照冒泡排序分别提取最小值和最大值,最后按格式输出。

三、源代码

#include<stdio.h>
int main()
{
    float a[10];
    float j=10.0,k;
    int i;
    for(i=0;i<10;i++)
    {
        scanf("%f",&a[i]);
    }
    for(i=0;i<10;i++)
    {
        if(a[i]>k){
            k=a[i];}
    }
    for(i=0;i<10;i++)
    {
        if(a[i]<j){
            j=a[i];}
    }
    printf("Min=%.6f\n",j);
    printf("Max=%.6f\n",k);
    return 0;
}

第二题 应用数组排序数列
一、问题描述

请应用数组存储用户输入的10个整数,编写算法将该数组按照从小到大的顺序排列好。用户再输入1个整数,编写代码把它插入原数列中,要求仍然保持从小到大有序。

编写程序时应考虑到所插入数的各种可能性(比原来所有的数都小;比原来所有的数都大;在最大数和最小数之间)。

输入格式:
请在一行中输入10整数,数据间以空格为间隔。

再在一行中输入1个待插入的整数。

输出格式:
将插入前后排好的有序序列分别在一行内输出,每个数的显示格式:占3位,右对齐。

输入样例:
10 9 8 7 6 5 4 3 2 1
8
输出样例:
  1  2  3  4  5  6  7  8  9 10
  1  2  3  4  5  6  7  8  8  9 10
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

二、设计思路

  首先输入一个整型数组和一个整型数字。用冒泡排序从小到大将该整型数组排序。再用一个个寻找需要插入的位置,最后输出。

三、源代码

#include<stdio.h>
int main()
{
    int a[11];
    int i,j,b,k,flag=0,temp;
    for(i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
    }
    scanf("%d",&b);
    for(i=0;i<10;i++)
    {
        k=i;
        for(j=i+1;j<10;j++)
        {
            if(a[j]<a[k])
            {
                k=j;
            }
        }
        if(k!=i)
        {
            temp =a[k];
            a[k]=a[i];
            a[i]=temp;
        }
    }
    for(i=0;i<10;i++)
    {
        printf("%3d",a[i]);
    }
    printf("\n");
    for(i=0;i<11;i++)
    {
        if(a[i]>b)
        {
            k=a[i];a[i]=b;flag=1;
        }
        if(flag==1)break;
    }
    if(flag==1)
    {for(i=i+1;i<11;i++)
    {
        j=a[i];
        a[i]=k;
        k=j;
    }
    }
        for(i=0;i<11;i++)
        printf("%3d",a[i]);
    if(flag==0)
        printf("%d",b);
    printf("\n");
    return 0;
}

第三题 应用字符数组求子串

一、问题描述

应用字符数组存储从键盘输入一行字符(100个以内),用户输入整数i和n的值,编写算法输出该字符串中从第i个字符开始的n个字符。

提示:若i<1则认为i=1,若字符串剩余的字符不够n个则输出剩余的全部字符。

输入格式:
第一行输入一行字符(字符个数小于100)。

第二行输入2个整数,以空格间隔,第1个数为i的值,第2个数为n的值。

输出格式:
输出该字符串中从第i个字符开始的n个字符。

输入样例:
I love China!
8 8
输出样例:
China!
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

二、设计思路

  第一步,获取字符数组。接着获取i和n。很简单,循环起始变量i确定,往后输出n个字符即可。

三、源代码

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

第四题 筛法求素数

一、问题描述

(谭浩强,《C程序设计(第四版)》,清华大学出版社,P168,第1题)

用户输入整数n(1<n<1000),应用筛法求不大于n的所有素数。

输入格式:
一行中输入1个整数。

输出格式:
按照一行10个的格式输出不大于n的所有素数,其中每个素数的显示格式为:占5位,右对齐。

输入样例1:
100
输出样例1:
    2    3    5    7   11   13   17   19   23   29
   31   37   41   43   47   53   59   61   67   71
   73   79   83   89   97
输入样例2:
1000
输出样例2:
error data
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

二、设计思路

  按照题目要求,输入一个整数n,在输入后我们需要进行判断。整个整数要在1~1000之间否则输出error data。截止我们要做的便是找素数的过程,众所周知,当一个数的因数只有1和自己本身那这个数便是素数。换句话说,如果我们从一一直遍历到它本身,若不存在一个数,使得目标数字取余该数不为零,那么我们可以说这个数为素数。值得一提,为了简化程序运算流程,我们只需遍历到目标数字的完全平方数,若一到完全平方数找不到因数,那么完全平方数到目标数字也找不到因数。

三、源代码

#include<stdio.h>
int main(){
    int n,i,m,t=0;
    scanf("%d",&n);
            if(n>=1000||n<=1)
        printf("error data");
        else
        {
            for(m=2;m<=n;m++)
    {
            int p=1;
        for(i=2;i<m;i++)
            if(m%i==0)
            {p=0;break;}
        if(p==1) {printf("%5d",m);t++;continue;}

        if(t%10==0)
        {
            printf("\n");
        }
        }

    }

    return 0;
}

第五题 杨辉三角形

一、问题描述

(谭浩强,《C程序设计(第四版)》,清华大学出版社,P168,第6题)

输出n(0<n<21)行杨辉三角形,n由用户输入。

输入格式:
一行中输入1个整数。

输出格式:
输出n(0 < n < 21)行杨辉三角形,每个数的显示格式:占6位,右对齐。

比如3行杨辉三角形输出为:

     1     1
     1     2     1
     1     3     3     1
输入样例1:
3
输出样例1:
     1     1
     1     2     1
     1     3     3     1
输入样例2:
0
输出样例2:
error data
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

二、设计思路

  这个杨辉三角看起来有点奇怪,且看源代码。

三、源代码

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

第六题 查找鞍点

一、问题描述

(谭浩强,《C程序设计(第四版)》,清华大学出版社,P169,第8题)

对于给定的整数矩阵A[5,5],设计算法查找出所有的鞍点。

提示:鞍点的特点:列上最小,行上最大。

输入格式:
输入5行5列整数,同行数据间以空格为间隔。

输出格式:
在一行中以以下格式输出矩阵中的所有鞍点,每个鞍点的显示格式为:

[<鞍点的行坐标>,<鞍点的列坐标>,<鞍点的值>]

输入样例:
11 3 5 6 9
12 4 7 8 10
10 5 6 9 11
8 6 4 7 8
15 10 11 20 25
输出样例:
[3,0,8][3,4,8]
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

二、设计思路

  寻找一个东西,目的性很强,在现阶段也很容易做到。 鞍点的特点是列上最小,行上最大。

三、源代码

#include<stdio.h>
int main()
{
    int i,j,max,min,d,k;
    int a[5][5]={0},b[5]={0},c[5]={0},e[10]={0};
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    for(i=0;i<5;i++)
    {
        max=a[i][0];
        for(j=0;j<5;j++)
        {
            if(a[i][j]>max)
            {
                max=a[i][j];
            }
        }
        b[i]=max;
    }
    for(j=0;j<5;j++)
    {
        min=a[0][j];
        for(i=0;i<5;i++)
        {
            if(a[i][j]<min)
            {
                min=a[i][j];
            }
        }
        c[j]=min;
    }
    //for(i=0;i<5;i++)
        //printf("%d\n",b[i]);
    //for(j=0;j<5;j++)
       //printf("%d\n",c[j]);
      for(i=0;i<5;i++)
       {
              for(j=0;j<5;j++)
              {
                     if(c[j]==b[i])
                        {
                            printf("[%d,%d,%d]",i,j,c[j]);
                        }
           }
           
       }
        
}

 第七题 折半查找

一、问题描述

(谭浩强,《C程序设计(第四版)》,清华大学出版社,P169,第9题)

应用数组存储用户输入的10个整数,程序首先将其按照从小到大的顺序排序好并存储在原数组中,然后运用折半查找算法在该数组中查找用户输入的待查找整数。

输入格式:
第1行输入10个整数,数据间以空格为间隔。‘

第2行输入1个待查找整数。

输出格式:
第1行中输出排序后的数组序列,每个数的显示格式为:占5位,右对齐。

第2行中输出查找时每次比较的数组元素的下标,每个下标的显示格式为:占5位,右对齐。

第3行输出查找的结果,查找成功时输出“Success”,查找失败时输出“Fail”。

输入样例1:
1 3 5 7 9 11 13 15 17 19
7
输出样例1:
    1    3    5    7    9   11   13   15   17   19
    4    1    2    3
Success
输入样例2:
11 13 15 17 19 9 7 5 3 1
0
输出样例2:
    1    3    5    7    9   11   13   15   17   19
    4    1    0
Fail
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

 二、设计思路

 什么是折半查找?折半查找是一种高效的查找方法,它的查找过程为首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

三、源代码

#include<stdio.h>
#include<math.h>
int main()
{
    int a[10]={0},i,j,m=1,n,min,l=0,r=9;
    for(i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
    }
    scanf("%d",&n);
    for(i=0;i<9;i++)
    {
        min=a[i];
        for(j=i+1;j<10;j++)
        {
            if(min>a[j])
            {
                min=a[j];
                a[j]=a[i];
                a[i]=min;
            }
        }
    }
    for(i=0;i<10;i++)
    {
        printf("%5d",a[i]);
    }
    printf("\n");
while(m!=l&&m!=r)
{
    m=(l+r)/2;
    if(a[m]<n)
        {
            l=m+1;
        }
    else if(a[m]>n)
        {
            r=m-1;
        }
        printf("%5d",m);
        if(m==0)
        {
            break;
        }
}
        printf("\n");
        if(a[m]==n) printf("Success");
        else printf("Fail");
        printf("\n");
    return 0;
}

总结:数组相当于一个篓子,我们从中有顺序地存东西,我们也可以从中有顺序地取东西。数组是一个媒介,我们可以通过这一工具去解决很多实例化的问题;如果说函数是机床,可以加工原材料,那么数组就像流水线可以有条理地传递零件。

每日一mo:热热热热热!

标签:输出,第十二天,int,样例,c++,坐牢,--,数组,输入
From: https://www.cnblogs.com/R-f-12/p/17400961.html

相关文章

  • C/C++《高级语言程序设计(II)》[2023-05-15]
    C/C++《高级语言程序设计(II)》[2023-05-15]《高级语言程序设计(II)》课程设计题目题目1高校人员信息管理系统设计 2题目2公司员工信息管理系统设计 4题目3媒体库管理系统设计 6题目4学生选修课程系统设计 8题目5学生信息管理系统设计 10题目6高校水电费......
  • c++打卡练习(28)(还没写对,持续改进中)
    黑洞数流程图:伪代码:源代码:#include<iostream>usingnamespacestd; intmaxof3(int,int,int); intminof3(int,int,int); intmain(){ inti,k; inthun,oct,data,max,min,j; printf("请输入一个三位数\n"); scanf("%d",i); while(k!=EOF){ hun=i/100; ......
  • L1-003 个位数统计(C++)
    一、问题描述:给定一个 k 位整数 N=dk−1​10k−1+⋯+d1​101+d0​ (0≤di​≤9, i=0,⋯,k−1, dk−1​>0),请编写程序统计每种不同的个位数字出现的次数。例如:给定 N=100311,则有2个0,3个1,和1个3。输入格式:每个输入包含1个测试用例,即一个不超过1000位的正整数......
  • 2、c++中的指针参数传递和引用参数传递
    指针参数传递本质上是值传递。值传递的过程中,被调函数的形式参数作为被调函数的局部变量处理,会在栈中开空间用以存放由主调函数传递的实际参数,从而形成了实参值得一个副本。而值传递的特点是被调函对形参的任何修改都不会影响实参值。(如果想通过指针参数来修改主调函数的相关变量或......
  • c++打卡练习(27)
    求x的y次方的最后三位数流程图:伪代码:源代码:#include<iostream>usingnamespacestd;intmain(){intnum,y,x,i;printf("输入x以及x的次数y\n"); scanf("%d%d",&x,&y); for(i=1,num=1;i<=y;i++){ num=num*x%1000; }printf("%d",num); r......
  • 多线程qt5 c++ 工业自动化上位机源代码 Qt5之工业应用! 一套完
    多线程qt5c++工业自动化上位机源代码Qt5之工业应用!一套完整工程,链接PLC,工业无人值守自动扫码使用,无线扫码枪SR1000的使用,使用qt5.14,用qtcreator加载工程后,编译,运行,可调试可扩展,目的是学习qt开发方式。Sqlserver存储方式,查询自由。excel方便导出,c++效率无需赘言。不懂的随时和卖......
  • Qt5 C++ 多线程工业气体标定 1)使用OPC 封装COM 2)C++调用OPC; 3
    Qt5C++多线程工业气体标定1)使用OPC封装COM2)C++调用OPC;3)使用经典界面;4)使用QT专业皮肤编程qss;5)C++链接PLC读写数据;6)赠送KEPSVR服务器;参数如下:-----------------------------1)编程语言:C++(11或以上);-----------------------------2)编程环境:QT5.14;-----------------------------......
  • 11套QT_c++和C#工业上位机MES编程 全部都是现场应用。 1,C#多工
    11套QT_c++和C#工业上位机MES编程全部都是现场应用。1,C#多工位力位移监控!完整应用,vs2015开发,用到dx控件,我会赠送。这是一个工业应用,下位机为plc。设备启动后上下位机通信完成全自动动作。tcpip扫码,监控曲线,存数据,导数据。2,基于qt5工业生产应用!这是一个汽车部件制造企业的一条......
  • qt5_c++工业上位机自动扫码数据追溯 Qt5之工业应用! 一
    qt5_c++工业上位机自动扫码数据追溯Qt5之工业应用!一套完整工程,链接PLC,工业无人值守自动扫码使用,无线扫码枪SR1000的使用,使用qt5.14,用qtcreator加载工程后,编译,运行,可调试可扩展,目的是学习qt开发方式。Sqlserver存储方式,查询自由。excel方便导出,c++效率无需赘言。ID:6939637937650......
  • Qt_c++上位机2套串口实时曲线带平滑 1,设置串口. 2,串
    Qt_c++上位机2套串口实时曲线带平滑1,设置串口.2,串口收发数据。3,数据模拟。4,接收数据形成曲线。5,曲线控件的各种外观设置。6,可以设置平滑曲线。参数如下:-----------------------------1)编程语言:C++(11或以上);-----------------------------2)编程环境:QT5.14;-----------------......