栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c语言实例

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c语言实例

  1. 表格形式输出数据
#include
int main() {
	for (int i = 0; i < 10; i++) {
		for (int j = 0; j < 10; j++) {
			printf("%d ", i + j*10+1);
		}
		printf("n");
	}
	return 0;
}


2. 简易计算器

#define _CRT_SECURE_NO_WARNINGS//vs中认为scanf不安全,解决报错
#include
int main() {
	char c;
	double n1, n2;
	while (1) {
		printf("输入运算符n");
		scanf("%c", &c);
		
		while ((m = getchar()) != 'n') {
			continue;
		}
		printf("输入两个数n");
		scanf("%lf %lf", &n1, &n2);
		while ((m = getchar()) != 'n') {
			continue;
		}
		switch (c)
		{
		case '+':
			printf("%lfn", n1 + n2);
			break;
		case '-':
			printf("%lfn", n1 - n2);
			break;
		case '*':
			printf("%lfn", n1 * n2);
			break;
		case '/':
			if (n2 != 0)
				printf("%lfn", n1 / n2);
			else
				printf("除数不能为0n");
			break;
		default:
			break;
		}
	}
	return 0;
}


3. 一个数是否为2个素数之和

#define _CRT_SECURE_NO_WARNINGS//scanf报错
#include
#include//导入bool
#include//导入sqrt
bool sushu(int num);
int main() {
	int num;
	while (1) {
		scanf("%d", &num);
		int flag = 0;
		for (int i = 1; i <= num / 2; i++) {
			if (sushu(i) && sushu(num - i)) {
				printf("%d=%d+%dn", num, i, num - i);
				flag = 1;
				break;
			}
		}
		if (!flag)
			printf("%d不为两个素数之和n", num);
	}
	
	return 0;
}

//判断是否为素数
bool sushu(int num) {
	//aqrt参数类型为double
	int m = sqrt((double)num);
	for (int i = 2; i <= m; i++) {
		if (num % i == 0)
			return false;
	}
	return true;
}


4. 二进制与十进制相互转换

#define _CRT_SECURE_NO_WARNINGS
#include
int bin(char s[]);
int pow(int k);
char* dec(int num);
int main() {
	int m,num;
	char s[20] = {' '};
	char *p,c;
	while (1) {
		printf("输入2进行二进制转十进制,输入10进行十进制转二进制n");
		scanf("%d", &m);
		//去缓存
		while ((c = getchar()) != 'n')
			continue;
		switch (m)
		{
		case 2:
			printf("输入二进制数n");
			scanf("%s", s);
			while ((c = getchar()) != 'n')
				continue;
			
			num=bin(s);
			printf("%dn", num);
			break;
		case 10:
			printf("输入十进制数n");
			scanf("%d", &num);
			while ((c = getchar()) != 'n')
				continue;
			p = dec(num);
			for (int i = 0; i < 15; i++) {
				printf("%c", *p);
				p++;
			}
			printf("n");
			break;
		default:
			break;
		}
	}
	return 0;
}

//二进制转十进制
int bin(char s[]) {
	int len = 0,num=0;
	for (int i = 0; i < 20; i++) {
		if (s[i] != '')
			len++;
	}
	for (int i = len - 1; i >= 0; i--) {
		num += (s[i] - '0') * pow(len - i - 1);
	}
	return num;
}

//十进制转二进制

char* dec(int num) {
	//c语言不乐意让你返回局部变量地址,用static
	static char s[15] = { ' ' };
	int nu[15],k=0;
	for (int i = 0; i < 15; i++) {
		nu[i] = pow(i);
	}
	for (int i = 0; i < 15; i++) {
		if (num < nu[15 - i - 1]) {
			s[i] = '0';
		}
		else {
			s[i] = '1';
			num -= nu[15 - i - 1];
		}
	}
	return s;
}

//计算2的k次方
int pow(int k) {
	int num = 1;
	for (int i = 1; i <= k; i++) {
		num *= 2;
	}
	return num;
}


5. 八进制与十进制相互转换

