C++配列の合計値と平均の求め方
今回は配列の初級編である数字を配列に格納して合計値と平均値を求める方法についてご紹介します。
<サンプルコード>
#include <stdio.h>
#include <math.h>
int main(void)
{
int i;
int sum = 0;
int a[12];
for( i=1; i<=10; i++ ){
printf("%d:",i);
scanf("%d",&a[i]);
sum += a[i];
}
printf("合計値 :%5d", sum);
printf("平均値 :%5.1f", (double)sum / i);
return 0;
}
______________________________________________
math.hは使う必要はないかもしれませんが計算ごとの時は入れたほうがいいです。
UDPのC++
UDPを使いよりbyteの高いものを送る実験ようプログラミング
<client.c>
/*プログラムの説明*/
/*バイト数と送信回数を変更しサーバーにUDPのプロトコルでサーバへデータを送信する。今回のデータはバイト分だけの’a’を送ると言うものである。
を入れその後3を上書きし送信する。最後に10というデータを痩身するというプログラム*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <sys/time.h>
#define DATASIZE 8192 /*バイト数変更するならここ*/
union com{
char v;
int a[4];
};
int main(int argc, char *argv){
int count;
char data [DATASIZE];
int i;
int s;
union com c;
struct sockaddr_in tar;
char ip[64];
unsigned short port;
int len;
int x;
printf("送信先IPアドレスを指定してください\n> ");
scanf("%s", ip);
printf("送信先ポート番号を指定してください\n> ");
scanf("%hd", &port);
/*データに3を格納する。そしてバイト分だけaを入れる。*/
x=3;
for(i=0;i<DATASIZE;i++){
data[i] ='a';
}
c.v = x;
for(i=0 ; i<4;i++){
data[i] =c.a[i];
}
// ソケットオープン
// int socket(int domain, int type, int protocol);
s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
// SOCKADDR_IN 構造体を設定
memset(&tar, 0, sizeof(tar));
tar.sin_family = AF_INET;
tar.sin_addr.s_addr = inet_addr(ip);
tar.sin_port = htons(port);
len = sizeof(tar);
for(i=0;i<1000000;i++) /*ここを変えることで送信回数を変更できる。*/
{
// 送信
// int sendto(int socket, char *buffer, int length, int flags, struct sockaddr *address, int address_len)
sendto(s, data, sizeof(data), 0, (struct sockaddr*)&tar, len);
}
x=10;
c.v=x;
for(i=0;i<4;i++){
data[i] =c.a[i];
}
for(count=0;count<100;count++){
sendto(s, data, sizeof(data), 0, (struct sockaddr*)&tar, len);
}
// ソケット クローズ
// int close(int socket);
close(s);
return 0;
}
<server.c>
/*
クライアントからデータ受け取り3というデータが届いたときだけカウントしそれを元に損失率を出す。
次に10を受信した時点で終了するというプログラムである。
このプログラムでは転送速度と損失率が求められる。
*/
#include<stdio.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <sys/time.h>
#define DATASIZE 8192 //バイト数をクライアントに合わせる。
union com{
int v;
char a[4];
};
int main(int argc, char *argv){
char data[DATASIZE];
int i=0;
union com c;
clock_t c1,c2;
double result;
int count;
int s;
struct sockaddr_in my, tar;
unsigned short port;
unsigned int len;
int x;
double time;
printf("待ちポート番号は?");
scanf("%hd",&port);
// ソケットの準備
s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
memset(&my, 0, sizeof(my));
my.sin_family = AF_INET;
my.sin_port = htons(port);
len = sizeof(tar);
// ソケットとアプリの関連付け
// int bind(int socket, const struct sockaddr *address, socklen_t address_len);
bind(s, (struct sockaddr*)&my, sizeof(my));
memset(&tar, 0, sizeof(tar));
// 受信
// int recvfrom(int socket, char *buffer,
// int length, int flags,
// struct sockaddr *address,
// int *address_length);
// 変数xに受信データを格納
c1 = clock();
while(1){
x=2;
//printf("data:%d",x);
recvfrom(s, data, sizeof(data)-1, 0, (struct sockaddr*)&tar, &len);
for(i=0; i<4;i++){
c.a[i] = data[i];
}
x=c.v;
/*3が届いた時だけカウントする。*/
if(x==3){
count++;
}
/*10が届いた時点で終了する。*/
if(x==10){
c2 = clock();
break;
}
}
// 受信データ参照
printf("IP : %s\n", inet_ntoa(tar.sin_addr));
printf("port : %d\n", ntohs(tar.sin_port));
printf("受信回数:%d\n",count);
result=(double)count/1000000; //result=(double)count/送信回数;
printf("損失率%f\n",(1.0-result)*100);
time = (double) (c2-c1) / CLOCKS_PER_SEC;
printf("経過時間:%f\n",time);
// ソケット クローズ
close(s);
return 0;
}
Sin を90度まで1度刻みで表示する。C++
Sin を90度まで1度刻みで表示する。C++を紹介します。
<ソースコード>
#include<stdio.h>
#define MYPI 3.141592653589793238
double mysin(double x){int n;
for(n=0;1e-7<(x<0?-x:x);++n)x/=3;
while(n--)x*=3-4*x*x;
return x;}
double mycos(double x){return mysin(x+MYPI/2.0);}
double mytan(double x){return mysin(x)/mycos(x);}
int main(void){double d,r=MYPI/180.0;
for(d=1;d<=90;++d)
printf("%2g:sin=%.15f\n",d,mysin(d*r));
return 0;}
配列から最大値を求める方法 C++
入力した数字を配列に取り込みそれから最大値を出すプログラムです。C言語を使って配列を使ったプログラミングをしてみました。
#include <stdio.h>
#include<math.h>
int main(void)
{
int i;
double max, a[10];
for(i = 0; i < 10; i++)
{
printf("%d個目の実数を入力せよ: ", i + 1);
scanf("%lf", &a[i]);
}
max = a[0];
for(i = 1; i < 10; i++)
{
if (a[i] > max) max = a[i];
}
printf("最大値は%fです。\n", max);
return 0;
}
C言語でサーバーとクライアントを作り 大きな数字を繰り返し送ることのできるプログラム
今回はC言語を使いサーバーとクライアントを作りました。同一LAN内であればサーバーとクライアント間でデータの送受信ができます。
このプログラムは入力した数字をプログラムに記入した回数送信し、そのデータの損失率と転送時間を求めることができます。
<クライアント側プログラム>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <sys/time.h>
int main(int argc, char *argv){
clock_t c1,c2;
double diff;
int t;
int s;
struct sockaddr_in my, tar;
unsigned short port;
char data[1024];
unsigned int len;
long x;
double i;
printf("待ちポート番号を指定してください\n> ");
scanf("%hd", &port);
// ソケットの準備
s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
memset(&my, 0, sizeof(my));
my.sin_family = AF_INET;
my.sin_port = htons(port);
len = sizeof(tar);
// ソケットとアプリの関連付け
// int bind(int socket, const struct sockaddr *address, socklen_t address_len);
bind(s, (struct sockaddr*)&my, sizeof(my));
memset(data, '\0', sizeof(data));
memset(&tar, 0, sizeof(tar));
// 受信
// int recvfrom(int socket, char *buffer,
// int length, int flags,
// struct sockaddr *address,
// int *address_length);
// 変数データに受信文字列を格納
c1 = clock();
for(i=0; i<10000; i++){
recvfrom(s, data, sizeof(data)-1, 0, (struct sockaddr*)&tar, &len);
x = atol(data);
printf("data : %ld\n", x);
if('1'== *data)break;
}
c2 = clock();
// 受信データ参照
printf("IP : %s\n", inet_ntoa(tar.sin_addr));
printf("port : %d\n", ntohs(tar.sin_port));
printf("%f%\n\a",100-(i/10));// 損失率 100-(i/送る予定の数 * 100)
diff = (double) (c2-c1) / CLOCKS_PER_SEC;
printf("diff time = %f\n", diff);
printf("%.0f個¥n",1000-i ); //1000 回送られてくるはずと受け取った数から何個損失したかを表示する。
// ソケット クローズ
close(s);
return 0;
}
*1
*1:
@All rights are returned to the author of this page and programme
if文をswitchで書くには C言語
C言語のif文をswitchで書くにはどうすればいいか。
<if文で作ったプログラム>
割り算とそのあまりを出すプログラム
#include <stdio.h>
int main(void){
int no;
printf("整数を入力\n" );scanf("%d",&no );
if (no %3 == 0) {
puts("その数は3で割り切れます。");
/* code */
}
else if (no % 3 == 1 ) {
puts("その数は3で割ったはあまりが1になる.\n");
/* code */
}
else{
puts("その数を3で割ったあまりは2");
}
return 0;
}
このプログラムをswitchを使って書くと
#include <stdio.h>
int main(void){
int no;
printf("整数を入力\n" );scanf("%d",&no );
switch (no % 3) {
case 0 : puts("その数は3で割り切れる。"); break;
case 1 : puts("その数は3で割った余りは1"); break;
case 2 : puts("その数を3で割ったあまりは2"); break;
}
return 0;
}