C语言模拟题

C语言模拟题

一维数组定义格式(在主函数(main()))
定义的同时初始化(第一种考察方式)

int arr[5] = {1, 2, 3, 4, 5};

从键盘读入(不用指针)

int arr[10]; //定义长度为10的数组
for(int i = 0; i < 10; i++){
    printf("请输入第%d个数\n", i + 1);
    scanf("%d", &arr[i]);
}

从键盘读入(使用指针方式)

int arr[10]; //定义长度为10的数组
int *p = arr; //p指向arr
for(int i = 0; i < 10; i++){
    printf("请输入第%d个数\n", i + 1);
    scanf("%d", p);
    p++;
}

正确区别下标与数组值(数组下标为i,数组元素为arr[i]),如下标下标为奇数的元素值乘以2,其余不变

for(int i = 0; i < 10; i++){
    if(i % 2 == 1){ //i为下标
        arr[i] = arr[i] * 2; //arr[i]为数组中的第i个元素
    }
}

一维数组函数(记住就行)
求和(直接调用就行)

int sum(int *arr, int n){
    int sum = 0;
    for(int i = 0; i < n; i++){
        sum = sum + arr[i];
    }
}

在主函数中调用

printf("数组和是%d\n", sum(arr, 10)); //注意10是数组长度,视情况而定

求平均值(直接调用就行了)

float avg(int *arr, int n){
    float sum = 0;
    for(int i = 0; i < n; i++){
        sum = sum + arr[i];
    }
    return sum / n; //返回平均值
}

在主函数中调用

printf("数组平均值是%.2f\n", avg(arr, 10)); //注意10是数组长度,视情况而定

求最大值(直接调用就行了)

int max(int *arr, int n){
    int max = arr[0];
    for(int i = 0; i < n; i++){
        if(arr[i] > max){
            max = arr[i];
        }
    }
    return max; //返回最大值
}

在主函数中调用

printf("数组最大值是%d\n", max(arr, 10)); //注意10是数组长度,视情况而定

求最小值(直接调用就行了)

int min(int *arr, int n){
    int min = arr[0];
    for(int i = 0; i < n; i++){
        if(arr[i] < min){
            min = arr[i];
        }
    }
    return max; //返回最大值
}

在主函数中调用

printf("数组最小值是%d\n", min(arr, 10)); //注意10是数组长度,视情况而定

冒泡排序(只要排序,直接调用就可以了)

void sort(int *arr, int n){
    for(int i = 0; i < n - 1; i++){
        for(int j = 0; j < n - 1 - i; j++){
            if(arr[j] > arr[j + 1]){ //这是升序,降序直接改用`<`符号
                int t = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = t;
            }
        }
    }
}

查找某个数字出现的次数

void find(int *arr, int n){
    printf("请输入一个数字:");
    int num;
    scanf("%d", num);

    int count = 0; //统计出现的次数
    for(int i = 0; i < n; i++){
        if(arr[i] == num){
            count++;
        }
    }
    printf("数字%d出现了%d次\n", num, count);
}

二维数组考察
定义的同时赋值

int arr[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}; //3行4列

先定义再赋值

for(int i = 0; i < 3; i++){
    for(int j = 0; j < 4; j++){
        printf("请输入第%d行第%d列的元素值:", i, j); //可选提示信息
        scanf("%d", &arr[i][j]);
    }
}

二维数组的转置(如3行4列转置成4行3列)

int arr[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}; //3行4列
printf("打印转置前的数组\n");
for(int i = 0; i < 3; i++){
    for(int j = 0; j < 4; j++){
        printf("%d\t", arr[i][j]);
    }
    printf("\n");
}
int brr[4][3]; //存储转置以后的数组
for(int i = 0; i < 3; i++){
    for(int j = 0; j < 4; j++){
        brr[j][i] = arr[i][j]; //转置的公式[i][j] => [j][i]
    }
}
printf("打印转置后的数组\n");
for(int i = 0; i < 4; i++){
    for(int j = 0; j < 3; j++){
        printf("%d\t", arr[i][j]);
    }
    printf("\n");
}

将行最值放入新的数组中等操作

假设数组为34,即arr[3][4],所以定义最大值数组int max[3]