#define _CRT_SECURE_NO_WARNINGS
#include
int oct(char s[]);
int pow(int k);
char* dec(int num);
int main() {
	int m, num;
	char s[20] = { ' ' };
	char* p, c;
	while (1) {
		printf("输入8进行八进制转十进制,输入10进行十进制转八进制n");
		scanf("%d", &m);
		while ((c = getchar()) != 'n')
			continue;
		switch (m)
		{
		case 8:
			printf("输入八进制数n");
			scanf("%s", s);
			while ((c = getchar()) != 'n')
				continue;

			num = oct(s);
			printf("%dn", num);
			break;
		case 10:
			printf("输入十进制数n");
			scanf("%d", &num);
			while ((c = getchar()) != 'n')
				continue;
			p = dec(num);
			for (int i = 0; i < 10; i++) {
				printf("%c", *p);
				p++;
			}
			printf("n");
			break;
		default:
			break;
		}
	}
	return 0;
}

//八进制转十进制
int oct(char s[]) {
	int len = 0, num = 0;
	for (int i = 0; i < 20; i++) {
		if (s[i] != '')
			len++;
	}
	for (int i = len - 1; i >= 0; i--) {
		num += (s[i] - '0') * pow(len - i - 1);
	}
	return num;
}

//十进制转八进制,原理同二进制
char* dec(int num) {
	static char s[10] = { ' ' };
	int nu[10], k = 0;
	//8的10次方已经是int范围内的最大值,再大就越界了,,不想不会处理越界
	for (int i = 0; i < 10; i++) {
		nu[i] = pow(i);
	}
	for (int i = 0; i < 10; i++) {
		if (num < nu[10 - i - 1]) {
			s[i] = '0';
		}
		else {
			s[i] =num/ nu[10 - i - 1] + '0';
			num -= num / nu[10 - i - 1] * nu[10 - i - 1];
		}
	}
	return s;
}

//8的k次方
int pow(int k) {
	int num = 1;
	for (int i = 1; i <= k; i++) {
		num *= 8;
	}
	return num;
}


6. 求数组平均数

#define _CRT_SECURE_NO_WARNINGS
#include
int main() {
	int sum=0,len=0,m;
	printf("输入任意个数字n");
	//sanf返回读取到的元素个数,但是%d读不到换行符
	while (scanf("%d", &m)) {
		s[i] = m;
		i++;
		if (getchar() == 'n')
			break;
	}
	for (int j = 0; j < 20; j++) {
		//数组多余值都为0
		sum += s[j];
	}
	printf("%lfn", (double)sum / i);
	return 0;
}


7. 输出数组

#define _CRT_SECURE_NO_WARNINGS 
#include
int main() {
	int num[20] = { 0 }, m;
	int k = 0;
	while (scanf("%d", &m)) {
		num[k] = m;
		k++;
		if (getchar() == 'n')
			break;
	}
	for (int i = 0; i < k; i++) {
		printf("%d ", num[i]);
	}
	printf("n");
	return 0;
}
  1. 数组最大值
#define _CRT_SECURE_NO_WARNINGS 
#include
int main() {
	int num[20] = { 0 }, m;
	int k = 0,max=-1000000000;
	while (scanf("%d", &m)) {
		num[k] = m;
		k++;
		if (getchar() == 'n')
			break;
	}
	for (int i = 0; i < k; i++) {
		if (max < num[i])
			max = num[i];
	}
	printf("最大值为%dn",max);
	return 0;
}
  1. 数组最小值
#define _CRT_SECURE_NO_WARNINGS 
#include
int main() {
	int num[20] = { 0 }, m;
	int k = 0, min = 1000000000;
	while (scanf("%d", &m)) {
		num[k] = m;
		k++;
		if (getchar() == 'n')
			break;
	}
	for (int i = 0; i < k; i++) {
		if (min > num[i])
			min = num[i];
	}
	printf("最小值为%dn", min);
	return 0;
}
  1. 数组拆分合并
#define _CRT_SECURE_NO_WARNINGS 
#include

void Split(int num[], int odd[], int even[], int k);
void display(int array[],int len);
void Merge(int odd[], int even[], int num_merge[]);

int main() {
	int num[20] , m;
	int k = 0;
	int odd[20], even[20];
	int num_merge[20];
	while (scanf("%d", &m)) {
		num[k] = m;
		k++;
		if (getchar() == 'n')
			break;
	}
	Split(num, odd, even, k);
	Merge(odd, even, num_merge);
	display(odd,sizeof(odd)/sizeof(m));
	display(even, sizeof(even) / sizeof(m));
	display(num_merge, sizeof(num_merge) / sizeof(m));
	return 0;
}

