您的位置:

c语言330转化为字符

本文目录一览:

c语言char和int的转换问题

a是一个四字节整数,对a赋值为'48'相当于对a的最后一个字节赋值为‘8’=56,倒数第二个字节赋值为‘4’=52.因此a=52*256+56=13368,printf("%c",a);相当于printf("%c",char(a%256));

下面程序的输出是? int a=3366 printf("|%-08d|",a) "|%-08d|"什么意思?

输出

|3368□□□□|

c语言的输出方式为,在printf函数里,如果遇到格式化字符,如\t,表示输出一个tab键,就按格式化字符表示的意思处理,否则就原样输出.

在上面语句中,第一个字符"|"及最后面的"|"原样输出.

%表示输出后面的参数的格式,%后面的"-"号,表示输出值靠左,08表示应该是8的8进制写法,表示输出数值占8位字符,d表示输出后面a值的十进制样式,所以综合起来就是,

输出a这个数的十进制形式,输出占8个字符宽,也就是8位,靠左输出,不足8位,右边补空格.

有一个C语言的编程问题,求大神帮忙看看下面的码哪有错,运行时总是计算不对

我和 solidco2 是同一个人,原回答不知道为什么不能修改,所以用小号来贴代码:

int main()

{

    int n = 0;

    int m = 0;

    double *name; /*真正动态大小的只能用指针*/

    double *avarage1;

    int i, j;

    double avarage_all1, max1;

    //赋值

    printf("Please enter two numbers to decide the length of array:");

    scanf("%d%d", n, m);

    name = (double *)malloc(sizeof(double) * m * n); /*然后动态分配空间*/

    avarage1 = (double *)malloc(sizeof(double) * n);

    printf("Please enter %d numbers for the array:", n * m);

    for(i = 0; i  n; i++)

    {

        for(j = 0; j  m; j++)

            scanf("%lf", ( (double (*)[m]) name)[i][j]);  /*这里要加强制转换,也可以换成 name[i*m+j]*/

    }

    //开始调用

    for(i = 0; i  n; i++)

        avarage1[i] = avarage(n, m, i, (double (*)[m])name); /*下面的调用也一样要强制转换*/

    avarage_all1 = avarage_all(n, m, (double (*)[m])name);

    max1 = max(n, m, (double (*)[m])name);

    print(n, avarage1, avarage_all1, max1);

    //getch();

    free(name); /*用完记得回收*/

    free(avarage1);

    return 0;

}

我是尽可能保留楼主原来的思路来修改的代码,所有 /* */ 标注的注释的地方,都是我改过的。另外,不知道楼主用的什么编译器,一般double型变量,输入输出的时候用%lf小写的,楼主的%Lf表示的是long double,也就是long long float,为了编译不出警告,我统一换成了%lf了。

下面说明一下所有改动,按照solidco2里面的引用所说,数组用变长来表示的时候,在函数开始执行的时候,长度就是已经确定了的,name也一样,按照楼主的写法,在main函数一开始,name就被确定为m=0,n=0了,所以sizeof(name)是0。而不管后面m和n输入什么值。或许楼主会想,那把name的定义放到m和n被输入之后呢?很遗憾,这样仍然不行,因为编译过程,变量定义会被移到所有初值赋值的前方。所以这里只能在输入之后,使用malloc来重新划定空间。而传参为了能够正常传给变参二维数组的函数,malloc出来的一维数组要模拟成二位数组,也就是指针的强制转换。于是便有了上面的代码。看出来里面有很多转换,可读性不高,写起来也麻烦。

那么真的没有办法按楼主的方法去写代码吗?有一个,继续拆函数。

原代码更改如下:main2函数和楼主的就几乎一样了(除了输入m和n的过程)

int main2(int m, int n, double name[n][m], double avarage1[n])

{

    int i, j;

    double avarage_all1, max1;

    printf("Please enter %d numbers for the array:", n * m);

    for(i = 0; i  n; i++)

    {

        for(j = 0; j  m; j++)

            scanf("%lf", name[i][j]);  

    }

    //开始调用

    for(i = 0; i  n; i++)

        avarage1[i] = avarage(n, m, i, name);

    avarage_all1 = avarage_all(n, m, name);

    max1 = max(n, m, name);

    print(n, avarage1, avarage_all1, max1);

    //getch();

    return 0;

}

int main() {

    int m=0, n=0;

    void *name, *avarage1;

    //赋值

    printf("Please enter two numbers to decide the length of array:");

    scanf("%d%d", n, m);

    name = malloc(sizeof(double) * m * n); /*然后动态分配空间*/

    avarage1 = malloc(sizeof(double) * n);

    main2(m, n, (double (*)[m])name, (double *)avarage1);

    free(name); /*用完记得回收*/

    free(avarage1);

    return 0;

}

C语言编程 1 2 3 4 5 6 7 8 9 10 由大到小排序

#includestdio.h

#includeconio.h

void bubble_sort(int[], int);

void main() {

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

bubble_sort(arr, num);

getch();

}

void bubble_sort(int iarr[], int num) {

int i, j, k, temp;

printf("\nUnsorted Data:");

for (k = 0; k  num; k++) {

printf("%5d", iarr[k]);

}

for (i = 1; i  num; i++) {

for (j = 0; j  num - 1; j++) {

if (iarr[j]  iarr[j + 1]) {

temp = iarr[j];

iarr[j] = iarr[j + 1];

iarr[j + 1] = temp;

}

}

printf("\nAfter pass %d : ", i);

for (k = 0; k  num; k++) {

printf("%5d", iarr[k]);

}

}

}

算24点的问题

计算24点(加、减、乘、除、括号)

玩法:从扑克中任意抽出四张(数字表示为1-13),用加、减、乘、除的方法使结果成为24,每张牌只能用一次。一副牌(52张)中,任意抽取4张可有1820种不同组合,其中有458个牌组算不出24点。现在再和别人玩这个游戏,不怕了吧?Let's play cards!