二维数组,字符串,结构体

1.用scanf和gets( 字符数组名或指针)进行输入的区别:


char str1[60],str2[60];
gets(str1);  //gets()函数将接收输入的整个字符串直到遇到换行为止
printf("%s\n",str1);
scanf("%s\n",str2);//scanf如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理
printf("%s\n",str2);
————————————————
版权声明:本文为CSDN博主「爆爆爆炸beng」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sinat_37592533/article/details/79266182

2.字符串输出 printf或者puts(),字符串的结束标志'\0'。

7-51 打印杨辉三角 (20 分)

本题要求按照规定格式打印前N行杨辉三角。

输入格式:

输入在一行中给出N(1≤N≤10)。

输出格式:

以正三角形的格式输出前N行杨辉三角。每个数字占固定4位。

输入样例:

6

结尾无空行

输出样例:

        1
       1   1
      1   2   1
     1   3   3   1
    1   4   6   4   1
   1   5  10  10   5   1

结尾无空行

#include<stdio.h>
void creat(int a[][10],int n);
void output(int a[][10],int n);
int main()
{
    int n,a[10][10];
    scanf("%d",&n);
    creat(a,n);
    output(a,n);
    return 0;
}
void creat(int a[][10],int n)
{
    for(int i=0;i<n;i++)
    {
        a[i][0]=1;
        a[i][i]=1;
    }
    for(int i=2;i<n;i++)
    {
        for(int j=1;j<i;j++)
        {
            a[i][j]=a[i-1][j]+a[i-1][j-1];
        }
    }
}
void output(int a[][10],int n)
{
    for(int i=0;i<n;i++)//先输出空格数
    {
        for(int j=0;j<n-i-1;j++)
            printf(" ");
        for(int j=0;j<=i;j++)
        {
            printf("%4d",a[i][j]);//输出格式
        }
        printf("\n");//别忘了换行
    }
}

7-52 找鞍点 (20 分)

一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。

本题要求编写程序,求一个给定的n阶方阵的鞍点。

输入格式:

输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。

输出格式:

输出在一行中按照“行下标 列下标”(下标从0开始)的格式输出鞍点的位置。如果鞍点不存在,则输出“NONE”。题目保证给出的矩阵至多存在一个鞍点。

输入样例1:

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

结尾无空行

输出样例1:

2 1

结尾无空行

输入样例2:

2
1 7
4 1

输出样例2:

NONE
#include<stdio.h>
int point(int a[][6],int n);
int maxnum(int a[],int n);
int judge(int a[][6],int n,int s,int m);
int main()
{
    int n,a[6][6];//此时是a[6][6]
    scanf("%d",&n);
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            scanf("%d",&a[i][j]);
    int f=point(a,n);
    if(f==0) printf("NONE");
    return 0;
}

int maxnum(int a[],int n)//形参是一维数组
{
    int m=0;
    for(int i=1;i<n;i++)//从下标为1开始比较
    {
        if(a[i]>a[m]) m=i;//错误表示a[i]>m
    }
    return m;
}
int judge(int a[][6],int n,int s,int m)//形参是二维数组
{
    for(int i=0;i<n;i++)
        if(a[i][s]<m) return 0;
    return 1;
}
int point(int a[][6],int n)
{
    int f=0;
    for(int i=0;i<n;i++)
    {
        int j=maxnum(a[i],n);//这个的实参必须是a[i]
        int m=a[i][j];
        for(int s=0;s<n;s++)
        {
            if(a[i][s]==m)
            {
                int t=judge(a,n,s,m);
                if(t==1) {printf("%d %d",i,s);f=1;}
            }
        }
    }
    return f;//这是return f,不是return 0;
}

7-53 字母方阵 (15 分)

本题要求从左下角开始按字母表顺序S型打印由小写字母组成的字母方阵。

输入格式:

输入为一个正整数n (1=<n<=1000)。

输出格式:

按字母表顺序输出n行n列的小写字母组成的方阵,从右上角开始S型循环打印,字母之间用一个空格分割,每行最后一个字母后面没有空格。

输入样例:

6

结尾无空行

输出样例:

j y x m l a
i z w n k b
h a v o j c
g b u p i d
f c t q h e
e d s r g f
#include<stdio.h>
void creat(char a[][1000],int n);
int main()
{
    int n;
    scanf("%d",&n);
    char a[1000][1000];//首先定义一个二维数组a[][1000]
    creat(a,n);//调用创建字母方阵函数
    //输出
    for(int i=0;i<n;i++)
    {
        printf("%c",a[i][0]);//先输出第一列
        for(int j=1;j<n;j++)//列数从1开始
        {
            printf(" %c",a[i][j]);//每行最后一个字母后面没有空格
        }
        printf("\n");
    }
    return 0;
}
void creat(char a[][1000],int n)
{
    char num='a';
    int k,left=0,up=0,buttom=n-1,right=n-1;
    for(int i=0;i<n/2;i++)//大循环,一上一下、一上一下
    {
        for(k=up;k<=buttom;k++)
        {
            a[k][right]=num;
            num++;
            if(num>'z') num='a';
        }
        right--;
        for(k=buttom;k>=up;k--)
        {
            a[k][right]=num;
            num++;
            if(num>'z') num='a';
        }
        right--;
    }
    if(n%2==1)//奇数(n&1==1)(n&1)即位与运算
    {//最后的奇数行一定是从上往下的
        for(k=up;k<=buttom;k++)
        {
            a[k][right]=num;
            num++;
            if(num>'z') num='a';
            //最后一列没有right--
        }
    }
    
}

