2006
01-06








1、输入n个整数,将其中最小者与第一个数对调,最大
者与最后一个数对调。试编程(请使用动态内存分配
方法)。
2、设有一数列,包含10个数,已按升序排列。现要求编
一程序,它能够把从指定位置开始的n个数按逆序重新
排列并输出新的完整数列(进行逆序处理时要求使用
指针方法)。例如,原数列为1,2,3,4,5,6,7,
8,9,10,若要求把从第4个数开始的5个数按逆序重
新排列,则新数列为1,2,3,8,7,6,5,4,9,10。


3、输入一个字符串,然后按下面要求输出一个新的字
符串。新串是在原串中的每两个字符之间分别插入1、
3、5,……个字符’#’形成的。例如,原串为”abcd”,
则新串为”a#b###c#####d”。如果原串中只有一个字
符,则新串与原串相同。


4、将n个字符串排序,排序规则如下:“参照子串”越小的
字符串越靠前(“参照子串”指的是原串后半截的逆序结
果)。例如,输入3个字符串“Kitty”、“cake”和”Z”,
因为它们的参照子串分别是”ytt”、“ek” 和”Z”,而
“Z” <“ek” < “ytt”,故最后应输出:
Z
cake
Kitty


5、将一个字符串中的元音字母复制到另一字符串,然后
输出“另一字符串”。
6、编写程序,判断两个正整数的最大公约数是不是素数。
7、用递归法将一个非负整数n转换成字符串。例如,输入
563,应输出字符串“563”。n的位数不确定,可以是任
意位数的整数。
8、输入一行字符,将此字符串中最长的单词输出。如果
最长的单词有多个,需将它们全部输出。


9、输入两个整数,求它们相除的余数。用带参的宏实现。


10、请创建一个文件,用于存放10个学生5门课的成绩。然
后读入这些成绩,并分别用函数
1)求每个学生的平均分;
2)求每门课的平均分;
3)找出最高分数所对应的学生和课程;
4)求平均分方差                                  ,    为某一学生的平均分。 


11、已知两个M×N的矩阵A和B的任一元素均为两位数的
整数。现将它们合并形成一个M×N的新矩阵C。合并
的方式为:将Aij(1   i   M,1   j   N)的十位和个位
数依次放在Cij的十位和千位上,将Bij的十位和个位
数依次放在Cij的个位和百位上。求矩阵C。要求:所
有的输入、输出均用文件实现。


12、请利用指向结构体的指针编写一程序,从文件in.txt中
读入5个学生的学号、姓名、语文、数学和英语成绩,
计算每个学生的平均成绩并将成绩表(成绩表由原来
的各项数据和平均成绩组成)输出到二进制文件
out.dat中。请合理运用模块化原则。


13、请编程建立一个双向循环链表,链表结点中的数据通
过键盘输入,当输入数据为-1时,表示输入结束。
然后输出该链表。


14、有一个带有头结点的环形链表,链表中每个结点包含
学号、成绩和指针域。请编写程序,从链表中删去学
号为n的结点,n由键盘输入。


