C语言总复习第二阶段部分练习题

#define _CRT_SECURE_NO_WARNINGS 1


// 求斐波那契数列
//#include<stdio.h>
//#include<stdlib.h>
//#include<assert.h>
//
//void Fibonacci(int n)
//{
// assert(n >= 0);
// int f1 = 1;
// int f2 = 1;
// int val = 0;
// if (n == 0)
// val = 0;
//
// else if (n <= 2)
// val = 1;
//
// else
// {
// for (int i = 3; i <= n; i++)
// {
// val = f1 + f2;
// f1 = f2;
// f2 = val;
// }
// }
// printf("第%d个斐波那契数为:%d\n", n, val);
//}
//int main()
//{
// int n = 0;
// printf("请输入一个数:");
// scanf("%d", &n);
// printf("\n");
// Fibonacci(n);
// system("pause");
// return 0;
//}




//计算2/1+3/2+5/3+8/5+13/8...的前20项和
//#include<stdio.h>
//#include<stdlib.h>
//
//void Fibonacci_sum(int n)
//{
// double f1 = 1;
// double f2 = 2;
// double val = 0;
// for (int i = 1; i <= n; i++)
// {
// val += f2 / f1;
// double ret = f1;
// f1 = f2;
// f2 = f2 + ret;
// }
// printf("结果是:%f\n", val);
//}
//
//int main()
//{
// Fibonacci_sum(20);
// system("pause");
// return 0;
//}




//一个球从100米高的地方自由落下,每次落地后反跳回源高度
//的一半,再落下,再反弹。求第10次落地时,共经过多少米,
//第10次反弹多高?
//#include<stdio.h>
//#include<stdlib.h>
//
//void Count_distance(int n)
//{
// double high = 100;
// double sum_dis = 100;
// for (int i = n; i > 0; i--)
// {
// high = high / 2;
// sum_dis += high*2;//弹下来,再上去总共是两次
// }
// sum_dis = sum_dis - high;//最后一次没有弹下来,少一次
// printf("总距离为:%f\n", sum_dis);
// printf("总距离为:%f\n", high);
//}
//
//int main()
//{
// Count_distance(10);
// system("pause");
// return 0;
//}




//猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,好不过瘾,
//又多吃了一个。第二天早上又吃了剩下桃子的一般,又多吃了一个。以
//后每天都吃了前一天剩下的一半零一个,到第十天早上想吃的时候就剩
//下一个桃子问一共多少个桃子?


//#include<stdio.h>
//#include<stdlib.h>
反着推从第十天到第一天
//void Count_peach()
//{
// int x1 = 0;
// int x2 = 1;
// for (int i = 1; i < 10; i++)
// {
// x1 = (x2 + 1) * 2;
// x2 = x1;
// }
// printf("%d\n", x1);
//}
//int main()
//{
// Count_peach();
// system("pause");
// return 0;
//}




//输入一些字符,把大写转换为小写,其余原样输出
//#include<stdio.h>
//#include<stdlib.h>
//#include<string.h>
//void itoI(char *arr)
//{
// int len = strlen(arr);
// for (int i = 0; i < len; i++)
// {
// if (arr[i] >= 'A' && arr[i] <= 'Z')
// {
// arr[i]=arr[i] + 32;
// }
// }
// printf("%s", arr);
// printf("\n");
//}
//int main()
//{
// char arr[50];
// gets(arr);
// printf("\n");
// itoI(arr);
// system("pause");
// return 0;
//}




//编写函数unsigned int reverse_bit(unsigned int value)
//这个函数的返回值value的二进制模式从左到右翻转后的值。


//如在32位机器上25这个值包含下列各位:
//00000000000000000000000000011001
//翻转后:(2550136832)
//10011000000000000000000000000000
//程序结果返回:2550136832


//#include<stdio.h>
//#include<stdlib.h>
//
//unsigned int reverse_bit(unsigned int value)
//{
// int ret = 0;
// int bit = 0;
// for (int i = 0; i < 32; i++)
// {
// ret = ret << 1;//左移一位,保存前一位
// bit = value & 1;//取出最后一位
// value = value >> 1;//舍弃最后一位,保存下一位
// ret = bit | ret;//把最后一位追加到ret中
// }
// return ret;
//}
//int main()
//{
// unsigned int num = reverse_bit(25);
// printf("%u\n", num);
// system("pause");
// return 0;
//}




