C语言编程——数组某些题


gets()统计各字符数目

输入一行字符,统计其中的英文字符、数字字符、空格和其他字符的个数。
输入提示信息:"Please input a string:"
输入字符串用gets()
输出提示信息和格式:
"English character: %dn"
"digit character: %dn"
"space: %dn"
"other character: %dn"

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int letter=0,digit=0,space=0,other=0,i;
    char str[81];
    printf("Please input a  string:");
    gets(str);
    for(i=0;str[i]!='\0';i++)
    {
        if(str[i]>='a'&&str[i]<='z'||str[i]>='A'&&str[i]<='Z')
        {
            letter++;
        }
        else if(str[i]>='0'&&str[i]<='9')
        {
            digit++;
        }
        else if(str[i]==' ')
        {
            space++;
        }
        else
        {
            other++;
        }
    }
    printf("English character:  %d\n",letter);
    printf("digit character:  %d\n",digit);
    printf("space:  %d\n",space);
    printf("other character:  %d\n",other);
    return 0;
}

一维数组逆序

定义函数将一维数组逆序(对应位置数据交换)。
主函数中输入10个整数,然后调用函数将其逆序并输出逆序后的结果。
输入提示:"input 10 numbers:"
输入格式:"%d"
输出格式:"%5d"

#include <stdio.h>
int main()
{
    int a[10],i;
    printf("input 10 numbers:");
    for(i=0;i<10;i++)
        scanf("%d",&a[i]);
    for(i=9;i>=0;i--)
        printf("%5d",a[i]);
    return 0;
}

求月份天数

从键盘输入某年某月(包括闰年),编程输出该年的该月拥有的天数。
**输入格式要求:"%d,%d" 提示信息:"Input year,month:" "The number of days is %dn"
**输出格式要求:"%d"

#include <stdio.h>
int mon_1(int year,int mon);
int main()
{
    int year,mon,day;
    do{
    printf("Input year,month:");
    scanf("%d,%d",&year,&mon);
    }while(mon>12||mon<1);
    day=mon_1(year,mon);
    printf("The number of days is %d\n",day);
    return 0;
}
int mon_1(int year,int mon)
{
    int flag,flag_year;
    if(mon==2)
        {
            flag_year=year_1(year);
            if(flag_year==1)
            {
                flag=29;
            }
            else
            {
                flag=28;
            }
        }
    else if(mon==1||3||5||7||8||10||12)
        {
            flag=31;
        }
    else if(mon==4||6||9||11)
        {
            flag=30;
        }

    return flag;
}
int year_1(int year)
{
    int flag_year;
    if(year%400==0 || (year%4==0 && year%100!=0))
    {
        flag_year=1;
    }
    else
    {
        flag_year=0;
    }
    return flag_year;
}

主对角线上最大的元素

从键盘为3*3的矩阵输入数据,找出主对角线上最大的元素,以及所在的行号。
**输入提示信息:无
**输入格式要求:"%d"
**输出格式要求:"max=%d ,row=%d"

#include <stdio.h>
#define M 3
int main()
{
    int a[M][M],max,row,m,n,i;
    for(m=0;m<3;m++)
    {
        for(n=0;n<3;n++)
        {
            scanf("%d",&a[m][n]);
        }
    }
    max=a[0][0],row=0;
    for(i=0;i<3;i++)
    {
        if(max<a[i][i])
        {
            max=a[i][i];
            row=i;
        }
        else
        {
            max=max;

        }
    }
    printf("max=%d ,row=%d",max,row);
    return 0;
}

10个学生的C语言成绩

输入10个学生的C语言成绩(假设成绩为整数值),求最高成绩、最低成绩和平均值。
**输入格式要求:"%d" 提示信息:"请输入10个学生的C成绩:n"
**输出格式要求:
"10个学生的C成绩分别为:n"
"%d "
10个成绩的最后输出一个"n"
"最高成绩是%d,是第%d个学生n"
"最低成绩是%d,是第%d个学生n"
"10名学生的C成绩的平均分为:%.2fn"
程序运行示例如下:
请输入10个学生的C成绩:
80 90 93 78 83 67 79 60 64 45
10个学生的C成绩分别为:
80 90 93 78 83 67 79 60 64 45
最高成绩是93,是第3个学生
最低成绩是45,是第10个学生
10名学生的C成绩的平均分为:73.90