7-54 螺旋方阵 (20 分)

所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。

输入格式:

输入在一行中给出一个正整数N(<10)。

输出格式:

输出N×N的螺旋方阵。每行N个数字,每个数字占3位。

输入样例:

5

结尾无空行

输出样例:

  1  2  3  4  5
 16 17 18 19  6
 15 24 25 20  7
 14 23 22 21  8
 13 12 11 10  9

结尾无空行

#include<stdio.h>
void creat(int a[][10],int n);
int main()
{
    int n,a[10][10];
    scanf("%d",&n);
    creat(a,n);
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            printf("%3d",a[i][j]);//默认为右对齐
        }
        printf("\n");//方阵回车换行
    }
    return 0;
}
void creat(int a[][10],int n)
{
    int num=1;//num从1开始
    int left=0,up=0,right=n-1,buttom=n-1;
    for(int i=0;i<n/2;i++)
    {
        for(int k=left;k<=right;k++)
        {
            a[up][k]=num;num++;
        }
        for(int k=up+1;k<=buttom;k++)
        {
            a[k][right]=num++;
        }
        for(int k=right-1;k>=left;k--)
        {
            a[buttom][k]=num++;
        }
        for(int k=buttom-1;k>=up+1;k--)
        {
            a[k][left]=num++;
        }
        left++;right--;up++;buttom--;
    }
    if(n%2==1) a[n/2][n/2]=num;
}

7-55 统计大写辅音字母 (15 分)

英文辅音字母是除AEIOU以外的字母。本题要求编写程序,统计给定字符串中大写辅音字母的个数。

输入格式:

输入在一行中给出一个不超过80个字符、并以回车结束的字符串。

输出格式:

输出在一行中给出字符串中大写辅音字母的个数。

输入样例:

HELLO World!

结尾无空行

输出样例:

4

结尾无空行

#include<stdio.h>
int main()
{
    char a[81];
    int count=0;
    gets(a);//输入以回车结束的字符串用gets
    for(int i=0;a[i]!=0;i++)//字符串数组的结束标志
    {
        if(a[i]>='A'&&a[i]<='Z')
                if(a[i]!='A'&&a[i]!='O'&&a[i]!='I'&&a[i]!='U'&&a[i]!='E')
                    count++;
    }
    printf("%d",count);
    return 0;
}

7-58 字符串字母大小写转换 (15 分)

本题要求编写程序,对一个以“#”结束的字符串,将其小写字母全部转换成大写字母,把大写字母全部转换成小写字母,其他字符不变输出。

输入格式:

输入为一个以“#”结束的字符串(不超过30个字符)。

输出格式:

在一行中输出大小写转换后的结果字符串。

输入样例:

Hello World! 123#

结尾无空行

输出样例:

hELLO wORLD! 123

结尾无空行

#include<stdio.h>
#include<string.h>
int main()
{
    char a[32];//char a[31];
    gets(a);//输入为一个以“#”结束的字符串,后面仍有字符串的结束标志'\0',也可用gets
    for(int i=0;a[i]!='#';i++)
    {
        if(a[i]>='A'&&a[i]<='Z')
        {
            a[i]=a[i]+32;
        }
        else if(a[i]>='a'&&a[i]<='z')
        {
            a[i]=a[i]-32;
        }
    }
    //输出后没有#号了,只能用printf输出,不能用puts(a)
    for(int i=0;a[i]!='#';i++)//不要忘记#上有个字符串
    {
        printf("%c",a[i]);
    }
    return 0;
}

7-66 查找书籍 (20 分)

给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价。

输入格式:

输入第一行给出正整数n(<10),随后给出n本书的信息。每本书在一行中给出书名,即长度不超过30的字符串,随后一行中给出正实数价格。题目保证没有同样价格的书。

输出格式:

在一行中按照“价格, 书名”的格式先后输出价格最高和最低的书。价格保留2位小数。

输入样例:

3
Programming in C
21.5
Programming in VB
18.5
Programming in Delphi
25.0

结尾无空行

输出样例:

25.00, Programming in Delphi
18.50, Programming in VB

结尾无空行

#include<stdio.h>
typedef struct
{
    char name[31];//Programming in C,显然可见,书名有空格,必须用gets输入
    double price;
}book;
int max(book a[],int n)
{
    int m=0;//m就是第一个元素的下标
    for(int i=0;i<n;i++)//其实都可以,从第二个元素开始i=1,与第一个元素比较
    {
        if(a[i].price>a[m].price)
            m=i;
    }
    return m;
}
int min(book a[],int n)
{
    int m=0;
    for(int i=0;i<n;i++)
    {
        if(a[i].price<a[m].price)
            m=i;
    }
    return m;
}
int main()
{
    int n;
    scanf("%d\n",&n);//下面有gets输入字符串函数,scanf必须加\n
    book a[n];
    for(int i=0;i<n;i++)
    {
        gets(a[i].name);
        scanf("%lf\n",&a[i].price);//当scanf与gets一同使用时,scanf必须加\n
    }
    int m=max(a,n);
    printf("%.2f, %s\n",a[m].price,a[m].name);
    m=min(a,n);
    printf("%.2f, %s\n",a[m].price,a[m].name);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值