Powered by SmartDoc

ソフトウェア概論A/B (2014/05/23)
Ver. 1.0

2014年5月23日
栗野 俊一
kurino@math.cst.nihon-u.ac.jp
http://edu-gw2.math.cst.nihon-u.ac.jp/~kurino/2014/soft/soft.html
ソフトウェア概論 A/B2014年5月23日 の資料

目次

講義資料

当日の OHP 資料

講義で利用するサンプルプログラム

サンプルファイル

Download : sample-001.c ( SJIS 版 )

sample-001.c
/*
 * CDATE sample-001.c
 */

/*
 * "Hello, World" again
 */

#include <stdio.h>

int main ( void ) {

printf ( "Hello, World\n" );	/* "Hello, World" という文字列と改行 ( "\n" ) を表示する */

  return 0;
}
sample-001.c の実行結果
C:\usr\c>sample-001
C:\usr\c> 

Download : sample-002.c ( SJIS 版 )

sample-002.c
/*
 * 2014/05/23 sample-002.c
 */

/*
 * プログラム・ノックアウト (1)
 */

#include <stdio.h>

int main ( void ) {

	/* まず、printf をノックアウト */

  return 0;
}
sample-002.c の実行結果
C:\usr\c>sample-002
C:\usr\c> 

Download : sample-003.c ( SJIS 版 )

sample-003.c
/*
 * 2014/05/23 sample-003.c
 */

/*
 * プログラム・ノックアウト (2)
 */

/*
 * main 関数もなくしたら ?
 */

/* ここには何もない */
sample-003.c の実行結果
c:\\usr\\c> cc -c sample-003.c
c:\\usr\\c> cc -o sample-003.exe sample-003.o
/usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/crt1.o: \
    In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld はステータス 1 で終了しました
c:\\usr\\c> 

Download : sample-004.c ( SJIS 版 )

sample-004.c
/*
 * 2014/05/23 sample-004.c
 */

/*
 * プログラム・ノックアウト (3)
 */

/*
 *	#include <stdio.h> // #include を無くした
 */

int main ( void ) {

  printf ( "Hello, World\n" );	/* ここで「警告」が出る */

  return 0;
}
sample-004.c の実行結果
C:\usr\c> cc -c sample-004.c
sample-004.c:17:3: 警告: 組み込み関数 ‘printf’ の互換性がない暗黙的な宣言です [デフォルトで有効]

Download : sample-005.c ( SJIS 版 )

sample-005.c
/*
 * 2014/05/23 sample-005.c
 */

/*
 * プログラム・ノックアウト (4)
 */

/*
 *	#include <stdio.h> // #include を無くした
 */

int main ( void ) {

	/* printf も使わないと、「警告」はなくなった */

  return 0;
}
sample-005.c の実行結果
C:\usr\c>sample-005
C:\usr\c> 

Download : sample-006.c ( SJIS 版 )

sample-006.c
/*
 * 2014/05/23 sample-006.c
 */

/*
 * プログラム・ノックアウト (5)
 */

void main ( void ) {	/* int を void に変更 */

	 /* return 0; を削って、空っぽにする */
}

/*
	最も短い C 言語プログラムの実現
*/
sample-006.c の実行結果
C:\usr\c>sample-006
C:\usr\c> 

Download : sample-007.c ( SJIS 版 )

sample-007.c
/*
 * 2014/05/23 sample-007.c
 */

/*
 * プログラム・ノックアウト (6)
 */

/*
 *	#include の代りに printf の extern 宣言
 */

extern int printf ( const char *message, ... );

	/* 「extern void printf ( char *message );」 ではない ?? */

/*
 * main
 */

int main ( void ) {

  printf ( "Hello, World\n" );	/* 「警告」が消えた */

  return 0;
}
sample-007.c の実行結果
C:\usr\c>sample-007
Hello, World
C:\usr\c> 

Download : sample-008.c ( SJIS 版 )

sample-008.c
/*
 * 2014/05/23 sample-008.c
 */

#include <stdio.h>

/*
 * 文字列を三度表示する : 関数定義の例
 */

void threeTimesPrint ( char *message )	{

	 printf ( message );		/* 一度目 */
	 printf ( message );		/* ニ度目 */
	 printf ( message );		/* 三度目 */

}

/*
 * main
 */

int main(void) {

	threeTimesPrint ( "Hello\n" );		/* 関数呼出しの例 */

	threeTimesPrint ( "こんにちは\n" );

	return 0;
}
sample-008.c の実行結果
C:\usr\c>sample-008
Hello
Hello
Hello
こんにちは
こんにちは
こんにちは
C:\usr\c> 

Download : sample-009.c ( SJIS 版 )

sample-009.c
/*
 * 2014/05/23 sample-009.c
 */