#include <stdio.h>
#define M 10
void min_max(int a[],int i);
void averge(int a[]);
int main()
{
    int a[M],i;
    printf("请输入10个学生的C成绩:\n");
    for(i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
    }
    printf("10个学生的C成绩分别为:\n");
    for(i=0;i<10;i++)
    {
        printf("%d ",a[i]);
    }
    printf("\n");
    min_max(a,i);
    averge(a);
    return 0;
}
void min_max(int a[],int i)
{
    int n,min_num=0,max_num=0,max,min;
    max=a[0];
    min=a[0];
    for(n=0;n<9;n++)
    {
        if(max<a[n+1])
           {
               max=a[n+1];
               max_num=n+1;
           }
        else
            {
                max=max;
                max_num=max_num;
            }
    }
    for(n=0;n<9;n++)
    {
        if(min>a[n+1])
           {
               min=a[n+1];
               min_num=n+1;
           }
        else
            {
                min=min;
                min_num=min_num;
            }
    }
    printf("最高成绩是%d,是第%d个学生\n",a[max_num],max_num+1);
    printf("最低成绩是%d,是第%d个学生\n",a[min_num],min_num+1);
}
void averge(int a[])
{
    int n,sum=0;
    for(n=0;n<10;n++)
    {
        sum=sum+a[n];
    }
    printf("10名学生的C成绩的平均分为:%.2f\n",sum/10.0);
}

形成并输出如下矩阵

这题写了两遍,第二种思路正解。
在一个二维数组中形成并输出如下矩阵:
输出格式:"%d "
程序运行示例如下:
1 1 1 1 1
2 1 1 1 1
3 2 1 1 1
4 3 2 1 1
5 4 3 2 1

#include <stdio.h>
#define M 5
int main()
{
    int r,c,a[M][M];
    for(c=0;c<5;c++)
    {
        a[c][0]=c+1;
    }
    for(c=0;c<5;c++)
    {
        for(r=1;r<5;r++)
        {
            if(a[c][r-1]==1)
            {
                a[c][r]=1;
            }
            else
            {
                a[c][r]=a[c][r-1]-1;
            }
        }
    }
    for(c=0;c<5;c++)
    {
        for(r=0;r<5;r++)
        {
            printf("%d ",a[c][r]);
        }
    printf("\n");
    }
    return 0;
}

自方幂数(水仙花数)

一个n位正整数如果等于它的n个数字的n次方和,该数称为n位自方幂数。设计求3~6位自方幂数。
**输出格式要求:"%d位自幂数有:" "%ldt" "n" (每位完后换行)

#include<stdio.h>
#include<math.h>
int main()
{                    
    int a1, a2, a3, a4, a5, a6, i, j;
    long m3, m4, m5, m6;
    long n3, n4, n5, n6;
    static int t[9];
    static long s[9][10];
    for (a1 = 1; a1 <= 9; a1++)
        for (a2 = 0; a2 <= 9; a2++)
            for (a3 = 0; a3 <= 9; a3++)
            {                    
                m3 = a1 * 100 + a2 * 10 + a3;
                n3 = (long)(pow(a1, 3) + pow(a2, 3) + pow(a3, 3));
                if (m3 == n3)
                {                    
                    s[3][++t[3]] = m3;          //三位水仙花数
                }
                for (a4 = 0; a4 <= 9; a4++)
                {                    
                    m4 = m3 * 10 + a4;
                    n4 = (long)(pow(a1, 4) + pow(a2, 4) + pow(a3, 4) + pow(a4, 4));
                    if (m4 == n4)
                    {                    
                        s[4][++t[4]] = m4;    //四位玫瑰花数
                    }
                    for (a5 = 0; a5 <= 9; a5++)
                    {                    
                        m5 = m4 * 10 + a5;
                        n5 = (long)(pow(a1, 5) + pow(a2, 5) + pow(a3, 5) + pow(a4, 5) + pow(a5, 5));
                        if (m5 == n5)
                        {                    
                            s[5][++t[5]] = m5; //五位五角星数
                        }
                        for (a6 = 0; a6 <= 9; a6++)
                        {                    
                            m6 = m5 * 10 + a6;
                            n6 = (long)(pow(a1, 6) + pow(a2, 6) + pow(a3, 6) + pow(a4, 6) + pow(a5, 6) + pow(a6, 6));
                            if (m6 == n6)
                            {                    
                                s[6][++t[6]] = m6; //六位六合数
                            }
                        }
                    }
                }
            }
    for (i = 3; i <= 6; i++)
    {                    
        printf("%d位自幂数有:", i);
        for (j = 1; j <= t[i]; j++)
        {                    
            printf("%ld\t", s[i][j]);
        }
        printf("\n");
    }
 
    return 0;
 
}                   

