• GG第四次作业


    填空题

    1. 给出下述程序的执行结果             

    #include <stdio.h>

    int a=4,b=5;

    int max(int a,int b)

    {

     int c;

     c=a>b?a:b;

     return c;

    }

    void main()

    {

     int a=6;

     printf("%d ",max(a,b));

    }

    2. 下面的函数invert的功能是将一个字符串的内容颠倒过来。(所有答案填写在此空内,答案间以空格隔开)

    void invert (char str [] )

    {

     int i,j,填空1______;

     for(i=0,j=strlen(str)填空2_______;i<j;i++,j--)

     {

      k=str[i];

      str[i]=str[j];

      str[j]=k;

     }

    }

        

    3. 写出下述程序的输出结果         

    #include <stdio.h>

    void main()

    {

             int a[] = {8,0,3,7,2,5}, i, j, t;

             i = 1;

             while ( i<6 )

             {

                 t = a[i];

                 j = i-1;

                 while( j>=0 && t>a[j] )

                {

                      a[j+1] = a[j];

                      j--;

                }

                a[j+1] = t;

                i++;

             }

            i = 0;

            while(i<5)

                 printf("%d,",a[i++]);

            printf("%d",a[i]);

    }

        

    4. 下面程序段的运行结果是           

    char ch[ ] = "600";

    int a, s = 0;

    for (a = 0; ch[a] >= 0&& ch[a] <= 9; a++)

        s = 10 * s + ch[a] - 0;

    printf("%d", s);

        

    5. 以下程序的运行结果是    

    #include<stdio.h>

    void main()

    {

     int a[10]={1,2,3,4,5,6,7,8,9,10};

     int k,s,i;

     float ave;

     for (k=s=i=0;i<10;i++)

     {

      if (a[i]%2!=0)

       continue;

      s+=a[i];

      k++;

     }

     if (k!=0)

     {

      ave=s/k;

      printf("%d,%.2f ",k,ave);

     }

    }

     选择题

    # 题目

    1. 下述对C语言字符数组的描述中错误的是          

    (A)  字符数组可以存放字符串

    (B)  字符数组的字符串可以整体输入,输出

    (C)  可以在赋值语句中通过赋值运算符"="对字符数组整体赋值

    (D)  不可以用关系运算符对字符数组中的字符串进行比较

       

    2. 有下面的程序段:

    char a[3], b[] = "China";

    a = b;

    printf("%s", a);

            

    (A)  运行后将输出China

    (B)  运行后将输出Ch

    (C)  运行后将输出Chi

    (D)  编译出错

    3. 下面程序的功能是将字符串s中所有的字符’c’删除。请选择填空。

    #include<stdio.h>

    main()

    {

     char s[80];

     int i,j;

     gets(s);

     for(i=j=0;s[i]!=;i++)

      if(s[i]!=c);

     s[j]=;

     puts(s);

    }

    (A)s[j++]=s[i];

    (B)s[++j]=s[i];

    (C)s[j]=s[i];j++

    (D)s[j]=s[i]

    4. 下面程序段的运行结果是。(其中#表示空格)

    char a[7]="abcdef",b[4]="ABC";

    strcpy(a,b);

    printf("%c",a[5]);

    (A)#

    (B)

    (C)e

    (D)f

    5. C语言中,对文件操作的一般步骤是        

    A. 打开文件->操作文件->关闭文件  B. 操作文件->修改文件->关闭文件

    C. 读写文件->打开文件->关闭文件  D. 读文件->写文件->关闭文件

       

    6. 下列语句中,将c定义为文件型指针的是        

    A.  FILE c;   B.  FILE *c;    C.  file c;   D.  file *c;

    7. 下列关于文件的结论中正确的是

    A.对文件的操作必须先关闭文件

    B.对文件的操作必须先打开文件

    C.对文件的操作顺序没有统一规定

    D.以上三个答案全部错误

    答案:

    填空题:

    1.6 2.k k=0 3.8,7,5,3,2,0 4.600 5.5,6.00

    选择题:

    1.C 2.D 3.A 4.D 5.A 6.B 7.B

    编程题:

    1. 删数问题

    【问题描述】输入一个高精度的大正整数SS最长可达240位),去掉其中任意N位数字后剩下的数字按原次序组成一个新的正整数S’。编程对给定的NS,寻找一种方案使得剩下的数字组成的新数S’最小。

    【输入形式】输入有两行:

    1.第一行是大整数S。其中S最长可达240位。

    2.第二行是整数NSN均以非0数字开头。

    【输出形式】输出有一行,是在S中删除N位后所得的最小数字S’。

    【样例输入1

    178543

    4

    【样例输出113

    【样例输入2

    1002

    1

    【样例输出2002

    【样例说明】样例1中输入整数S=178543N=4,要求在178543中删除4位,使剩下的数字最小。正确答案为S= 13。样例2中输入整数S1002N1,删完一位后S= 002,而不是2,即2之前的0也必须输出。

    【运行时限】程序一次运行的最长时间限制在15秒内,超出则认为程序错误。

    【评分标准】该题要求输出一个大整数的各位数字。结果完全正确得20分,每个测试点4分。上传C语言文件名为delete.c

    【算法提示】将整数看作字符串形式读入;删数时,从前往后寻找第一个比后一个数字大的数字,然后删除之,按照这种方法删除N个数字即得最小数字。

    2. 扩展字符

    【问题描述】

    编写一函数expand(s1,s2),用以将字符串s1中的缩记符号在字符串s2中扩展为等价的完整字符,例如将a-d扩展为abcd。该函数可以处理大小写字母和数字,并可以处理a-b-ca-z0-9-a-z等类似的情况。在main函数中测试该函数:从键盘输入包含缩记符号的字符串,然后调用该函数进行扩展,输出扩展结果。

    (教材 P63Exercise 3-3

    注意:

    待扩展字符串中有可能包含空格,例如:a-d x-z应扩展成:abcd xyz。所以读入待扩展字符串时,应能够读入包含空格的字符串。

    只要缩记符号-之后的字符比之前的字符的ASCII码值大,就要将它们之间的所有字符扩展出来,例如:Z-a之间的字符也要扩展出来;

    特殊情况:a-b-c将被扩展为:abca-a将被扩展为:a-a

    【输入形式】

    从键盘输入包含扩展符的字符串

    【输出形式】

    输出扩展后的字符串

    【输入样例】

    a-c-u-B

    【输出样例】

    abcdefghijklmnopqrstu-B

    【样例说明】

    扩展输入a-c-u为:abcdefghijklmnopqrstu,而Bu值小,所以无法扩展,直接输出。

    【评分标准】

    结果完全正确得20分,每个测试点4分,提交程序文件expand.c

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
     
    void expand(char s1[],char s2[])
    {
        int len=strlen(s1);
        int i,j=0,k;
        s2[0]=s1[0];
        for (i=1; i<len; i+=2)
            if (s1[i-1]<s1[i+1])
                for (k=1; k<=(s1[i+1]-s1[i-1]); k++)
                    s2[++j]=s1[i-1]+k;
            else
            {
                s2[++j]='-';
                s2[++j]=s1[i+1];
            }
        s2[++j]='';
        return;
    }
     
    void main()
    {
       char s1[100],s2[100];
       gets(s1);
       expand(s1,s2);
       printf("%s",s2);
       return;
    }

    3.

    4.文件拷贝2

    【问题描述】

    写一程序将一个文件fcopy.in拷贝至另一个文件fcopy.out, 其中在所拷贝的文件中, 多个连续空白符(包括空格符、制表符)只拷贝一个空格符, 其它字符不变。

    【输入形式】

    源文件名和目标文件名分别为fcopy.infcopy.out,程序将从当前目录下读取fcopy.in文件。

    【输出形式】

    fcopy.in文件内容拷贝至当前目录下的fcopy.out文件中。在所拷贝的文件中, 多个连续空白符(包括空格符、制表符)只拷贝一个空格符,若非空白符之间有一个制表符,则该制表符也要替换为空格符,其它字符不变。

    【输入样例】

    假如文件fcopy.in中内容如下:

    Alcatel        provides end-to-end solutions.

    【输出样例】

    输出文件fcopy.out中内容为:

    Alcatel provides end-to-end solutions.

    【样例说明】

    将文件fcopy.in拷贝到fcopy.out,同时做适当的转换。

    【评分标准】

    其中在所拷贝的文件中, 多个连续空白符(包括空格符、制表符)只拷贝一个空格符,其它字符不变,完全符合要求得20分,每个测试点4分。提交程序名为copy.c

    #include<stdio.h>
    #include<stdlib.h>
    
    int main()
    {
        char s[100000];
        int i=0;
        FILE*in,*out;
        in=fopen("fcopy.in","r");
        out=fopen("fcopy.out","w");
        while (!feof(in)) fscanf(in,"%c",&s[i++]);
        int j=0;
        for (; j<i; j++)
            if (s[j]==' ')
            {
                if (s[j-1]!=' ') fprintf(out,"%c",s[j]);
            }
            else if (s[j]=='	')
            {
                if (s[j-1]!='	' && s[j+1]!='	' && s[j-1]!=' ' && s[j+1]!=' ')
                    fprintf(out,"%c",s[j]);
            }
            else fprintf(out,"%c",s[j]);
        fclose(in); fclose(out);
        return 0;
    }

    5.表达式计算(支持空格,连乘,连除)(选做题,不计分)

    【问题描述】

    从标准输入中读入一个整数算术运算表达式,如5 - 1 * 2 * 3 + 12 / 2 / 2  = 。计算表达式结果,并输出。

    要求:

    1、表达式运算符只有+-*/,表达式末尾的’=’字符表示表达式输入结束,表达式中可能会出现空格;

    2、表达式中不含圆括号,不会出现错误的表达式;

    3、出现除号/时,以整数相除进行运算,结果仍为整数,例如:5/3结果应为1

    【输入形式】

    在控制台中输入一个以=’结尾的整数算术运算表达式。

    【输出形式】

    向控制台输出计算结果(为整数)。

    【样例1输入】

    5 - 1 * 2 * 3 + 12 / 2 / 2  =

    【样例1输出】

    2

    【样例2输入】

    500 =

    【样例2输出】

    500

    【样例1说明】

    输入的表达式为5 - 1 * 2 * 3 + 12 / 2 / 2 =,按照整数运算规则,计算结果为2,故输出2

    【样例2说明】

    输入的表达式为500 = ,没有运算符参与运算,故直接输出500

    算法之一提示:

    1、可以利用gets函数,读取整行表达式;

    2、对于空格,可以考虑首先去除表达式中的所有空格

    3、可以设一计数器用来记录已读取、但未参加运算的运算符的个数,根据该计数器来判断如何进行运算;

    4、可以设计一函数:实现二元整数算术运算。

    【评分标准】

    该题要求输出整数表达式的计算结果,共有5个测试点。上传C语言文件名为example1c.c

    分析:这道题我想起了后缀表达式……但是这里并没有学到栈。所以就写了个简单的程序。

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<math.h>
     4 #include<string.h>
     5 
     6 int main()
     7 {
     8     int a1,a2,a3;
     9     char op1,op2,op3;
    10     //为了保证计算顺序,在最开始加上一个0+
    11     a1=0;
    12     op1='+';
    13     while (op1!='=')
    14     {
    15         scanf("%d %c",&a2,&op2);
    16         //一口气把乘除计算完毕
    17         while (op2=='*' || op2=='/')
    18         {
    19             scanf("%d %c",&a3,&op3);
    20             if (op2=='*') a2*=a3;
    21             else if (op2=='/') a2/=a3;
    22             op2=op3;
    23         }
    24         if (op1=='+') a1+=a2;
    25         else if (op1=='-') a1-=a2;
    26         op1 = op2;
    27     }
    28     printf("%d",a1);
    29     return 0;
    30 }
  • 相关阅读:
    Linux下Vim简单使用
    使用scp命令在Windows和Linux之间拷贝文件
    Linux下使用Crontab实现定时任务
    UOS商店提取软件包离线安装的解决方法
    【50条常用MySQL语句】如果这50条sql语句你都不熟,你别说你会MySQL【建议收藏】
    elasticsearch 7.5.0 windows版本包,已集成ik分词器和pinyin分词器
    Ubuntu安装配置redis
    精讲Mysql各种高难度Sql编写(一)
    Ubuntu离线安装SVN1.13.0(步骤+所需deb安装包)【测试通过】
    Typora提示The beta version of typora is expired, please download and install a newer version.解决办法
  • 原文地址:https://www.cnblogs.com/Shymuel/p/8520509.html
Copyright © 2020-2023  润新知