#include <stdio.h>

/*
 * echo_char ( char ch )
 *	char ch	--	引数で指定された文字
 *		引数で指定された文字を『』付で出力
 */

void echo_char ( char ch )	{

	 printf ( "『" );
	 putchar ( ch );		/* 引数で指定された文字を出力する */
	 printf ( "』" );
}

/*
 * main
 */

int main(void) {

	printf ( "何か文字を入れてから[Enter]キーを押す : " );
	echo_char ( getchar() );	/* getchar() で文字を読込み、それを出力 */
	putchar ( '\n' );

	return 0;
}
入力例
A
sample-009.c の実行結果
C:\usr\c>sample-009<  sample-009.in
何か文字を入れてから[Enter]キーを押す : 『A』
C:\usr\c> 

Download : sample-016.c ( SJIS 版 )

sample-016.c
/*
 * 2014/05/23 sample-016.c
 */

#include <stdio.h>

/*
 * check_star_char
 */

void check_star_char ( char ch ) {

	if ( ch == '*' ) {		/* ch の中身が '*' かどうかをチェック */
	 	printf ( "これは「*」です\n" );
	} else {
	 	printf ( "これは「*」ではありません\n" );
	}

}

/*
 * main
 */

int main(void) {

	check_star_char ( getchar() );	/* getchar() で文字を読込み、それを出力 */

	return 0;
}
入力例
A
sample-016.c の実行結果
C:\usr\c>sample-016
これは「*」ではありません
C:\usr\c> 

講議中に作成したプログラム

本日の課題

課題 20140523-01 : キーボードから一文字入力し、その文字によって異る国の挨拶をする

Download : 20140523-01.c ( SJIS 版 )

20140523-01.c
/*
 * CDATE FILENAME
 *
 *	キーボードから一文字入力し、その文字によって異る国の挨拶をする
 */

#include <stdio.h>

/*
 * hello ( char contry )
 *	char contry : 国を表す一文字
 *		j : 日本
 *		e : 英語
 *		c : 中国
 *		f : フランス語
 *		g : ドイツ語
 */

void hello ( char cmd ) {

	if ( cmd == 'j' ) {				/* 'j' の時は、日本語にする */
		printf ( "こんにちは\n" );
	} else if ( cmd == 'e' )	{	/* 'e' の時は、英語にする */

	/*
	**	 この部分を完成させなさい
	*/

	} else if ( cmd == 'c' )	{	/* 'c' の時は、中国語にする */
		printf ( "ニイハオ\n" );
	} else if ( cmd == 'f' )	{	/* 'f' の時は、フランス語にする */
		printf ( "Bonjour\n" );

	/*
	**	 この部分を完成させなさい
	*/

		printf ( "Guten tag\n" );
	} else {						/* どれでもなければ.. */
		printf ( "???\n" );
	}

}


/*
 *	main
 */

int main( void )
{

	printf ( "国を表す文字を入力してください\n" );
	printf ( "\tj\t日本\n" );
	printf ( "\te\t英語\n" );
	printf ( "\tc\t中国\n" );
	printf ( "\tf\tフランス\n" );
	printf ( "\tg\tドイツ\n" );

	hello ( getchar() );	/* getchar() で文字を入力し、それに対応する結果を出す */

	 return 0;
}
入力例
f
20140523-01.c の実行結果
C:\usr\c\> 20140523-01-QQQQ
国を表す文字を入力してください
	j	日本
	e	英語
	c	中国
	f	フランス
	g	ドイツ
Bonjour
C:\usr\c\> 

課題 20140523-02 : キーボードから一行(改行まで..)文字列を読込み、それを逆順に出す

Download : 20140523-02.c ( SJIS 版 )

20140523-02.c
/*
 * CDATE FILENAME
 *
 *	キーボードから一行(改行まで..)文字列を読込み、それを逆順に出す
 */

#include <stdio.h>

/*
 * reverse ( char contry )
 *	char cmd : どのメッセージにするかを表す文字
 *		
 */

void reverse_line ( char ch ) {

	if ( ch == '\n' )	{			/* 改行ならば.. */
		/* なにもしなくてよい */
	} else {						/* そうでなければ.. */

	/*
	**	 この部分を完成させなさい
	*/

	}
}


/*
 *	main
 */

int main( void )
{

	reverse_line ( getchar() );	/* 最初の文字を読み込んで .. */
	putchar ( '\n' );			/* 改行を出力 */

	return 0;
}
入力例
abc123
20140523-02.c の実行結果
C:\usr\c\> 20140523-02-QQQQ
321cba
C:\usr\c\> 

課題 20140523-03

先週(2014/05/23)の課題 20140516-03をする。

Links

その他