查找星期表(strcmp函数调用)

任意输入英文的星期几,通过查找星期表,输出其对应的数字,
若查到表尾,仍未找到,则输出错误提示信息。
**输入格式要求:"%s" 提示信息:"Please enter a string:n"
**输出格式要求:"%s is %dn" "Not found!n"
查找表中信息:
"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"

#include <stdio.h>
#include <string.h>
int main()
{
    char a[10];
    char week_day[][10]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
    printf("Please enter a string:\n");
    gets(a);
    int i;
    for(i=0;i<7;i++)
    {
        if(strcmp(a,week_day[i])==0)
    /*C 库函数 int strcmp(const char *str1, const char *str2) 把 str1 所指向的字符串和 str2 所指向的字符串进行比较。
    下面是 strcmp() 函数的声明。
    int strcmp(const char *str1, const char *str2)*/
        break;
    }
    if(i<7)
    printf("%s is %d\n",week_day[i],i);
    else
    printf("Not found!\n");
    return 0;
}
程序运行示例1:
请输入二维数组:
1 2 3
4 5 6
7 8 9
该二维数组的鞍点为3:下标为(0,2).
程序运行示例2:
请输入二维数组:
4 5 7
3 8 5
6 9 4
该二维数组中没有鞍点.
输入3*3的二维数组提示信息:"请输入二维数组:\n"
输入格式:%d
存在鞍点输出格式:"该二维数组的鞍点为%d:下标为(%d,%d).\n"
不存在鞍点输出提示:"该二维数组中没有鞍点.\n"