int max[3]; //存储三行的最大值
int min[3]; //存储三行的最小值
for(int i = 0; i < 3; i++){
    max[i] = arr[i][0]; //假设第i的最大值为第i行的第一个元素
    min[i] = arr[i][0]; //假设第i的最小值为第i行的第一个元素
    for(int j = 0; j < 4; j++){
        if(arr[i] > max[i]){
            max[i] = arr[i];
        }
        if(arr[i] < min[i]){
            min[i] = arr[i];
        }
    }
}

for(int i = 0; i < 3; i++){
  printf("第%d行的最大值是%d\n", i + 1, max[i]);
}

将列最值放入新的数组中等操作

假设数组为34,即arr[3][4],所以定义最大值数组int max[4]

int max[4]; //存储三行的最大值
int min[4]; //存储三行的最小值
for(int j = 0; j < 4; j++){
    max[j] = arr[j][0];//假设每一列的最大值为第j行第0行的元素
    for(int i = 0; i < 3; j++){
        if(arr[i][j] > max[j]){
            max[j] = arr[i][j];
        }
        if(arr[i][j] < min[j]){
            min[j] = arr[i][j];
        }
    }
}

for(int i = 0; i < 4; i++){
  printf("第%d列的最大值是%d最小值是%d\n", i + 1, max[i], min[i]);
}
递归函数(常考)
计算1-100的和(直接调用)
int sum(int n){
    if(n == 1){
        return 1;
    }else{
      return n + sum(n-1);
    }
}

在主函数中调用

printf("1-50的和是%d\n", sum(50));
printf("1-100的和是%d\n", sum(100));
计算n的阶乘(n!)
int fac(int n){
    if(n == 1){
        return 1;
    }else{
      return n * fac(n-1);
    }
}

在主函数中调用

printf("5的阶乘是%d\n", fac(5));
printf("10的阶乘是%d\n", fac(10));
//打印1-n的阶乘
printf("请输入n:");
int n;
scanf("%d", &n);
for(int i = 1; i <n ;i++){
    printf("%d! = %d\n", i, fac(i));
}

更多递归函数请参考我写的文章

结构体+文件综合考察
定义学生的结构体(可以是其他类型的)

typedef struct{
    int id; //学号
    char name[50]; //学生姓名
    int age; //定义学生的年龄
}Student;

循环录入学生结构体信息

//第一步定义学生结构体数组
//int arr[5]; //定义整型数组int为类型,arr为数组名(回顾)
Student stu[5]; //Student为类型,stu为数组名
//循环录入
for(int i = 0; i < 5; i++){ //以下代码是死的喔,好好背一下
      printf("请输入第%d个学生的信息:", i + 1);
      printf("学号:");
      scanf("%d", &stu[i].id);

      printf("姓名:");
      scanf("%s", stu[i].name);

      printf("年龄:");
      scanf("%d", &stu[i].age);
}

循环把文件写入到D磁盘中的data.txt文件下面

FILE *fp = fopen("D:\\data.txt", "w"); //打开文件
if(fp != NULL){
  printf("打开文件成功\n");
  fprintf(fp, "学号\t姓名\t年龄\n");
  for(int i = 0; i < 5; i++){
    fprintf(fp, "%d\t%s\t%d\n", stu[i].id, stu[i].name, stu[i].age);
  }
  fclose(fp); //关闭文件
}else{
    printf("打开文件失败\n");
}

循环把文件从磁盘中读取

FILE *fp = fopen("D:\\data.txt", "r");
if(fp != NULL){
  printf("打开文件成功\n");
  int id;
  char name[100];
  int age;
  fscanf(fp, "学号\t姓名\t年龄\n");//读取表头扔掉
  for(int i = 0; i < 5; i++){
    fscanf(fp, "%d %s %d", &id, name, &age);
    printf("%d\t%s\t%d\n", id, name, age);
  }
  fclose(fp);
}else{
    printf("打开文件失败\n");
}

宏(传参数)
求正方形的面积

#include <stdio.h>

#define S(x) (x)*(x)
int main()
{
	printf("请输入正方形的边长:");
	int x;
	scanf("%d", &x);
	printf("正方形的面积是%d\n", S(x));
	return 0;
}

求长方形的面积

#include <stdio.h>

#define S(x, y) (x)*(y)
int main()
{
	printf("请输入长方形的长:");
	int x;
	scanf("%d", &x);

	printf("请输入长方形的宽:");
	int y;
	scanf("%d", &y);

	printf("长方形的面积%d\n", S(x, y));
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林城步

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值