#include<stdio.h>
char NUM[]="123.45678";
# define c2n(c) (( (c)>='0' && (c)<='9' )?(c)-'0':(c))
int reverse();
int replace();
int sum(char *p);
main(){
char *ptr;
ptr=NUM;
printf("abc.def->fed.cba:\t%s->",NUM);
reverse();
putchar('\n');
printf("abc.def->def.abc:\t %s->",NUM);
replace();
putchar('\n');
printf(" \t\t\t-----------\n");
ptr=NUM;
printf(" \t\t\t+%5d\n",sum(ptr));
}
int reverse( void ){/*123.45678を87654.321即ちNUMの中の配列を逆順に表示する関数*/
char temp1[100];
char *p1, *p2;
p1 = NUM;
p2 = temp1;
while ( *p1 != '\0' ) {
p1++;
}
while (p1 > NUM) {
p1--;
*p2 = *p1;
p2++;
}
*p2 = '\0';
printf( "%s\n",temp1);
return 0;
}
int replace(void){/*123.45678を45678.123に即ちNUMの中の配列の小数部分と整数部分を入れ変え表示する関数*/
char temp2[50],temp3[50];
char *p1,*p2,*p3;
p1=NUM;
p2=temp2;
p3=temp3;
while(*p1!='.'){*p2=*p1;p1++;p2++;
}
*p2='\0';
while(*p1!='\0'){p1++;*p3=*p1;p3++;
}
printf("%s.%s\n",temp3,temp2);
return 0;
}
int sum(char *p){/*生成した2個の数値の整数部分の和を画面表示する。 num_aは逆順の数値,num_bは整数部分と小数部分を入れ替えた数値. 変数、マクロ、関数追加はなしマクロc2nは利用可*/
int num_a=0,num_b=0;
}
変数やマクロの追加なしでプログラムを完成させたい。
変数やマクロの追加なしでプログラムを完成させたい。
コメントの仕様通りにsumを作ろうとしたのですがうまく作ることができません。どうすればよいでしょうか?
Re: 変数やマクロの追加なしでプログラムを完成させたい。
確実に画面表示させるのは難しいですが、出力するだけなら素直に実装すればいいでしょう。
int sum(char *p){
int num_a=0,num_b=0;
p=NUM;
/* 小数部分と整数部分を入れ替えたので、もとの小数部分のみを数値に変換する */
while (*p!='\0' && *p!='.') p++;
if (*p != '\0') {
while (*++p!='\0') num_b = num_b*10 + c2n(*p);
}
/* 逆順なので、逆順に数値に変換する */
while (*--p!='.') {
num_a = num_a*10 + c2n(*p);
if (p == NUM) break;
}
/* 2個の数値の整数部分の和を出力する */
printf("%d\n", num_a + num_b);
return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)