#include <stdio.h>
#define N 3
int main()
{
    int i,j,k;
    int a[N][N];
    int line,clo;
    int l_max=0,c_min=10000;
    printf("请输入二维数组:\n");
    for(i=0;i<N;i++)
    {
        for(j=0;j<N;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    for(i=0;i<N;i++)
    {
        l_max=0,c_min=10000;
        for(j=0;j<N;j++)
        {
            if(a[i][j]>l_max)
            {
                l_max=a[i][j];
                clo=j;
            }

        }
        for(k=0;k<N;k++)
        {
            if(a[k][clo]<c_min)
            {
                c_min=a[k][clo];
                line=k;
            }
        }
        if(l_max==c_min)
        {
            printf("该二维数组的鞍点为%d:下标为(%d,%d).\n",l_max,line,clo);
            return 1;
        }
    }

    printf("该二维数组中没有鞍点.\n");
    return 0;
}



用二维字符数组方法编程实现从键盘任意输入10个字符串,将这10个字符串按字典顺序排序后打印输出,字符串最大长度80。
**输入提示信息格式: 无

**输入数据格式要求: 要求读入的字符串可以包含有空格
**输出数据格式要求: 一行输出一个字符串
注:不能使用指针、结构体、共用体、文件、goto、枚举类型进行编程,主函数不能使用int main和return 0。

#include <stdio.h>
#include <string.h>
#define COL 80
#define LINE 10
void main()
{
    char a[LINE][COL];
    int i,j;
    char temp[COL];
    for(i=0;i<LINE;i++)
    {
        gets(a[i]);
    }
    for(i=0;i<LINE;i++)
    {
        for(j=0;j<LINE-i-1;j++)
        {
            if(strcmp(a[j],a[j+1])>0)
            {
                strcpy(temp,a[j]);
                strcpy(a[j],a[j+1]);
                strcpy(a[j+1],temp);
            }
        }
    }
    for(i=0;i<LINE;i++)
    {
        printf("%s",a[i]);
        printf("\n");
    }
}


从键盘为3*3的矩阵输入数据,找出主对角线上最大的元素,以及所在的行号。
**输入提示信息:无
**输入格式要求:"%d"
**输出格式要求:"max=%d ,row=%d"
程序运行示例如下:
1 2 3
4 5 6
7 8 9
max=9 ,row=2
注:不允许使用goto语句


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


**输入提示格式:"\n输入行数:"
**输入提示格式:"\n输入列数:"
**输入提示格式:"第%d行?\n"
**输入数据格式:"%d"
**输出格式:"%5d"     注意:每一行后边有一个回车: printf("\n");
**输出格式: 
"\n第%d行,第%d列的%d是鞍点\n"
"\n矩阵中无鞍点!\n"
程序的运行示例1如下:
输入行数:3
输入列数:3
第0行?
1 2 3
第1行?
4 5 6
第2行?
7 8 9
    1    2    3
    4    5    6
    7    8    9
第0行,第2列的3是鞍点
程序的运行示例2如下:
输入行数:2
输入列数:2
第0行?
1 2
第1行?
4 1
    1    2
    4    1
矩阵中无鞍点!


#include <stdio.h>
#define N 20
int main()
{
    int i,j,k;
    int l,c;
    int a[N][N];
    int line,clo;
    int l_max=0,c_min=10000;
    //定义行数和列数
    printf("\n输入行数:");
    scanf("%d",&l);
    printf("\n输入列数:");
    scanf("%d",&c);
    //输入矩阵
    for(i=0;i<l;i++)
    {
        printf("第%d行?\n",i);
        for(j=0;j<c;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    //打印矩阵
    for(i=0;i<l;i++)
    {
        for(j=0;j<c;j++)
        {
            printf("%5d",a[i][j]);
        }
        printf("\n");
    }
    //寻找鞍点
    for(i=0;i<l;i++)
    {
        //找到每列中的最大数
        for(j=0;j<c;j++)
        {
            if(a[i][j]>l_max)
            {
                l_max=a[i][j];
                clo=j;
            }

        }
        //找到每行中的最小数
        for(k=0;k<l;k++)
        {
            if(a[k][clo]<c_min)
            {
                c_min=a[k][clo];
                line=k;
            }
        }
        //判断最小数是否和最大数是同一个数
        if(l_max==c_min)
        {
            printf("\n第%d行,第%d列的%d是鞍点\n",line,clo,l_max);
            return 1;
        }
    }

    printf("\n矩阵中无鞍点!\n");
    return 0;
}

输入一个正整数n (1<n≤6),根据下式生成1个n*n的方阵(二维数组存放):
a[i][j] = i * n + j + 1(0≤i≤n-1,0≤j≤n-1)
然后将该方阵转置(行列互换)后输出。
注意:原方阵和转置方阵用同一个二维数组存放。
**输入格式要求:"%d" 提示信息:"Enter n: "
**输出格式要求:"%4d"
对矩阵的输出要求:列与列之间为%4d,行与行之间为\n
程序运行示例如下:
Enter n: 3
   1   4   7
   2   5   8
   3   6   9
 
   
#include <stdio.h>
#define N 6
int main()
{
    int i,j;
    int a[N][N];
    int n,temp;
    printf("Enter n: ");
    scanf("%d",&n);
    if(n<0&&n>6)
    {
        printf("ERROR INPUT!");
        return 0;
    }
    else
    {
        //Generating matrix
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                a[i][j] = i * n + j + 1;
            }
        }
        //Transposed matrix
        for(i=0;i<n;i++)
        {
            for(j=0;j<i;j++)
            {
                temp=a[i][j];
                a[i][j]=a[j][i];
                a[j][i]=temp;
            }
        }
        //Printing matrix
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                printf("%4d",a[i][j]);
            }
            printf("\n");
        }
    }
    return 0;
}

矩阵乘法。编写一个C函数实现M行K列矩阵与K行N列的矩阵的乘积。设A为M行K列的矩阵,B为K行N列的矩阵,则C=A×B的积为M行N列的矩阵。
其中:M为2,K为3,N为2.
矩阵乘法的规则是:设A[m,k],B[k,n],则C[m,n]=A[m,k]×B[k,n],其中:
C[i,j]=∑(k,l=1)A[i,l]×B[l,j], (i=1,2,…,m   j=1,2,…,n)
**输入提示:"请输入矩阵A:"       "请输入矩阵B:"
**输入格式:"%d"
**输出格式要求:"array C=\n"    "\t%d"     

程序运行示例如下:
请输入矩阵A:↙
1 2 3
4 5 6
请输入矩阵B:↙
1 2 
1 2
1 2
array C=↙
    6    12↙
    15    30↙


