第3回講義演習課題
問題0 下記のプログラムを次の条件を満たすように完成させよ.
(1)学籍番号id(int型),名前name(*char)をメンバーとして持つ構造体 _student を宣言し、typedefでStudentと再定義しなさい
(2)Studnet型の変数gakuseiにたいして、番号を10番、名前を近大太郎としてデータを格納しなさい
(3)Student型とするgakuseiという配列を以下のように宣言した.3番目の学生の学籍番号と名前を出力するプログラム書け。
#include <stdio.h>
#include <stdlib.h>
/* 構造体の定義 */
typedef struct _student {
} ;
/* 学生の番号と名前を入出力する例 */
void kadai31(void){
Student gakusei;
printf( );
}
/* 3番目の学生の番号と名前を出力する例 */
void kadai32(void){
Student gakusei[] = {135, "Aさん", 85, "Bさん", 54, "Cさん", 8, "Dさん", 12, "Eさん"};
printf( );
}
問題1 ポインタを用いて問題0の(2)と同様の出力をするプログラムを完成させよ
void kadai33(){
Student *node = (Student*)calloc(1, sizeof(Student));
}
問題2
名前(文字列,name)を入力し、それをそのまま出力するプログラム(関数kadai3_1())を書き、実行せよ。
void kadai3_1(){
//変数宣言(変数名をnameとして書いてください)
printf("名前を入力してください:");
fgets(name, 50, stdin);
//以下はゴミを取り除く作業(とりあえず気にしない)
char *c = strchr(name, '\n');
*c='\0';
fflush(stdin);
printf("入力内容は以下のとおりです\n");
//出力処理 printfで出力
}
問題3
3人分の名前を入力し、それを多次元配列(文字列,names)に格納してそのまま出力するプログラム(関数kadai3_2())を書き、実行せよ。
void kadai3_2(){
//多次元配列宣言
for(int i=0;i<3;i++){
printf("名前を入力してください:");
fgets(names[i], 50, stdin);
//以下はゴミを取り除く作業(とりあえず気にしない)
char *c = strchr(names[i], '\n');
*c='\0';
fflush(stdin);
}
printf("入力内容は以下のとおりです\n");
//printf文をここに書いてください
}
printf("Enterを押して終了\n");
}
問題4
ポインターとmallocによる領域生成により問題2と同じ挙動をするプログラムを作成せよ
void kadai3_3(){
char *name;
/* 文字列のためのメモリを確保 */
name = (char *)malloc(50);
if(name == NULL) {
printf("メモリが確保できません\n");
exit(1);
}
/* 文字列を入力 */
printf("名前を入力してください:");
fgets(name, 50, stdin);
char *c = strchr(name, '\n');
*c='\0';
fflush(stdin);
printf("入力内容は以下のとおりです\n");
printf("%s\n",name);
}
問題5
ポインターとmallocによる領域生成により問題2と同じ挙動をするプログラムを作成せよ
void kadai3_4(){
//ポインタ変数宣言する names
for(int i=0;i<3;i++){
/* 文字列のためのメモリを確保 */
names[i] = (char *)malloc(50);
if(names[i] == NULL) {
printf("メモリが確保できません\n");
exit(1);
}
/* 文字列を入力 */
printf("名前を入力してください:");
fgets(names[i], 50, stdin);
char *c = strchr(names[i], '\n');
*c='\0';
fflush(stdin);
}
printf("入力内容は以下のとおりです\n");
for(int i=0;i<3;i++){
printf("%s\n",names[i]);
}
}