したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

test

1名無しさん:2009/07/01(水) 02:52:24
testスレ

2名無しさん:2009/07/01(水) 02:53:10
/*** インクルードファイル ***/
#include <stdio.h>
#include <stdlib.h>

int main()
{
int Num = 10; /* データ人数 */
int* point_ptr; /* 得点を記録する領域のポインタ */
int* rank_ptr; /* 順位を記録する領域のポインタ */
int i; /* point_ptrのオフセットカウンタ */
int j; /* rank_ptrのオフセットカウンタ */

int* rank_sort; /* ソートした順位を記録する領域のポインタ */
int k; /* ちょっと入れとく用変数 */
int no[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; /* 番号に使う */


/*** 領域確保 ***/
point_ptr = (int*)calloc(Num,sizeof(int));
rank_ptr = (int*)calloc(Num,sizeof(int));
rank_sort = (int*)calloc(Num,sizeof(int));


/*** データの入力 ***/
i = 0;
while( i < Num ){
scanf("%d",(point_ptr + i));
i++;
}

/***
*** 順位付け
***/
/*** 最初の人から順番に自分の順位を調べる ***/
for (i = 0; i < Num; i++) {
/*** 順位を1に初期化 ***/
*(rank_ptr + i) = 1;
*(rank_sort + i) = 1;

/*** 自分と全員の得点を比べ自分より高い得点の人がいたら ***/
/*** 順位を1足していく ***/
for (j = 0; j < Num; j++) {
if( *( point_ptr + j ) > *( point_ptr + i ) ){
*( rank_ptr + i ) += 1;
}
}
}


/*** ソート ***/
for (i = 0; i < Num; i++) {
for (j = 0; j < Num; j++) {
if( *( rank_ptr + j ) > *( rank_ptr + i ) ){
k = *( rank_ptr + j );
*( rank_ptr + j ) = *( rank_ptr + i );
*( rank_ptr + i ) = k;

k = *(point_ptr + j);
*(point_ptr + j) = *(point_ptr + i);
*(point_ptr + i) = k;

k = no[j];
no[j] = no[i];
no[i] = k;
}
}
}

printf(" 番号 得点 順位\n");

/*** 結果出力 ***/

for (i = 0; i < Num; i++) {
printf("%6d%6d%6d\n",no[i],*(point_ptr + i),*(rank_ptr + i));
}

return(0);
}

3名無しさん:2009/07/01(水) 03:15:57
>>2
int* rank_sort; /* ソートした順位を記録する領域のポインタ */
の部分と、
領域確保のとこの
rank_sort = (int*)calloc(Num,sizeof(int));
と、
/*** 順位を1に初期化 ***/ の部分の
*(rank_sort + i) = 1;


はまったく必要なかった。ごめん。

4名無しさん:2009/07/01(水) 12:47:03
#include <stdio.h>
#include <stdlib.h>
int main()
{
&nbsp;&nbsp;int Num = 100; /* データ人数 */
&nbsp;&nbsp;int* number_ptr;/* 順位を記録する領域のポインタ */
&nbsp;&nbsp;int* point_ptr; /* 得点を記録する領域のポインタ */
&nbsp;&nbsp;int* rank_ptr; /* 順位を記録する領域のポインタ */
&nbsp;&nbsp;int i; /* point_ptrのオフセットカウンタ */
&nbsp;&nbsp;int j; /* rank_ptrのオフセットカウンタ */
&nbsp;&nbsp;int p, S;

&nbsp;&nbsp;/*** 領域確保 ***/
&nbsp;&nbsp;number_ptr = (int*)calloc(Num,sizeof(int));
&nbsp;&nbsp;point_ptr = (int*)calloc(Num,sizeof(int));
&nbsp;&nbsp;rank_ptr = (int*)calloc(Num,sizeof(int));

&nbsp;&nbsp;/*** データの入力 ***/
&nbsp;&nbsp;for (i = 0; i<100; i++) {
&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d", (point_ptr + i));
&nbsp;&nbsp;&nbsp;&nbsp;if(*(point_ptr + i) == -1) break; /* 入力終わり */
&nbsp;&nbsp;&nbsp;&nbsp;*(number_ptr + i) = i+1;
&nbsp;&nbsp;}
&nbsp;&nbsp;Num = i; /* データ人数 */

5名無しさん:2009/07/01(水) 12:47:49
&nbsp;&nbsp;/*** 点数順に並び替える (選択ソート) ***/
&nbsp;&nbsp;for (i = 0; i < Num-1; i++) {
&nbsp;&nbsp;&nbsp;&nbsp;/*** 順位 p を i で初期化 ***/
&nbsp;&nbsp;&nbsp;&nbsp;for (p = j = i; j < Num; j++) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*** 自分と全員の得点を比べ自分より高い得点の人がいたら ***/
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( *( point_ptr + j ) > *( point_ptr + p ) ){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*** 順位 p を j にする ***/
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p = j;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;/* i と 順位 p と入れ替える */
&nbsp;&nbsp;&nbsp;&nbsp;S = *(point_ptr + i), *(point_ptr + i) = *(point_ptr + p), *(point_ptr + p) = S;
&nbsp;&nbsp;&nbsp;&nbsp;S = *(number_ptr + i), *(number_ptr + i) = *(number_ptr + p), *(number_ptr + p) = S;
&nbsp;&nbsp;}

&nbsp;&nbsp;/*** 順番に並んでいるものの順位を調べる ***/
&nbsp;&nbsp;*(rank_ptr) = p = 1;
&nbsp;&nbsp;for (i = 1; i < Num; i++) {
&nbsp;&nbsp;&nbsp;&nbsp;if( *(point_ptr + i-1) > *(point_ptr + i))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p = i+1;
&nbsp;&nbsp;&nbsp;&nbsp;*(rank_ptr + i) = p;
&nbsp;&nbsp;}

&nbsp;&nbsp;printf(" 番号 得点 順位\n");
&nbsp;&nbsp;/*** 結果出力 ***/
&nbsp;&nbsp;for (i = 0; i < Num; i++) {
&nbsp;&nbsp;&nbsp;&nbsp;printf("%6d%6d%6d\n", *(number_ptr + i), *(point_ptr + i), *(rank_ptr + i));
&nbsp;&nbsp;}
&nbsp;&nbsp;free(number_ptr);
&nbsp;&nbsp;free(point_ptr);
&nbsp;&nbsp;free(rank_ptr);
&nbsp;&nbsp;return(0);
}

6名無しさん:2009/07/01(水) 22:32:32
#include <stdio.h>

/* chの個数を数える関数 */
unsigned str_chnum(const char str[], char ch)
{
unsigned len = 0;
int count = 0;

while (str[len]) {
if(str[len] == ch)
count++;
len++;
}

return(count);
}


int main(void)
{
char st[100];

printf("文字列を入力してください:");
scanf("%s", st);

printf("%cは%d個含まれています。\n", st[0], str_chnum(st, st[0]));

return(0);
}




間違ってたらゴメン

7<削除>:<削除>
<削除>

8<削除>:<削除>
<削除>

9名無しさん:2009/07/02(木) 12:22:35
/* バイナリーファイルの読み込みと、リスト構造でのソート */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct fseito { char cd[6]; char simei[20]; char kokugo[3], sansu[3], rika[3], syakai[3]; }; // ファイル仕様
struct seito {
&nbsp;&nbsp;char cd[6+1];
&nbsp;&nbsp;char simei[20+1];
&nbsp;&nbsp;int kokugo;
&nbsp;&nbsp;int sansu;
&nbsp;&nbsp;int rika;
&nbsp;&nbsp;int syakai;
&nbsp;&nbsp;struct seito *p; /* 自己参照型ポインター */
};
int main() {
&nbsp;&nbsp;struct fseito str;
&nbsp;&nbsp;struct seito *ptr, *nptr = NULL;
&nbsp;&nbsp;struct seito *S, **ptr1, **ptr2;
&nbsp;&nbsp;FILE *fp;
&nbsp;&nbsp;char kokugo[3+1], sansu[3+1], rika[3+1], syakai[3+1];
&nbsp;&nbsp;int n, m, num;

&nbsp;&nbsp;if ((fp = fopen("name.txt", "r")) == NULL) {
&nbsp;&nbsp;&nbsp;&nbsp;printf("ファイルがオープンできません。\n");
&nbsp;&nbsp;&nbsp;&nbsp;return 1;
&nbsp;&nbsp;}
&nbsp;&nbsp;/* 読み込み処理 */
&nbsp;&nbsp;for(num=0; fread(&str, sizeof(str), 1, fp) != 0; num++) {
&nbsp;&nbsp;&nbsp;&nbsp;if((ptr = calloc(sizeof(struct seito), 1)) == NULL) break;
&nbsp;&nbsp;&nbsp;&nbsp;strncpy(ptr->cd, str.cd, 6);
&nbsp;&nbsp;&nbsp;&nbsp;strncpy(ptr->simei, str.simei, 20);

10名無しさん:2009/07/02(木) 12:23:07
&nbsp;&nbsp;&nbsp;&nbsp;strncpy(kokugo, str.kokugo, 3); kokugo[3] = '\0'; ptr->kokugo = atoi(kokugo);
&nbsp;&nbsp;&nbsp;&nbsp;strncpy(sansu, str.sansu, 3); sansu[3] = '\0'; ptr->sansu = atoi(sansu);
&nbsp;&nbsp;&nbsp;&nbsp;strncpy(rika, str.rika, 3); rika[3] = '\0'; ptr->rika = atoi(rika);
&nbsp;&nbsp;&nbsp;&nbsp;strncpy(syakai, str.syakai, 3); syakai[3] = '\0'; ptr->syakai = atoi(syakai);
&nbsp;&nbsp;&nbsp;&nbsp;ptr->p = nptr; nptr = ptr;
&nbsp;&nbsp;};
&nbsp;&nbsp;/* 並べ替え処理(リスト構造でのバブルソート)(隣接する前後を交換) */
&nbsp;&nbsp;for(n = 0, ptr1 = &nptr; n<num-1; n++, ptr1 = &nptr) {
&nbsp;&nbsp;&nbsp;&nbsp;for(m = n; m<num-1; m++, ptr1 = &(*ptr1)->p) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptr2 = &(*ptr1)->p;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((*ptr1)->kokugo < (*ptr2)->kokugo) { /* 「国語」の点数で降順に並び替え */
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S = (*ptr1)->p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* 後ろの構造体の次ポインタをSに退避する */
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(*ptr1)->p = (*ptr2)->p;&nbsp;&nbsp;/* 後ろの構造体の次ポインタに、前の構造体の次ポインタの値をコピーする */
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S->p = *ptr1; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* 前の構造体の次ポインタが、後ろの構造体を指すようにする */
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*ptr1 = S;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* 後ろの構造体を指していたポインタを、前の構造体を指すようにする */
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;}
&nbsp;&nbsp;/* 表示処理 */
&nbsp;&nbsp;for(ptr = nptr, n = 0; ptr != 0 /* n<num */; ptr = ptr->p, n++) { /* どちらの条件判断でも終了出来る */
&nbsp;&nbsp;&nbsp;&nbsp;if(n%10 == 0) puts("コード   氏    名   国語 算数 理科 社会");
&nbsp;&nbsp;&nbsp;&nbsp;printf("%6s %20s %4d %4d %4d %4d\n",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptr->cd, ptr->simei, ptr->kokugo, ptr->sansu, ptr->rika, ptr->syakai);
&nbsp;&nbsp;}
&nbsp;&nbsp;/* 終了処理 */
&nbsp;&nbsp;for(ptr = nptr; ptr != 0; ptr = nptr) {
&nbsp;&nbsp;&nbsp;&nbsp;nptr = ptr->p;
&nbsp;&nbsp;&nbsp;&nbsp;free(ptr);
&nbsp;&nbsp;}
&nbsp;&nbsp;fclose(fp);
&nbsp;&nbsp;return 0;
}

11名無しさん:2009/07/03(金) 22:38:22
#include <stdio.h>
#define MAX_DATA 10
typedef struct {
&nbsp;&nbsp;char name[16+1];
&nbsp;&nbsp;int lang;
&nbsp;&nbsp;int prac;
&nbsp;&nbsp;int total;
} student_t;
int main() {
&nbsp;&nbsp;int cnt = 0;
&nbsp;&nbsp;char filename[256+1];
&nbsp;&nbsp;FILE *fp;
&nbsp;&nbsp;student_t person;

&nbsp;&nbsp;if(fgets(filename, 256, stdin) == NULL) return 1;
&nbsp;&nbsp;filename[strlen(filename)-1] = '\0';
&nbsp;&nbsp;if((fp = fopen(filename, "w")) == NULL) {
&nbsp;&nbsp;&nbsp;&nbsp;printf("%s file open error!", filename); return 1;}
&nbsp;&nbsp;while(cnt<MAX_DATA) {
&nbsp;&nbsp;&nbsp;&nbsp;scanf("%16s", person.name);
&nbsp;&nbsp;&nbsp;&nbsp;if(0 == strcmp(person.name, "-")) break;
&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d %d", &person.lang, &person.prac);
&nbsp;&nbsp;&nbsp;&nbsp;person.total = person.lang + person.prac;
&nbsp;&nbsp;&nbsp;&nbsp;fprintf(fp, "%s %d %d %d\n",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;person.name, person.lang, person.prac, person.total);
&nbsp;&nbsp;&nbsp;&nbsp;cnt++;
&nbsp;&nbsp;}
&nbsp;&nbsp;fclose(fp);
}

12名無しさん:2009/07/03(金) 22:39:08
#include <stdio.h>
typedef struct {
&nbsp;&nbsp;char name[16+1];
&nbsp;&nbsp;int lang;
&nbsp;&nbsp;int prac;
&nbsp;&nbsp;int total;
} student_t;
int main() {
&nbsp;&nbsp;char filename[256+1], kamoku;
&nbsp;&nbsp;FILE *fp;
&nbsp;&nbsp;student_t person;
&nbsp;&nbsp;int count = 0, point;

&nbsp;&nbsp;if(fgets(filename, 256, stdin) == NULL) return 1;
&nbsp;&nbsp;filename[strlen(filename)-1] = '\0';
&nbsp;&nbsp;if((fp = fopen(filename, "r")) == NULL) {
&nbsp;&nbsp;&nbsp;&nbsp;printf("%s file open error!", filename); return 1;}
&nbsp;&nbsp;scanf("%c %d", &kamoku, &point);
&nbsp;&nbsp;while(fscanf(fp, "%16s %d %d %d",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;person.name, &person.lang, &person.prac, &person.total) == 4){
&nbsp;&nbsp;&nbsp;&nbsp;switch(kamoku) {
&nbsp;&nbsp;&nbsp;&nbsp;case 'l' : if(point <= person.lang) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts(person.name); count = 1; } break;
&nbsp;&nbsp;&nbsp;&nbsp;case 'p' : if(point <= person.prac) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts(person.name); count = 1; } break;
&nbsp;&nbsp;&nbsp;&nbsp;case 't' : if(point <= person.total) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts(person.name); count = 1; } break;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;}
&nbsp;&nbsp;if(count == 0) puts("No one");
&nbsp;&nbsp;fclose(fp);
}

13名無しさん:2009/07/04(土) 08:02:52
#include <stdio.h>
char* Reverse(char *, int);
int main(){
&nbsp;&nbsp;char line[81];
&nbsp;&nbsp;int i=1, len;

&nbsp;&nbsp;do {
&nbsp;&nbsp;&nbsp;&nbsp;printf("非負の整数を入力してください: ");
&nbsp;&nbsp;&nbsp;&nbsp;if(fgets(line, 81, stdin) == NULL) return 1;
&nbsp;&nbsp;&nbsp;&nbsp;if(*line == '\n') continue;
&nbsp;&nbsp;&nbsp;&nbsp;for(len = 0; line[len] != '\n' && line[len] != '\0'; len++); line[len] = '\0';
&nbsp;&nbsp;&nbsp;&nbsp;for(i = len - 1; i>=0; i--)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if('0' > line[i] || line[i] > '9'){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("非負の整数以外が入力されました。\n");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;} while (i>=0);
&nbsp;&nbsp;printf("%s", line); // 関数のパラメータは、呼び出し順が左からではない為。
&nbsp;&nbsp;printf(" を逆から読むと%s です.\n", Reverse(line, len));
&nbsp;&nbsp;return 0;
}
char* Reverse(char *str, int length){
&nbsp;&nbsp;int i;
&nbsp;&nbsp;char tmp;

&nbsp;&nbsp;for(i=length/2-1; i>=0; i--) { // コードが最適化されるなら、for(i=0; i<length/2; i++)
&nbsp;&nbsp;&nbsp;&nbsp;tmp = str[i], str[i] = str[length-i-1], str[length-i-1] = tmp;
&nbsp;&nbsp;}
&nbsp;&nbsp;return str;
}


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板