//写一个程序将数组a[3][4]初始化为1—12的数,然后输出所有的元素
//#include<stdio.h>
//#include<stdlib.h>
//
//int main()
//{
// int a[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
//
// for (int i = 0; i < 3; i++)
// {
// for (int j = 0; j < 4; j++)
// {
// printf("%d  ", a[i][j]);
// }
// }
//
// system("pause");
// return 0;
//}




// 使用字符串数组作为一个简单的文本编辑器的基础
//功能:
//接受多行输入,直到接受一个空行,结束输入,将
//输入的所有行打印在屏幕上。


//#include<stdio.h>
//#include<stdlib.h>
//
//#define MAX 100//100行之内
//#define LEN 80//一行80个字符
//
//int main()
//{
// int t = 0;
// int j = 0;
// int i = 0;
// char text[MAX][LEN];
// printf("输入一个空行结束!\n");
// for (t = 0; t < MAX; t++)
// {
// printf("%d:", t);
// gets(text[t]);//获取第t行
// if (!*text[t])//如果第t行为0;
// {
// break;
// }
// }
// for (j = 0; j < t; j++)
// {
// for (i = 0; text[i][j]; j++)
// {
// putchar(text[i][j]);
// }
// putchar('\n');
// //puts(text[i]);
// }
// system("pause");
// return 0;
//}




//基于数组的棋盘游戏
//#include<stdio.h>
//#include<stdlib.h>
//
//char matrix[3][3];
//void creat_matrix()//初始化棋盘
//{
// int i = 0;
// int j = 0;
// for (i = 0; i < 3; i++)
// {
// for (j = 0; j < 3; j++)
// {
// matrix[i][j] = ' ';
// }
// }
//}
//void print_matrix()//打印棋盘
//{
// for (int i = 0; i < 3; i++)
// {
// printf(" %c | %c | %c ", matrix[i][0], matrix[i][1], matrix[i][2]);
// if (i != 2)
// printf("\n---|---|---\n");
// }
// printf("\n");
//}
//void get_player_move()//玩家下
//{
// int x, y;
// printf("please enter x,y coordinates for your move:");
// scanf("%d %d", &x, &y);
// y--;//使输入的和原本下表一致,从0开始
// x--;
// if (matrix[x][y] != ' ')
// {
// printf("invalid move,please try again!\n");
// get_player_move();
// }
// else
// matrix[x][y] = 'X';
//}
//char check()//检查是否赢
//{
// int i;
// for (i = 0; i < 3; i++)//检查横行
// {
// if (matrix[i][0] == matrix[i][1] &&
// matrix[i][1] == matrix[i][2])
// return matrix[i][1];
// }
// for (i = 0; i < 3; i++)//检查竖行
// {
// if (matrix[0][i] == matrix[1][i] &&
// matrix[1][i] == matrix[2][i])
// return matrix[1][i];
// }
//
// if (matrix[0][0] == matrix[1][1] &&
// matrix[1][1] == matrix[2][2])//检查斜角
// return matrix[1][1];
// if (matrix[0][2] == matrix[1][1] &&
// matrix[1][1] == matrix[2][0])//检查斜角
// return matrix[1][1];
// return ' ';
//}
//void get_computer_move()//电脑下
//{
// int i, j;
// for (i = 0; i < 3; i++)
// {
// for (j = 0; j < 3; j++)
// {
// if (matrix[i][j] == ' ')
// break;
// }
// if (matrix[i][j] == ' ')
// break;
// }
// if (i*j == 9)
// {
// printf("no one won!\n");
// exit(0);
// }
// else
// matrix[i][j] = 'O';
//}
//int main()
//{
// char done = ' ';
// printf("This is a game of qingdou!\n");
// creat_matrix();
// do
// {
// print_matrix();
// get_player_move();
// done=check();
// if (done != ' ')
// break;
// get_computer_move();
// done = check();
// }  
// while (done  ==  ' ')
// ;
// print_matrix();
// if (done == 'X')
// printf("player won!\n");
// else
// printf("computer won!\n");
//
// system("pause");
// return 0;
//}




