| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2864 人关注过本帖, 4 人收藏
标题:TC代码与VC的不同之处,自我总结
只看楼主 加入收藏
yangfanconan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:10
帖 子:397
专家分:541
注 册:2009-9-22
收藏
得分:0 
下面是一个选票统计的TC代码
程序代码:
#include <stdio.h>
#define MAX 100
void main()
{
    int i,ElecteeNum;
    /*定义三个一维数组分别存放三个年级的选票数*/
    int GradeA[MAX],GradeB[MAX],GradeC[MAX];
    /*定义一维数组ElecteeID来存放每个候选者的身份标示*/
    int ElecteeID[MAX];
    /*定义浮点型一维数组来存放各个年级的平均选票结果*/
    float VoteAverage[MAX];
    while(1)
    {
        clrscr();
        /*输入候选者的人数*/
        printf("Input the num of the electees in the election:");
        scanf("%d",&ElecteeNum);
        if( ElecteeNum>1&&ElecteeNum<MAX )
            break;
    }
    /*输入每个年级的每个候选者的票数*/
    printf("Please input a ElecteeID and the votes of three nations:\n");
    printf("    ElecteeID  GradeA  GradeB    GradeC\n");
    /*计算每个候选者的平均票数*/
    for( i=0; i<ElecteeNum; i++ )
    {
        printf("No.%d>",i+1);
        scanf("%d%d%d%d",&ElecteeID[i],&GradeA[i],&GradeB[i],&GradeC[i]);
        VoteAverage[i] = (GradeA[i]+GradeB[i]+GradeC[i])/3;
    }
    puts("\ElecteeID    GradeA   GradeB   GradeC  VoteAverage");
    puts("-------------------------------------------------");
    for( i=0; i<ElecteeNum; i++ )
    {
        printf("%8d %8d %8d %8d %8.1f\n",ElecteeID[i],GradeA[i],GradeB[i],GradeC[i],VoteAverage[i]);
    }
    puts("-------------------------------------------------");
    getch();
}

在VC上却报错。修改为:
程序代码:
#include <stdio.h>
#include <process.h>
#include<conio.h>3
#define MAX 100
void main()
{
    int i,ElecteeNum;
    /*定义三个一维数组分别存放三个年级的选票数*/
    int GradeA[MAX],GradeB[MAX],GradeC[MAX];
    /*定义一维数组ElecteeID来存放每个候选者的身份标示*/
    int ElecteeID[MAX];
    /*定义浮点型一维数组来存放各个年级的平均选票结果*/
    float VoteAverage[MAX];
    while(1)
    {
        system("cls");
        /*输入候选者的人数*/
        printf("Input the num of the electees in the election:");
        scanf("%d",&ElecteeNum);
        if( ElecteeNum>1&&ElecteeNum<MAX )
            break;
    }
    /*输入每个年级的每个候选者的票数*/
    printf("Please input a ElecteeID and the votes of three nations:\n");
    printf("    ElecteeID  GradeA  GradeB    GradeC\n");
    /*计算每个候选者的平均票数*/
    for( i=0; i<ElecteeNum; i++ )
    {
        printf("No.%d>",i+1);
        scanf("%d%d%d%d",&ElecteeID[i],&GradeA[i],&GradeB[i],&GradeC[i]);
        VoteAverage[i] = (GradeA[i]+GradeB[i]+GradeC[i])/3;
    }
    puts("\ElecteeID    GradeA   GradeB   GradeC  VoteAverage");
    puts("-------------------------------------------------");
    for( i=0; i<ElecteeNum; i++ )
    {
        printf("%8d %8d %8d %8d %8.1f\n",ElecteeID[i],GradeA[i],GradeB[i],GradeC[i],VoteAverage[i]);
    }
    puts("-------------------------------------------------");
    getch();
}



2010-07-03 07:59
yangfanconan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:10
帖 子:397
专家分:541
注 册:2009-9-22
收藏
得分:0 
下面是一个自由落体的演示
TC的代码如下
程序代码:
#include<stdio.h>
#include<conio.h>
#include<time.h>
int main()
{
    /*(x,y)表示物体在屏幕上的初始位置,
    depth表示物体落地后反弹的高度,
    times用来控制时间的延迟,
    m用来控制运动的方向,m=-1说明是向下运动,m=1说明是向上运动*/
    int x=15,y=4,depth=20,times=20,m=1,i,j;
    for(;depth!=0;)
    {
        m=-m;
        if(m==1)
            depth--;
        for(i=1;i<=depth;i++)
        {
            printf("*****************************\n");
            printf("|  The program will show :  |\n");
            printf("|    the Free Falling       |\n");
            printf("*****************************\n");
            /*画出物体图像*/
            gotoxy(x,y);
            printf("***\n");
            gotoxy(x,y+1);
            printf("|*|\n");
            gotoxy(x,y+2);
            printf("***");
            /*控制不同的延迟显示的时间大小*/
            for(j=1;j<=times;j++)
                    delay(10);
            clrscr();
            if(m==-1)
            {
                /*物体向下运动*/
                y++;
                /*延时越来越小,说明速度越来越快*/
                times--;
            }
            else
            {
                /*物体向上运动*/
                y--;
                /*延时越来越大,说明速度越来越慢,说明是*/
                times++;
            }  
        }
    }
    getch();
    return 0;
} 
然而,VC中没有gotoxy
delay函数

