MENU

C语言实验+应用作业 8

2017 年 11 月 23 日 • 日常作业

这是我的作业和我的答案,供将来自己检索,和大家参考之用。

1、编一程序计算出两个矩阵A、B的和、差(设计一个函数同时计算两个矩阵的和与差)。
输入/输出实例
矩阵A:{{7,-5,3,3},{2,8,-6,4},{1,-4,-2,5}}
矩阵B:{{3,6,9,4},{2,-8,3,6},{5,-2,-7,9}}
输出实例:
A+B:{{10,1,12,7},{4,0,-3,10},{6,-6,-9,14}}
B:{{4,-11,-6,-1},{0,16,-9,-2},{-4,-2,5,-4}}

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

void process(int a[M][N],int b[M][N]){
    int i,j;
    printf("A+B:{");
    for(i=0;i<M;i++){
        printf("{");
        for(j=0;j<N;j++){
            printf("%d,",a[i][j]+b[i][j]);
        }
        printf("\b},");
    }
    printf("\b}\n");
    printf("A-B:{");
    for(i=0;i<M;i++){
        printf("{");
        for(j=0;j<N;j++){
            printf("%d,",a[i][j]-b[i][j]);
        }
        printf("\b},");
    }
    printf("\b}\n");
}
int main()
{
    int a[M][N],b[M][N],i,j;
    printf("输入矩阵A各元素:");
    for(i=0;i<M;i++){
        for(j=0;j<N;j++){
            scanf("%d",&a[i][j]);
        }
    }
    printf("输入矩阵B各元素:");
    for(i=0;i<M;i++){
        for(j=0;j<N;j++){
            scanf("%d",&b[i][j]);
        }
    }
    process(a,b);
    return 0;
}

2、设计一个函数在若干个数据中查找指定数据。
输入/输出实例
(1)输入若干个数据:12 54 32 65 76 23 43
输入要查找的数据:56
输出实例:数据56 没有找到
(2)输入要查找的数据 65
输出实例:数据65 已找到。

#include <stdio.h>

int main()
{
    int arr[50],i,n,toFind;
    char ch=' ';
    printf("输入若干个数据:");
    for(i=0;i<50&&ch!='\n';i++){
        scanf("%d",&arr[i]);
        ch=getchar();
    }
    if(i==50&&ch!='\n') printf("警告:50个以后的数将被忽略。\n");
    n=i;
    //for(i=0;i<n;i++) printf("[%d]",arr[i]); //debug
    printf("输入要查找的数据:");
    scanf("%d",&toFind);
    for(i=0;i<n;i++){
        if(arr[i]==toFind){
            printf("数据%d 已找到。\n",toFind);
            break;
        }
    }
    if(i==n) printf("数据%d 没有找到\n",toFind);
    return 0;
}

3、设计一个选择排序函数,实现对数据的排序,然后设计一个函数实现对顺序数据的快速查找。
输入/输出实例
输入数据:23 54 65 12 87 43 25 21
输出排序后的数据:12 21 23 25 43 54 65 87
数据要查找的数据:43
输出:数据43已找到
输入要查找的数据:98
输出:数据98没有找到

#include <stdio.h>
#define LEN 8
void cha(int which,int order,int arr[LEN]){ //which>=order
    int i,value=arr[which];
    for(i=which;i>order;i--) arr[i]=arr[i-1];
    arr[order]=value;
}
int findMin(int arr[LEN],int from,int to){
    int i,min,minOrder;
    for(i=from;i<=to;i++){
        if(i==from){
            min=arr[from];
            minOrder=from;
        }else{
            if(arr[i]<min){
                min=arr[i];
                minOrder=i;
            }
        }
    }
    return minOrder;
}
void pai(int arr[LEN]){
    int i;
    for(i=0;i<LEN-1;i++)
        cha(findMin(arr,i,LEN-1),i,arr);
}
int findValue(int value,int arr[LEN]){
    int i;
    for(i=0;i<LEN;i++){
        if(arr[i]==value) return 1;
        else if(arr[i]>value) return 0;
    }
    return 0;
}
int main()
{
    int arr[LEN],x,i;
    printf("输入数据:");
    for(i=0;i<LEN;i++)
        scanf("%d",&arr[i]);
    pai(arr);
    printf("排序后的数据:");
    for(i=0;i<LEN;i++)
        printf("%d ",arr[i]);
    printf("\n");
    for(i=1;i<=2;i++){
        printf("输入要查找的数据:");
        scanf("%d",&x);
        if(findValue(x,arr)) printf("数据%d已找到\n",x);
        else printf("数据%d没有找到\n",x);
    }
    return 0;
}

4、有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数

