【極秘】C言語の問題を教えてください。答えがなく困っているのでコメントも付

C言語の問題を教えてください。答えがなく困っているのでコメントも付…

C言語の問題を教えてください。答えがなく困っているのでコメントも付…

C言語の問題を教えてください。答えがなく困っているのでコメントも付けていただけると助かります。 実行結果1のようになるようにしたいのですが実行結果2のようになってしまいます。
<問題>
実行結果例1になるように、下のプログラム中のprinttreeとmax_vを完成させなさい。
<実行結果1>
INSERT: 32 16 38 7 25 59 42 95 4 18 81
4
7
16
18
25
32
38
42
59
81
95
insert 23
4
7
16
18
23
25
32
38
42
59
81
95
The element 23 is found at 0x17d2170
max_v is 95
<実行結果2>
INSERT: 32 16 38 7 25 59 42 95 4 18 81
insert 23
The element 23 is found at 0x209d170
<実行結果2のプログラム>
#include
#include
typedef struct node{
int data;
struct node *leftson;
struct node *rightson;
} Node;
Node *search (int x);
void new (Node **w);
void insert (int x);
void delete (int x);
void nfree (Node *n);
void printtree(Node *n, int h);
int max_v(Node *n);
Node *v, *root;
Node *search(int x){
v = root;
while(v != NULL){
if (v->data == x) {
return(v);
}
if (v->data > x) {
v = v->leftson;
}
else {
v = v->rightson;
}
}
printf (“The element is not in S\n”);
return (NULL); }
void new (Node **w) {
*w = (Node *)malloc(sizeof(Node));
(*w)->leftson = NULL;
(*w)->rightson = NULL;
}
void insert(int x){
Node *p = NULL;
Node *w;
v = root;
while(v != NULL) {
p = v;
if (v->data > x){
v = v->leftson;
} else {
v = v->rightson;
}
}
new(&w);
w->data = x;
if (p->data > x){
p->leftson = w;
}
else {
p->rightson = w;
}
}
void nfree(Node *n){
if(n->leftson != NULL) {
nfree(n->leftson);
}
if(n->rightson != NULL){
nfree(n->rightson);
}
free(n);
}
int main(void){
int i;
new(&root);
root->data = S[0];
printf(“INSERT:%3d”, S[0]);
for (i=1; i<11; i++){ insert(S[i]); printf("%3d", S[i]); } printf("\n"); insert(23); printf("insert 23\n"); printf("The element 23 is found at %p\n",search(23)); nfree(root); return 0; }

アンサー

#include
#include
typedef struct node{
int data;
struct node *leftson;
struct node *rightson;
} Node;
Node *search (int x);
void new_ (Node **w);
void insert_ (int x);
void delete_ (int x);
void nfree (Node *n);
void printtree(Node *n, int h);
int max_v(Node *n);
Node *v, *root;
int S[11]={32,16,38,7,25,59,42,95,4,18,81};
Node *search(int x){
v = root;
while(v != NULL){
if (v->data == x) {
return(v);
}
if (v->data > x) {
v = v->leftson;
}
else {
v = v->rightson;
}
}
printf (“The element is not in S\n”);
return (NULL);
}
void new_ (Node **w) {
*w = (Node *)malloc(sizeof(Node));
(*w)->leftson = NULL;
(*w)->rightson = NULL;
}
void insert_(int x){
Node *p = NULL;
Node *w;
v = root;
while(v != NULL) {
p = v;
if (v->data > x){
v = v->leftson;
} else {
v = v->rightson;
}
}
new_(&w);
w->data = x;
printf (” %d”,w->data);
if (p->data > x){
p->leftson = w;
}
else {
p->rightson = w;
}
}
void nfree(Node *n){
if(n->leftson != NULL) {
nfree(n->leftson);
}
if(n->rightson != NULL){
nfree(n->rightson);
}
free(n);
}
void printtree(Node *n, int h){
if ( n == NULL ){ return; }
printtree( n->leftson , 0 );
if ( n != root ){ printf(“%3d\n”, n->data); }
printtree( n->rightson , 0 );
return;
}
int max_v(Node *n){
if ( n ->rightson == NULL ){
return n->data;
}else{
max_v(n->rightson);
}
}
int main(void)
{
int i;
new_(&root);
printf(“INSERT:”);
for ( i = 0 ; i < 11 ;i++ ){ insert_( S[i] ); } printf("\n\n"); printtree(root, i ); printf("\n\n"); printf("\n"); printf("insert :"); insert_(23); printf ( "\n"); v = root ; printtree( v , 0 ); printf("The element 23 is found at %p\n",search(23)); v = root; printf (" maxvalue is :%2d", max_v (v) ); nfree(root); return 0; } ツリー構造で検索すれば、詳しく書かれているサイトがたくさん出てくるので、コメントはつけません。 (丁寧に書くとすると、書ききれない)