为了保持代码的原意。我建立了连个自定义函数。VC代码如下
程序代码:
#include<stdio.h>
#include<conio.h>
#include <process.h>
#include<time.h>
#include <windows.h>
#include <dos.h>
void gotoxy(int x,int y) //cursor an gewuenschte position auf dem bildschirm setzen
{
CONSOLE_SCREEN_BUFFER_INFO csbiInfo; //variablendklaration
HANDLE hConsoleOut;

hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hConsoleOut,&csbiInfo);

csbiInfo.dwCursorPosition.X = x; //cursorposition X koordinate festlegen
csbiInfo.dwCursorPosition.Y = y; //cursorposition Y koordinate festlegen
SetConsoleCursorPosition(hConsoleOut,csbiInfo.dwCursorPosition); //den cursor an die festgelegte koordinate setzen
}
void delay(int i)
{
while(i)i--;
}

int main()
{
    /*(x,y)表示物体在屏幕上的初始位置,
    depth表示物体落地后反弹的高度,
    times用来控制时间的延迟,
    m用来控制运动的方向,m=-1说明是向下运动,m=1说明是向上运动*/
    int x=15,y=4,depth=20,times=20,m=1,i,j;
    for(;depth!=0;)
    {
        m=-m;
        if(m==1)
            depth--;
        for(i=1;i<=depth;i++)
        {
            printf("*****************************\n");
            printf("|  The program will show :  |\n");
            printf("|    the Free Falling       |\n");
            printf("*****************************\n");
            /*画出物体图像*/
            gotoxy(x,y);
            printf("***\n");
            gotoxy(x,y+1);
            printf("|*|\n");
            gotoxy(x,y+2);
            printf("***");
            /*控制不同的延迟显示的时间大小*/
            for(j=1;j<=times;j++)
                    delay(10);
            system("cls");
            if(m==-1)
            {
                /*物体向下运动*/
                y++;
                /*延时越来越小,说明速度越来越快*/
                times--;
            }
            else
            {
                /*物体向上运动*/
                y--;
                /*延时越来越大,说明速度越来越慢,说明是*/
                times++;
            }  
        }
    }
    getch();
    return 0;
} 



经测试通过。


2010-07-03 08:14
yangfanconan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:10
帖 子:397
专家分:541
注 册:2009-9-22
收藏
得分:0 
下面是一个TC的奖金发放问题,代码如下
程序代码:
/*企业发放的奖金根据利润提成,发放规则如下:
  利润(I)低于或等于10万元时,奖金可提10%;
  利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;
  20万到40万之间时,高于20万元的部分,可提成5%;
  40万到60万之间时高于40万元的部分,可提成3%;
  60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成。
  从键盘输入当月利润I,求应发放奖金总数?*/
#include<stdio.h>
#include<stdlib.h>
int main()
{
    long int gain;
    int prize1,prize2,prize4,prize6,prize10,prize = 0;
    puts("*************************************");
    puts("*      The program will solve       *");
    puts("* the problem of prize distribution *");
    puts("*************************************");
    puts("please input the num of gain:");
    scanf("%ld",&gain);
    prize1=100000*0.1;
    prize2=prize1+100000*0.075;
    prize4=prize2+200000*0.05;
    prize6=prize4+200000*0.03;
    prize10=prize6+400000*0.015;
    if(gain<=100000)
      prize=gain*0.1;
    else if(gain<=200000)
           prize=prize1+(gain-100000)*0.075;
         else if(gain<=400000)
            prize=prize2+(gain-200000)*0.05;
          else if(gain<=600000)
             prize=prize4+(gain-400000)*0.03;
               else if(gain<=1000000)
                  prize=prize6+(gain-600000)*0.015;
                else
                  prize=prize10+(gain-1000000)*0.01;
    printf("The prize is :%d\n",prize);
    getch();
    return 0;
}


