本文目录一览:
5、算24点的问题
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!