c语言的一些小练习,可以多思考,多看看
1. 按下面对公式求sum的值:Sum=1-2+3-4+5-6+……+99-100
#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-100int 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. 有无符号数比大小
#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. 数组的逆置
#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. 数组的冒泡排列
#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} }
#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的下标)
#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';//使最后一个元素等于\0printf("%s", buf);system("pause");return 0;
}
7. 字符数组的比大小
#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}
#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. 提取字符串
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. 字符串的前后替换
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);
}
谢谢大家的观看!