MENU

C语言实验+应用作业 4

2017 年 11 月 23 日 • 日常作业

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

编程题1
输入整数x和a,计算并输出下列分段函数f(x)的值(保留2位小数),请调用log函数求自然对数,调用fabs函数求绝对值。
(公式懒得打了)
输入输出示例
第一次运行
Enter a and x:5 6
a=5,f(6)=0.24
第二次运行
Enter a and x:5 5
a=5,f(5)=0.00

#include<stdio.h>
#include<math.h>
int main(){
    int a,x;
    float y;
    printf("Enter a and x: ");
    scanf("%d%d",&a,&x);
    if (abs(x)==a) y=0;
    else y=log(abs((float)(a+x)/(float)(a-x))) / (2.0*a);
    printf("a=%d,f(%d)=%.2f\n",a,x,y);
    return 0;
}

编程题2
从键盘输入一个整数,若大于等于0,输出提示信息“is positive”,否则输出“is negative”。
输入输出示例
第一次运行
Input a :5
5 is positive
第二次运行
Input a :0
0 is positive
第三次运行
Input a :-3
-3 is negative

#include<stdio.h>

int main(){
    int a;
    printf("Input a: ");
    scanf("%d",&a);
    if(a>=0) printf("%d is positive\n",a);
    else printf("%d is negative\n",a);
    return 0;
}

编程题3
输入a、b、c三个整数,输出最大数。
输入输出示例
第一次运行
Enter a,b,c:1,5,9
the max number is:9
第二次运行
Enter a,b,c:9,5,1
the max number is:9
第三次运行
Enter a,b,c:1,9, 5
the max number is:9

#include<stdio.h>

int main(){
    int a,b,c;
    printf("Enter a,b,c: ");
    scanf("%d,%d,%d",&a,&b,&c);
    int max=a;
    if(b>max) max=b;
    if(c>max) max=c;
    printf("the max number is: %d\n",max);
    return 0;
}

编程题4(选做)
一个工人的月工资按如下方法计算:在正常工作时间内每小时为5元,如果超出正常工作时间,则在超过的时间内每小时4元。其中,每月正常工作时间为160小时。编制一个程序,计算并输出一个工人的工资。其中月工作时间从键盘输入。
输入输出示例
第一次运行
input t:150
p=750
第二次运行
input t:200
p=960
第三次运行
input t:160
p=800

#include<stdio.h>

int main(){
    int t,p;
    printf("input t: ");
    scanf("%d",&t);
    if (t<0) printf("Input error!");
    else{
        if (t<=160) p=t*5;
        else p=160*5+(t-160)*4;
        printf("p=%d\n",p);
    }
    return 0;
}

编程题5(选做)
编写一个程序,要求用户输入一个两位的整数,然后显示这个数的英文单词。
输入输出示例
第一次运行
Enter a two-digit number:35
You entered the number thirty-five
第二次运行
Enter a two-digit number:12
You entered the number twelve
提示:把数分解为两个数字。用一个switch语句显示第一位数字对应的单词(“twenty”、“thirty”等),用第二个switch语句显示第二位数字对应的单词。不要忘记11~19的数有特殊处理要求。

#include<stdio.h>

void printRa(int n){
    switch(n){
        case 0:printf("");break;
        case 1:printf("one");break;
        case 2:printf("two");break;
        case 3:printf("three");break;
        case 4:printf("four");break;
        case 5:printf("five");break;
        case 6:printf("six");break;
        case 7:printf("seven");break;
        case 8:printf("eight");break;
        case 9:printf("nine");
    }
}
void printSu(int n){
    switch(n){
        case 1:printf("");break;
        case 2:printf("twent");break;
        case 3:printf("thirt");break;
        case 4:printf("fort");break;
        case 5:printf("fift");break;
        case 6:printf("sixt");break;
        case 7:printf("sevent");break;
        case 8:printf("eight");break;
        case 9:printf("nint");
    }
}
int main(){
    int n;
    printf("Enter a two-digit number: ");
    scanf("%d",&n);
    if(n>=10&&n<=99){
        int l2=n/10,l1=n%10;
        printf("You entered the number ");
        switch(l2){
            case 1:
                switch(l1){
                    case 0:printf("ten");break;
                    case 1:printf("eleven");break;
                    case 2:printf("twelve");break;
                    case 3:printSu(l1);printf("een");break;
                    case 4:printf("fourteen");break;
                    case 5:
                    case 6:
                    case 7:
                    case 8:
                    case 9:printSu(l1);printf("een");break;
                }
                break;
            default:
                printSu(l2);printf("y");
                if(l1!=0) printf("-");printRa(l1);
        }
        printf("\n");
    }else{
        printf("Input error!\n");
    }
    return 0;
}