#include <stdio.h>
#define M 2
#define N 2
#define K 3
int in_array(int A[M][K],int B[K][N]);
int mutiply(int A[M][K],int B[K][N],int C[M][N]);
int out_array(int C[M][N]);
int main()
{
    int A[M][K],B[K][N],C[M][N];
    in_array(A,B);
    mutiply(A,B,C);
    out_array(C);
    return 0;
}
int in_array(int A[M][K],int B[K][N])
{
    int i,j;
    printf("请输入矩阵A:\n");
    for(i=0;i<M;i++)
    {
        for(j=0;j<K;j++)
        {
            scanf("%d",&A[i][j]);
        }
    }
    printf("请输入矩阵B:\n");
    for(i=0;i<K;i++)
    {
        for(j=0;j<N;j++)
        {
            scanf("%d",&B[i][j]);
        }
    }
    return 0;
}
int mutiply(int A[M][K],int B[K][N],int C[M][N])
{
    int i,j,k;
    for(i=0;i<M;i++)
    {
        for(j=0;j<N;j++)
        {
            C[i][j]=0;
            for(k=0;k<K;k++)
            {
                C[i][j]+=A[i][k]*B[k][j];
            }
        }
    }
    return 0;
}
int out_array(int C[M][N])
{
    int i,j;
    printf("array C=\n");
    for(i=0;i<M;i++)
    {
        for(j=0;j<N;j++)
        {
            printf("\t%d",C[i][j]);
        }
        printf("\n");
    }
    return 0;
}

任意输入英文的星期几,通过查找星期表,输出其对应的数字,
若查到表尾,仍未找到,则输出错误提示信息。
下面程序中存在比较隐蔽的错误,请通过分析和调试程序,发现并改正程序中的错误。
注意:请将修改正确后的完整源程序拷贝粘贴到答题区内。
对于没有错误的语句,请不要修改,修改原本正确的语句也要扣分。
当且仅当错误全部改正,且程序运行结果调试正确,才给加5分。
改错时不能改变程序原有的意图,不能改变函数原型
#include  <stdio.h>
#define   WEEKDAYS  7
#define   MAX_STR_LEN  10
main()
{
    int i, pos;
    int findFlag;
    char x[MAX_STR_LEN];
    char weekDay[][MAX_STR_LEN] = {"Sunday", "Monday", "Tuesday",
                                   "Wednesday", "Thursday", "Friday", "Saturday"
                                  };
    printf("Please enter a string:\n");
    scanf("%s", &x[i]);
    for (i = 0; i < WEEKDAYS || !findFlag; i++)
    {
        if (x[i] == weekDay[i])
        {
            pos = i;
            findFlag = 1;
        }
    }
    if (findFlag)
    {
        printf("%s is %d\n", x, pos);
    }
    else
    {
        printf("Not found!\n");
    }
}



#include  <stdio.h>
#include <string.h>
#define   WEEKDAYS  7
#define   MAX_STR_LEN  10
int main()
{
    int i, pos;
    int findFlag;
    char x[MAX_STR_LEN];
    char weekDay[WEEKDAYS][MAX_STR_LEN] = {"Sunday", "Monday", "Tuesday",
                                   "Wednesday", "Thursday", "Friday", "Saturday"
                                  };
    printf("Please enter a string:\n");
    scanf("%s",x);
    for (i = 0; i < WEEKDAYS || !findFlag; i++)
    {
        if (strcmp(x,weekDay[i])==0 )
        {
            pos = i;
            findFlag = 1;
        }
    }
    if (findFlag==1)
    {
        printf("%s is %d\n", x, pos);
    }
    else
    {
        printf("Not found!\n");
    }
    return 0;
}


字符串排序。调用Input函数输入10个字符串,调用Sort函数对这10个字符串按字典顺序排序,调用Print函数打印输出排序后的字符串。
Input函数原型:
  void Input(char str[][80],int n);
Sort函数原型:
  void Sort(char str[][80],int n);
Print函数原型:
  void Print(char str[][80],int n);
***输入数据格式:读入可包含有空格的字符串(字符串最大长度80)
***输出数据格式: 一行输出一个字符串

#include  <stdio.h>
#include <string.h>
void Input(char str[][80],int n);
void Sort(char str[][80],int n);
void Print(char str[][80],int n);
int main()
{
    const int n=10;
    char a[n][80];
    Input(a,n);
    Sort(a,n);
    Print(a,n);
    return 0;
}
void Input(char str[][80],int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        gets(str[i]);
    }
}
void Sort(char str[][80],int n)
{
    char temp[80];
    int i,j;
    for(i=0;i<n-1;i++)
    {
        for(j=0;j<n-1-i;j++)
        {
            if(strcmp(str[j],str[j+1])>0)
            {
                strcpy(temp,str[j]);
                strcpy(str[j],str[j+1]);
                strcpy(str[j+1],temp);
            }
        }
    }
}
void Print(char str[][80],int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("%s\n",str[i]);
    }
}