C语言习题》有 18 条评论

  1. VC爱好者 说:

    你的老师布置的作业吗?

  2. 江南以南 说:

    给大家找的练习的题目

    要有点数据结构的基础哦!!!!!!!!

  3. xuegang 说:

    先谢了,

      能过做练习才知道自己懂多少

    不过有好多不会,

     

  4. hqf199 说:

    有答案码??

  5. t21yxm 说:

    有答案没

  6. 故意1927 说:

    谢谢了 有几个不会  你有答案吗?

  7. chriszhu 说:

    请问如何才能发帖~~~~新手报道~~呵呵

  8. chriszhu 说:

    想让大家帮我看看这个问题!!

    前阵子做数据结构的最短路径,到现在都没做出来~~
    下面是我的源程序,使用迪杰斯特拉算法,编译没错,可是运行不了。好像是分配空间的问题~~大家看看有什么问题?
    在此先谢谢大家!!
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>

    #define Max 65535
    #define Maxvexnum  11
    #define T  1
    #define F  0

    typedef     int pathM[Maxvexnum][Maxvexnum];
    typedef     int spathTable[Maxvexnum];

    typedef struct{

        int weight;
    }Adjmatrix[Maxvexnum][Maxvexnum];

    typedef struct{

        char *vexs[Maxvexnum];    //存储顶点的向量
        Adjmatrix arcs;
        int vexnum,arcnum;
    }graph;

    void spath(graph *G,int v0,pathM p,spathTable D){
        //用Dijkstra算法求有向图G的v0顶点到其余顶点的最短路径p[v]及其带权长度D[v]
        //若p[v][w]为true,则w是从v0到当前求得最短路径上的顶点
        //final[v]为true当且仅当v属于s,即已经求得从v0到v的最短路径
        int min,i,v,w;
        int final[Maxvexnum];

        for(v = 0; v < G->vexnum; ++v){
            final[v] = F;
            D[v] = G->arcs[v0][v].weight;

            for(w = 0; w < G->vexnum; ++w)
                p[v][w] = F;

            if(D[v] < Max) {p[v][v0] = T; p[v][v] = T;}
        }

        D[v0] = 0; final[v0] = T;

        for(i = 1; i < G->vexnum; ++i){
            min = Max;

            for(w = 0; w < G->vexnum; ++w)
                if(!final[w] && D[w] < min)
                    {v = w; min = D[w];}

            final[v] = T;

            for(w = 0; w < G->vexnum; ++w)
                if(!final[w] && (min + G->arcs[v][w].weight < D[w])){
                    D[w] = min + G->arcs[v][w].weight;

                   for(i = 0; i < G->vexnum; ++i)
                    p[w] = p[v];

                    p[w][w] = T;
                }//if
        }//for
    }

    int locatevex(graph *G,char *v){
        int i;
        for(i = 0; i < G->vexnum; ++i)
            if(strcmp(v , G->vexs) == 0)
                return i;
        return -1;
    }

    void createDN(graph *G){

        int i,j,k,w,count;
        char *V1,*V2;
        char temp[10]; 

        printf(“请输入有向网G的顶点数,弧数!\n”);
        scanf(“%d,%d”,&G->vexnum,&G->arcnum);

        printf(“请输入%d个顶点的值:\n”,G->vexnum);
        for(i = 0; i < G->vexnum; ++i){

            scanf(“%s”,temp);
            count = 0;
            while(temp[count++] != ‘\0′) 
            G->vexs = (char *)malloc(count * sizeof(char));      //不知道这里是否正确分配空间??
        }

        for(i = 0; i < G->vexnum; ++i)
            for(j = 0; j < G->vexnum; ++j)
                G->arcs[j].weight = Max;

        printf(“请输入%d条弧的弧尾 弧头(以空格作为间隔):\n”,G->arcnum);
        for(k = 0; k < G->arcnum; ++k){
            scanf(“%s%s%d”,&V1,&V2,&w);    //输入是在这里出现问题的!!!
            i = locatevex(G,V1);
            j = locatevex(G,V2);
            G->arcs[j].weight = w;
        }
    }

    void display(graph *G){
        int i,j;

        printf(“%d个顶点%d条边或弧的有向网。顶点依次是: “,G->vexnum,G->arcnum);
        for(i = 0; i< G->vexnum; ++i)    // 输出G.vexs
            printf(“%s “,G->vexs);

        printf(“\nG.arcs.weight\n”);      //输出G.arcs.weight
        for(i = 0; i < G->vexnum; ++i){ 

            for(j = 0; j < G->vexnum; ++j)
                printf(“%10d”,G->arcs[j].weight);

            printf(“\n”);
        }
    }

    void main()
    {
        int i,j;
        graph G;
        pathM p;
        spathTable D;
        createDN(&G);
        display(&G);
        spath(&G,0,p,D);
       
        printf(“the pathM p[j] are:\n”);

        for(i = 0; i < G.vexnum; ++i){

            for(j = 0; j < G.vexnum; ++j)
                printf(“%4d”,p[j]);
            printf(“\n”);
        }

        printf(“the shortest path weight of %s to every vex are:\n”,G.vexs[0]);

        for(i = 0; i < G.vexnum; ++i)
            if(i)
                printf(“%s—-%s:  %4d\n”,G.vexs[0],G.vexs,D);
    }
       

    多谢大家参看!!
     
     
    在此谢谢!!

  9. 蓝色石头FLY 说:

    各位大侠帮忙做几道c语言的题可以吗?非常感谢啊!

    1.输入任意三个数,输出这三个数之和。
      如:输入7、8、16,则输出 7+8+16=31

    2.输入两个整型变量a,b的值,输出a+b,a-b,a*b,a/b,(float)a/b,a%b的结果,要求连同算式一起输出,每个算式占一行。
      如:输入a为10,b为5,则a+b的结果输出为 10+5=15

    3.输入一个三位数,将其各位数字反序输出。
      如:输入123,则输出 321

    4.输入一个字符,找出它的前驱字符和后继字符,并按ASCII码值从小到大的顺序输出这三个字符及其对应的ASCII码值。
      如:输入字母C,则输出 B,66,C,67,D,68

    5.输入一个正整数,判断能否同时被5和7整除,若能,则输出Yes,否则输出No。
      如:输入77,则输出 No

    6.输入一个三位数,判断是否是一个“水仙花数”。水仙花数是指三位数的各位数字的立方和等于这个三位数本身。如:153=1*1*1+5*5*5+3*3*3。若是,则输出Yes,不是输出No。
      如:输入153,则输出 Yes

    7.输入任意三个数,输出这三个数之和。
      如:输入7、8、16,则输出 7+8+16=31

    8.输入两个整型变量a,b的值,输出a+b,a-b,a*b,a/b,(float)a/b,a%b的结果,要求连同算式一起输出,每个算式占一行。
      如:输入a为10,b为5,则a+b的结果输出为 10+5=15

    9.输入一个三位数,将其各位数字反序输出。
      如:输入123,则输出 321

    10.输入一个字符,找出它的前驱字符和后继字符,并按ASCII码值从小到大的顺序输出这三个字符及其对应的ASCII码值。
      如:输入字母C,则输出 B,66,C,67,D,68

    11.输入一个正整数,判断能否同时被5和7整除,若能,则输出Yes,否则输出No。
      如:输入77,则输出 No

    12.输入一个三位数,判断是否是一个“水仙花数”。水仙花数是指三位数的各位数字的立方和等于这个三位数本身。如:153=1*1*1+5*5*5+3*3*3。若是,则输出Yes,不是输出No。
      如:输入153,则输出 Yes

    13.输入一个年份和一个月份,输出该年该月的天数。
      如:输入2007、11,则输出 30 days
      提示:2月天数的多少与该年是否为闰年有关,闰年2月有29天,非闰年有28天,因此首先要判断该年份是否为闰年;根据月份判断天数,可采用Switch语句。

    14.已知一个圆,圆心坐标为(2,2),半径为1,输入一个点的坐标(x,y),判断该点与圆的位置,若在圆内则输出‘Inside’,若在圆外则输出‘Outside’,若在圆周上则输出‘On’。
      如:输入坐标 1,1,则输出 Outside
      提示:点到点的距离公式为sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)),根据该点到圆心的距离与圆半径的大小关系,判断点与圆的位置关系。

    15.输入三个整数,判断用这三个数作为边长能否构成三角形,能则输出该三角形的类型编号(一般三角形编号为A,直角三角形编号为B、等腰三角形编号为C,等边三角形编号为D),不能则输出 No。
      如:输入 3,4,5,则输出 B

    16.求10!

    17.求1-3+5-7+9-……+101

    18.判定2000-2050年中的每一年是否为闰年,并将闰年输出,每输出5个换一行。

    19.计算1-1/2+1/3-1/4+1/5-……+1/99-1/100

     

  10. zhugeliang 说:

    先谢了,

      能过做练习才知道自

    己懂多少

  11. liuluoxuan 说:

    各位大侠 我是一个小小菜鸟 在教材抄的大侠在tc里面出问题了 请帮个忙怎么样可以修正啊!!main()
     {int a,b,c;
      scanf(“%d,%d,&a,&b,”);
      c=max(a,b);
      printf(“max=%d”,c);
      }
      int max (int x,int y);
      { int z ;                        系统说这里说明出问题,怎么解决啊??
       if(x>y) z=x;
       else z=y;
       returu(z);
      }

  12. yeshan113 说:

    把答案发上来看一下.

  13. whos 说:

    #include “stdio.h”
    int main()
     {int a,b,c;
      scanf(“%d%d”,&a,&b); /*注意双引号括住的只是%d,还有两个%d之间不能有逗号*/
      c=max(a,b);
      printf(“max=%d”,c);
      }
      int max (int x,int y)  /*这一句后面不能有分号*/
      { int z ;
       if(x>y) z=x;
       else z=y;
       return z;    /*return写错了*/
      }

  14. hiroki 说:

    感谢楼主了啊

  15. 柯梦南 说:

    练习题有答案没有啊,照着学习一下啊

  16. 探索 说:

    看了题,好多不会哦。希望LZ把答案弄上来。

  17. 探索 说:

    [QUOTE=liuluoxuan]

    各位大侠 我是一个小小菜鸟 在教材抄的大侠在tc里面出问题了 请帮个忙怎么样可以修正啊!!main()
     {int a,b,c;
      scanf(“%d,%d,&a,&b,”);
      c=max(a,b);
      printf(“max=%d”,c);
      }
      int max (int x,int y);
      { int z ;                        系统说这里说明出问题,怎么解决啊??
       if(x>y) z=x;
       else z=y;
       returu(z);
      }

    [/QUOTE]

    #include<stdio.h>

    void main()

    {int a,b,c;
       int max(int x,int y);
       scanf(”%d,%d”,&a,&b);
       c=max(a,b);
       printf(“max=%d”,c);
    }
        int max(int x, int y)
    {int z;
      if(x>y)
         z=x;
      else
         z=y;
       return(z);
    }

留下一个回复