C 语言练习分享

c语言的一些小练习,可以多思考,多看看

1. 按下面对公式求sum的值:Sum=1-2+3-4+5-6+......+99-100

c 复制代码
#define _CRT_SECURE_NO_WARNINGS 1//要写到代码第一行
#include <stdio.h>
#include <string.h>
#include <math.h>
void main()
{
	//Sum=1-2+3-4+5-6+......+99-100
	int sum=0;
	for (int i = 1; i <= 100; ++i)
	{
		if (i % 2 == 0)
		{
			sum -= i;
		}
		else
		{
			sum += i;
		}
	}
	printf("Sum=1-2+3-4+5-6+......+99-100=%d", sum);//结果为-50
}

2. 有无符号数比大小

c 复制代码
#define _CRT_SECURE_NO_WARNINGS 1//要写到代码第一行
#include <stdio.h>
#include <string.h>
#include <math.h>
void main()
{
	int num1 = -10;
	unsigned int num2 = 5;//unsigned是无符号数的定义
	//条件运算表达式
	num1 + num2 > 0 ? printf(">0\n") : printf("<0\n");//格式:表达式?结果1:结果2;
}

3. 数组的逆置

c 复制代码
#define _CRT_SECURE_NO_WARNINGS 1//要写到代码第一行
#include <stdio.h>
#include <stdlib.h>
int main()
{
	int a[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int i = 0;
	int j = sizeof(a) / sizeof(a[0]) - 1;
	int tmp = 0;
	while (i < j)
	{		//前后交换
		tmp = a[i];
		a[i] = a[j];
		a[j] = tmp;
		//移动位置
		i++;
		j--;
	}
	for (int i = 0; i <= sizeof(a) / sizeof(a[0])-1; i++)
	{
		printf("%d ", a[i]);
	}
}

4. 数组的冒泡排列

c 复制代码
#define _CRT_SECURE_NO_WARNINGS 1//要写到代码第一行
#include <stdio.h>
#include <stdlib.h>
int main()
{
	int a[5] = { 2,5,6,3,-1 };
	int n = sizeof(a) / sizeof(a[0]);//sizeof是计算数值存储变量的字节
	for (int i = 0; i < n - 1; i++) //比较轮数
	{
		for (int j = 0; j < n - 1 - i; j++) //比较两数的大小,如果后面的数比前面的数大,则互换一下位置
		{
			if (a[j] > a[j + 1])
			{
				int tmp = a[j + 1];
				a[j + 1] = a[j];
				a[j] = tmp;
			}
		}
	}
	for (int i = 0; i < n; i++)//打印数组
	{
		printf("%d ", a[i]);
	}
	printf("\n");
	return 0;
}

5. 计算三列的平均数和统计没课的不及格数:a[5][3] = { {80,75,56},{59,65,71},{59,63,70},{85,45,90},{76,77,45} }

c 复制代码
#define _CRT_SECURE_NO_WARNINGS 1//要写到代码第一行
#include <stdio.h>
#include <stdlib.h>
int main()
{
	//二维数组
	float a[5][3] = { {80,75,56},{59,65,71},{59,63,70},{85,45,90},{76,77,45} };
	float sum = 0.0;
	float aver[3] = { 0 };   //数组第一列5个数的平均值的空数组
	int num[3] = { 0 };     //不及格次数的空数组
	for (int i = 1; i < 3; i++)
	{
		sum = 0;//每次循环的sum值都要初始化,清零
		for (int j = 0; j < 5; j++)
		{
			sum += a[j][i];
			if (a[j][i] < 60)   //判断分数及格还是不及格
			{
				num[i]++;
			}
		}
		aver[i] = sum / 5;
	}
	for (int i = 0; i < 3; i++)  //统计平均数
	{
		printf("%f\n", aver[i]);
	}
	for (int i = 0; i < 3; i++)  //统计次数
	{
		printf("%d\n", num[i]);
	}
}

6. 数组(寻找\0的下标)

c 复制代码
#define _CRT_SECURE_NO_WARNINGS 1//要写到代码第一行
#include <stdio.h>
#include <stdlib.h>
int main()
{
	char buf[128] = "helloA";
	int i = 0;
	while (buf[i] != '\0')//有几个元素不等于0
	{
		i++;
	}
	printf("i=%d\n", i);
	buf[i - 1] = '\0';//使最后一个元素等于\0
	printf("%s", buf);
	system("pause");
	return 0;
}

7. 字符数组的比大小

c 复制代码
#define _CRT_SECURE_NO_WARNINGS 1//要写到代码第一行
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
	/*定义两个空字符串*/
	char str1[128] = "";
	char str2[128] = "";
	printf("请输入两个字符串:\n");
	fgets(str1, sizeof(str1), stdin); /*stdin的意思是,从键盘获取(固定值)*/
	fgets(str2, sizeof(str2), stdin); 
	/*strlen()是测字符数组里面有多个元素,后面是使最后一个元素等于0,
	也就是结束数组,0等于\0*/
	str1[strlen(str1) - 1] = 0;
	str2[strlen(str2) - 1] = 0;
	printf("%s\n", str1);
	printf("%s\n", str2);
	/*第一种,写法用的是while,元素不能是\0和互不相等*/
	int i = 0;
	while (str1[i] != 0 && str2[i] != 0) /*去掉if条件,直接加 && str1[i]==str2[i]*/
	{
		if (str1[i] != str2[i])
			break;
		i++;
	}
	/*第二种,用for*/
	//  for (int i= 1; str1[i] != 0 && str2[i] != 0 && str1[i] == str2[i]; i++)

	if (str1[i] > str2[i])  /*比较大小*/
	{
		printf("str1>str2\n");
	}
	else if (str1[i] < str2[i])
	{
		printf("str1<str2\n");
	}
	else
	{
		printf("str1==str2");
	}
}

