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);
}
谢谢大家的观看!