在VC中虽然警告很多但错误只有一处。代码如下
程序代码:
/*企业发放的奖金根据利润提成,发放规则如下:
  利润(I)低于或等于10万元时,奖金可提10%;
  利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;
  20万到40万之间时,高于20万元的部分,可提成5%;
  40万到60万之间时高于40万元的部分,可提成3%;
  60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成。
  从键盘输入当月利润I,求应发放奖金总数?*/
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main()
{
    long int gain;
    int prize1,prize2,prize4,prize6,prize10,prize = 0;
    puts("*************************************");
    puts("*      The program will solve       *");
    puts("* the problem of prize distribution *");
    puts("*************************************");
    puts("please input the num of gain:");
    scanf("%ld",&gain);
    prize1=100000*0.1;
    prize2=prize1+100000*0.075;
    prize4=prize2+200000*0.05;
    prize6=prize4+200000*0.03;
    prize10=prize6+400000*0.015;
    if(gain<=100000)
      prize=gain*0.1;
    else if(gain<=200000)
           prize=prize1+(gain-100000)*0.075;
         else if(gain<=400000)
            prize=prize2+(gain-200000)*0.05;
          else if(gain<=600000)
             prize=prize4+(gain-400000)*0.03;
               else if(gain<=1000000)
                  prize=prize6+(gain-600000)*0.015;
                else
                  prize=prize10+(gain-1000000)*0.01;
    printf("The prize is :%d\n",prize);
    getch();
    return 0;
}

测试通过





2010-07-03 18:08
yangfanconan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:10
帖 子:397
专家分:541
注 册:2009-9-22
收藏
得分:0 
下面是一个背包问题,TC代码如下:
程序代码:
#include<stdio.h>
#define NUM 10/* 定义物品总数*/
#define CONTENT 10 /*定义包的容量*/
void knapsack(int v[NUM],int w[NUM],int c,int m[NUM ][CONTENT])
{
    int n=NUM-1;
    int i,j;
    int jMax;
    if((w[n]-1)< c)
    jMax = w[n]-1;
    else
    jMax = c;
    /* 初始化m[n][j] */
    for(j = 0; j <= jMax; j++)
    m[n][j] = 0;
    for(j = jMax +1; j <= c; j++)
    m[n][j] = v[n];
   /*使用非递归的算法来求解m[i][j] */
   for(i = n-1; i > 0; i--)
   {
        if((w[i]-1)< c)
        jMax = w[i]-1;
        else
        jMax = c;
        for(j = 0; j <= jMax; j++)
        m[i][j] = m[i+1][j] ;
        for(j = jMax +1; j <= c; j++)
        {
            if(m[i+1][j] >= (m[i+1][j-w[i]]+v[i]))
            m[i][j] = m[i+1][j] ;
        else
        m[i][j] =     m[i+1][j-w[i]]+v[i];
    }
   }
   if(c>w[0])
   {
       if(m[1][c] >= (m[1][c-w[0]]+v[0]))
            m[0][c]= m[1][c];
       else
        m[0][c]= m[1][c-w[0]]+v[0];
   }
   else
       m[0][c]= m[1][c];
  
}
/*寻找最优解*/
void traceback(int flag[NUM],int w[NUM],int m[NUM][CONTENT])
{
    int n = NUM -1;
    int i;
    int c = CONTENT;
    for(i = 0; i < n; i++)
    {
        if(m[i][c] == m[i+1][c])
            flag[i] = 0;
        else
        {
            flag[i] = 1;
            c-=w[i];
        }
    }
    if(m[n][c] >0)
        flag[n] = 1;
    else
        flag[n] = 0;
}
/* 打印最优解*/
void printResult(int flag[NUM],int w[NUM],int v[NUM],int m[NUM][CONTENT])
{
    int i;
    printf("the knapsack should contain:\n");
    printf(" num weight value \n");
    for(i = 0;i < NUM; i++)
    {
        if(flag[i] == 1)
                printf("  %d    %d     %d\n",i,w[i],v[i]);
    }
    printf("the max value in the knapsack is: %d\n",m[0][CONTENT]);
}
int main()
{
    int value[NUM]={5,2,3,4,3,6,5,7,8,2};
    int weight[NUM]={2,1,3,2,4,3,5,6,2,2};
    int c = CONTENT;
    int maxvalue[NUM][CONTENT];
    int flag[NUM]={0,0,0,0,0,0,0,0,0,0};
    clrscr();
    printf("****************************************\n");
        printf("*      this program will solve         *\n");
        printf("*    the problem of 0-1knapsack        *\n");
        printf("****************************************\n");
    /*计算最优值*/
    knapsack(value,weight,c,maxvalue);
    /*构造最优解*/
    traceback(flag,weight,maxvalue);
    /*打印程序的结果*/
    printResult(flag,weight,value,maxvalue);
    getch();
    return 0;  
}