8. 有个数组,找出第二大的数,并且打印出来(使用指针操作数组元素个数,不要使用[ ])int a[ ]={100,100,100,234,123,500,32,68,41,99,13,71}

c 复制代码
#define _CRT_SECURE_NO_WARNINGS 1 //要写在第一行
#include "stdio.h"
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <iostream>
int main() 
{    
	int a[] = {100, 100, 100, 234, 123, 500, 32, 68, 41, 99, 13, 71};
	int size = sizeof(a) / sizeof(a[0]);  // 计算数组的大小
	int *ptr = a;  // 指向数组的指针
	int max = *ptr;  // 假设第一个元素为最大值
	int secondMax = *ptr;  // 假设第一个元素为第二大的值
    // 遍历数组,找出最大值和第二大的值   
	 for (int i = 0; i < size; i++) //遍历数组
	 {        
		 if (*ptr > max) //*ptr是首元素地址,max是指针地址
		 {            
			 secondMax = max;            
			 max = *ptr;       
		 } 
		 else if (*ptr > secondMax && *ptr < max) 
		 {            
			 secondMax = *ptr;       
		 }
		 ptr++;  // 指针移动到下一个元素   
	 }   
	 std::cout << "第二大的数是:" << secondMax << std::endl;
	 return 0;
}

9. 提取字符串

c 复制代码
int main()
{
	char buf[] = "               hello world         ";
	char num[128] = "";
	char* start = buf;/*首元素地址*/
	char* end = &buf[strlen(buf) - 1];/*字符串最后元素地址*/
	while (*start == ' ' && *start != 0)
	{
		start++;
	}
	while (*end == ' ' && *end != 0)
	{
		end--;
	}
	printf("%d\n", end - start + 1);/*提取字符的元素个数*/
	strncpy(num, start, end - start + 1);/*拷贝:将字符数组start拷贝至num,拷贝个数是end-start+1个*/
	printf("num=%s\n", num); 
}

10. 字符串的前后替换

c 复制代码
int main()
{
	char buf[] = "abcdefg";
	char* start = buf;
	char* end = &buf[strlen(buf) - 1];
	while (end > start)
	{
		char ch = *end;
		* end = *start;
		*start = ch;
		end--;
		start++;

	}
	printf("%s\n", buf);
}

谢谢大家的观看!

相关推荐
EricWang135832 分钟前
[OS] 项目三-2-proc.c: exit(int status)
服务器·c语言·前端
我是谁??34 分钟前
C/C++使用AddressSanitizer检测内存错误
c语言·c++
小码农<^_^>35 分钟前
优选算法精品课--滑动窗口算法(一)
算法
羊小猪~~37 分钟前
神经网络基础--什么是正向传播??什么是方向传播??
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习
软工菜鸡1 小时前
预训练语言模型BERT——PaddleNLP中的预训练模型
大数据·人工智能·深度学习·算法·语言模型·自然语言处理·bert
南宫生1 小时前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法
希言JY1 小时前
C字符串 | 字符串处理函数 | 使用 | 原理 | 实现
c语言·开发语言
午言若1 小时前
C语言比较两个字符串是否相同
c语言
AI视觉网奇2 小时前
sklearn 安装使用笔记
人工智能·算法·sklearn
JingHongB2 小时前
代码随想录算法训练营Day55 | 图论理论基础、深度优先搜索理论基础、卡玛网 98.所有可达路径、797. 所有可能的路径、广度优先搜索理论基础
算法·深度优先·图论