//查看char, signed char,unsigned char的区别
//#include<stdlib.h>
//#include<stdio.h>
//
//int main()
//{
// //char a = -1;  // 相当于由符号的
// char a = 128; //a=-128
// signed char b = -1;
// unsigned char c = -1;
// printf("a=%d,b=%d,c=%d", a, b, c);
// system("pause");
// return 0;
//}




//数据类型问题总结
//#include<stdlib.h>
//#include<stdio.h>
//
//int main()
//{
// //char a = -1;  // 相当于由符号的
// //char a = 128; //a=-128
// //signed char b = -1;
// //unsigned char c = -1;
// //printf("a=%d,b=%d,c=%d", a, b, c);
// /*int i = -20;
// unsigned int j = 10;
// printf("%d\n", i + j);*/
// //unsigned i;
// //for (i = 9; i >= 0; i--) //死循环,因为无符号数都是大于0的
// //{
// // printf("%u\n", i);
// //}
// //char a[1000];
// //int i;
// //for (i = 0; i < 1000; i++)
// //{
// // a[i] = -1 - i;
// //}
// //printf("%d\n", strlen(a));
// //printf("%d\n", sizeof(a));
// //for (i = 0; i < strlen(a); i++)
// //{
// // printf("%d  ", a[i]);
// //}
// //short num = 32767;
// //short a = num + 1;
// //printf("%d  ", a);
// //unsigned char i = 0;
// //for (i = 0; i <= 255; i++)
// //{
// // puts("qingdou  ");//死循环 因为无符号的char 0--256,一只小于255
// //}
// int num = 9;
// float *pFloat = (float*)&num;
// printf("num的值为:%d\n", num);
// printf("*pFloat的值为:%f\n", *pFloat);//浮点数存储还原
//
// *pFloat = 9.0;
// printf("num的值为:%d\n", num);//浮点数存储
// printf("*pFloat的值为:%f\n", *pFloat);
// system("pause");
// return 0;
//}




在终端输入多行信息,找出包含“ould”的行,并打印改行。
//#include<stdio.h>
//#include<stdlib.h>
//#define MAXLINE 100
//
//int getline(char s[], int max)
//{
// int c, i;
// i = 0;
// while (i < max && (c = getchar()) != EOF&&c != '\n')
// s[i++] = c;
// if (c == '\n')
// s[i++] = c;
// s[i] = '\0';
// return i;
//}
//int findstr(char s[], char t[])
//{
// int i, j, k;
// for (i = 0; s[i] != '\0'; i++)
// {
// for (j = i, k = 0; t[k] != '\0'&&s[j] == t[k]; j++, k++)
// ;
//
// if (k > 0 && t[k] == '\0')
// return 1;
// }
// return -1;
//}
//int main()
//{
// char p[] = "ould";
// char line[MAXLINE];
// while (getline(line, MAXLINE))
// {
// if (findstr(line, p) > 0)
// printf("含有的行:%s\n", line);
// }
// system("pause");
// return 0;
//}




接受一个无符号整形值,把它转化为字符并打印它
//#include<stdio.h>
//#include<stdlib.h>
//void ui_to_a(unsigned int n)
//{
// unsigned int i = 0;
// i = n / 10;
// if (i != 0)
// ui_to_a(i);//递归调用
// char s = n % 10 + '0';
// printf("%c", s);
//}
//int main()
//{
// int n = 0;
// printf("请输入一个无符号整形值:");
// scanf("%u", &n);
// ui_to_a(n);
// printf("\n");
// system("pause");
// return 0;
//}




不允许创建临时变量,求字符串的长度
//#include<stdio.h>
//#include<stdlib.h>
//int my_strlen(char *str)
//{
// if(*str=='\0')
// return 0;
// return my_strlen(str + 1) + 1;
//}
//int main()
//{
// char s[]="huqing";
// int len=my_strlen(s);
// printf("这个字符串的长度为:%d\n", len);
// system("pause");
// return 0;
//}




斐波那契数列的前n个数打印
//#include<stdio.h>
//#include<stdlib.h>
//
//void print_Fib(int n)
//{
// int f1 = 1;
// int f2 = 1;
// int sum = 0;
// if (n == 1)
// printf("%d  ", f1);
//
// else if (n == 2)
// printf("%d  %d  ", f1, f2);
// else
// {
// printf("%d  %d  ", f1,f2);
// for (int i = 3; i <= n; i++)
// {
// sum = f1 + f2;
// f1 = f2;
// f2 = sum;
// printf("%d  ", sum);
// }
// }
//}
//int main()
//{
// int n = 0;
// printf("请输入要打印的长度:\n");
// scanf("%d", &n);
// print_Fib(n);
// system("pause");
// return 0;
//}




用递归函数实现厄密多项式
//#include<stdio.h>
//#include<stdlib.h>
//
//int hermite(int n, int x)
//{
// if (n < 0 || n == 0)
// return 1;
//
// else if (n == 1)
// return 2 * x;
// else
// {
// return 2*x*hermite(n-1,x)-2*(n-1)*hermite(n-2,x);
// }
//}
//int main()
//{
// int n, x;
// scanf("%d%d", &n,&x);
// int sum =  hermite(n,x);
// printf("%d\n", sum);
// system("pause");
// return 0;
//}




一个字符串必须包含一个或者多个数字,函数要把这些数字字符转换为
整数并返回这个整数。如果没有数字字符则返回零。
//#include<stdio.h>
//#include<stdlib.h>
//
//int ascii_to_integer(char *str)
//{
// int num = 0;
// while (*str!='\0')
// {
// if (*str <= '9'&&*str >= '0')
// {
// num = num * 10 + *str - '0';
// }
// str++;
// }
// return num;
//}
//int main()
//{
// char str[32];
// printf("请输入字符串:\n");
// scanf("%s",str);
// int num = ascii_to_integer(str);
// printf("number=%d\n", num);
// system("pause");
// return 0;
//}




编写一个函数,将一个数字字符串转换成这个字符串对应的数字
(包括正浮点数,负浮点数)
//#include<stdio.h>
//#include<stdlib.h>
//#include<assert.h>
//#include<math.h>
//
//double my_atof(char *str)
//{
// assert(str);
// int flag = 1;//正负号
// int ret = 0;//小数点
// double num = 0;
// int count = 0;
// while (*str != '\0')
// {
// if (*str == '-')
// {
// flag = -1;
// str++;
// }
// if (*str == '.')
// {
// ret = 1;
// str++;
// }
// if (*str <= '9'&&*str >= '0')
// {
// num = num * 10 + *str - '0';
// if (ret == 1)
// {
// count++;
// }
// }
// str++;
// }
// num = num / pow(10, count);//num除以10的count次幂
// return flag*num;
//}
//int main()
//{
// char str[32];
// printf("请输入数字字符串:\n");
// scanf("%s",str);
// double num = my_atof(str);
// printf("number=%f\n", num);
// system("pause");
// return 0;
//}




编写一个函数,传入a,b两个int类型的变量,返回两个值得最大公约数
最小公倍数
//#include<stdio.h>
//#include<stdlib.h>
//
//int max_num(int a, int b)
//{
// //让a是大的数
// if (a < b)
// {
// int t = a;
// a = b;
// b = t;
// }
// if (b == 0)
// return a;
// while (a%b != 0)
// {
// int t = b;
// b = a%b;
// a = t;
// }
// return b;
//}
//int min_num(int a, int b)//最小公倍数:这两个数的乘积除以最大公约数
//{
// return (a*b) / max_num(a, b);
//}
//int main()
//{
// int a, b;
// printf("请输入两个数字:\n");
// scanf("%d%d",&a,&b);
// int num1 = max_num(a,b);
// int num2 = min_num(a,b);
// printf("最大公约数=%d\n", num1);
// printf("最小公倍数=%d\n", num2);
// system("pause");
// return 0;
//}




编写一个函数实现n^k,使用递归
//#include<stdio.h>
//#include<stdlib.h>
//
//int result(int n, int k)
//{
// if (k == 0)
// return 1;
// else if (k == 1)
// return n;
// else
// return n*result(n, k - 1);
//}
//int main()
//{
// int n, k;
// printf("请输入两个数字:\n");
// scanf("%d%d", &n, &k);
// int num = result(n, k);
// printf("%d^%d=",n,k);
// printf("%d\n", num);
// system("pause");
// return 0;
//}