给定某年某月某日,将其转换成这一年的第几天并输出。
**输入格式要求:"%d%d%d"
**输出格式要求:"%d"
程序运行示例如下:
2012 11 8
313


#include  <stdio.h>
int main()
{
    int a[1][3];
    int i,day=0;
    int mon_1[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    int mon_2[12]={31,29,31,30,31,30,31,31,30,31,30,31};
    for(i=0;i<3;i++)
    {
        scanf("%d%d%d",&a[0][0],&a[0][1],&a[0][2]);
    }
    if((a[0][0]%4==0&&a[0][0]/100!=0)||a[0][0]/400==0)
    {
        for(i=0;i<a[0][1]-1;i++)
        {
            day+=mon_2[i];
        }
    }
    else
    {
        for(i=0;i<a[0][1];i++)
        {
            day+=mon_1[i];
        }
    }
    day+=a[0][2];
    printf("%d",day);
    return 0;
}
编程打印如下形式的杨辉三角形。打印的杨辉三角形的行数n(不超过15行)。要求由用户在主函数中通过键盘输入。请按照如下给定的函数原型进行编程。函数CaculateYH用于生成杨辉三角形,函数PrintYH用于打印杨辉三角形。给定的函数原型如下:
 void  CaculateYH(int a[][N], int  n);
 void  PrintYH(int a[][N], int  n);
**输入提示信息**:"Input n(n<15):\n"
**输入数据格式**:"%d"
**输出提示信息**:无
**输出数据格式**:"%5d"
杨辉三角形形式如下:
    1
    1    1
    1    2    1
    1    3    3    1
    1    4    6    4    1
    1    5   10   10    5    1
    1    6   15   20   15    6    1
    1    7   21   35   35   21    7    1
    1    8   28   56   70   56   28    8    1
    1    9   36   84  126  126   84   36    9    1
    1   10   45  120  210  252  210  120   45   10    1


#include  <stdio.h>
#define M 15
#define N 15
void  CaculateYH(int a[][N], int  n);
void  PrintYH(int a[][N], int  n);
int main()
{
    int a[M][N];
    int n;
    printf("Input n(n<15):\n");
    scanf("%d",&n);
    CaculateYH(a,n);
    PrintYH(a,n);
    return 0;
}
void  CaculateYH(int a[][N], int  n)
{
    int i,j;
    for(i=0;i<=n;i++)
    {
        a[i][0]=1;
        a[i][i]=1;
    }
    for(i=2;i<=n;i++)
    {
        for(j=1;j<=i-1;j++)
        {
            a[i][j]=a[i-1][j]+a[i-1][j-1];
        }
    }
}
void  PrintYH(int a[][N], int  n)
{
    int i,j;
    for(i=0;i<=n;i++)
    {
        for(j=0;j<=i;j++)
        {
            printf("%5d",a[i][j]);
        }
        printf("\n");
    }
}

输入m×n阶矩阵A和B,用函数编程计算并输出A与B之和。
**输入格式要求:"%d,%d"  提示信息:"Input m, n:"  "Input %d*%d matrix a:\n"  "Input %d*%d matrix b:\n"
**输出格式要求:"Results:\n"  "%6d"
程序运行示例如下:
Input m, n:2,3↙
Input 2*3 matrix a:↙
1  2  3 ↙
4  5  6 ↙
Input 2*3 matrix b:↙
11  12  13 ↙
14  15  16↙
Results:↙
    12    14    16↙
    18    20    22↙
    
    
    
#include <stdio.h>
#define M 20
int Input(int A[M][M],int B[M][M],int m,int n);
int Sum(int A[M][M],int B[M][M],int C[M][M],int m,int n);
int Output(int C[M][M],int m,int n);
int main()
{
    int A[M][M],B[M][M],C[M][M];
    int m,n;
    printf("Input m, n:");
    scanf("%d,%d",&m,&n);
    Input(A,B,m,n);
    Sum(A,B,C,m,n);
    Output(C,m,n);
    return 0;
}
int Input(int A[M][M],int B[M][M],int m,int n)
{
    int i,j;
    printf("Input %d*%d matrix a:\n",m,n);
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            scanf("%d",&A[i][j]);
        }
    }
    printf("Input %d*%d matrix b:\n",m,n);
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            scanf("%d",&B[i][j]);
        }
    }
    return 0;
}
int Sum(int A[M][M],int B[M][M],int C[M][M],int m,int n)
{
    int i,j;
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            C[i][j]=A[i][j]+B[i][j];
        }
    }
    return 0;
}
int Output(int C[M][M],int m,int n)
{
    int i,j;
    printf("Results:\n");
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            printf("%6d",C[i][j]);
        }
        printf("\n");
    }
    return 0;
}

