C言語問題 その2

  目次



その1     その2     その3

応用の1





  (1) 関数作成



消費税を計算する関数を作成してください

  
#include <stdio.h>

int main()
{
	int nData = 2000;

	printf( "消費税 = %d\n", Tax( nData ) );

	return 0;
}
  



  (2-1) ポインタを引数とする関数作成

消費税を元の金額に計上する関数を作成してください

  
#include <stdio.h>

int main()
{
	int nData = 2000;

	Tax( &nData );

	printf( "支払金額 = %d\n", nData );

	return 0;
}
  



  (2-2) 参照を引数とする関数作成

消費税を元の金額に計上する関数を作成してください

  
#include <stdio.h>

int main()
{
	int nData = 2000;

	Tax( nData );

	printf( "支払金額 = %d\n", nData );

	return 0;
}
  



  (3) 文字列配列のソート

以下のコードは整数配列をソートする例です
これをふまえて、文字列をソートして下さい
(文字列の比較は strcmp を使用します )

qsort の詳細は Microsoft の こちら を参照して下さい

  
#include <stdio.h>
#include <stdlib.h>

int compare( const void *arg1, const void *arg2 );

int main()
{
	int a[10] = {5,2,3,8,1};

	qsort( a, 5, 4, compare );

	int i;
	for( i = 0; i < 5; i++ ) {
		printf( "%d\n", a[i] );
	}

	return 0;
}

int compare( const void *arg1, const void *arg2 )
{
	int nRet;

	if ( (*(int *)arg1) == (*(int *)arg2) ) {
		nRet = 0;
	}
	if ( (*(int *)arg1) < (*(int *)arg2) ) {
		nRet = -1;
	}
	if ( (*(int *)arg1) > (*(int *)arg2) ) {
		nRet = 1;
	}
	return nRet;
}
  

  
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int compare( const void *arg1, const void *arg2 );

int main()
{
	char *a[10] = {"ZZZ","AAA","NNN","OOO","555", "???" };

	qsort( 引数を記述 );

	int i;
	for( i = 0; i < 6; i++ ) {
		printf( "%s\n", a[i] );
	}

	return 0;
}

int compare( const void *arg1, const void *arg2 )
{
	int nRet;

	// ここにコードを記述

	return nRet;
}
  



  (4) 文字列配列の作成

問題(3) の char *a[10] = {"ZZZ","AAA","NNN","OOO","555", "???" };
の代わりに、char *a[10]; と char buff[80] = "ZZZ,AAA,NNN,OOO,555,???";
を使用して下さい

qsort の引数は以下の意味を持ちます( 4 つ )
1) 並べ替える配列の先頭
2) 配列の要素数
3) 配列の要素のサイズ (バイト数)
4) 比較関数

  
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int compare( const void *arg1, const void *arg2 );

int main()
{
	char *a[10];
	char buff[80] = "ZZZ,AAA,NNN,OOO,555,???";

	int idx,pos,len;
	a[0] = buff;
	pos = 1;
	len = strlen( buff );
	for( idx = 0; idx < len; idx++ ) {
		// ここにコードを記述
	}

	qsort( 引数を記述 );

	int i;
	for( i = 0; i < 6; i++ ) {
		printf( "%s\n", a[i] );
	}

	return 0;
}

int compare( const void *arg1, const void *arg2 )
{
	int nRet;

	// ここにコードを記述

	return nRet;
}
  



  (5) 言語拡張マクロ

以下のループ処理は、処理 の部分で level の値を変更して break する事によって
任意のレベルのループを脱出します

この処理をマクロを使用して見やすく利用しやすくしてください

  
#include <stdio.h>

#define MLOOP \
	int level; \
	while( 1 ) { \
		level = 0;

#define MEND }

int main()
{

	int level;
	while( 1 ) {	// level 0
		level = 0;

		// 処理

		while( 1 ) {	// level 1
			level = 1;

			// 処理

			while( 1 ) {	// level 2
				level = 2;

				// 処理
				level = -1;	// 全てのループを脱出
				break;

			}
			if ( level < 1 ) {
				break;
			}

			// 処理

		}
		if ( level < 0 ) {
			break;
		}

		// 処理

	}

	return 0;
}
  



  (6) 関数マクロ引数の文字列化

  
以下のコードを実行すると

<A href="http://hp.vector.co.jp/authors/VA003334/">lightbox</A>

と表示されますが、同じ記述を使用して、

PRINT(s,(LPTSTR)bstrHtml) で同じ結果が表示されるマクロを作成して下さい
  

  
#include <stdio.h>
#include <comdef.h>

#define A(href,string) \
	bstrHtml = ""; \
	bstrHtml += "<A href="; \
	bstrHtml += #href ; \
	bstrHtml += ">"; \
	bstrHtml += string ; \
	bstrHtml += "</A>";

int main()
{
	_bstr_t bstrHtml;

	A("http://hp.vector.co.jp/authors/VA003334","lightbox")

	printf( "%s\n", (LPTSTR)bstrHtml );
//	PRINT(s,(LPTSTR)bstrHtml)

	return 0;
}
  










  infoboard   管理者用   





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