パソコン活用研究シリコンバレー(C、C++、の活用研究)

簡単な計算系のプログラム(基礎編)

(準備中)

------------------------------------summery-----------------------------------------------------
Very short programs with outputting to simple standard output (screen display).
簡単な標準出力への出力(画面表示)の超ショートプログラムです。
-------------------------------------------------------------------------------------------------

簡単な標準出力への出力(画面表示)問題

1 連続する「*」を出力する

入力
正の整数N が入力される。
1 ≦ N ≦ 50
出力
N 個の「*」を繋げた文字列を出力する。
(最後は改行し、余計な文字、空行を含まない)

ひとつめは for 文で回すプログラム


#include <stdio.h>
int main(void){
int i,n;
scanf("%d", &n);
for(i=1;i<=n;i++){
printf("*");
}
printf("\n");
return 0;
}

実行例
c:\bcc55\Bin>nout
7
*******


2つめはwhileを使うプログラム

c:\bcc55\Bin>


#include <stdio.h>
int main(void){
int i,n;
scanf("%d", &n);
i=1;
while(i<=n){
printf("*");
i++;
}
printf("\n");
return 0;
}

実行例
c:\bcc55\Bin>nout2
11
***********

c:\bcc55\Bin>


2 小文字を大文字に変換する
長さ n の半角アルファベットの小文字の文字列 s を大文字に変換する


入力値
文字列sが入力される
条件
1 ≦ n ≦ 100
s は半角アルファベットの小文字のみ

出力
s を大文字に変換した文字列
(最後は改行し、余計な文字、空行を含まない)



入力  abc
出力  ABC


toupperで小文字を大文字に変換する

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

#include<ctype.h>

int main(void){
int i,n;
char l[100];
scanf("%s", l);
n=strlen(l);

for(i=0;i<n;i++){
printf("%c",toupper(l[i]));
}
printf("\n");

return 0;
}

c:\bcc55\Bin>upper
abcdefghijk
ABCDEFGHIJK

c:\bcc55\Bin>upper
zghbndoiknb
ZGHBNDOIKNB

c:\bcc55\Bin>


for文の判定条件のなかにstrlenを直接書いた

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

int main(void){
int i;
char l[100];
scanf("%s", l);
for(i=0;i<strlen(l);i++){
printf("%c",toupper(l[i]));
}
printf("\n");

return 0;
}

c:\bcc55\Bin>upper2
ykajsibvc
YKAJSIBVC

c:\bcc55\Bin>


toupperを使わず、文字コード(アスキーコード)の数値を直接変更したケース

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

int main(void){
int i;
char l[100];
scanf("%s", l);
for(i=0;i<strlen(l);i++){
printf("%c",l[i]-32);
}


printf("\n");

return 0;
}

c:\bcc55\Bin>upper3
hadsxzbmkijhdfret
HADSXZBMKIJHDFRET


3 文字列の結合
3つの文字列が与えられるので、"Which do you like " とそれらの文字列をすべて半角スペース区切りで結合して、末尾には"?"を出力する。

入力値
s_1 s_2
3つの文字列 s1 s2 s3 が与えられます。入力は 1 行で、各文字列は空白で区切られ、末尾に改行が 1 つ入る。
・s1, s2 は英字で構成される文字列 (半角スペース等は含まない)
・s1,s2,s3の文字列の長さは20文字以内

出力
"Which do you lile", s1, s2, s3 を半角スペース区切りで結合して末尾には"?"出力する。
(出力の末尾に改行を 1 つ入れ、余計な文字、空行を含まない)



#include <stdio.h>

int main(void){

char s1[30],s2[30],s3[30];

scanf("%s %s %s", s1,s2, s3);


printf("Which do you like %s %s %s?\n", s1,s2,s3);

return 0;
}


c:\bcc55\Bin>combchar
wine or beer
Which do you like wine or beer?

c:\bcc55\Bin>combchar
cat or dog
Which do you like cat or dog?


strcatを使って文字列を連結してから出力する例


#include <stdio.h>

#include<string.h>

int main(void){

char *s,s1[30],s2[30],s3[30];

scanf("%s %s %s", s1,s2, s3);


strcat(s1," ");
strcpy(s,s1)
;
strcat(s2," ");

strcat(s,s2);
strcat(s,s3);
printf("Which do you like %s?\n", s);

return 0;
}

c:\bcc55\Bin>combchar2
bird or fish
Which do you like bird or fish?

c:\bcc55\Bin>combchar2
apple or orange
Which do you like apple or orange?



4 名前から頭文字をとり出力
苗字と名前からそれぞれ 1文字目を取りイニシャルを作る。
苗字と名前が間に半角スペースで区切られて入力される。それぞれ、1文字目を取り "." (半角ドット)で区切った文字列を出力してください。
ただし、イニシャル名前のイニシャル.苗字のイニシャルの順にする。

入力値
m n
入力値最終行の末尾に改行が1つ入ります。
・2 ≦ 文字列 m, n の長さ ≦ 20

出力
m, n から初めの1文字を取り n, m の順で "." (半角ドット)で区切った文字列を1行で出力する。
(最後は改行し、余計な文字、空行を含まない)


入力 Yamada Taro
出力 T.Y


#include <stdio.h>
int main(void){

char *m,*n, dummy1[20], dummy2[20];
m=dummy1;
n=dummy2;

scanf("%s %s", m,n);
printf("%c.%c", n[0],m[0]);
return 0;
}

c:\bcc55\Bin>initial
Yamada Taro
T.Y
c:\bcc55\Bin>initial
Kobayashi Hanako
H.K
c:\bcc55\Bin>


#include <stdio.h>
int main(void){

char m[20],n[20];
scanf("%s %s", m,n);
printf("%c.%c", n[0],m[0]);
return 0;
}

c:\bcc55\Bin>initial1
Takahashi Ichiro
I.T
c:\bcc55\Bin>initial1
Ogawa Jun
J.O
c:\bcc55\Bin>


5 文字列から先頭の5文字を取り出し出力する
入力された文字列の先頭の5文字を取り出し出力する。

入力値
m
入力値最終行の末尾に改行が1つ入ります。
・5 ≦ 文字列 m, の長さ ≦ 20

出力
m,の先頭の5文字を1行で出力する。
(最後は改行し、余計な文字、空行を含まない)


入力 abcd12345
出力 abcd1


strncpy関数を使う
strncpy関数は文字列処理関数を参照

#include <stdio.h>
#include <string.h>
int main(void){

char m[20],n[10]="\0";

scanf("%s", m);
strncpy(n,m,5);
printf("%s", n);
return 0;
}

c:\bcc55\Bin>strncpy
abc123#$def456
abc12
c:\bcc55\Bin>strncpy
(TTY)1234=+*
(TTY)
c:\bcc55\Bin>


strncpy関数をつかわずにベタで文字を転写するやりかた

#include <stdio.h>
int main(void){

char m[20],n[10]="\0";
int i;
scanf("%s", m);
for(i=0; i<5; i++) {
n[i]=m[i]; }
n[5]='\0';
printf("%s", n);
return 0;
}

c:\bcc55\Bin>strncpy2
123&%abc<>?
123&%
c:\bcc55\Bin>strncpy
zxcvb123098
zxcvb
c:\bcc55\Bin>







TopPage