在n行n列(n<=10)的二维整数数组中,按照以下要求选出一个数。首先从每行中选出最大数,在从选出的n个最大数中选出最小数.

程序运行示例:
 Please enter the order of the matrix: 3
 Please input the elements of the matrix:
 1 2 3
 4 5 6
 7 8 9
The minimum of maximum number is 3.

输入提示:"Please enter the order of the matrix:"
输入格式:%d
输入提示:"Please input the elements of the matrix:\n"
输入格式:%d
输出提示:"The minimum of maximum number is %d.\n"



#include <stdio.h>
#define N 10
int main()
{
    int a[N][N];
    int max[N];
    int min;
    int n,i,j;
    printf("Please enter the order of the matrix:");
    scanf("%d",&n);
    printf("Please input the elements of the matrix:\n");
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<n-1;j++)
        {
            if(a[i][j]<a[i][j+1])
            {
                max[i]=a[i][j+1];
            }
            else
            {
                max[i]=a[i][j];
            }
        }
    }
    for(i=0;i<n-1;i++)
    {
        if(max[i]>max[i+1])
        {
            min=max[i+1];
        }
        else
        {
            min=max[i];
        }
    }
    printf("The minimum of maximum number is %d.\n",min);
    return 0;
}

编程将二维数组中最右边一列移至左边。(假设二维数组不超过10*10)
要求:不能直接输出,要改动数据在二维数组中的存储位置。
***输入提示:
  "请输入行数:"
  "请输入列数:"
  "请输入%d*%d个数据:\n"
***输入格式:"%d"
***输出提示:
    "结果是 :\n"
***输出格式: "%6d"

程序运行示例:
请输入行数:2↙
请输入列数:3↙
请输入2*3个数据: ↙
1 2 3↙
3 4 5↙
结果是:↙
     3     1     2↙
     5     3     4↙




#include <stdio.h>
#define M 11
int main()
{
    int a[M][M];
    int m,n;
    int i,j;
    printf("请输入行数:");
    scanf("%d",&m);
    printf("请输入列数:");
    scanf("%d",&n);
    printf("请输入%d*%d个数据:\n",m,n);
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    for(i=0;i<m;i++)
    {
        for(j=n-1;j>=0;j--)
        {
            a[i][j+1]=a[i][j];
        }
        a[i][0]=a[i][n];
    }
    printf("结果是 :\n");
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            printf("%6d",a[i][j]);
        }
        printf("\n");
    }

    return 0;
}

判断5*5阶幻方矩阵
幻方矩阵是指该矩阵中每一行、每一列、每一对角线上的元素之和都是相等的。从键盘输入一个5×5的矩阵并将其存入一个二维整型数组中,检验其是否为幻方矩阵,并将其按指定格式显示到屏幕上。
输入格式: "%d"
输出格式:
如果是幻方矩阵,输出提示信息: "It is a magic square!\n"
如果不是幻方矩阵,输出提示信息: "It is not a magic square!\n"
矩阵元素的输出: "%4d"(换行使用"\n")


程序运行示例1:
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
It is a magic square!↙
  17  24   1   8  15↙
  23   5   7  14  16↙
   4   6  13  20  22↙
  10  12  19  21   3↙
  11  18  25   2   9↙
↙

程序运行示例2:
17 24 1 8 15
23 5 7 14 16
4 6 11 20 22
10 12 19 21 3
11 18 25 2 9
It is not a magic square!
  17  24   1   8  15↙
  23   5   7  14  16↙
   4   6  11  20  22↙
  10  12  19  21   3↙
  11  18  25   2   9↙
↙




