哈工大 sse C语言 困难

*对输入的行和字符进行计数。在计算机中,一行是以一个回车符\n作为行结束标记的,这样在程序中可以通过搜索\n对行进行计数。在UNIX操作系统中,一般有ctrl+d作为文件结束标记,其字符码为-1.当输入ctrl+d时表示文件输入结束,停止计数。在C语言中,以EOF(End Of File)作为文件结束标志
**输出格式要求:"chars=%d, lines=%d\n"
#include <stdio.h>
#include <string.h>
void main(){
    char a;
    int cn=0,ln=0;

    while((a=getchar())!=EOF){
        cn++;
        if(a == '\n'){
            ln++;
        }
    }
    printf("chars=%d, lines=%d\n",cn,ln);
}

Q499.(10分数, 语言: C)实现验证输入的必须全部是数字0~9构成的字符串,利用函数checkNumber验证输入的字符串中的每个字符是否全为数字0~9之一,如果是则返回1,否则返回0。然后利用函数getNumberString容错地读取一个全由数字0~9组成的数字字符串。要求编写完整的程序测试运行你所写的函数。
输入语句为:"请输入一个全为数字的字符串:\n“
输出语句为:"你输入的正确的数字串为:%s\n"
程序的运行示例如下:
请输入一个全为数字的字符串: abc
请输入一个全为数字的字符串:a123
请输入一个全为数字的字符串:1a23
请输入一个全为数字的字符串:123
你输入的正确的数字串为:123
#include <stdio.h>
#define N 30
int checkNumber(char a[]);
void getNumberString(char a[]);
void main(){
    char a[N];
    getNumberString(a);
    printf("你输入的正确的数字串为:%s\n",a);
}
int checkNumber(char a[]){
    for(int i=0;a[i]!='\0';i++){
        if(!(a[i]>='0'&&a[i]<='9')){
            return 0;
        }
    }
    return 1;
}
void getNumberString(char a[]){
    do{
        printf("请输入一个全为数字的字符串:\n");
        gets(a);
    }while(checkNumber(a)!=1);
    
} 
Q402.(10分数, 语言: C)矩阵乘法。编写一个C函数实现M行K列矩阵与K行N列的矩阵的乘积。设A为M行K列的矩阵,B为K行N列的矩阵,则C=A×B的积为M行N列的矩阵。
矩阵乘法的规则是:设A[m,k],B[k,n],则C[m,n]=A[m,k]×B[k,n],其中:
\(C[i,j]=\sum_{l=1}^k A[i,l] \times B[l,j]\), (i=1,2,…,m   j=1,2,…,n)
**输出格式要求:"\t%d" "array A=\n" "array B=\n" "array C=\n"
程序运行示例如下:
array A=
	1	2	3
	4	5	6
array B=
	1	1
	0	2
	2	0
array C=
	7	5
        16     14
#include <stdio.h>

void main(){
    static int a[2][3]={1,2,3,4,5,6};
    static int b[3][2]={1,1,0,2,2,0};
    int c[2][2]={0};


    for(int i=0;i<2;i++){
        for(int j=0;j<2;j++){
            for(int k=0;k<3;k++){
                c[i][j] += a[i][k] * b [k][j];
            }
        }
    }

    printf("array A=\n");
    for(int i=0;i<2;i++){
        for(int j=0;j<3;j++){
            printf("\t%d",a[i][j]);
        }
        printf("\n");
    } 
    printf("array B=\n");
    for(int i=0;i<3;i++){
        for(int j=0;j<2;j++){
            printf("\t%d",b[i][j]);
        }
        printf("\n");
    }
    
    printf("array C=\n");
    for(int i=0;i<2;i++){
        for(int j=0;j<2;j++){
            printf("\t%d",c[i][j]);
        }
        printf("\n");
    }
}

Q429.(10分数, 语言: C)满足特异条件的数列。输入m和n(20≥m≥n≥0),求出满足以下方程式的正整数数列i1,i2,…,in,使得i1+i2+…+in=m,且i1≥i2≥…≥in。例如:
当n=4,m=8时,将得到如下5个数列:
5 1 1 1  4 2 1 1  3 3 1 1  3 2 2 1  2 2 2 2
**输入格式要求:"%d" 提示信息:"Please enter requried terms (<=10):"
                               "                             their sum:"
**输出格式要求:"There are following possible series:\n" "[%d]:" "%d"
程序运行示例1:
Please enter requried terms (<=10): 4 8
                            their sum:There are following possible series:
[1]:5111
[2]:4211
[3]:3311
[4]:3221
[5]:2222
程序运行示例2:
Please enter requried terms (<=10):4 10
                             their sum:There are following possible series:
[1]:7 1 1 1
[2]:6 2 1 1
[3]:5 3 1 1
[4]:4 4 1 1
[5]:5 2 2 1
[6]:4 3 2 1
[7]:3 3 3 1
[8]:4 2 2 2
[9]:3 3 2 2
#include <stdio.h>
#define NUM 10 //允许分解的最大元素数量
int i[NUM];//记录分解出的数值的数组
void main(){
    int n,total,flag,count=0;
    int sum=0;//记录从后向前k个元素的和
    int k=n;//从后向前正在处理的元素的下标
    i[n]=1;//将最后一个元素的值置为1作为初始值
    printf("Please enter requried terms (<=10):");
    scanf("%d %d",&n,&total);
    printf("                             their sum:");
    printf("There are following possible series:\n");

    while(1){
        
        if(sum+i[k] < total){//后k位的和小于total
            if(k<=1){//计算第一个元素并标记
                i[1] = total -sum;
                flag=1;
            }else{//置第k位的值为k+1
                sum = sum + i[k];
                k--;
                i[k] = i[k+1];
                continue;
            }
        }else if(sum + i[k] > total || k!=1)//若和已超过total或者不是第一个元素
        {   k++;//k向后回退一个元素
            sum-=i[k];//减去回退的值
            flag=0;
        }else{
            flag = 1;
        }

        if(flag){
            printf("[%d]:",++count);
            for(flag=1;flag<=n;++flag){
                printf("%d",i[flag]);
            }
            printf("\n");
        }

        if(++k>n){//k向后回退一个元素后判断是否已经退出最后一个元素
            break;
        }
        sum -=i[k];
        i[k]++;//试验下一个分解
    }

    printf("%d");

}

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值