在VC中代码如下:

程序代码:
#include<stdio.h>
#include<conio.h>
#include <process.h>
#define NUM 10/* 定义物品总数*/
#define CONTENT 10 /*定义包的容量*/
void knapsack(int v[NUM],int w[NUM],int c,int m[NUM ][CONTENT])
{
    int n=NUM-1;
    int i,j;
    int jMax;
    if((w[n]-1)< c)
    jMax = w[n]-1;
    else
    jMax = c;
    /* 初始化m[n][j] */
    for(j = 0; j <= jMax; j++)
    m[n][j] = 0;
    for(j = jMax +1; j <= c; j++)
    m[n][j] = v[n];
   /*使用非递归的算法来求解m[i][j] */
   for(i = n-1; i > 0; i--)
   {
        if((w[i]-1)< c)
        jMax = w[i]-1;
        else
        jMax = c;
        for(j = 0; j <= jMax; j++)
        m[i][j] = m[i+1][j] ;
        for(j = jMax +1; j <= c; j++)
        {
            if(m[i+1][j] >= (m[i+1][j-w[i]]+v[i]))
            m[i][j] = m[i+1][j] ;
        else
        m[i][j] =     m[i+1][j-w[i]]+v[i];
    }
   }
   if(c>w[0])
   {
       if(m[1][c] >= (m[1][c-w[0]]+v[0]))
            m[0][c]= m[1][c];
       else
        m[0][c]= m[1][c-w[0]]+v[0];
   }
   else
       m[0][c]= m[1][c];
  
}
/*寻找最优解*/
void traceback(int flag[NUM],int w[NUM],int m[NUM][CONTENT])
{
    int n = NUM -1;
    int i;
    int c = CONTENT;
    for(i = 0; i < n; i++)
    {
        if(m[i][c] == m[i+1][c])
            flag[i] = 0;
        else
        {
            flag[i] = 1;
            c-=w[i];
        }
    }
    if(m[n][c] >0)
        flag[n] = 1;
    else
        flag[n] = 0;
}
/* 打印最优解*/
void printResult(int flag[NUM],int w[NUM],int v[NUM],int m[NUM][CONTENT])
{
    int i;
    printf("the knapsack should contain:\n");
    printf(" num weight value \n");
    for(i = 0;i < NUM; i++)
    {
        if(flag[i] == 1)
                printf("  %d    %d     %d\n",i,w[i],v[i]);
    }
    printf("the max value in the knapsack is: %d\n",m[0][CONTENT]);
}
int main()
{
    int value[NUM]={5,2,3,4,3,6,5,7,8,2};
    int weight[NUM]={2,1,3,2,4,3,5,6,2,2};
    int c = CONTENT;
    int maxvalue[NUM][CONTENT];
    int flag[NUM]={0,0,0,0,0,0,0,0,0,0};
    system("cls");
    printf("****************************************\n");
        printf("*      this program will solve         *\n");
        printf("*    the problem of 0-1knapsack        *\n");
        printf("****************************************\n");
    /*计算最优值*/
    knapsack(value,weight,c,maxvalue);
    /*构造最优解*/
    traceback(flag,weight,maxvalue);
    /*打印程序的结果*/
    printResult(flag,weight,value,maxvalue);
    getch();
    return 0;  
}


2010-07-03 18:22
wajuan
Rank: 1
等 级:新手上路
帖 子:3
专家分:5
注 册:2010-5-28
收藏
得分:0 
~~~~~~~~~~~~~qiang
2010-08-10 21:15
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
还是直接把不同点列出来,然后代码以附件的形式给大家,这种形式比较好!

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2010-08-10 23:08
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:0 
路过

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-08-10 23:22
zhj123
Rank: 2
等 级:论坛游民
帖 子:39
专家分:21
注 册:2010-8-31
收藏
得分:0 
看晕了
2010-08-31 16:20
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:0 
楼主很牛!个人感觉在VC里面要求比较严格,比如说调用函数,函数的值传递比如:
void fun(int n,int m)
{return;

main()

fun();

可以不加传递值 ,不会报错,但是Vc就会报错

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-08-31 17:38
缺钱缺钙还欠扁
Rank: 2
等 级:论坛游民
帖 子:12
专家分:19
注 册:2009-7-24
收藏
得分:0 
列了一大堆,没总结!我就当只是库函数的问题啦!
2010-12-19 18:16
快速回复:TC代码与VC的不同之处,自我总结
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025675 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved