// TheChapterOfTen.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
void sort(int* arr, int n);
char* my_new(int n);
void change_english_name();
int my_strcmp(char* p1, char* p2);
void find_numbers();
void reverse();
int main()
{
/*
//常量指针是指向“常量”的指针,即指针本身可以指向别的对象,但是不能通过该指针修改对象
//该对象可以通过其他的方式进行修改,它常用于函数的参数,以避免误改了实参。
char ch = 'a', ch1 = 'x';
const char* p = &ch;//定义常量指针
p = &ch1;//可以指向别的对象
//*p = 'b';//编译报错,错误,不能通过该指针修改对象
char* p1 = &ch;
*p1 = 'c';//不是常量指针,所以可以通过该指针修改对象
printf("ch = %c", ch);
char ch2 = '2';
char* p2;
p2 = &ch2;
*/
/*
//1、
int arr[] = { 12, 3, 44, 9, 22, 11, 30, 18 };
int n = sizeof(arr) / sizeof(int);
sort(arr, n);
for (int i = 0; i < n; i++) {
printf("%d \t", arr[i]);
}
*/
/*
//2、
char* p = my_new(10);
if (NULL != p) {
char* temp = p;
for (int i = 0; i < 10; i++) {
if (i == 9) {
*temp = '\0';
}
else {
*temp = i + '0';
printf("%c ", *temp);
temp++;
}
}
//字符串以'\0'结尾,否则输出有问题
printf("\n%s\n", p);
}
*/
//3、
//change_english_name();
//4、
//char c1[] = "good", c2[] = "goodness";
//printf("比较的结果:%d", my_strcmp(c1, c2));
//5、
//find_numbers();
//7、
//reverse();
}
//1、编写一个C程序,用指向指针的指针对n个整数进行排序并输出结果,
//要求将排序单独写成一个函数,n个整数在主函数中输入,最后在主函数中输出
//有点问题
void sort(int* arr , int n) {
int* p = arr;
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1 - i; j++) {
if (*(p + j) > *(p + j + 1)) {
int temp = *(p + j);
*(p + j) = *(p + j + 1);
*(p + j + 1) = temp;
}
}
}
}
//2、编写一个C程序,要求编写一个函数new,对n个字符开辟连续的存储空间,此函数
//应返回一个指向字符串开始空间的指针(地址),new(n)表示分配n个字节的内存空间
char* my_new(int n) {
char* p;
if (p = (char*)malloc(n)) {
return p;
}
return NULL;
}
//3、编写一个C程序,输入月份,输出该月的英文名,例如;输入“3”,则输出“March”
//要求用指针数组来处理
void change_english_name() {
char arr_month[12][10] = {"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"};
char* month_name[12];
//为什么这样就不行?是VS的原因吗?
//char* month_name[] = { "January", "February", "March", "April", "May", "June",
// "July", "August", "September", "October", "November", "December" };
for (int i = 0; i < 12; i++) {
month_name[i] = arr_month[i];
}
char** p;
p = month_name;
printf("请输入月份:");
int month;
scanf_s("%d", &month);
switch (month) {
case 1: {
printf("%s", *p);
break;
}
case 2: {
printf("%s", *(p+1));
break;
}
case 3: {
printf("%s", *(p + 2));
break;
}
case 4: {
printf("%s", *(p + 3));
break;
}
case 5: {
printf("%s", *(p + 4));
break;
}
case 6: {
printf("%s", *(p + 5));
break;
}
case 7: {
printf("%s", *(p + 6));
break;
}
case 8: {
printf("%s", *(p + 7));
break;
}
case 9: {
printf("%s", *(p + 8));
break;
}
case 10: {
printf("%s", *(p + 9));
break;
}
case 11: {
printf("%s", *(p + 10));
break;
}
case 12: {
printf("%s", *(p + 11));
break;
}
}
}
//4、编写一个C程序,实现两个字符串的比较,即自己写一个strcmp函数,
//原型为:int strcmp(char* p1, char* p2);
int my_strcmp(char* p1, char* p2) {
while (1) {
//相等
if (*p1 == '\0' && *p2 == '\0') {
return 0;
}
//不相等
int result = *p1 - *p2;
if (result != 0) {
return result;
}
p1++;
p2++;
}
}
//5、输入一个字符串,它应有数字和非数字字符,例如:a123x456 128379? sala32412lhjhl132
//编写一个C程序,将其中连续的数字作为一个整数,并依次存放到数组a中,例如:123存入a[0]中,
//456存入a[1]中,统计共有多少个整数,并输出这些整数。
void find_numbers() {
printf("请输入一个字符串:");
char c[100];
gets_s(c);
printf("str = %s\n", c);
char* p = c;
int arr[10];
int* p_arr = arr;
int num = 0;
int count_num = 0;
while (*p != '\0') {
if (*p >= '0' && *p <= '9') {
num = num * 10 + *p - 48;
}
else if(num != 0){
*(p_arr + count_num) = num;
num = 0;
count_num++;
}
p++;
}
//考虑字符串以数字结尾的情况,例如a123b456c789
if (num != 0) {
*(p_arr + count_num) = num;
num = 0;
count_num++;
}
printf("字符串中有%d个整数\n", count_num);
for (int i = 0; i < count_num; i++) {
printf("%d\t", *(p_arr+i));
}
}
//6、一个班有4个学生,5门课程,编写一个C程序,实现如下3个功能:
//(1)、求第一门课程的平均分
//(2)、找出有两门以上课程不及格的学生,输出他们的学号和全部课程的成绩及平均成绩
//(3)、找出平均成绩在90分以上或者全部课程成绩在85分以上的学生
void stu_score() {
//没多大意义,不写了
}
//7、编写一个C程序,将n个数按输入时的逆序来排列
void reverse() {
printf("请输入10个数:");
int arr[10];
int* p = arr;
for (int i = 0; i < 10; i++) {
scanf_s("%d", p + i);
}
for (int i = 0; i < 5; i++) {
int temp = *(p + i);
*(p + i) = *(p + 9 - i);
*(p + 9 - i) = temp;
}
for (int i = 0; i < 10; i++) {
printf("%d\t", *(p+i));
}
}
版权声明:本文为weixin_40602639原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。