質問タグ:rightson,leftson,void nfree,n&quot,int x,void printtree

c言語の問題です リストはデータ構造の一種である。前の要素や次の要…

c言語の問題です リストはデータ構造の一種である。前の要素や次の要…

c言語の問題です
リストはデータ構造の一種である。前の要素や次の要素への参照情報をもつもので、通常はポインタを用いて実現する。 「文字」(char)と「直前の構造体変数を指し示すポインタ」をメンバに持つ構造体を宣言しておき、キーボードから1行の半角文字(文字数は任意とする)を入力しながら、各文字を構造体変数に格納した後、入力と逆の順番で各文字を出力するプログラムを作成せよ。
【ヒント】 関数 getchar()と malloc()を利用する。
実行例
$ /output
文字1行を入力:hello the world!
出力:!dlrow eht olleh
という問題がわかりません。
#include
#include
#include
typedef struct message{
char word;
struct message *next;
}message_type;
int main(){
message_type *root,*cur_p,*pre_p,*p;
int n = 20;//要素数
int i;
printf(“文字1行を入力:”);
for(i = 1;i <= n;i++){ cur_p = malloc(sizeof(message_type)); if(i == 1){ root = cur_p; pre_p = cur_p; }else{ pre_p -> next = cur_p;
cur_p -> word = getchar();
cur_p -> next = NULL;
pre_p = cur_p;
}
}
p = root;
while(p != NULL){
printf(“%c”,p->word);
p = p -> next;
free(p);
}
}
こう書いて、とりあえず逆順にせずにリスト化しようと試みたのですが、abortedで処理は終わってしまいますし、そもそも処理を終了する条件も元々で決めた要素の数だけ繰り返すとすると
入力する文字1行の文字数もそれに合わせたりしないといけないわけでよくわかりません。
getchar()をどう使えば例のようになるかもわかりません。
リスト化するプログラムの仕組みもmalloc()の使い方も完全には理解できていません。
教えていただけないでしょうか。

アンサー

/*
—–実行結果—–
文字1行を入力:Let’s enjoy programming
出力:gnimmargorp yojne s’teL
*/
#include
#include
#include
typedef struct message {
char word;
struct message *next;
}message_type;
int main() {
message_type *root = NULL, *cur_p;
int c;
printf(“文字1行を入力:”);
while((c = getchar()) != ‘\n’){
//改行を読み込むまで
cur_p = malloc(sizeof(message_type));
cur_p->word = (char)c;
cur_p->next = root;
root = cur_p;
}
printf(“出力:”);
cur_p = root;
while (cur_p != NULL) {
message_type *p = cur_p;
printf(“%c”, cur_p->word);
cur_p = cur_p->next;
free(p);
}
printf(“\n”);
return 0;
}


質問タグ:include&lt,dlrow eht olleh,getchar,hello the world,構造体変数,printf,stdio.h&gt

c言語でのプログラミングで二つ質問です 1.二つの整数a,bを入力し、a …

c言語でのプログラミングで二つ質問です 1.二つの整数a,bを入力し、a …

c言語でのプログラミングで二つ質問です 1二つの整数a,bを入力し、a -bの絶対値|a-b|を出力するプログラム
2正の整数nを入力し1からnまでの積を出力するプログラム
の書き方を教えて下さい(T-T)
お願いします。゚(゚´ω`゚)゚。

アンサー

#include
#include int fact(int n){
__int ans=1, i;
__for(i=2;i<=n;i++){ans*=i;} __return ans; } int main(void){ __int a, b, n; __scanf("%d %d", &a, &b); __printf("|a-b|=%d\n", abs(a-b)); __scanf("%d", &n); __printf("fact(%d)=%d\n", n, fact(n)); __return 0; }


質問タグ:

Cutie Honey Universeは前作など見てなくても大丈夫でしょうか?

Cutie Honey Universeは前作など見てなくても大丈夫でしょうか?

Cutie Honey Universeは前作など見てなくても大丈夫でしょうか?

アンサー

前作は、評価が高かったので観ない方が良いです。
新作は、シリーズ構成をしている方が悪評高い人物なので
駄作と言われています。


質問タグ:前作,悪評高い人物,シリーズ構成,駄作,新作