#include <stdio.h>
#define M 5
int main()
{
    int a[M][M];
    int line[M];
    int col[M];
    int tri_1=0,tri_2=0;
    int i,j,k;
    int flag;
    for(i=0;i<M;i++)
    {
        for(j=0;j<M;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    for(i=0;i<M;i++)
    {
        line[i]=0;
        col[i]=0;
        for(j=0;j<M;j++)
        {
            line[i]+=a[i][j];
            col[i]+=a[j][i];
            tri_1+=a[i][i];
            tri_2+=a[i][M-1-i];
        }
    }
    for(i=0;i<M-1;i++)
    {
        if(line[i]==line[i+1])
        {
            if(col[i]==col[i+1])
            {
                if(tri_1==tri_2)
                {
                    flag=1;
                }
            }
        }
        else
        {
            flag=0;
        }
    }

    if(flag==1)
    {
        printf("It is a magic square!\n");
        for(j=0;j<M;j++)
        {
            for(k=0;k<M;k++)
            {
                printf("%4d",a[j][k]);
            }
            printf("\n");
        }
    }
    else
    {
            printf("It is not a magic square!\n");
    }

    return 0;
}

编写程序,对从键盘输入的一个3行4列的整数矩阵,计算其各行元素绝对值之和的最大值。

***输入提示信息:"Please input an 3*4 matrix:\n"
***每个元素的输入格式要求:"%d" 
***输出格式要求:"%d\n"

程序运行示例:
Please input an 3*4 matrix:↙
1 2 3 4↙
-1 -2 -3 -4↙
4 3 2 2↙
11↙


#include <string.h>
#include <stdio.h>
#define M 3
#define N 4
int main()
{
    int array[M][N];
    int max=0,per=0;
    int i,j;
    printf("Please input an 3*4 matrix:\n");
    for(i=0;i<M;i++)
    {
        for(j=0;j<N;j++)
        {
            scanf("%d",&array[i][j]);
        }
    }
    for(i=0;i<M;i++)
    {
        for(j=0;j<N;j++)
        {
            if(array[i][j]<0)
            {
                per+=(-array[i][j]);
            }
            else
            {
                per+=array[i][j];
            }
        }
        if(max<per)
        {
            max=per;
        }
        per = 0;
    }
    printf("%d\n",max);
}

编写程序计算两个矩阵的乘积,请将以下代码复制到codeblocks中,将multiply函数补充完整,程序运行正确后将所有代码(包括题目中给出的代码)复制到答题区内运行并提交。

#include <stdio.h>
#define M 3
#define S 4
#define N 2
 
void multiply(int A[M][S], int B[S][N], int C[M][N])
{
     
}
 
int main()
{
    int i, j;
    int A[M][S], B[S][N], C[M][N];
    printf("Please input A:\n");
    for (i = 0; i < M; i ++)
        for (j = 0; j < S; j ++)
            scanf("%d", &A[i][j]);
    printf("Please input B:\n");
    for (i = 0; i < S; i ++)
        for (j = 0; j < N; j ++)
            scanf("%d", &B[i][j]);
    multiply(A,B,C);
    printf("C=\n");
    for (i = 0; i < M; i ++){
        for (j = 0; j < N; j ++)
            printf("%d ", C[i][j]);
        printf("\n");
    }
    return 0;
}


#include <stdio.h>
#define M 3
#define S 4
#define N 2

void multiply(int A[M][S], int B[S][N], int C[M][N])
{
    int i,j,k;
    for(i=0;i<M;i++)
    {
        for(j=0;j<N;j++)
        {
            C[i][j]=0;
            for(k=0;k<S;k++)
            {
                C[i][j]+=A[i][k]*B[k][j];
            }
        }
    }
}

int main()
{
    int i, j;
    int A[M][S], B[S][N], C[M][N];
    printf("Please input A:\n");
    for (i = 0; i < M; i ++)
        for (j = 0; j < S; j ++)
            scanf("%d", &A[i][j]);
    printf("Please input B:\n");
    for (i = 0; i < S; i ++)
        for (j = 0; j < N; j ++)
            scanf("%d", &B[i][j]);
    multiply(A,B,C);
    printf("C=\n");
    for (i = 0; i < M; i ++){
        for (j = 0; j < N; j ++)
            printf("%d ", C[i][j]);
        printf("\n");
    }
    return 0;
}

声明:ITanger|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - C语言编程——数组某些题


Carpe Diem and Do what I like