• ベストアンサー

(int) の使い方に関して

いま、C言語をVBに書き換える作業をしています。 m=2*((n+(int) sqrt(ACC*n))/2); という文があるのですが、このintというのはどういう意味で使われているのでしょうか? m=2*((n+(int sqrt(ACC*n)))/2); というようにsqrt(ACC*n)の整数をとるという意味でしょうか?

  • KUZUY
  • お礼率19% (60/308)

質問者が選んだベストアンサー

  • ベストアンサー
  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.1

そうです。その通り。 これは演算をするというよりも、 キャストと言って(int)型の変数に一旦入れたような動きになります。

KUZUY
質問者

お礼

ありがとうございます。

関連するQ&A

  • int型とchar型について

    C言語初心者です。 よろしくお願いします。 ◎1----------------------- #include<stdio.h> int main(void) { int ss[4]="789"; printf("%c\n",ss[0]); return 0; } --------------------------- ◎2----------------------- #include<stdio.h> int main(void) { int *p; p="789"; printf("%c\n",*p); return 0; } --------------------------- ◎1、◎2の2つのプログラムについて疑問があります。 ◎1の「int ss[4]="789";」と◎2の「int *p;」のintの部分は今まで、何の疑問も抱かず、「char」として入力していました。 そこでchar型は1バイトの整数、int型は4バイトの整数ということで容量が違うだけで、intとしても大丈夫だろうと思ったのですが、 ◎1では、「'initializing' : 'char [4]' から 'int [4]' に変換することはできません。」とエラーが出て、◎2では「'char [4]' から 'int *' に変換することはできません。」とエラーが出ます。 intは文字列は扱えないということなのでしょうか? 以上intだと実行できない理由がわかりません。 初歩的なことですいませんが、教えていただけると嬉しいです。

  • $int5 = PHP_INT_MAX ;

    $int5 = PHP_INT_MAX;     //整数型の最大値  以上、参考書に書いてあるのですが!  素人の私にとりまして、意味がいまいちです!?    PHPの$int5 = PHP_INT_MAX; は、C言語みたいに、何行もプログラムを書かずに  目的の最大値を、取り出せるとの解釈でよろしいのでしょうか!?     以上宜しくお願いいたします。  

    • ベストアンサー
    • PHP
  • C言語 エラー

    void kbd2(int *n, int *m, int w, int z){ int p=0; while(p==0){ while(p!=2){ printf("Type two integers:"); p=scanf("%d%d", n,m); if(p!=2){ scanf("%*s"); printf("Error: Not an integer!\n"); p=0; } else { if(0>*n || 0>*m || w<*n || z<*m){ scanf("%*s"); printf("Error: Out of range!\n"); p=0; } } } } } C言語にて、非負整数を2つ入力しようとしているのですが、main関数内でw=3,z=4にし、キーボード入力でw,z以上の数値を入力するとそこから先が止まってしまいます。(エラーメッセージがでません) しかし、そのあとに0以上w,z以下の整数を入力すると、*nまたは*m(w、z以上に入力したほう)がw、z以上の数値(始めに与えた数値)としてでてきます。 どこが悪いのでしょうか? 改善すべき点を教えてください。。。 なお、scanfは使う方向性でよろしくお願いします。 ちなみに、main関数内はこれです。 int main(){ int va=-1; int vb=-1; int amax=3; int bmax=4; kbd2(&va, &vb, amax, bmax); printf("OK: %d,%d", va, vb); return 0; }

  • char型+char型ってint型? if(char型==int型)?

    C言語の「汎整数拡張(インテグラルプロモーション)」というものに関するものだと思います。 char型とchar型を加えた結果は、char型でしょうか。それともint型でしょうか。 (下のプログラムの printf("sizeof(a[0]+a[1])は%d\n", sizeof(a[0]+a[1])); /* char型+char型 */ という部分の結果は4なので、int型と考えるべきなのかな。) 私は、char型とint型の加算の結果はint型だと思っていましたが、 char型とchar型の加算の結果はやはりchar型だと思っていました。 (それが間違えているのでしょうか。) if(a[0]==i) /* char型とint型の比較(?) */ の部分では、左辺はchar型、右辺はint型ですが、このように型の違う変数を比較しても文法上構わないのでしょうか。 (私は、「比較は必ず型の同じもの同士でしかできない」と思っていました。) 左辺はchar型のように見えて、じつはint型ですか。 #include <stdio.h> int main(void) { char a[4]; int i=77; printf("sizeof(int)は%d\n", sizeof(int)); printf("sizeof(char)は%d\n", sizeof(char)); printf("sizeof('M')は%d\n", sizeof('M')); printf("sizeof(a[0])は%d\n", sizeof(a[0])); a[0]='M'; a[1]=7+6; a[2]=a[0]+a[1]; printf("sizeof(a[0]+a[1])は%d\n", sizeof(a[0]+a[1])); /* char型+char型 */ printf("sizeof(+a[0])=%d\n", sizeof(+a[0])); if(a[0]==i) /* char型とint型の比較(?) */ puts("a[0]==i"); else puts("a[0]!=i"); return(0); } ちなみにワーニングもエラーもなんにもでません。

  • ポインタを使ったプログラム

    Cを勉強し始めて3ヶ月ほどの初心者です。 ポインタの概念がどうしても理解できず、つまずいています。以下のような簡単な問題があります。 「関数void func( int *n1, int *n2, int *n3 )を作り、1以上50以下の整数で,2または3または7で割り切れない整数を画面に表示するプログラムを作れ。なお、第1,第2,第3引数のアドレスの中身は、それぞれ2,3,7で割ったときのあまりとする。」 2で割ったときのあまり、3で割ったときのあまり、7で割ったときのあまりの積が0でないときに表示していけばよい、という考えから、以下のようなプログラムを作ってみました。 #include<stdio.h> void func(int *n1, int *n2, int *n3); int main(void) { int m,*m1,*m2,*m3; m1 = &m; m2 = &m; m3 = &m; for(m=1;m<=50;m++){ func(m1,m2,m3); if(*m1 * *m2 * *m3 != 0){ printf("%d ",*m1 * *m2 * *m3); } } } void func(int *n1, int *n2, int *n3) { *n1 = *n1 % 2; *n2 = *n2 % 3; *n3 = *n3 % 7; } ただ、本質がわかっていないまま作っているので、明らかに間違っていると思います。ポインタを使わなければ作れると思うのですが。 どこが間違っているのか、正しいプログラムは何か、初心者にもわかるように教えていただければありがたいです。

  • わかりません・・・。

    二つの自然数を引数として与えられて,それらの最大公約数を返す関数 int gcd(int m, int n) { /* … */ }を作成し,それを利用して入力された二つの正整数の最大公約数を求めるプログラムを作り方を教えてください。 ユークリッドの互除法を使い、関数を使う事が条件なのですが全然わかりません。 #include<stdio.h> int gcd(int m, int n) if(m>n) {m%n}            if(m%n==0) printf("最大公約数は%d",n); ←このあたりがわかりません else if (n%(m%n)) printf("最大公約数は%d",n%(m%n)); int main( void ) { int na, nb; puts(""二つの整数を入力してください。); printf("整数1:"); scanf("%d",na); printf("整数2:"); scanf("%d",nb); printf("最大公約数は%dです。\n",gcd(int m, int n)); return0; }

  • 各桁の和を返す関数

    一つの正整数を引数として受け取り、 その整数の各桁の和を返す関数を作成する。 この関数を用い、いくつかの正整数を入力して その整数の各桁の和を表示する。 入力の終わりは、0または負のデータが現れたことで 判定する。 というC言語の問題なんですが、 整数の各桁の和を返す関数がうまくできません・・。 123が15となってしまいます・・。 とりあえず最初の部分を作ってみました。 初心者なのでミス多いかもしれませんが どなたか教えていただけませんか? #include<stdio.h> #include<conio.h> int sum(int n) n=(n/10)+(n%10); return n; } main() { int n,sum2; scanf("%d",&n); sum2=sum(n); printf("%d",sum2); }

  • 非負整数nを読み込んで、1+2+・・・+m>nとなる最小の整数mを表示

    非負整数nを読み込んで、1+2+・・・+m>nとなる最小の整数mを表示するというプログラミングなのですが・・・ #include <stdio.h> int main(void) { int n,m=■ , sum=0; do { printf("非負整数: "); scanf("%d", &n); } while (n■0); while (sum■n) { ■ ; sum +=■; } printf("1+2+・・・+m> %dとなる最小の整数mは%dである。\n", n, m); return (0); } ■のところがわかる方どうにかお願いします!!

  • C++で分からないプログラムがあるんですが

    #include <iostream> #include <cmath> using namespace std; int main() { static const int N = 2; double va[N]={3,-4}; double vb[N]={4,3}; double a,b; double p; for (int i = 0; i < N; ++i) { for (int i = 0; i < N; ++i) { } } cout << "va + vb = (" ; for (int i = 0; i < N; ++i) { cout << va[i] + vb[i]; if (i < N - 1) { cout << ", "; } } cout << ")" << '\n'; cout << "va - vb = (" ; for (int i = 0; i < N; ++i) { cout << va[i] - vb[i]; if (i < N - 1) { cout << ", "; } } cout << ")" << '\n'; p = 0; for (int i = 0; i < N; ++i) { p += va[i] * vb[i]; } cout << "va・vb = " << p << '\n'; a = 0; for (int i = 0; i < N; ++i) { a += va[i] * va[i]; } a = sqrt(a); b = 0; for (int i = 0; i < N; ++i) { b += vb[i] * vb[i]; } b = sqrt(b); if (a * b != 0) { cout << "cosθ = " << p / (a * b) << '\n'; } return 0; } これで、ベクトルの加減とベクトルの内積とcosθが出るんですが、2つのベクトルを適当に初期化しないといけないんですが、初期化ってこれで初期化ってできてますか?

  • c言語について

    C言語で、二つの整数値を読み込んで、前者の値が後者の何%であるかを実数で表示するプログラムを作成しようとして以下のコードを書きました。 #include <stdio.h> int main(void) { int n1, n2 ; puts("二つの整数を入力してください。") ; printf("整数A : \n") ; scanf("%d" , &n1) ; printf("整数B : \n") ; scanf("%d" , &n2) ; printf("Aの値はBの%f%%です。\n" , (double)(n1 / n2) * 100) ; return 0 ; } 上記コードを実行すると、0.000000%のような結果になります。 そこで、最後のキャスト演算子を使用した後の式で(n1 / n2) * 100がまずいのかなと考え、n1 / n2 * 100にしたら上手くいきました。 なぜ、上記コードだと上手くいかないんでしょうか?

専門家に質問してみよう