• ベストアンサー

char/long int等の型の範囲を表示するCのプログラムを記述したい

D-Matsuの回答

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.2

unsignedなので%dではなくて%uになります。 参考URLにLinuxでのprintf()のマニュアルを置いておきますのでそちらも参考にしてください。

参考URL:
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/printf.3.html
redhat_001
質問者

お礼

出来ました。有り難うございました。

関連するQ&A

  • intとlongは同じ?

    #include <stdio.h> #include <limits.h> int main() { printf("%d\n%d", INT_MAX, LONG_MAX); return 0; } 出力 214783647 214783647 Win7 64bit (VC++2010) CentOS 32bit (gcc) どちらの環境でも同じ出力結果となりました。 intとlongなぜ同じになってしまったのでしょうか。

  • cプログラム

    次の10人の身長を入れ、最大と最小を配列を使って求めるプログラムなんですが、この場合だと一人の身長データしか入力できません どのように直せばいいでしょうか? #include <stdio.h> main () { float h[10],max,min; int i; max=-999; min=999; for(i=0;i<=9;i=i+1){ printf("%d番目の身長を入力してください\n",i+1); scanf("%5.1f",&h[i]); if(h[i]>max){ max=h[i]; } if(h[i]<min){ min=h[i]; } } printf("最大の身長は%5.1f,最小の身長は%5.1fです。\n",max,min); return(0); }

  • C言語のプログラムについてです

    5人の名前と身長を入力し、1番高い人の名前と身長を表示せよというものです。 下記のソースプログラムをコンパイルすると warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)[10]’ と表示されます。どこを修正すればよいのでしょうか? またこのプログラムにはchar関数を使っていますが、char関数というのも良く分かりません その解説も付け加えていただけると幸いです#include <stdio.h> #include <string.h> int main(void) { int i,sincho,max_sincho; char max_namae[10],namae[10]; max_sincho=0; for(i=1;i<=5;i++){ printf("名前: "); scanf("%s", &namae); printf("身長: "); scanf("%d", &sincho); if(sincho>max_sincho){ max_sincho=sincho; strcpy(max_namae,namae); } } printf("身長が一番高い人は%sさんで%d cmです。\n", max_namae,max_sincho); return 0; }

  • int型変数の簡潔なプログラム

    #include<iostream> using namespace std; int main(void){ int max = a; int min = a; if(a > b){ min = b; }else{ max = b; } cout << "小さい方の値は" << min << "です。\n"; cout << "大きい方の値は" << max << "です。\n"; } これの、    int max = a; int min = a; と     if(a > b){ min = b; }else{ max = b; } が解りません。 何故変数をaからbにチェンジしているのでしょうか 初心者なのでお手柔らかにお願いします。 よろしくお願いします。

  • C言語プログラムの並列化について

    OpenMPを用いて以下のC言語プログラムを並列化させようと考えています。 (sumの部分は今は単純な足し算ですが、kk0~kk4を用いた複雑な計算を考えています。) ------------------------------------------------------------------------------ #include <stdio.h> #include <time.h> #define PARA_NUM 200 int main(void) { long kk0, kk1, kk2, kk3, kk4; long i; long parameter_num = 5; long pn[parameter_num]; long sum; long sum_max = 0; long sum_min = PARA_NUM*parameter_num; long sum_min0 = PARA_NUM*parameter_num; long sum_max0 = 0; for( kk0 = 0; kk0 < PARA_NUM-4; kk0++ ) { for( kk1 = kk0+1; kk1 < PARA_NUM-3; kk1++ ) { for( kk2 = kk1+1; kk2 < PARA_NUM-2; kk2++ ) { for( kk3 = kk2+1; kk3 < PARA_NUM-1; kk3++ ) { for( kk4 = kk3+1; kk4 < PARA_NUM; kk4++ ) { sum = kk0+kk1+kk2+kk3+kk4; if ( sum_max0 < sum ) {sum_max0 = sum;} if ( sum_min0 > sum ) {sum_min0 = sum;} }}}}} printf("max: %d\n", sum_max0); printf("min: %d\n", sum_min0); return 0; } ------------------------------------------------------------------------------ 以上のプログラムを以下のように書き変えました。 ------------------------------------------------------------------------------ #include <stdio.h> #include <time.h> #define PARA_NUM 200 int main(void) { long kk0, kk1, kk2, kk3, kk4; long i; long parameter_num = 5; long pn[parameter_num]; long sum; long sum_max = 0; long sum_min = PARA_NUM*parameter_num; long sum_min0 = PARA_NUM*parameter_num; long sum_max0 = 0; #pragma omp parallel for private(kk0, kk1, kk2, kk3, kk4, sum, sum_min0, sum_max0) schedule(static,1) for( kk0 = 0; kk0 < PARA_NUM-4; kk0++ ) { sum_max0=0; sum_min0=PARA_NUM*parameter_num; for( kk1 = kk0+1; kk1 < PARA_NUM-3; kk1++ ) { for( kk2 = kk1+1; kk2 < PARA_NUM-2; kk2++ ) { for( kk3 = kk2+1; kk3 < PARA_NUM-1; kk3++ ) { for( kk4 = kk3+1; kk4 < PARA_NUM; kk4++ ) { sum = kk0+kk1+kk2+kk3+kk4; if ( sum_max0 < sum ) {sum_max0 = sum;} if ( sum_min0 > sum ) {sum_min0 = sum;} }}}} #pragma omp critical { if ( sum_max < sum_max0 ) {sum_max = sum_max0;} if ( sum_min > sum_min0 ) {sum_min = sum_min0; } }} printf("max: %d\n", sum_max); printf("min: %d\n", sum_min); return 0; } ------------------------------------------------------------------------------ インテルコンパイラ(icl)にてコンパイルした後、 windows7に標準で搭載されているelapsedtimeで実行時間を測定した結果、 上のプログラムは 2239milliseconds 下のプログラムは446millisecondsとなりました。(cpuは8コア) 8コア使うため実行時間は1/8に近づくと考えていましたが1/5程度となってしまいました。 下のプログラムより良い並列処理をするアルゴリズムはあるのでしょうか。 また#pragma omp criticalの構文は現在の位置が最適なのでしょうか。

  • intをcharに変換

    例えば,int型の数値をchar[]に変換したいと思っています. Windowsではstdlib.hをインクルードすると itoa()という関数が使えますが, Linuxでは使えず,itoaと同等のものを自分で作る必要があるようです. intは常に-10~-99の間なのでこんな風に書いてみたんですが, 出力してみると文字化けしててダメでした. void itoa2(int i,char *str){ str[0] = ' '; str[1] = '-'; str[2] = (-1*i)/10; str[3] = (-1*i)%10; } よい方法をご存知の方いらっしゃいませんでしょうか. Red Hat Enterprise Linux Client release 5.3 (Tikanga) gcc バージョン 4.1.2 20080704 (Red Hat 4.1.2-44) を使っています.

  • C言語のプログラムでおかしな動作をするのですが教えて頂けないでしょうか?

    VisualStudio2008使用しています。 問題は、サイコロを200回振ってその出た目の数の個数分*を表示するプログラムです。 サイコロの目はランダムで出しています。 次のプログラムは正常に動作するものです。 /* #include <stdio.h> #include<stdlib.h> #include<time.h> #define N 200 int DICE(int min,int max); int main() { int n,i,j; int y[7]={0}; srand((unsigned int)time(NULL)); for(i=0;i<N;i++){ n=DICE(1,6); y[n]++; } for(i=1;i<7;i++){ printf(" %2d: ",i); for(j=0;j<y[i];j++){ printf("*"); } printf("\n"); } return 0; } int DICE(int min,int max) { return min+(int)(rand()*(max-min+1.0)/(1.0+RAND_MAX)); } */ 次のプログラムが問題で、授業で先生が配列にはstaticをおまじないとしてつけないと暴走すると言われたので、つけて見ると明らかに間違ってると思われるプログラムで動作するのですが原因を教えて頂けないでしょうか? 以下問題のプログラム! 配列の前にstaticをつけたら、添え字をいくつにしても正常に動作します。普通は添え自分しか領域って確保されないですよね??? /* #include <stdio.h> #include<stdlib.h> #include<time.h> #define N 200 int DICE(int min,int max); int main() { int n,i,j; //以下が問題の配列宣言 static int y[2]={0}; srand((unsigned int)time(NULL)); for(i=0;i<N;i++){ n=DICE(1,6); y[n]++; } for(i=1;i<7;i++){ printf(" %2d: ",i); for(j=0;j<y[i];j++){ printf("*"); } printf("\n"); } return 0; } int DICE(int min,int max) { return min+(int)(rand()*(max-min+1.0)/(1.0+RAND_MAX)); } 質問の意味が正確に伝わらなかった場合は補足しますので、ご回答よろしくお願いします。

  • 'const char *' 型は 'char *' 型に変換できない ??

    Case 1 Text9.Text = "AB"; Text10.Text = "A"; // 1文字目 Text11.Text = "B"; // 2文字目 case 2; Text9.Text = "Ab"; Text10.Text = "A"; Text11.Text = "b"; case 3; Text9.Text = "aB"; Text10.Text = "a"; Text11.Text = "B"; case 4; Text9.Text = "ab"; Text10.Text = "a"; Text11.Text = "b"; 上記のようなCase 文を C を使って作成したいのですが, A~J の大文字とa~jまでの小文字をつかって,2文字の文字列をつくるとき, 1文字目と2文字目が,形態も名称も異なる文字列(例 AB , Ab aB, ab, AC, Ac aC ac, ...)のcase文をつくりたいのですが, 'const char *' 型は 'char *' 型に変換できないというエラーメッセージがでてしまいます.下記プログラムをどう直せばいいかおしえてください. #include <stdio.h> #define MAX_NAME 256 int main(void) { const char *NAME12 = "Text9"; const char *NAME1 = "Text10"; const char *NAME2 = "Text11"; const char *ALPH = "ABCDEFGHIJabcdefghij"; FILE *fp = NULL; char f_name[MAX_NAME]; int count = 0; char *p = ALPH; char *q = ALPH; printf("ファイル名:"); scanf("%s", f_name); fp = fopen(f_name, "w"); if (fp == NULL) { printf("'%s':ファイルが見つかりません\n", f_name); } else { for (p = ALPH; *p != '\0'; p++) { for (q = ALPH; *q != '\0'; q++) { if (*p != *q) { count++; fprintf(fp, "Case %d\n", count); fprintf(fp, "%s.Text = \"%c%c\"\n", NAME12, *p, *q); fprintf(fp, "%s.Text = \"%c%c\"\n", NAME1, *p, *q); fprintf(fp, "%s.Text = \"%c%c\"\n", NAME2, *p, *q); } } } fclose(fp); } return 0; }

  • C言語 最大値と最小値を求めて表示するプログラム

    はじめまして。 C言語を学習中です。 下記の問題演習の解答として記載されているプログラムがどうしても理解できません。 特にプログラムの最後の方のwhile文で最大値と最小値の判定をしているのかと思いますが、どのような計算をして判定しているのでしょうか。 while (array[i] != -1) { if (array[i] > *max) *max = array[i]; if (array[i] < *min) *min = array[i]; i++; 具体的に教えてください。 よろしくお願い致します。 ●問題 0~100の範囲で入力された複数の数値の中から、 最大値と最小値を求めて表示するプログラムを作成せよ。 -1が入力された場合は入力の終わりと判定する。 ただし、最大値と最小値はmain関数以外の一つの関数の中で求める。 また、入力された数値を記憶する配列の要素数は10とし、 それ以上入力された場合はエラーが起きても仕方ないこととする。 ヒント:配列の中に -1 があればデータの終わりだと判断できる。 ヒント:最小値を探すには、最大値を記憶した変数との比較を繰り返せば良い。 ●解答 #include <stdio.h> void maxmin(int array[],int *max,int *min); int main(void) { int i = 0,array[10],max,min; do { printf("%d 番目の数:",i + 1); scanf("%d",&array[i]); i++; } while (array[i - 1] != -1); maxmin(array,&max,&min); printf("最大値 %d : 最小値 %d\n",max,min); return 0; } void maxmin(int array[],int *max,int *min) { int i = 0; *max = 0; *min = 100; while (array[i] != -1) { if (array[i] > *max) *max = array[i]; if (array[i] < *min) *min = array[i]; i++; } }

  • 入力されたテキスト行の中で最も長い行を表示するプログラム

    下のプログラムのmainの***************部とgetl()をどのように書いたらいいかわかりません。 出来ればプログラミングで書いていただけると嬉しいです。 #include <stdio.h> #define MAXLINE 1000 int getl(char s[] , int lim) { } void copy(char to[], char from[] ) { int i; i= 0; while((to[i] = from[i]) ! = ‘\0’) ++i; } int main() { int len; int max; char line[MAXLINE]; char longest[MAXLINE]; max = 0; 本で調べたところ、ループが終わる条件はEOFか、\nが出たときと、limitを超えるときのようなんですが・・・ お願いいたします。