• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:四則演算のプログラム)

四則演算のプログラムを解説します

edominの回答

  • edomin
  • ベストアンサー率32% (327/1003)
回答No.1

「%」は、剰余です。(割り算をした結果の「余り」を返します。) なので、実数型で実行したときの結果については判りません。m(_ _)m で、このプログラムを実行すると何かエラーが出ますか?(私は未実行です。)

関連するQ&A

  • c言語 

    答えを0にするこまち算のプログラムを組んでみたのですが、ここからどうしても進まなくなってしまいました。 自分ではいけるかなと思ったのですが、9-8-7+65-4321=9など答えがありえない数になってしまいます。 どこがいけないか教えてください。むしろ最初から組み直した方がよいのでしょうか… #include <stdio.h> int cul(); int num[9] ={9,8,7,6,5,4,3,2,1}; int total;/**/ int kigou[8]={0,0,0,0,0,0,0,0}; int main(){ for(kigou[0]=0;kigou[0]<3;kigou[0]++){ for(kigou[1]=0;kigou[1]<3;kigou[1]++){ for(kigou[2]=0;kigou[2]<3;kigou[2]++){ for(kigou[3]=0;kigou[3]<3;kigou[3]++){ for(kigou[4]=0;kigou[4]<3;kigou[4]++){ for(kigou[5]=0;kigou[5]<3;kigou[5]++){ for(kigou[6]=0;kigou[6]<3;kigou[6]++){ for(kigou[7]=0;kigou[7]<3;kigou[7]++){ keisan(); } } } } } } } } return 0; } int keisan(){ int n =0; int flag = 0; int t = 0; int i = 0; total = num[0]; /* for (n=0;n<9;n++) printf("kigou[%d] == %d",n,kigou[n]);確かめ*/ for(;n<8;n++){ if(kigou[n] == 0 && n == 0){ total = total * 10 + num[n+1]; for(flag=1;kigou[n+flag]==0 && (n+flag)<9 ;flag++){ total = total * 10 + num[n+flag+1]; } n = n + flag; } flag=0; if(kigou[n]!= 0){ for(flag=1;kigou[n+flag]==0 && (n+flag)<9 ;flag++){ t = num[n+1] * 10 + num[n+flag+1]; } n = n+ flag; total = total + t; } } /*0になる計算式の表示*/ kigou[8]=2;/*表示しないために空白を入れる*/ if(total==0){ for(i=0;i<9;i++){ printf("%d",num[i]); if(kigou[i]==0) printf("+"); if(kigou[i]==1) printf("-"); if(kigou[i]==2) printf(""); } printf("=%d\n",total); } return 0; }

  • 関数の戻り値がこうなる理由が分かりません。

    かなり簡単なプログラムだと思いますが、関数内で出力した場合と、呼び出し側で出力した場合で値が異なります。理由が分からないので教えていただけますか? #include <stdio.h> #include <stdlib.h> Table(int num, double ltable) { double temp[] = { 0.99852, // 1 0.99410, // 2 0.98677 // 3 }; ltable=temp[num]; printf("%f\n",ltable); } main (int argc, char *argv[]) { int num ; double ltable ; num=1; Table(num, ltable); printf("%f\n",ltable); } 実行結果 0.994100 0.000000

  • ビット演算について

    以下のプログラムを作成して、int型、char型、long型のAND演算・OR演算の結果の違いを見ました。 実行結果からchar型だけ結果の表示の仕方が他と異なっています。 一般的に、バイト数では、 char(1バイト) < short(2バイト) < int(4バイト) のはずなのに、出力結果は、 char(0xffffffff) > short(0xff) = int(0xff) となっていて、charが一番大きく?、shortとintが同じ結果? のようにみえてしまいよくわかりません。 私は、ビット演算が苦手なので、根本的に考え方が間違っているのかも しれませんが、どうしてこのような出力結果となるのか教えてください。 プログラム #include <stdio.h> #include <stdlib.h> int main() { int xi = 0x7F, yi=0x80; int stri1 = xi&yi; int stri2 = xi|yi; printf("** int **\n"); printf("%p\n",stri1); printf("%p\n\n",stri2); char xc = 0x7F, yc=0x80; char strc1 = xc&yc; char strc2 = xc|yc; printf("** char **\n"); printf("%p\n",strc1); printf("%p\n\n",strc2); short xl = 0x7F, yl=0x80; short strl1 = xl&yl; short strl2 = xl|yl; printf("** short **\n"); printf("%p\n",strl1); printf("%p\n\n",strl2); return(0); } 出力結果 ** int ** 0x0 0xff ** char ** 0x0 0xffffffff ** short ** 0x0 0xff

  • このプログラム見てください

    これで動いたと書いてあるのに動きません。 どこを直せば良いのか教えてください。 #include <stdio.h> int combination(int n,int r){ if ( r==0 ){ return 1; }else if( r==n ){ return 1; }else{ return (combination(n-1,r-1)+combination(n-1,r)); } } int main(){ int num_n=0; int num_r=0; int answer=0; printf("組み合わせの計算をします。数値を入力してください。N=?。\n"); printf("[n]:"); scanf("%d",&num_n); rewind(stdin); printf("[r]:"); scanf("%d",&num_r); rewind(stdin); answer=combination(num_n,num_r); printf("%dC%d=%d\n" , num_n, num_r, answer); return 0; }

  • 4桁の英字の3桁目を当てるプログラム

    乱数でとってくる4ケタの英字の3桁目を入力して当てるプログラムを 組もうとしているのですが、コンパイラしてもいまいちうまくいきません。 特に下に書いたプログラムのこの部分が違っていると思い どのように修正したらよいのか指摘していただきたいです。 human=getchar(); if(comp[2]!=human) { ero=1; } よろしくお願いします。 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<string.h> int sleep(unsigned long x) { clock_t c1=clock(),c2; do{ if((c2=clock())==(clock_t)-1) { return 0; } }while(1000.0*(c2-c1)/CLOCKS_PER_SEC<x); return 1; } int main(void) { int num,val,i,j; char comp[21]; char human; int ero=0; int try_count=0; int seikai=0; clock_t start,end; int num1; char eiji[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; srand(time(NULL)); puts("英字記憶トレーニング"); do{ printf("挑戦するレベル(3~20):"); scanf("%d",&num1); }while(num1<3 || num1>20); printf("%d個の英字を記録しましょう。\n",num1); start=clock(); do{ for(i=0;i<num1;i++) { comp[i]=eiji[rand()%strlen(eiji)]; } comp[num1]='\0'; printf("%s",comp); fflush(stdout); sleep(125*num1); printf("\r%*s\r3番目の英字を入力してください:",num1,""); human=getchar(); if(comp[2]!=human) { ero=1; } if(ero==0) { printf("正解です。\n"); seikai++; } else { printf("\a間違いです。\n"); } try_count++; }while(try_count<2); end=clock(); printf("%d回中%d回成功しました。\n",try_count,seikai); printf("%.1f秒でした。\n",(double)(end-start)/CLOCKS_PER_SEC); return 0; }

  • C言語で、ファイルを読み込んで数字と名前に分けて配列に格納に関する質問

    C言語で、ファイルを読み込んで数字と名前に分けて配列に格納に関する質問です! ファイルを開いた後でエラーとなるのですが、何が足りないのでしょうか? ファイル内容 20 田中 10 鈴木 #include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc,char *argv[]) { FILE *fp; char str[256]; char *tp; int k,i=0; int num[10]; char na[10][20]; fp=fopen(argv[1],"r"); if(fp==NULL){ printf("ファイルを開けません\n"); return 1; }else{ printf("開けた\n"); } while(fgets(str,sizeof str,fp)!=NULL){ tp=strtok(str," "); num[i]=atoi(tp); tp=strtok(NULL," "); strcpy(na[i],tp); i++; } printf("%d\n%s\n",num[0],na[0]); printf("%d\n%s\n",num[1],na[1]); fclose(fp); return 0; }

  • ソースプログラムのエラー

    自分で四則演算のプログラムを組んだのですが エラーが出てお手上げ状態です。 どこが間違っているのかどなたか教えていただけませんか?? ちなみに足し算の場合はいくつ足しても計算できるという プログラムです☆ #include<stdio.h> int main(int argc, char *argv[]){ int i,a=0,b=0,x=0; int m=0; if(argv[1]!="+"||argv[1]!="-"||argv[1]!="*"||argv[1]!="/"||){ printf("指定された文字ではありませんよ\n"); return -1; } a = atoi(argv[2]); b = atoi(argv[3]); if(argv[1]=="-"){ m=a-b; } if(argv[1]=="*"){ m=a*b; } if(argv[1]=="/"){ m=a/b; } if(argv[1]=="+"){ for(i=2;i<argc;i++){ x=atoi(argv[i]); m+=x; } printf("%d\n",m); return 0; }

  • 一部コマンドでエラー

    以下のプログラムにパス検索機能を追加しろ。 /bin/lsと入力していたものを、lsだけで実行できるようにする。 そのほかにもdata -Iやgcc -o test test.c、./testを実行可能にする。 と言う課題で、 if(execv(argv[0],argv[])==(-1)){をif(execvp(argv[0],argv)==(-1)){とする方法を聞いたのですが、 gcc -o test test.cを入力すると長文のエラーが出力されます。 どうしたら良いでしょうか? #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> main(int argc, char *argv[]){ int len, pid, st; char *p; int i, sp_flag; static char prompt[64]="> "; char command[256]; printf("%s",prompt); while (fgets(command, 256, stdin) != NULL){ if((len = strlen(command)) == 1)break; command[len-1] = '\0'; p=(char *)&command; sp_flag=0; for(i=0; *p!='\0';p++){ if(sp_flag == 0 && *p!=' '){ argv[i]=p; sp_flag=1; i++; }else if(*p==' '){ *p='\0'; sp_flag=0; } } argv[i]=(char *)0; for(i=0; argv[i]!=(char *)0; i++){ printf("%s\n",argv[i]); } if((pid = fork()) == 0){ if(execv(argv[0],argv)==(-1)){ printf("%s", "exec error.\n"); exit(1);} } else if(pid >= 1){ wait(&st); printf("%s", prompt); } else { perror("fork"); exit(1); } } exit(0); }

  • プログラム問題(3)

    以下の問題のプログラムをやったのですが、コマンドプロンプトで実行してみるとエラーになってしまうのですが、どなたか問題点を指摘していただけないでしょうか? 【問題】 3桁の整数の値を入力していき、-9999が入力されたところで、それまでに入力された数の個数と合計を整数で、平均を浮動小数点数で出力するプログラム。 【プログラム】 #include <stdio.h> #include <stdlib.h> #include <string.h> #define streq(a, b) !strcmp((a), (b)) int main(int argc, char *argv[]) { int i, num, sum = 0; double avg; char buf[256]; char *endptr; for (i = 0;; i++) { printf("INPUT>"); if (fgets(buf, sizeof buf, stdin) == NULL) { perror("fgets"); exit(1); } if (streq(buf, "-9999") || streq(buf, "-9999\n")) { break; } if (streq(buf, "") || streq(buf, "\n")) { fprintf(stderr, "数値を入力してください。\n"); exit(1); } num = (int) strtol(buf, &endptr, 0); if (! (*endptr == '\n' || *endptr == '\0')) { fprintf(stderr, "数値を入力してください。\n"); exit(1); } sum += num; } printf("入力数:%d 合計:%d 平均:%g\n", i, sum, (double) sum / i); return 0; }

  • C言語における複素数の四則演算について

    複素数の四則演算(a+biとc+diの四則演算)について、for文を用いて表示するプログラムについて、???の部分に何を入れたらよいかわからず、うまく実行することができません。和・差・積・商の計算種別を入れるみたいなのですが、何を入れたらいいのかわかりません。 #include <stdio.h> void fukuso(double a,double b,double c,double d,double *e,double *f,int keisan); int main(void) { double a=4, b=8, c=4, d=3, e, f; int i; for(i=1;i<5;i++){ fukuso(a,b,c,d,&e,&f,???); if(i==1) printf("和演算\n"); else if(i==2) printf("差演算\n"); else if(i==3) printf("積演算\n"); else printf("商演算\n"); printf("e=%f f=%f i\n",e,f); } return (0); } void fukuso(double a1,double b1,double a2,double b2,double *a3,double *b3,int keisan) { if(keisan==1){ *e=a+c; *f=a+c; } else if(keisan==2){ *e=a-c; *f=b-d; } else if(keisan==3){ *e=a*c-b*d; *f=a*d+c*b; } else{ *e=(a*c+b*d)/(c*c+d*d); *f=(-a*d+c*b)/(c*c+d*d); } }