本文目录一览:
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 是同一个人,原回答不知道为什么不能修改,所以用小号来贴代码:
intmain()
{
intn=0;
intm=0;
double*name;/*真正动态大小的只能用指针*/
double*avarage1;
inti,j;
doubleavarage_all1,max1;
//赋值
printf("Pleaseentertwonumberstodecidethelengthofarray:");
scanf("%d%d",n,m);
name=(double*)malloc(sizeof(double)*m*n);/*然后动态分配空间*/
avarage1=(double*)malloc(sizeof(double)*n);
printf("Pleaseenter%dnumbersforthearray:",n*m);
for(i=0;in;i++)
{
for(j=0;jm;j++)
scanf("%lf",((double(*)[m])name)[i][j]);/*这里要加强制转换,也可以换成name[i*m+j]*/
}
//开始调用
for(i=0;in;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);
return0;
}
我是尽可能保留楼主原来的思路来修改的代码,所有 /* */ 标注的注释的地方,都是我改过的。另外,不知道楼主用的什么编译器,一般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的过程)
intmain2(intm,intn,doublename[n][m],doubleavarage1[n])
{
inti,j;
doubleavarage_all1,max1;
printf("Pleaseenter%dnumbersforthearray:",n*m);
for(i=0;in;i++)
{
for(j=0;jm;j++)
scanf("%lf",name[i][j]);
}
//开始调用
for(i=0;in;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();
return0;
}
intmain(){
intm=0,n=0;
void*name,*avarage1;
//赋值
printf("Pleaseentertwonumberstodecidethelengthofarray:");
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);
return0;
}
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!
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/157721.html