跳转至

编程题

第四章 字符串和格式化输入/输出 编程练习题

  1. 编写一个程序,提示用户输入名和姓,然后以 “名,姓”的格式打印出来。

    #include <stdio.h>
    
    int main(void)
    {
        char lname[20],fname[20];
        printf("please input your first name : ");
        scanf("%s",&fname);
        printf("please input your last name : ");
        scanf("%s",&lname);
        printf("my name is : %s,%s \n",fname,lname);
        return 0;
    }
    

  2. 编写一个程序,提示用户输入名和姓,并执行以下操作:
    a. 打印名和姓,包括双引号
    b. 在宽度为20的字段右端打印名和姓,包括双引号
    c. 在宽度为20的字段左端打印名和姓,包括双引号
    d. 在比姓名宽度宽3的字段中打印名和姓

    #include <stdio.h>
    #include <string.h>
    int main(void)
    {
        char fname[30],lname[30];
        printf("please input your name : ");
        scanf("%s %s",&fname,&lname);
        printf("this is a : \"%s %s\" \n",fname,lname);
        printf("this is b : \"%20s %20s\" \n",fname,lname);
        printf("this is c : \"%-20s %-20s\" \n",fname,lname);
        printf("this is d : %*s %*s \n",strlen(fname)+3,fname,strlen(lname)+3,lname);
        return 0;
    }
    

  3. 编写一个程序,读取一个浮点数,首先以小数点记数法,然后以指数记数法打印。用下面的格式输出(系统不同,指数记数法显示的位数可能不同)
    a. 输入21.3 或2.1e+001
    b. 输入+21.290 或 2.129E+001

    #include <stdio.h>
    
    int main(void)
    {
        float fnum;
        printf("please input a float number : ");
        scanf("%f",&fnum);
        printf("a. float is %.1f ; e usage is : %.1e \n",fnum,fnum);
        printf("b. float is %.3f ; e usage is : %.3e \n",fnum,fnum);
        return 0;
    }
    

  4. 编写一个程序,提示用户输入身高(单位;英寸)和姓名,然后以下面的格式显示用户刚输入的信息:
    Dadney,you are 6.208 feet tall
    使用float类型,并用/作为除号,如果愿意,可以要求用户以厘米为单位输入身高,并以米为单位显示出来。
    #include <stdio.h>
    
    int main(void)
    {
        float cm,m;
        char name[20];
        printf("please input your name : ");
        scanf("%s",name);
        printf("please input your height : ");
        scanf("%f",&cm);
        m = cm/100;
        printf("%s , you are %.f cm = %.2f m tall \n",name,cm,m);
        return 0;
    }
    
  5. 编写一个程序,提示用户输入以兆位每秒(Mb/s)为单位的下载速度和以兆字节(MB)为单位的文件大小。程序中应计算文件的下载时间。注意,这里1字节等于8位。使用float类型,并用/作为除号。该程序要以下面的格式打印 3 个变量的值(下载速度、文件大小和下载时间),显示小数点后面两位数字:
    At 18.12 megabits per second, a file of 2.20 megabytes
    downloads in 0.97 seconds.
    #include <stdio.h>
    
    int main(void)
    {
        float megabits,megabytes;
        printf("please input megabits : ");
        scanf("%f",&megabits);
        printf("please input megabytes : ");
        scanf("%f",&megabytes);
        float time = 8 * megabytes / megabits;
        printf("At %.2f megabits per second, a file of %.2f megabytes \n",megabits,megabytes);
        printf("downloads in %.2f seconds.\n",time);
        return 0;
    }
    
  6. 编写一个程序,先提示用户输入名,然后提示用户输入姓。在一行打印用户输入的名和姓,下一行分别打印名和姓的字母数。字母数要与相应名和姓的结尾对齐,如下所示:
    1
    2
    3
    4
    5
    Melissa Honeybee
          7        8
    接下来,再打印相同的信息,但是字母个数与相应名和姓的开头对齐,如下所示: 
    Melissa Honeybee
    7       8
    

#include <stdio.h>
#include <string.h>
int main(void)
{
    char lname[30],fname[30];
    printf("please input your first name : ");
    scanf("%s",fname);
    printf("please input your last name : ");
    scanf("%s",lname);
    printf("%s %s\n",fname,lname);
    int fname_len = strlen(fname);
    int lname_len = strlen(lname);
    printf("%*d %*d \n",fname_len,fname_len,lname_len,lname_len);
    printf("%*d %*d \n",-fname_len,fname_len,-lname_len,lname_len);
    return 0;
}
7. 编写一个程序,将一个double类型的变量设置为1.0/3.0,一个float类型的变量设置为1.0/3.0。分别显示两次计算的结果各3次:一次显示小数点后面6位数字;一次显示小数点后面12位数字;一次显示小数点后面16位数字。程序中要包含float.h头文件,并显示FLT_DIG和DBL_DIG的值。1.0/3.0的值与这些值一致吗?
#include <stdio.h>
#include <float.h>

int main(void)
{
    double num_01 = 1.0/3.0;
    float num_02 = 1.0/3.0;
    printf("No.1 num_01 = %.6f ; num_02 = %.6f \n",num_01,num_02);
    printf("No.2 num_01 = %.12f ; num_02 = %.12f \n",num_01,num_02);
    printf("No.3 num_01 = %.16f ; num_02 = %.16f \n",num_01,num_02);
    printf("FLT_DIG  = %d ; DBL_DIG = %d \n",FLT_DIG,DBL_DIG);
    return 0;
}

  1. 编写一个程序,提示用户输入旅行的里程和消耗的汽油量。然后计算并显示消耗每加仑汽油行驶的英里数,显示小数点后面一位数字。接下来,使用1加仑大约3.785升,1英里大约为1.609千米,把单位是英里/加仑的值转换为升/100公里(欧洲通用的燃料消耗表示法),并显示结果,显示小数点后面 1 位数字。注意,美国采用的方案测量消耗单位燃料的行程(值越大越好),而欧洲则采用单位距离消耗的燃料测量方案(值越低越好)。使用#define 创建符号常量或使用 const 限定符创建变量来表示两个转换系数。
    #include <stdio.h>
    
    const float L_Per_gallon = 3.785;
    const float km_Per_Mile = 1.609;
    
    int main(void)
    {
        float jouney_len,oil_vol;
        printf("please input your jouney length : ");
        scanf("%f",&jouney_len);
        printf("please input your oil : ");
        scanf("%f",&oil_vol);
        printf("oil_vol / jouney_len = %.f / %.f = %.1f \n",oil_vol,jouney_len,oil_vol/jouney_len);
        printf("transfer : oil_vol / jouney_len = %.f / %.f = %.1f \n",oil_vol*L_Per_gallon,jouney_len*km_Per_Mile,
                oil_vol*L_Per_gallon/(jouney_len*km_Per_Mile));
    
        return 0;
    }