#include <stdio.h>
#include <string.h>
int main()
{
    char arr[3][81];
    int rst[3][5]={0},i,j; // {LETTER,letter,number,space,others}
    printf("Please input the article:\n");
    for(i=0;i<3;i++) gets(arr[i]);
    for(i=0;i<3;i++){
        for(j=0;arr[i][j];j++){
            if (arr[i][j]>='A' && arr[i][j]<='Z') rst[i][0]++;
            else if (arr[i][j]>='a' && arr[i][j]<='z') rst[i][1]++;
            else if (arr[i][j]==' ') rst[i][3]++;
            else if (arr[i][j]>='0' && arr[i][j]<='9') rst[i][2]++;
            else if (arr[i][j]!='\n') rst[i][4]++;
        }
    }
    for(i=0;i<3;i++){
        printf("#%d: %d LETTER(S), %d letter(s), %d number(s), %d space(s) and %d other(s).\n",i+1,rst[i][0],rst[i][1],rst[i][2],rst[i][3],rst[i][4]);
    }
    return 0;
}

1、字符串复制:有一个字符串,包括n个字符。写一个函数,将此字符串从第m个字符开始的全部字符复制成另一个字符串。要求在主函数输入字符串及m值并输出复制结果。

#include <stdio.h>
#include <string.h>
int main()
{
    char ors[51],nes[51];
    int m,n,i;
    printf("请输入字符串:");
    gets(ors);
    n=strlen(ors);
    do{
        printf("m=");
        scanf("%d",&m);
        if(m<1) printf("错误:该数不是正数,程序将要求您重新输入!\n");
        else if(m>n) printf("错误:超出原字符串长度,程序将要求您重新输入!\n");
    }while(m<1||m>n);
    for(i=m-1;ors[i];i++){
        nes[i-m+1]=ors[i];
    }
    puts(nes);
    return 0;
}

2、有一家公司,生产一种型号的产品,上半年各月的产量如表所示,每种型号的产品的单价如右表所示,编一个程序计算上半年的总产值。
第2题配图-表格

#include <stdio.h>

int main()
{
    int pro[6][5]={438,269,738,524,513,340,420,572,726,512,455,286,615,530,728,385,324,713,594,544,402,382,550,633,554,424,400,625,578,615};
    int pri[5]={500,950,1340,2270,2985},i,j,rst=0;
    for(i=0;i<6;i++){
        for(j=0;j<5;j++){
            rst+=pro[i][j]*pri[j];
        }
    }
    printf("Result: %d yuan.\n",rst);
    return 0;
}

3、某社区对所属N户居民进行月用电量统计,每隔50度用电量为一个统计区间,但当大于等于500度时为一个统计区间。编一程序,分析统计每个用电区间的居民户数。

#include <stdio.h>
#define N 10
int main()
{
    int arr[550/50]={0},i; //arr[0] stands for [0,50)
    float x;
    for(i=0;i<N;i++){
        printf("输入户%d用电量:",i+1);
        scanf("%f",&x);
        if(x<0){
            printf("错误:该数不是非负数,请重新输入此项。\n");
            i--;continue;
        }
        if(x>=550) x=500;
        arr[int(x)/50]++;
    }
    for(i=0;i<550/50;i++){
        if(50*i<500)
            printf("[%d,%d) %d\n",50*i,50*i+50,arr[i]);
        else
            printf("[%d,+∞) %d\n",50*i,arr[i]);
    }
    return 0;
}

4、已知10个常数42,65,80,74,36,44,28,65,94,72,编一个程序,采用插入排序法对其进行排序,并输出结果。

#include<stdio.h>

void cha(int which,int order,int arr[11]){ //which>order
    int i,value=arr[which];
    for(i=which;i>order;i--) arr[i]=arr[i-1];
    arr[order]=value;
}
void printArr(int arr[11]){
    int i;
    for(i=1;i<=10;i++) printf("%d\t",arr[i]);
}
int main(){
    int arr[11]={-1,42,65,80,74,36,44,28,65,94,72},i,j;

    printf("升序:");
    for(i=2;i<=10;i++){
        //printArr(arr);//debug
        for(j=1;j<i;j++){
            if(arr[i]<arr[j]){
                cha(i,j,arr);
                //printf("which=%d,order=%d\n",i,j); //debug
                break;
            }
        }
    }
    printf("\n");
    printArr(arr);

    printf("降序:");
    for(i=2;i<=10;i++){
        //printArr(arr);//debug
        for(j=1;j<i;j++){
            if(arr[i]>arr[j]){
                cha(i,j,arr);
                //printf("which=%d,order=%d\n",i,j); //debug
                break;
            }
        }
    }
    printf("\n");
    printArr(arr);

    return 0;
}

(此文系定时发布)

原发于 2016-12-08 23:33