C语言编程---案例练习

格式化输出

%d,输出整数;
%5d,输出整数,宽度为5;
%-5d,输出整数,宽度为5,左对齐;
%f,输出浮点数;%.3f 保留三位小数;
%e,输出 科学计数法 浮点数;
%c,输出单个字符;将字符格式化%d,即转ASCII码;整数格式化为%c,获取对应的字符。
%s,输出字符串(字符指针);
%p,格式化为指针;

字符对应的ASCII码表
在这里插入图片描述
在这里插入图片描述
 

字符串的加密与解密

  • 输入一个字符串,输出其加密结果,加密方法自定;
  • 采用同样的算法,为你的加密结果,进行解密
#include <stdio.h>
#include <string.h>


char* encrypt(char* ptr) {
	int i = 0;
	char* head = ptr;
	while (*ptr != 0) { // 当前字符不为'\0'(未结束)
		*ptr = *ptr + i + 5;
		++i;
		++ptr;
	}
	return head;
}


// restore
char* restore(char* ptr) {
	int i = 0;
	char* head = ptr;
	while (*ptr != 0) {
		*ptr = *ptr - i - 5;
		++i;
		++ptr;
	}
	return head;
}


int main(int argc, char* argv[]) {
	
	// 用户输入字符串,存入字符数组(足够大)
	char arr[100]; // 数组首地址可以赋值给指针,但是指针地址不能赋值给数组变量;
	scanf("%s", arr);

	// 统计字符串的长度
	int size = strlen(arr);

	// 按照长度 分配内存
	char* result = (char*)malloc(size * sizeof(char));
	// 内存初始化
	memset(result, '\0', size);

	// 加密并获取结果
	result = encrypt(arr);
	printf("加密结果:%s\n", result);

	// 恢复
	printf("恢复的结果:%s\n", restore(result));

	return 0;
}

 

结构体与文件

  • 定义一个学生结构体
    • 姓名
    • 年龄
    • 学号
    • 成绩
  • 生成三个学生的数组;
  • 将数组中的学生,写入stu.txt文件中;
#include <stdio.h>
#include <string.h> // 字符串操作的头文件
#include <malloc.h> // 动态分配内存的头文件



// 声明结构体类型,不分配内存
struct Stu {
	char name[20]; // 字符数组表示字符串,不用字符指针
	int age;
	double score;
	int num;
}; // 结构体 必须有分号   也可以同时定义 结构体 变量


int main(int argc, char* argv[]) {
	
	// 定义结构体数组
	struct Stu arr[3]; // 分配内存

	char* names[3] = { "jack", "lucy", "tom" };
	int ages[] = { 18, 20, 23 };
	double scores[] = { 87.5, 76.0, 93.5 };
	int nums[] = { 1,2,3 };
	int size = 3;

	
	for (int i = 0; i < size; i++) {
		struct Stu stu;  // 定义变量同时,可以初始化
		strcpy(stu.name, names[i]); // 字符串 后续的赋值,只能拷贝
		stu.age = ages[i];
		stu.num = nums[i];
		stu.score = scores[i];

		arr[i] = stu;
	}

	// 结构体 写入文件
	FILE* fp = NULL;
	fp = fopen("stu.txt", "ab");

	// 基于 二进制的 内存块的读写
	for (int i = 0; i < size; i++) {
		// 写入
		fwrite(&arr[i], sizeof(struct Stu), 1, fp); // 将结构体数组 写入fp 1次;
	}

	// 关闭文件
	fclose(fp);

	return 0;
}

 

  • 读取文件,并打印学生信息;
#include <stdio.h>
#include <string.h> // 字符串操作的头文件
#include <malloc.h> // 动态分配内存的头文件



// 声明结构体类型,不分配内存
struct Stu {
	char name[20]; // 字符数组表示字符串,不用字符指针
	int age;
	double score;
	int num;
}; // 结构体 必须有分号   也可以同时定义 结构体 变量


int main(int argc, char* argv[]) {
	
	FILE* fp;

	fp = fopen("stu.txt", "rb");

	while (!feof(fp)) { // feof(fp) 是否到文件末尾
		// 读取一个结构体
		struct Stu stu;
		fread(&stu, sizeof(struct Stu), 1, fp);
		printf("学生姓名:%s\n", stu.name);
		printf("学生学号:%d\n", stu.num);
		printf("学生年龄:%d\n", stu.age);
		printf("学生成绩:%.1e\n", stu.score); // 科学计数法
	}

	// 关闭文件
	fclose(fp);

	return 0;
}

在这里插入图片描述
 

函数与二维数组

  • 函数传参二维数组
    • void func(int arr[][3], int row, int col){ } ;必须指定列数
    • void func(int (*ptr)[3]){ }; 整型数组的指针;
    • void func(int **ptr){ }; 整型指针的指针;
#include <stdio.h>
#include <string.h> // 字符串操作的头文件
#include <malloc.h> // 动态分配内存的头文件
#define ROW 2 // 宏常量,编译时做文本替换
#define COL 3


// 传参二维数组
void func(int arr[][3], int row, int col) {
	for (int i = 0; i < row; i++) {
		for (int j = 0; j < col; j++) {
			printf("arr[%d][%d]:%d\n", i, j, arr[i][j]);
		}
	}
}


// 传参 整型指针 的数组
void func2(int(*ptr)[3], int row, int col) { // 
	for (int i = 0; i < row; i++) {
		for (int j = 0; j < col; j++) {
			printf("arr[%d][%d]:%d\n", i, j, *(*(ptr+i)+j));
		}
	}
}


int main(int argc, char* argv[]) {
	
	int arr[ROW][COL] = { 1,2,3, 1,0,1 };

	// 传参二维数组
	func(arr, ROW, COL);
	printf("\n");
	func2(arr, ROW, COL);
	
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

laufing

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

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

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

打赏作者

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

抵扣说明:

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

余额充值