Net[c-1]
-
Upload
yuushi-iso -
Category
Documents
-
view
67 -
download
0
Transcript of Net[c-1]
#include <stdio.h>#define IP_NUM 16 #define MAC_NUM 18void initi(char *my_ip,char *my_mac){
int i;for(i=3;i<IP_NUM;i+4)
*(my_ip+i) = ‘\0’;for(i=2;i<IP_NUM;i+3)
*(my_mac+i) = ‘\0’;}void getIpandMac(char *my_ip,char *my_mac){
int i;for(i=0;i<4;i++)
scanf(“%3s”,my_ip);for(i=0;i<6;i++)
scanf(“%2s”,my_mac);}void print(char *my_ip,char *my_mac){
printf(“%s,%s,%s,%s\n”,my_ip,my_ip,my_ip,my_ip);printf(“%s:%s:%s:%s:%s:%s\n”,
my_mac,my_mac,my_mac,my_mac,my_mac,my_mac,my_mac);}int main(int argc,char *argv[]){
char my_ip[IP_NUM],my_mac[MAC_NUM];initi(my_ip,my_mac);getIpandMac(my_ip,my_mac);print(my_ip,my_mac);return 0;
}
2
#include <stdio.h>#define IP_NUM 16 #define MAC_NUM 18void initi(char *my_ip,char *my_mac){
int i;for(i=3;i<IP_NUM;i+4)
*(my_ip+i) = ‘\0’;for(i=2;i<IP_NUM;i+3)
*(my_mac+i) = ‘\0’;}void getIpandMac(char *my_ip,char *my_mac){
int i;for(i=0;i<4;i++)
scanf(“%3s”,my_ip);for(i=0;i<6;i++)
scanf(“%2s”,my_mac);}void print(char *my_ip,char *my_mac){
printf(“%s,%s,%s,%s\n”,my_ip,my_ip,my_ip,my_ip);printf(“%s:%s:%s:%s:%s:%s\n”,
my_mac,my_mac,my_mac,my_mac,my_mac,my_mac,my_mac);}int main(int argc,char *argv[]){
char my_ip[IP_NUM],my_mac[MAC_NUM];initi(my_ip,my_mac);getIpandMac(my_ip,my_mac);print(my_ip,my_mac);return 0;
}
4
変数(variable)
値や文字を入れておく(記憶しておく) ”箱”
関数に変数を渡すのは、箱の中身(データ)を渡している
int 整数の箱、double 少数の箱、char 文字の箱
宣言:int num; char name[]=”variable”;
6
演算(operation)
数学の記号とは一部違う
”左辺=右辺”ではなく、”左辺に右辺を代入する”
上記より、左辺は変数や構造体になる
+→+、−→−、×→*、÷→/
例:a+3*(2-1)、num=a/3-3;数式は数学と同じ
”等しい”ではない
7
関数(function)
処理機能を入れた”箱”
関数の中に処理を書いて、別の関数で同じ処理が簡単に使えるようにする
宣言:void func(int num){printf(“%d\n”,num);}
char func2(){ char ch; scanf(“%c”,&ch); return ch; }
使う時はfunc(12);
みたいにできるch=func2();
8
演習
4文字の小文字のアルファベットを入力してその文字をカエサル暗号化し、表示するプログラム
文字は2だけシフトする
シフトする関数を作る
シフトの仕方:c = ’a’+1; //出力結果は’b’になる
9
制御(control)
繰り返し処理
for(初期化式;継続条件式;再初期化式){文}
for(i=0;i<10;i++){printf(“%d\n”,i);}
while(継続条件式){文}
while(n<10){printf(“%d\n”,n++);}
10
制御(control)
条件分岐処理if(分岐条件){}else{}
if(num>10){printf(“%d\n”,num)}else{num=0};
多方向分岐処理
switch(式){case:定数式 文;break;・・・ }
switch(num){case:1 a=10;break; case:4 a=1;break;}
11
演算(operation)
カエサル暗号化のプログラムを制御文を使って簡単にする。また、以下の機能を追加する。
シフトする数は入力させる
シフト範囲をa-zにする(例:a→c、y→a、z→b)
補足)printf(“%d %d\n”,’a’,’z’)をやってみる
13
構造体(structure)
複数の変数をまとめて入れておける”箱”
struct 名前{変数1変数2・・・・・
};struct user{
char ip[12];char *hostname;short port ;
};14
struct user{char ip[12];char *hostname;short port ;
};
int main(){struct user client;
client.port=20;
printf(“%d\n”,client.port);return 0;
}
” . ”で中身を指定
15
int main(){int *p1 , *p2;int num1 = 1 , num2;
*p2 = &num2;p1 = &num1; *p2 = num;
printf(“%d %d %d %d\n”,num,*p1,*p2,num2);return 0;
}
出力は 1 1 1 1
“&”でアドレスは表す
18
void func(int *num , char *str){int i;for(i=0;i<strlen(str);i++)
str[i]+=*num;printf(“%s\n”,str);*num=strlen(str);
}int main(){
int num; char str[12];scanf(“%d”,&num); scanf(“%s”,str);func(&num , str);printf(“%d\n”,num);
}
strlen()は文字列の長さを取得する関数
19