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);
}

谢谢大家的观看!

相关推荐
ALISHENGYA17 分钟前
全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之分支结构(switch语句)
数据结构·算法
chengooooooo18 分钟前
代码随想录训练营第二十七天| 贪心理论基础 455.分发饼干 376. 摆动序列 53. 最大子序和
算法·leetcode·职场和发展
jackiendsc25 分钟前
Java的垃圾回收机制介绍、工作原理、算法及分析调优
java·开发语言·算法
FeboReigns38 分钟前
C++简明教程(文章要求学过一点C语言)(1)
c语言·开发语言·c++
FeboReigns41 分钟前
C++简明教程(文章要求学过一点C语言)(2)
c语言·开发语言·c++
游是水里的游2 小时前
【算法day20】回溯:子集与全排列问题
算法
_小柏_2 小时前
C/C++基础知识复习(43)
c语言·开发语言·c++
yoyobravery2 小时前
c语言大一期末复习
c语言·开发语言·算法
Jiude2 小时前
算法题题解记录——双变量问题的 “枚举右,维护左”
python·算法·面试
被AI抢饭碗的人2 小时前
算法题(13):异或变换
算法