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");
}
将行最值放入新的数组中等操作
假设数组为3行4列,即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]);
}
将列最值放入新的数组中等操作
假设数组为3行4列,即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;

}

发布了7 篇原创文章 · 获赞 1 · 访问量 60

猜你喜欢

转载自blog.csdn.net/wxlwxllxw/article/details/105143299