演習後半ではC言語をやります。 林 晴比古著の 「新C言語入門 ビギナー編」 を参考にします。
授業の内容、課題
おまけ
BMI値=体重(kg)/(身長(m)*身長(m))
ただし、身長と体重は適当でよい。1から3まで足すプログラム |
#include <stdio.h> int main(void) { int i, sum=0; for(i=1; i<=3; i++) { sum += i; /* sum = sum+iと同じ */ } printf("1から3までの合計は %d です。\n", sum); return 0; } |
int a, b, tmp; tmp=a; a=b; b=tmp;ヒント:for文を二重に使うとよい。
for文を二重に使うプログラム(0、1、2、3の全組合せを取る) |
#include <stdio.h> int main(void){ int i,j; /* 外側のforループ 実は(for (i=0; i<4; i++))でも結果は同じになります。 */ for (i=0; i<3; i++) { /* 内側のforループ */ for (j=i+1; j<4; j++) { /* iとjの表示 */ printf("i=%d, j=%d\n",i,j); } } return 0; } |
絶対値のプログラム例 |
#include <stdio.h> #include <stdlib.h> int main(void) { int a, b; a=-1; b=abs(a); printf("a=%d, b=%d\n",a,b); } |
Segmentation faultが発生するプログラム:aaa.c |
#include <stdio.h> int main(void) { int a[2]; a[0] = 10; a[1] = 20; a[100000] = 30; printf("a[0] = %d\n", a[0]); printf("a[1] = %d\n", a[1]); printf("a[100000] = %d\n", a[100000]); return 0; } |
gcc aaa.c -g
gdb a.out
GNU gdb Red Hat Linux (6.0post-0.20040223.17rh) Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-redhat-linux-gnu"...Using host libthread_db library "/lib/tls/libthread_db.so.1". (gdb)
(gdb) run Starting program: /home/nt/tmi00113/unix/a.out Program received signal SIGSEGV, Segmentation fault. main () at aaa.c:7 7 a[100000] = 30; (gdb)
(gdb) quit The program is running. Exit anyway? (y or n) y
10進数 | 8進数 | 16進数 |
---|---|---|
0 | 0 | 0 |
1 | 1 | 1 |
2 | 2 | 2 |
3 | 3 | 3 |
4 | 4 | 4 |
5 | 5 | 5 |
6 | 6 | 6 |
7 | 7 | 7 |
8 | 10 | 8 |
9 | 11 | 9 |
10 | 12 | A |
11 | 13 | B |
12 | 14 | C |
13 | 15 | D |
14 | 16 | E |
15 | 17 | F |
16 | 20 | 10 |