1、请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。

#include<stdio.h>

//Mon
//Tues
//Wed
//Thur
//Fri
//Sat
//Sun
int main(){
    char a,b;
    scanf("%c",&a);scanf("%*c");
    if(a>='a'&&a<='z') a=a-32; //转换成大写
    if(a>='A'&&a<='Z'){
        switch(a){
            case 'M':printf("Monday 星期一");break;
            case 'T':
                //Tues or Thur
                scanf("%c",&b);
                if(b=='u'||b=='U') printf("Tuesday 星期二");
                else if(b=='h'||b=='H') printf("Thursday 星期四");
                else printf("Input error!");
                break;
            case 'W':printf("Wednesday 星期三");break;
            case 'F':printf("Friday 星期五");break;
            case 'S':
                //Sat or Sun
                scanf("%c",&b);
                if(b=='a'||b=='A') printf("Saturday 星期六");
                else if(b=='u'||b=='U') printf("Sunday 星期天");
                else printf("Input error!");
                break;
            default:printf("Input error!");
        }
    }else{
        printf("Input error!");    
    }
    printf("\n");
    return 0;
}

2、编程证明实现一个偶数总能表示为两个素数之和。

#include<stdio.h>

int is_prime(int n){
    if(n<2) return 0;
    int i;
    for(i=2;i*i<=n;i++)
        if(n%i==0) return 0;
    return 1;
}
int main(){
    int n,a,b;
    printf("请输入一个偶数:");
    scanf("%d",&n);
    if(n==0){
        printf("谁说一个偶数总能表示为两个素数之和啦?0是偶数,但是0就不行!\n");
    }else if(n==2){
        printf("谁说一个偶数总能表示为两个素数之和啦?2是偶数,但是2就不行!\n别说2=1+1,因为1就不是素数(也不是合数)!\n");
    }else if(n>=0 && n%2==0){
        //我假装“偶数”应该大于等于4好了
        for(a=2;a<=n/2;a++){
            b=n-a;
            if(is_prime(a)&&is_prime(b)) break;
        }
        printf("可以找得 %d=%d+%d。\n",n,a,b);
    }else if(n>=0){
        printf("错误:您输入的不是偶数,是奇数。\n");
    }else{
        printf("错误:数学中说的“偶数”是在自然数范畴内讨论的,请不要输入负数。\n");
    }
    return 0;
}

3、从键盘上输入一个3*4的整数矩阵,要求输出其最大元素的值,以及它的行号和列号。

#include<stdio.h>

int main(){
    int arr[3][4];
    int i,j;
    int max,iMax=0,jMax=0;
    printf("请输入此3×4矩阵的所有元素:\n");
    for(i=0;i<3;i++){
        for(j=0;j<4;j++){
            scanf("%d",&arr[i][j]);
            if (i==0&&j==0) max=arr[i][j];
            if (arr[i][j]>max){
                max=arr[i][j];
                iMax=i;jMax=j;
            }
        }
    }
    printf("最大元素是 %d,位于第%d行第%d列。\n",max,iMax+1,jMax+1);
    return 0;
}

4、采用二维数组输入多个学生五门课的成绩,分别求出每个学生的平均成绩和每门课的平均成绩。

#include<stdio.h>

int main(){
    int arr[100+1][5+1],firLen=0;
    int i,j,sum;
    do{
        printf("请输入学生数:");
        scanf("%d",&firLen);
        if(firLen<1) printf("错误:学生数输入错误,程序将要求您重新输入!\n");
        else if(firLen>100) printf("错误:本程序暂时只支持最多100名学生,程序将要求您重新输入!\n");
    }while(firLen<1||firLen>100);
    for(i=0;i<firLen;i++) arr[i][5]=0;//arr[][5]储存该生成绩总和
    for(j=0;j<5;j++) arr[100][j]=0;//arr[100][]储存该课成绩总和
    printf("---\n");
    for (i=0;i<firLen;i++){
        printf("请输入学生%d的各科(五门)成绩:",i+1);
        for(j=0;j<5;j++){
            scanf("%d",&arr[i][j]);
            arr[i][5]+=arr[i][j];
            arr[100][j]+=arr[i][j];
        }
    }
    printf("---");
    for (i=0;i<firLen;i++) printf("\n学生%d的平均成绩:%.3f",i+1,arr[i][5]/5.0);
    printf("\n---");
    for(j=0;j<5;j++) printf("\n第%d门课的平均成绩:%.3f",j+1,arr[100][j]/(float)firLen);
    printf("\n");
    return 0;
}

原发于 2016-12-02 17:04