yama5140 の回答履歴

全461件中161~180件表示
  • 大学の授業で作った暗号化プログラムが動きません。

    下記のような暗号化プログラムを作成したのですが動きません。 問題のある場所は36行目(/で囲まれた行)で式の構文エラーと診断されたのですが、どう直せばいいのか分かりません。 どなたかどうすればよいのかお教え下さい。 #include <stdio.h> #include <stdlib.h> #include <ctype.h> int anngou (int c, char b[81]) { while (c <= 81) { if(b[c] >= 'a' && b[c] <= 'z') { if(b[c] >= 'a' && b[c] <= 'm') { b[c] = b[c] + 13; } else { b[c] = b[c] - 13; } } else { if(b[c] >= 'A' && b[c] <= 'Z') { if(b[c] >= 'A' && b[c] <= 'M') { b[c] = b[c] + 13; }else{ b[c] = b[c] - 13; } } } } return b[c]; } int main(void) { int a, c; char b[81]; a = c = 0; while (a <= 9) { printf("Input some words: "); fgets(b, 81, stdin); /b[c] = anngou(char b[c]);/ c = 0; while (c <= 81) { printf("%s", b[c]); c++; } printf("\n"); a++; } exit(0); }

  • C言語における3重ループの定義についての質問です

    多重ループの定義について for文の中にfor文がある場合、多重ループになることはわかったんですが、 3重ループ以上の場合は for文の中にfor文があり、さらにその中にfor文がある時ですか? 例 for( ){ for( ){ for( ){ } } } それとも、for文が重なっている時のfor文の合計数ですか? (例えばfor文の中に別々のfor文が2つある場合) 例 for( ){ for() { } for( ){ } } 上手く説明できないんですが、よろしくお願いします

  • C言語の並び替え

    プログラミング初心者です。 1 1 8227 49 1204 1 1 2 1 2 1 0 1 1 8203 48 48207 9 1 2 2 3 1 0 1 1 10367 56 48206 8 2 2 1 2 1 0 1 1 14206 74 1212 4 1 2 1 2 1 0 1 1 1204 1 20201 95 1 2 3 4 1 0 1 1 22210 107 30201 136 1 2 2 3 2 0 1 1 26103 119 11103 60 1 2 2 3 1 0 という横に87個、縦に30000個のデータファイルがあります。 データの並び替えをしたいのですが まず1行目、4列目(1, 4)のデータを先頭に持ってきて 次に4列目とi列目を比較して同じ(iは1行目i列目という意味)(i=14, 22, 34, 38, 42)であれば2番目に持ってきます。 次にi列目が決まった時jは以下のように決まるとします。またjはj列目にあるデータとします。 i=14のとき j=16, 18, 20 i=22のとき j=24, 26, 28, 30, 32 i=34のとき j=36 i=38のとき j=40 i=42のとき j=44 を順番にならべてください。 例)4列目が5のとき、   5 5(i=22) 3(j=24) 2(j=26) 0(j=28) 0(j=30) 3(j=32) としたいのです。 次にj列目とk列目(k=14, 22, 34, 38, 42)を比べ同じであれば、iを選んだときにjを並べたようにしたいのです。(少しわかりにくい?) 例) 5 5 3 2 0 0 3(j=32) 3(k=14) (16列目)(18列目)(20列目) というように。    最後にn列目と6列目を比較して同じであれば終了。次は2行目、4列目… それを30000行目まで。 というプログラミングをつくりたいです。 最終的に、txt形式にしたいのですが、なにぶん知識は本でしかなく、どうすればいいかわかりません。 fgets、strtok、atoiを使って配列してから・・・・みたいにするのですか?説明に不足があるかもしれません。すいません。

  • C言語の数学関数

    C言語の数学関数で、double型実数Xの平方根(1/2乗)は「sprt(X)」ですが1/3乗や1/4乗、1/n乗(n:実数)はどうやって表せばいいんですか? 「pow()関数」を用いればいいんですか? 例えば、 1.2の1/3乗は→pow(1.2 , 1.0/3.0) 1.2の1/4乗は→pow(1.2 , 1.0/4.0) 1.2の1/12.3は→pow(1.2 , 1.0/12.3) となるのですか? 宜しくお願いします。

  • テキストファイルの行数を取得する方法(C言語

    C言語でテキストファイルのトータル行数を取得する関数又はその方法を教えてほしいのですが。 宜しくお願いします。

  • 問題集について

    ある問題集で targetとnumが合っているまで繰り返すプログラム何ですけど、 voidGuessNumber() { char target[5]; char num[5]; int count =0; createRandNumber(target) do{ printf(%d回目各桁が異なる%dけたの数を入力してください:,++count,5) scanf("%4d",num); while(isValidNumber(num)==FALSE); { printf(入力が正しくありません、再度入力してください:); scanf("%4d",num); } }while(isMatch(target,num)==FALSE); } int isValidNumber(char num[]) 機能:文字列numの各文字がすべて異なる数字の時TRUE,それ以外のときFALSEを返す。 int isMatch(char target[],char num[]) 機能:targetとnumの文字数があっているときTRUEそれ以外FALSE 何ですけど、これだと永遠に終わらないような気がするのですが、これは間違いなのかなと思うんですけどどうでしょうか?なにか足りないところがあったら補足しますのでよろしくお願いします。

  • c言語の問題です。ファイルからデータを読み込み連結リストに記憶しソートするプログラムです。お願いします

    ソート部分がどうしてもできません。 またソートは以下のアルゴリズムで行うものです 与えられたリストをリストA、ソート済みのリストをリストBとする。処理の開始段階では、リストBは空である。 1.リストAの要素の中で、最大値をもつ要素Cを探す。 2.要素CをリストAから削除する。 3.要素CをリストBの先頭に挿入する。 4.リストAが空であれば終了。空でなければ 1. にもどる。 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct physical Physical; struct physical { char name[41]; int age; float height; float weight; Physical *next; }; void read_data(char *file,Physical *p,Physical *tail); int comp1(const Physical *, const Physical *); int comp2(const Physical *, const Physical *); int comp3(const Physical *, const Physical *); int comp4(const Physical *, const Physical *); void sort(char *arg,Physical *p,Physical *q); Physical *listsort(Physical *p, int (*compar)(const void *, const void *)); int main(void) { char s[20],t,u[20]; Physical *p,*tail,*q; p=malloc(sizeof(Physical)); q=malloc(sizeof(Physical)); tail=malloc(sizeof(Physical)); while(1) { printf("CMD>"); fflush(stdout); fgets(s,20,stdin); sscanf(s,"%c %s",&t,u); switch(t){ case 'q':exit(0); case 'r':read_data(u,p,tail); break; case 's':sort(u,p,q); break; case 'd': while(q!=NULL) { printf("%s %d %.1f %.1f ",q->name,q->age,q->height,q->weight ); q=q->next;} break; } } free(p); return 0; } void read_data(char *file,Physical *p,Physical *tail){ FILE *fp; char string[100]; Physical header; tail=&header; header.next = NULL; p->next = NULL; tail->next = p; tail = p; if ((fp = fopen(file, "r")) == NULL) { exit(1); } while(fgets(string,sizeof(string),fp)!= NULL) { sscanf(string,"%s %d %f %f",p->name,&p->age,&p->height,&p->weight); Physical *tail2; tail2=malloc(sizeof(Physical)); tail2->next=NULL; p->next=tail2; p=tail2; } fclose(fp); } void sort(char *arg,Physical *p,Physical *q){ if(strcmp(arg,"name") == 0) q=listsort(p,(int(*)(const void*, const void*))comp1); if(strcmp(arg,"age") == 0) q=listsort(p,(int(*)(const void*, const void*))comp2); if(strcmp(arg,"height") == 0) q=listsort(p,(int(*)(const void*, const void*))comp3); if(strcmp(arg,"weight") == 0) q=listsort(p,(int(*)(const void*, const void*))comp4); } Physical *listsort(Physical *p,int (*compar)(const void *, const void *)){ Physical *q, *max,*s,*head; s=malloc(sizeof(Physical)); head=malloc(sizeof(Physical)); head=NULL; while(p->next){max = p, q = p->next; while( q->next ) { if( compar(q->next,max->next) ) max = q; q = q->next;} s=max->next; max->next=max->next->next; if(head==NULL) {head=s;} s->next=s; } return head; } int comp1(const Physical *a, const Physical *b){ return (strncmp(a->name,b->name,sizeof(Physical))); } int comp2(const Physical *a, const Physical *b){ if(a->age > b->age) return 1; else return 0; } int comp3(const Physical *a, const Physical *b){ if(a->height > b->height) return 1; else return 0; } int comp4(const Physical *a, const Physical *b){ if(a->weight > b->weight) return 1; else return 0; }

  • 問題集について

    ある問題集で targetとnumが合っているまで繰り返すプログラム何ですけど、 voidGuessNumber() { char target[5]; char num[5]; int count =0; createRandNumber(target) do{ printf(%d回目各桁が異なる%dけたの数を入力してください:,++count,5) scanf("%4d",num); while(isValidNumber(num)==FALSE); { printf(入力が正しくありません、再度入力してください:); scanf("%4d",num); } }while(isMatch(target,num)==FALSE); } int isValidNumber(char num[]) 機能:文字列numの各文字がすべて異なる数字の時TRUE,それ以外のときFALSEを返す。 int isMatch(char target[],char num[]) 機能:targetとnumの文字数があっているときTRUEそれ以外FALSE 何ですけど、これだと永遠に終わらないような気がするのですが、これは間違いなのかなと思うんですけどどうでしょうか?なにか足りないところがあったら補足しますのでよろしくお願いします。

  • 数値解析に関する質問です

    以下のプログラムでは、関数pivotは,3つの引数を利用しているが,これを2つに減らす方法はないか? 教えてください。よろしくお願いします。 /*Gaussian Elimination*/ #include <stdio.h> #include <math.h> /*--------------*/ void inputdata(double [3][4]); void calsol(double [3][4],double [3]); void elimination(double[3][4],double[3][4]); void pivot(int *, double [3][4],int *); void outputdata(double [3]); void checksol(double [3][4], double [3]); /*--------------*/ main(){ double c[3][4], x[3]; /*-----------------------*/ printf("Program of Gauss Elimination\n"); /*-----------------------*/ inputdata(c); /*-----------------------*/ calsol(c,x); /*-----------------------*/ outputdata(x); /*-----------------------*/ checksol(c,x); /*-----------------------*/ return(0); } /*-----------------------*/ void inputdata(double c[3][4]){ int ie,ic; printf("------\n"); printf("Input Data\n"); printf("(a0*x0 + a1*x1 +a2*x2 = a3)\n"); printf("\n"); for(ie=0; ie<=2; ie++){ printf("Equation %d\n",ie); printf("Input a0 a1 a2 a3\n"); for(ic=0;ic<=3;ic++){ scanf("%lf", &c[ie][ic]); } } } /*-----------------------*/ void calsol(double c[3][4], double x[3]){   double cc[3][4]; elimination(c,cc); x[2]=cc[2][3]; x[1]=cc[1][3]-cc[1][2]*x[2]; x[0]=cc[0][3]-cc[0][2]*x[2]-cc[0][1]*x[1]; } /*-----------------------*/ void elimination(double c3[3][4], double cc[3][4]){ int ie,imax,eli; double c2[3][4],c1[3][4]; eli = 0; pivot (&eli,c3,&imax); cc[0][0]=1; cc[0][1]=c3[imax][1]/c3[imax][0]; cc[0][2]=c3[imax][2]/c3[imax][0]; cc[0][3]=c3[imax][3]/c3[imax][0]; for(ie=0;ie<=2;ie++){ if(ie != imax){ c2[ie][0]=0; c2[ie][1]=c3[ie][1]-cc[0][1]*c3[ie][0]; c2[ie][2]=c3[ie][2]-cc[0][2]*c3[ie][0]; c2[ie][3]=c3[ie][3]-cc[0][3]*c3[ie][0]; } } eli = 1; pivot(&eli,c2,&imax); cc[1][1]=1; cc[1][2]=c2[imax][2]/c2[imax][1]; cc[1][3]=c2[imax][3]/c2[imax][1];   for(ie=0;ie<=1;ie++){ if(ie !=imax){ c1[0][2]=c2[ie][2]-cc[1][2]*c2[ie][1]; c1[0][3]=c2[ie][3]-cc[1][3]*c2[ie][1]; } } cc[2][2]=1; cc[2][3]=c1[0][3]/c1[0][2]; } /*-----------------------*/ void pivot(int *eli,double c[3][4],int *imax){ int ie; double cmax; if(*eli ==0){ cmax=0; for(ie=0;ie<=2;ie++){ if(fabs(c[ie][0])>cmax){ cmax=c[ie][0]; *imax=ie; } } } else{ cmax=0; for(ie=0;ie<=1;ie++){ if(fabs(c[ie][1])>cmax){ cmax=c[ie][1]; *imax=ie; } } } } /*-----------------------*/ void outputdata(double x[3]){ int i; printf("------\n"); printf("Solutions\n"); for(i=0;i<=2;i++){ printf("x%d=%14.6e\n",i,x[i]); } } /*-----------------------*/ void checksol(double check[3][4],double x[3]){ double crt,clt; int ie,ic; printf("------\n"); printf("Check Solutions\n"); printf("Left Term Right Term\n"); for(ie =0;ie<=2;ie++){ clt =0 ; for(ic=0;ic<=2;ic++){ clt = clt + check[ie][ic]*x[ic]; } crt = check[ie][3]; printf("%14.6e%14.6e\n",clt,crt); } }

  • ソート

    #include <ctype.h> #include <string.h> #include <stdio.h> #include <stdlib.h> void swap(char p[], char q[]); void get(char bufG[],char **p_str); typedef struct { int number; char *class_type; char* name; char *subject; int num_akaten; } my; my *data; int main(int argc, char* argv[]) { FILE *fp; int field = 0, line = 0; char buf[1000]; char bufG[1111]; char *str; int m; int line2 = 0; if((fp=fopen("test3.csv","r"))==NULL){ printf("ファイルが開けません"); } while(fgets(buf, 1000, fp) != NULL){ line2++; } fclose(fp); printf("%d\n", line2); if((fp=fopen("test3.csv","r"))==NULL){ printf("ファイルが開けません"); } data = (my *)malloc(sizeof(my) * line2); while(fgets(buf,1000,fp) != NULL){ str = buf; while(*str != '\0'){ get(bufG,&str); switch(field){ case 0: data[line].number = atoi(bufG); break; case 1: data[line].class_type = (char *)malloc(strlen(bufG) +1); strcpy(data[line].class_type, bufG); break; case 2: data[line].name = (char *)malloc(strlen(bufG) + 1); strcpy(data[line].name, bufG); break; case 3: data[line].subject =(char *)malloc(strlen(bufG) + 1); strcpy(data[line].subject, bufG); break; case 4: data[line].num_akaten = atoi(bufG); } str++; field++; } line++; field = 0; } fclose(fp); for(m = 0; m < line; m++){ printf("%d\n", data[m].number); printf("%s\n", data[m].class_type); printf("%s\n", data[m].name); printf("%s\n", data[m].subject); printf("%d\n", data[m].num_akaten); } return 0; } void get(char bufG[],char **p_str) { int i; char *str; str = *p_str; for(i = 0; *str != ',' && *str != '\0' ; i++){ if(*str == '\n'){ bufG[i] = '\0'; } else{ bufG[i] = *str; } str++; } bufG[i] = '\0'; *p_str = str; return ; } 前問題の解答例を提示してくださった方のサンプルをコピペさせてもらって成績の項目を追加しています。本文ではget関数の型はchar*型で文字列を返していますが今回の件では余り関係ないのでこのままで。 ファイルの中身は 1,犬,ボルト,国語,2 2,猫,山田,数学,1 3,犬,鈴木,英語,2 4,犬,居合,国語,1 5,猫,伊藤,数学,2 6,猫,斎藤,数学,1 のような感じになってます。 クラスの名前は今までアルファベットできたがこちらにしました。 名前自体に意味はありません。クラス名を文字列にしただけです。 やりたいソートの条件は赤点の多い順が優先でクラスと好きな教科が 同じものをソートしたい。優先順位は赤点→クラスとが一致→教科が一致 なので 1,犬,ボルト,国語,2 3,犬,鈴木,数学,2 5,猫,伊藤,数学,2 2,猫,山田,数学,1 6,猫,斎藤,数学,1 4,犬,居合,国語,1 このようなファイルに並び替えされます。 今試してるのは↑のソースで各値を入れ終わった後に for(p = 0; p < line; p++){ for(q = p + 1; q < line; q++){ if(data[p].num_akaten < data[q].num_akaten){ swap(&p,&q);//swapはp行とq行の全項目を入れ替える関数   } } } こうするととりあえず赤点数の順にはなります これからさらに上記のような並びにしたいです。(クラスと教科が同じ順) ここからどうすればいいでしょうか? 出来れば同じループ内で処理したいです。 私が考えていたのがp行のクラスとq行のクラスが同じ場合 p+1行目のクラスがp行目のクラスと異なっているなら p+1行目とq行目を交換するというのを試していましたが うまくいかないのでこの方法はダメなのでしょう。 他にもっとよい方法がある といった場合教えていただけると助かります。

  • ソートに関してもう一つ

    回答ありがとうございます。 swap関数に関してに質問があります。 この関数は構造体のソートでも有効なのでしょうか? 教えください。

  • ソートについて教えてください。

    構造体のソートを行いのですが方法が分かりません。教えていただけませんか? ただしqsort関数を使用しない方法でお願いします。 ---------------------------- typedef struct PERSONAL { char Name[30]; /*名前 int Birthday[9]; /*誕生日 char Bloodtype[4]; /*血液型 } ---------------------------- と構造体を設定し、 main関数で『PERSONAL profile』を宣言します。 このprofileの中に ------------------------------------------ profile[0] = {"太郎","19870821","B"} profile[1] = {"次郎","19801017","O"} profile[2] = {"三郎","20000819","AB"} profile[3] = {"四郎","19951030","B"} profile[4] = {"五郎","20000816","A"} ------------------------------------------ の五つのデータが格納されているとします。 このデータを誕生日を基準に昇順にソートをするのが、目的です。 最終的に ---------------------------------------------- profile[0] = {"次郎","19801017","O"} profile[1] = {"太郎","19870821","B"} profile[2] = {"四郎","19951030","B"} profile[3] = {"五郎","20000816","A"} profile[4] = {"三郎","20000819","AB"} ---------------------------------------------- という風にするのが目標です。 for文の多重ループを使用し、誕生日の若い順にprofileのデータを一つずつ、前もって宣言した別の構造体『PERSONAL Buffer』に順番に入れ、入れ終わったらそのデータをそのまま『PERSONAL profile』に入れる(戻す)。 という方法で昇順にソートを行いたいのですがどうするべきか分かりません。 アドバイスをいただけませんか? ------------------------------------------------- int main(void) { PERSONAL profile; PERSONAL Buffer; --この後どうすればいいのか教えてください。-- } --------------------------------------------------

  • 部分行列の抜き出し(C言語)

    部分行列の抜き出し(C言語) ある行列から、任意の部分行列を抜き出すような関数を作りたいのですが、わからないので手助けをお願いしたいです。 たとえば4行4列の行列Aがあった場合、その2行2列、2行3列、3行2列、3行3列目の 4つの(2行2列の)要素を抜き出すような関数です。 枠組みは出来ているので載せておきます。 #include <stdio.h> #include <stdlib.h> #include <math.h> typedef struct matrix{ double *data; int size[2]; }MATRIX; MATRIX create_matrix(int m,int l,int a); //行列の作成 void print_matrix(MATRIX A); //行列の表示 MATRIX submatrix(MATRIX matrix_A,int m,int n,int l,int k); //任意の部分行列の抜き出し int main(int argc,char **argv) { //構造体の初期化 MATRIX matrix_A={NULL,NULL,NULL}; MATRIX matrix_B={NULL,NULL,NULL}; MATRIX matrix_C={NULL,NULL,NULL}; int m=0; //行列の行 int l=0; //行列の列 int a=1; //要素 double det=0; //行列計算 //行列Aの作成 m=4;//行 l=4;//列 matrix_A = create_matrix( m, l, a); //関数 matrix_C = submatrix(matrix_A,2,2,3,3); //行列結果出力 printf("\n\tmatrix input"); print_matrix(matrix_A); printf("\n\tmatrix output"); print_matrix(matrix_C); //行列の開放 free(matrix_A.data); matrix_A.data=NULL; free(matrix_C.data); matrix_C.data=NULL; printf("終了!\n\n"); return 0; } MATRIX create_matrix(int m,int l,int a) { MATRIX matrix_A={NULL,NULL,NULL}; int i=0; //サイズの確保 行;size[0] 列;size[1] matrix_A.size[0]=m; matrix_A.size[1]=l; //メモリの確保 matrix_A.data=(double *)malloc(sizeof(double)*matrix_A.size[0]*matrix_A.size[1]); if(matrix_A.data == NULL){ printf("メモリ確保失敗!![matrix_A]\n"); exit(1); } //行列Aの作成 for(i=0; i<((matrix_A.size[0])*(matrix_A.size[1])) ;i++){ *(matrix_A.data+i)=a+i; } return(matrix_A); } /*行列の表示*/ void print_matrix(MATRIX matrix_A) { int i=0; int j; //行 int k; //列 printf("\n行列の表示\n"); //行列Aのプリント for(j=0;j<matrix_A.size[0];j++){ for(k=0;k<matrix_A.size[1];k++){ printf("%f\t",*(matrix_A.data+k*matrix_A.size[0]+j)); } printf("\n"); } return; } MATRIX submatrix(MATRIX matrix_A,int m,int n,int l,int k) { MATRIX matrix_C = {NULL,NULL,NULL}; int i,j; //サイズの確保 行;size[0] 列;size[1] matrix_C.size[0]=l-m+1; matrix_C.size[1]=k-n+1; //メモリの確保 matrix_C.data=(double *)malloc(sizeof(double)*matrix_C.size[0]*matrix_C.size[1]); if(matrix_C.data == NULL){ printf("メモリ確保失敗!![matrix_C]\n"); exit(1); } //任意の部分行列の抜き出し (ここがわかりません。) } よろしくお願いします。

  • 助けてください。

    C言語の勉強をしているのですがうまくいきません。 助けてください。 氏名、誕生日、血液型を入力し表示する関数を作りたいです。 形としては、氏名を入力し、誕生日を入力したあとに血液型を入力する関数ですが、血液型入力を下の表を表示して選択式にしたいのです。 --------------------------- 番号を入力してください 1;A 2;B 3;O 4;AB 5;? --------------------------- ここで仮に1を入力します。 最終的に入力したものが -------------------- 名前:taro 誕生日:19830917 血液型:A -------------------- と表示されるようにしたいです。 そのための関数を作ったのですが、うまく作動しません。 どこがおかしいか教えてください。 関数はこれです。 #include<stdio.h> #include<string.h> #include<stdlib.h> int main(void) { char Buff[20]; char Buff2[9]; char Buff3[5]; char Buff4[5]; int i; char BLOODNAME[5][4] = {"A","B","O","AB","?"}; printf("名前:"); fgets(Buff,20,stdin); printf("生年月日:"); fgets(Buff2,9,stdin); i = atoi(Buff2); printf("血液型を選べ\n"); printf("------------------------------------\n"); printf("1;A 2;B 3;O 4:AB 5;?\n"); printf("------------------------------------\n"); fgets(Buff3,5,stdin); if(strlen(Buff3) == 1) { switch(Buff3[0]) { case 1: strcpy(Buff4,BLOODNAME[0]); break; case 2: strcpy(Buff4,BLOODNAME[1]); break; case 3: strcpy(Buff4,BLOODNAME[2]); break; case 4: strcpy(Buff4,BLOODNAME[3]); break; case 5: strcpy(Buff4,BLOODNAME[4]); break; default: printf("強制終了ver1\n"); return 0; } } else { printf("強制終了ver2\n"); return 0; } printf("----------------------------------------\n"); printf("名前:%s\n",Buff); printf("生年月日:%d\n",i); printf("血液型:%s\n",Buff4); printf("----------------------------------------\n"); return 0; } あと誕生日なのですが今は入力したものがそのまま出力されますが、最終的には○○○○年○○月○○日と表示されるようにしたいのですが、上の関数にどう追加すればいいのかも教えてください。 お願いいたします・

  • ソート

    typedef struct{ int num; char name[20]; char type_of_class[8]; double average } data; data seiseki[100]; int main() { data[0].num = 1; strcpy(data[0].name, "山田太郎"); strcpy(data[0].type_of_class, "A_class"); data[0].average = 66.2; data[1].num = 2; strcpy(data[1].name, "鈴木二郎"); strcpy(data[1].type_of_class, "B_class"); data[1].average = 43.1; data[2].num = 3; strcpy(data[2].name, "佐藤三郎"); strcpy(data[2].type_of_class, "A_class"); data[2].average = 39.1; data[3].num = 4; strcpy(data[3].name, "加藤四郎"); strcpy(data[3].type_of_class, "Bclass"); data[3].average = 93.6; data[4].num = 5; strcpy(data[4].name, "石田五郎"); strcpy(data[4].type_of_class, "B_class"); data[4].average = 57.9; data[5].num = 6; strcpy(data[5].name, "草田六郎"); strcpy(data[5].type_of_class, "A_class"); data[5].average = 6.2; //ソート処理 } このように各値が決まってる時 まず同じクラスのものをソートし その中でaverage(平均点)の高い順に並べるソートを行いたいと思います。 最終的には 1,山田一郎,A,66.2 3,佐藤三郎,A,39,1 6,草田六郎,A,6.2 4,加藤四郎,B,93,6 5,石田五郎,B,57.9 2,鈴木二郎,B,43.1 のような感じになってると思います。ソートは行ごとです。 入れ替えの関数はint型のとdouble型のとchar型の3タイプ用意しています。 void intswap(int *p, int *q) { int temp; temp = *p; *p = *q; *q = temp; } void double(double * p, double *q) { double temp; temp = *p; *p = *q; *q = temp; } void wordswap(char p[], charq[]) { char *temp = strdup(p); strcpy(p, q); strcpy(q, temp); free(temp); } 残りがわかりません。 教えて下さい。

  • C言語でのソースファイル

    n個の整数データを入力し、最後に平均を出力 nは最初に入力する(nは自然数) 平均は小数部まで求める 実行例として 入力するデータ数は? 3 NO. 1 :12 NO. 2 :7 NO. 3 :4 以上3個の平均 :7.666667 こんな感じにしたいのですができません どなたか教えてください。 お願いします。

  • 配列プログラムのバグ

    入力した正の整数を読み込み、小さい順に並べ替える配列のプログラムを作りたいのですが、以下のプログラムで結果がくるってしまいます。 色々な数値を入力してみたところ、入力した数字のうち、どれかが0に なってしまうようなのですが、いまいち理解できません。 どこを修正すればいいのでしょうか? #include<stdio.h> int main(void){ int a[255],b,i=0,j,k; while(i<255){ printf("正整数:\n"); scanf("%d",&a[i]); if(a[i]==0) break; else if(a[i]<0){ printf("正の整数ではありません"); return 0; } i++; } for(k=0;k<=i;k++){ for(j=0;j<=i;j++){ if(a[j]>a[j+1]){ b=a[j]; a[j]=a[j+1]; a[j+1]=b; } } } printf("入力された整数は小さい順に"); for(j=0;j<=i;j++){ printf("%d,",a[j]); } printf("です。"); return 0; }

  • 2進→10進数

    2進数から10進数に変換するプログラムを作りたいんですが #include<stdio.h> main() { int a[8],i=0,ans=0,end; start: printf("2進数を10進数に変換するプログラム\n開始する場合は1を入力終了する場合は0を入力してください。\n"); scanf("%d",&end); if(end==1) { goto s1; } else if(end==0) { goto end; } { s1: for(i=0;i<8;i++) { scanf("%d",&a[i]); } for(i=0;i<8;i++) { a[i]=2^i; } for(i=0;i<8;i++) { ans=ans+a[i]; } printf("二進数"); for(i=8;i<=4;i--) { printf("%d",a[i]); } printf(" "); for(i=4;i<=0;i--) { printf("%d",a[i]); } printf("は%dです。\n",ans); goto start; } end: printf("終了します\n"); } 期待した結果が得られないのですがどこが違っているのか教えていただきたいです、お願いします。

  • 協力お願いします

    このような質問をして申し訳ないんですがプログラミングが苦手なのでどなたか答えた頂けるのならばありがたいです。 下記表を並び替えて、 1) 総点順に並び換えよ。 2) 各科目別成績順に並びかえよ。   国語 算数 理科 社会 英語 太郎80 90 75 70 70 次郎70 85 80 80 85 三郎75 95 65 90 95 四朗65 70 80 75 80 春子90 100 85 90 85 夏子100 95 80 85 80 秋子60 75 90 70 85 冬子85 80 85 90 95 このような問題なんですがヒントをすごいもらって #include"stdio.h" #include "math.h" #define n 9 #define m 7 void main() { char namae[n][5]={"名前","太郎","二郎","三郎","四郎","春子","夏子","秋子","冬子"}; char kamoku [7][5]={"科目","国語","算数","理科","社会","英語","合計"}; double seiseki[n][m]={{0,0,0,0,0},{80,90,75,70,70},{70,85,80,80,85},{75,95,65,90,95},{65,70,80,75,80},{90,100,85,90,85},{100,95,80,85,80},{60,75,90,70,85},{85,80,85,90,95}}; int i,j; double goukei[n]; for(i=0;i<m;++i){ printf(" %s ",kamoku[i]); } printf("\n"); for(i=1;i<n;++i){ goukei[i]=0; printf("%s",namae[i]); for(j=0;j<m-2;++j){ printf("%6.0f",seiseki[i][j]); goukei[i]+=seiseki[i][j]; } printf("%6.0f\n",goukei[i]); } } こんな感じにはなったんですがあとどうしたらいいのかさっぱりわからません。 どなたかお力を貸していただきたく思います。 長文、乱文失礼いたしました。

  • C++BuilderのRadioGroupについて

    今、単純にラジオグループを作成し、RadioGroupのItemsを3つ、それぞれ「a」、「b」、「c」と設定して、そのアルファベットのラジオボタンが押されたらTEditにそのアルファベットを表示させるというものを作成していますが、うまくいきません。どなたかアドバイスお願いします。 現在のプログラムを以下に書きます。 RadioGroup = new RadioGroup(Form1); RadioGroup->Items->Add("a"); RadioGroup->Items->Add("b"); RadioGroup->Items->Add("c"); if(RadioGroup->ItemIndex==0) Edit1->Text="a"; else if(RadioGroup->ItemIndex==1) Edit1->Text="b"; else if(RadioGroup->ItemIndex==2) Edit1->Text="c"; else Edit1->Text="not Selected";