MENU

C语言实验+应用作业 9

2017 年 11 月 23 日 • 日常作业

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

1、编写一函数 int lenstr( char *str),测量从主函数中输入的字符串的长度。

#include <stdio.h>

int lenstr( char *str){
    int i;
    for(i=0;str[i];i++) ;
    return i;
}
int main()
{
    char str[51];
    scanf("%s",str);
    printf("%d\n",lenstr(str));
    return 0;
}

2、编写一函数void verstring(char *str)将从键盘上输入的任意字符串逆序输出。

#include <stdio.h>

int lenstr( char *str){
    int i;
    for(i=0;str[i];i++) ;
    return i;
}
void verstring(char *str){
    int i,len=lenstr(str);
    for(i=len-1;i>=0;i--)
        putchar(str[i]);
}
int main()
{
    char str[51];
    scanf("%s",str);
    verstring(str);
    printf("\n");
    return 0;
}

5、写一函数,用“起泡法”对输入的10个字符按由小到大顺序排序。

#include <stdio.h>

void buSort(char str[10]){
    int i,j;
    char tmp;
    for(i=10-1;i>0;i--){
        for(j=1;j<=i;j++){
            if(str[j-1]>str[j]){
                tmp=str[j];
                str[j]=str[j-1];
                str[j-1]=tmp;
            }
        }
    }
}
int main()
{
    char str[10];
    int i;
    for(i=0;i<10;i++)
        scanf("%c",&str[i]);
    buSort(str);
    for(i=0;i<10;i++)
        printf("%c\t",str[i]);
    printf("\n");
    return 0;
}

6、定义一个函数,功能是计算n个学生的成绩中,高于平均成绩的人数,并作为函数值。用主函数来调用它,统计50个学生成绩中,高于平均成绩的有多少人?

#include <stdio.h>

int overAvg(float score[],int n){
    int i,over=0;
    float sum,avg;
    for(i=0;i<n;i++)
        sum+=score[i];
    avg=sum/n;
    for(i=0;i<n;i++)
        if(score[i]>avg) over++;
    return over;
}
int main()
{
    float score[50]; //这题目前后矛盾啊,前面说 n,后面说 50 个学生
    int n,i;
    do{
        printf("n=");
        scanf("%d",&n);
        if(n<1) printf("错误:输入的不是正数,程序将要求您重新输入!");
        else if(n>50) printf("错误:程序只支持最多到100名学生,将要求您重新输入!");
    }while(n<1||n>50);
    for(i=0;i<n;i++){
        printf("输入学生%d的成绩:",i+1);
        scanf("%f",&score[i]);
        if(score[i]<0||score[i]>50){
            printf("错误:越界,请重新输入该生成绩!");
            i--;
        }
    }
    printf("高于平均成绩的有%d人。\n",overAvg(score,n));
    return 0;
}

1、自然数对是指两个自然数的和与差都是平方数,如8和17的和8+17=25与其差17-8=9都是平方数,则称8和17是自然数对(8,17)。假定(A,B)与(B,A)是同一个自然数对且假定A>=B,求所有小于或等于100(即:A<=100,B<=100,A<>B,A和B均不为0)的自然数对中B之和。

#include <stdio.h>
#include <math.h>
int is_sqnum(int n){
    float flSqr=sqrt(n);
    int inSqr=flSqr;
    if(flSqr==inSqr) return 1;
    else return 0;
}
int is_couple(int a,int b){
    int tmp;
    if(a<b){
        a=tmp;
        a=b;
        b=tmp;
    }
    if(is_sqnum(a+b)&&is_sqnum(a-b)) return 1;
    else return 0;
}
int main()
{
    int i,j,iSum=0,jSum=0;
    for(i=1;i<=100;i++){
        for(j=1;j<=i;j++){
            if(is_couple(i,j) && i!=j){
                //printf("(%d,%d)\t",i,j);
                iSum+=i;
                jSum+=j;
            }
        }
    }
    printf("%d\n",jSum);
    return 0;
}

2、某些分数的分子和分母都是二位正整数的真分数具有下列特点:
如果将该分数的分子的两位数字相加作分子,而将该分数的分母的两位数字相加作分母,得到的新分子跟原分子相等。例如,63/84=(6+3)/(8+4)。试求所有具有这种特点的真分子(非约简真分数)的分子与分母之和的和。

#include <stdio.h>

int chaijia(int n){ //如令 n=63,返回 6+3
    return (n/10) + (n%10);
}
int main()
{
    int fenzi,fenmu,sum=0;
    for(fenmu=10;fenmu<=99;fenmu++){
        for(fenzi=10;fenzi<fenmu;fenzi++){
            if(fenzi*chaijia(fenmu)==fenmu*chaijia(fenzi)){ //交叉相乘
                //printf("%d/%d\t",fenzi,fenmu);
                sum+=fenzi+fenmu;
            }
        }
    }
    printf("%d\n",sum);
    return 0;
}

3、请编写函数void fun(int x,int pp[],int *n),它的功能是:求出能整除x且不是偶数的各整数,按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。

#include <stdio.h>
//而且应该是在正数范围内讨论,要不然负数可以小到无穷去呢,当然一定要排除0(0是偶数)
void fun(int x,int pp[],int *n){
    int i,a;
    for(a=1,i=0;a<=x;a+=2){
        if(x%a==0){
            pp[i]=a;
            i++;
        }
    }
    *n=i;
}
int main(){
    int arr[10],n,i; //以此为例
    fun(50,arr,&n); //以此为例
    for(i=0;i<n;i++)
        printf("%d\t",arr[i]);
    printf("\n",n);
    return 0;
}

4、请编写一个函数void fun(char *tt,int pp[]),统计在tt字符中"a"到"z"26各字母各自出现的次数,并依次放在pp所指的数组中。

#include <stdio.h>

void fun(char *tt,int pp[]){
    int i;
    for(i=0;i<26;i++)
        pp[i]=0;
    for(i=0;tt[i];i++){
        if(tt[i]>='a' && tt[i]<='z')
            pp[tt[i]-'a']++;
    }
}
int main(){
    char str[]="the quick brown fox jumps over a lazy dog"; //以此为例
    int times[26],i;
    fun(str,times);
    for(i=0;i<26;i++){
        printf("%c:%d\t",'a'+i,times[i]);
    }
    printf("\n");
    return 0;
}

原发于 2016-12-15 10:22