写一个递归函数int DigitSum(int n),输入一个非负整数,,返回组成他的数字之和,
如输入1729,则应该返回1+7+2+9=19.
//#include<stdio.h>
//#include<stdlib.h>
//
//int DigitSum(int n)
//{
// if ( n== 0)
// return 0;
// else
// return n % 10 + DigitSum(n / 10);
//}
//int main()
//{
// int n;
// printf("请输入一个非负数字:");
// scanf("%d", &n);
// int num = DigitSum(n);
// printf("%d\n", num);
// system("pause");
// return 0;
//}




编写一个函数reverse_string(char *string)(递归实现)
将给出的字符串中的字符反向排列
//#include<stdio.h>
//#include<stdlib.h>
//#include<assert.h>
//
声明
//int my_strlen(const char *str);
//void reverse_string(char *str);
//int len;
//
//int my_strlen(const char *str)
//{
// assert(str);
// int len = 0;
// while (*str)
// {
// len++;
// str++;
// }
// return len;
//}
void reverse_string(char *str)//非递归
{
char tmp = 0;
int mid = len / 2;
while (len != mid)
{
for (int i = 0; i < mid; i++)
{
tmp = str[i];
str[i] = str[len - 1];
str[len - 1] = tmp;
len--;
}
}
}
//void reverse_string(char *str)//递归
//{
// if (*str != '\0')
// {
// str++;
// reverse_string(str);
// printf("%c", *(str - 1));
// }
//}
//int main()
//{
// char str[32];
// printf("请输入一个字符串:");
// scanf("%s", str);
//    len = my_strlen(str);
// reverse_string(str);
// printf("\n");
// //printf("%s\n", str);
// system("pause");
// return 0;
//}




用可变参数列表实现简单的my_printf函数
//#include<stdio.h>   
//#include<stdlib.h>   
//#include<stdarg.h>//定义成一个可变参数列表的指针 
//
//void my_printf(char* fmt,...)        //一个简单的类似于printf的实现,//参数必须都是int 类型  
//{  
// va_list pArg;
// char c;      
// va_start(pArg, fmt);
// do
// {
// c = *fmt;
// if (c != '%')
// {
// putchar(c);            //照原样输出字符  
// }
// else
// {
// //按格式字符输出数据  
// switch (*++fmt)
// {
// case 'd':
// printf("%d", *((int*)pArg));
// break;
// case 'x':
// printf("%#x", *((int*)pArg));
// break;
// case 'f':
// printf("%f", *((float*)pArg));
// default:
// break;
// }
// va_arg(pArg, int);
// }
// ++fmt;
// }
// while (*fmt != '\0');
// va_end(pArg);
// return;
//}
//int  main()
//{
// int k = 50;
// my_printf("Hello world!\n");
// my_printf("%d\n", k);
// system("pause");
// return 0;
//}




假设数组中存放的内容是“student a am i”,现在编写代码实现:
将数组的被人变为“i am a student”
//#include<stdio.h>
//#include<stdlib.h>
//#include<assert.h>
//#include<string.h>
//
//void reverse(char *start, char *end)
//{
// assert(start);
// assert(end);
// while (start < end)
// {
// char temp = *start;
// *start = *end;
// *end = temp;
// start++;
// end--;
// }
//}
//
//void reverse_str(char *str, int sz)
//{
// assert(str);               //检测传入的字符串  
// char *str1 = str;
// char *left = str;
// char *right = str + sz - 1;
// reverse(left, right);         //先将字符串整体反转  
// while (*str1)
// {
// left = str1;
// while ((*str1 != '\0') && (*str1 != ' ')) //找到单词,此处一定要加(*str1 != '\0')条件限制,因为找到最后一个单词的时候,*str1永远也不为空格  
// {
// str1++;
// }
// right = str1 - 1;               //此时str1指向单词后方的空格,需要减一方能指向单词的最后一个字母  
// reverse(left, right);               //继整体反转后再次反转单词,能使单词拼写顺序恢复过来  
// if (*str1 == ' ')             //等于空格让指针后移一位否则不能参与下次循环。  
// {
// str1++;
// }
// }
//}
//int main()
//{
// char c[] = "student a am i";
// int sz = strlen(c);
// reverse_str(c, sz);
// printf("%s\n", c);
// system("pause");
// return 0;
//}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值