//拆分数组
void Split(int num[], int odd[], int even[],int k) {
	int m = 0, n = 0;
	for (int i = 0; i < k; i++) {
		if (num[i] % 2 == 0) {
			even[m] = num[i];
			m++;
		}
		else {
			//0也是偶数
			odd[n] = num[i];
			n++;
		}
	}
}

//输出数组
void display(int array[],int len) {
	//数组作为参数时,传递进来的是地址,此时sizeof为地址的大小8字节
	for (int i = 0; i < len; i++) {
		if(array[i] != -858993460)
			printf("%d ", array[i]);
	}
	printf("n");
}

//合并数组
void Merge(int odd[], int even[],int num_merge[]) {
	int k=0;
	for (int i = 0; i < 20; i++) {
		//未初始化的int数组未赋值的部分值都为-858993460,不知道是不是都这样
		if (odd[i] != -858993460) {
			k++;
			num_merge[i] = odd[i];
		}		
		else
			break;
	}
	for (int j = 0; j < 20; j++) {
		if (even[j] != -858993460)
			num_merge[k + j] = even[j];
		else
			break;
	}
}
  1. 拷贝数组
#include
void display(int num[]);
int main() {
	int num[10] = {1,2,3,4,5,6,7,8,9,10};
	int num_copy[10];
	//不能数组赋值给数组,只能逐个赋值
	for (int i = 0; i < 10; i++) {
		num_copy[i] = num[i];
	}
	display(num_copy);

	return 0;
}

void display(int num[]) {
	for (int i = 0; i < 10; i++) {
		printf("%d ", num[i]);
	}
	printf("n");
}
  1. 标准差
#include
#include

