一、 实验目的
二、 实验任务与要求
三、 实验内容
(1) 在inputNum.c文件中输入一组数;
(2) 在Caculator.c文件中在对输入的一组数据进行运算,采用哪些运算请自行设计,但每种运算要单独放在一个自定义函数中,所有运算函数放在Caculator.c文件中;
(3) 在myDisplay.c文件中输出这一组数的各个运算结果。
提示:这里Caculator我就整了一个计算函数sumNums,但实际上可以写好多个,比如求一组数的平均数、求一组数中的最大值、最小值啥的…,这里只写了一个仅为演示
// Caculator.h
int sumNums(int arr[], int n);
// Caculator.c
#include "Caculator.h"
int sumNums(int arr[], int n) {
int sum = 0;
int i;
for (i=0;i<n;i++){
sum += arr[i];
}
return sum;
}
// myDisplay.h
void display(int a[], int n);
// myDisplay.c
#include
#include "Caculator.h"
#include "myDisplay.h"
void display(int a[], int n) {
printf("求和结果为:%d\n", sumNums(a, n));
}
// inputNum.h
void readNums(int arr[], int n);
// inputNum.c
#include
#include "inputNum.h"
void readNums(int arr[], int n) {
printf("请输入 %d 个数,以空格隔开:\n", n);
int i;
for (i=0;i<n;i++) {
scanf("%d", &arr[i]);
}
}
// main.c
#include "inputNum.h"
#include "myDisplay.h"
int main() {
int a[5];
readNums(a, 5);
display(a, 5);
}
2022-11-12 更新:
# 预处理
gcc -E main.c -o main.i
gcc -E myDisplay.c -o myDisplay.i
gcc -E inputNum.c -o inputNum.i
gcc -E Caculator.c -o Caculator。i
gcc -S main.c myDisplay.c inputNum.c Caculator.c # 编译
gcc -c main.c myDisplay.c inputNum.c Caculator.c # 汇编
gcc -o main main.o myDisplay.o inputNum.o Caculator.o # 链接
./main
main: main.o myDisplay.o inputNum.o Caculator.o
gcc -o main main.o myDisplay.o inputNum.o Caculator.o
main.o: main.c
gcc -c main.c
inputNum.o: inputNum.c
gcc -c inputNum.c
myDisplay.o: myDisplay.c
gcc -c myDisplay.c
Caculator.o: Caculator.c
gcc -c Caculator.c
clean:
rm *.o
OBJ = main.o myDisplay.o inputNum.o Caculator.o
TARGET = main
$(TARGET): $(OBJ)
gcc -o $@ $^
main.o: main.c
gcc -c $<
inputNum.o: inputNum.c
gcc -c $<
myDisplay.o: myDisplay.c
gcc -c $<
Caculator.o: Caculator.c
gcc -c $<
clean:
rm $(OBJ) $(TARGET)
OBJ = main.o myDisplay.o inputNum.o Caculator.o
TARGET = main
CFLAGS = -Wall -g
$(TARGET): $(OBJ)
$(CC) $^ -o $@ $(CFLAGS)
%.o: %.c
$(CC) -c $< -o $@ $(CFLAGS)
clean:
rm $(OBJ) $(TARGET)
提示:进行调试前需要用 隐式规则和模式规则版本(上面标号为5的)的 makefile
来构建可执行程序。原因是这个版本的makefile 刚好有 -g
选项
构建好之后,运行 gdb main
进入调试
(gdb) list
(gdb) break 6
(gdb) break 7
(gdb) run
(gdb) print a
(gdb) next
(gdb) print a
// t1.c
#include
#include
int main(int argc, char* argv[]) {
int a = atoi(argv[1]);
char oper = argv[2][0];
int b = atoi(argv[3]);
double ans = 0;
if (oper == '+') {
ans = a + b;
} else if (oper == '-') {
ans = a - b;
} else if (oper == '*') {
ans = a * b;
} else if (oper == '/') {
ans = (double)a/b;
}
printf("%d%c%d=%.6lf\n",a,oper,b,ans);
}
#include
int main() {
int arr[4][4] = {
{0, 1, 2, 3},
{4, 5, 6, 7},
{8, 9, 10, 11},
{12, 13, 14, 15}
};
int i,j;
printf("使用指针数组的方式访问二维数组arr\n");
int *pa[4];
for (i=0;i<4;i++){
pa[i] = arr[i];
for (j=0;j<4;j++){
printf("%d\t", *(pa[i]+j));
}
printf("\n");
}
printf("使用数组指针的方式访问二维数组arr\n");
for (i=0;i<4;i++){
int (*pb)[4] = arr + i;
for (j=0;j<4;j++){
printf("%d\t", *(*pb + j));
}
printf("\n");
}
printf("使用指向指针的指针的方式访问二维数组arr\n");
for (i=0;i<4;i++){
int *pc = *(arr + i);
for (j=0;j<4;j++){
int *pd = pc + j;
printf("%d\t", *pd);
}
printf("\n");
}
}
四、实验总结
好绕一指针!