double pfc(double m, int n);
int main() {
	int num[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int sum = 0;
	double ave,sum2=0;
	for (int i = 0; i < 10; i++) {
		sum+=num[i];
	}
	ave = (double)sum / 10;
	for (int i = 0; i < 10; i++) {
		sum2 += pfc(ave, num[i]);
	}
	printf("%lfn", sqrt(sum2 / 10));
	return 0;
}

//差的平方
double pfc(double m, int n) {
	return (m-n)*(m-n);
}
  1. 矩阵相加
#include

void init(int array[][5]);
void display(int array[][5]);
void add(int array1[][5], int array2[][5], int array[][5]);

int main() {
	int array1[5][5], array2[5][5],array[5][5];
	init(array1);
	init(array2);
	display(array1);
	display(array2);
	add(array1, array2, array);
	display(array);
	return 0;
}
//二维数组可以以a[5][5]或a[][5]的形式传递,不能是a[][]
void init(int array[][5]) {
	for (int i = 0; i < 5; i++) {
		for (int j = 0; j < 5; j++)
			array[i][j] = j + 1;
	}
}

void display(int array[][5]) {
	for (int i = 0; i < 5; i++) {
		for (int j = 0; j < 5; j++)
			printf("%d ", array[i][j]);
		printf("n");
	}
	printf("n");
}

void add(int array1[][5], int array2[][5], int array[][5]) {
	for (int i = 0; i < 5; i++) {
		for (int j = 0; j < 5; j++)
			array[i][j] = array1[i][j] + array2[i][j];
	}
}
  1. 矩阵行列互换
#include

void init(int array[][4]);
void display(int array[][4],int m,int n);
void translate(int ans[4][5], int array[5][4]);

int main() {
	int array[5][4],ans[4][5];
	init(array);
	display(array,5,4);
	translate(ans, array);
	for (int i = 0; i < 4; i++) {
		for (int j = 0; j < 5; j++)
			printf("%d ", ans[i][j]);
		printf("n");
	}
	return 0;
}

void init(int array[][4]) {
	for (int i = 0; i < 5; i++) {
		for (int j = 0; j < 4; j++)
			array[i][j] = j + 1;
	}
}

//数组维度不同,必须要传列数,[]内又无法用变量,无法输出两个不同维度数组
void display(int array[][4] , int m ,int n) {
	for (int i = 0; i < m; i++) {
		for (int j = 0; j < n; j++)
			printf("%d ", array[i][j]);
		printf("n");
	}
	printf("n");
}

void translate(int ans[4][5], int array[5][4]) {
	for (int i = 0; i < 5; i++) {
		for (int j = 0; j < 4; j++)
			ans[j][i] = array[i][j];
	}
}
  1. 指针访问数组
#include
int main() {
	int a[5] = { 1,2,3,4,5 };
	for (int i = 0; i < 5; i++)
		printf("%d ", *(a + i));
	return 0;
}
  1. 引用交换数值
#include
void swap(int* m, int* n);
int main() {
	int m = 4, n = 5;
	printf("交换前 %d %dn", m, n);
	swap(&m , &n);
	printf("交换后 %d %d", m, n);
	return 0;
}

void swap(int* m, int* n) {
	int temp;
	temp = *m;
	*m = *n;
	*n = temp;
}
  1. 指针数组
#include
#include

int main() {
	int *p[5]={1,2,3,4,5};
	for (int i = 0; i < 5; i++) {
		printf("%d ", *(p + i));
	}
	printf("n");

	int* num = (int*)calloc(5, 4);
	for (int i = 0; i < 5; i++) {
		printf("%d ", *(num + i));
	}
	printf("n");
	for (int i = 0; i < 5; i++) {
		*(num + i) = i + 1;
	}
	for (int i = 0; i < 5; i++) {
		printf("%d ", *(num + i));
	}
	printf("n");
	free(num);
	return 0;
}
  1. 删除字符串中特殊字符
#define _CRT_SECURE_NO_WARNINGS 
#include
int main() {
	char num[20] , m;
	int k = 0;
	//可以直接scanf("%s",num);要另外算长度k,为理解缓冲区
	while (scanf("%c", &m)) {
		if (m != 'n') {
			num[k] = m;
			k++;
		}
		else
			break;
	}
	for (int i = 0; i < k; ) {
		if (!(num[i] >= 'a' && num[i] <= 'z' || num[i] >= 'A' && num[i] <= 'Z')) {
			for (int j = i; j < k; j++) {
				num[j] = num[j + 1];	
			}
			num[k] = 'n';
			k--;
		}
		else {
			i++;
		}

	}
	for (int i = 0; i < k; i++) {
		printf("%c ", num[i]);
	}
	return 0;
}
  1. 字符在字符串中出现的次数
#define _CRT_SECURE_NO_WARNINGS 
#include
int main() {
	char num[20], m;
	int k = 0, count = 0;;
	//可以直接scanf("%s",num);要另外算长度k,为理解缓冲区
	while (scanf("%c", &m)) {
		if (m != 'n') {
			num[k] = m;
			k++;
		}
		else
			break;
	}
	printf("输入要查找的字符n");
	scanf("%c", &m);
	for (int i = 0; i < k; i++) {
		if (num[i] == m) {
			count++;
		}
	}
	
	printf("出现次数 %dn", count);

	return 0;
}
  1. 字符串写入文件
#define _CRT_SECURE_NO_WARNINGS
#include 
#include   

int main()
{
    char sentence[1000];
    FILE* fptr;

    fptr = fopen("m.txt", "w");
    if (fptr == NULL)
    {
        printf("Error!");
        exit(1);
    }

    printf("输入字符串:n");
    fgets(sentence, (sizeof sentence / sizeof sentence[0]), stdin);

    fprintf(fptr, "%s", sentence);
    fclose(fptr);

    return 0;
}
  1. 从文件中读取一行
#define _CRT_SECURE_NO_WARNINGS
#include 
#include  //  exit() 函数
int main()
{
    char c[1000];
    FILE* fptr;

    if ((fptr = fopen("m.txt", "r")) == NULL)
    {
        printf("Error! opening file");
        // 文件指针返回 NULL 则退出
        exit(1);
    }

    // 读取文本,直到碰到新的一行开始
    fscanf(fptr, "%[^n]", c);

    printf("读取内容:n%s", c);
    fclose(fptr);

    return 0;
}
  1. 输出当前文件
#define _CRT_SECURE_NO_WARNINGS
#include 
int main() {
    FILE* fp;
    char c;
    fp = fopen(__FILE__, "r");
    do {
        c = getc(fp);
        putchar(c);
    } while (c != EOF);
    fclose(fp);
    return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1005081.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号