目录
第一题
第二题
方法一:要循环两次,一次求阶乘,一次求和。
注意:在求和时,如果不将sum每次求和的初始值置为1,那么求和就会重复。
方法二:
第三题
方法一:用数组遍历的思想
方法二用折半查找的思想
折半查找的思想
第四题
方法一:用两个变量,两个数组进行复制
方法二
第五题
方法一:用for循环和if else分支结构。
方法二:用strcmp函数比较字符串的大小
第五题(重要需要多次复习)
第一题
求n!
int main() {
int n = 0;
int sum = 1;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
sum = sum * i;
//sum *=i;
}
printf("%d\n",sum);
return 0;
}
第二题
第二题1!+2!+...+n!
方法一:要循环两次,一次求阶乘,一次求和。
注意:在求和时,如果不将sum每次求和的初始值置为1,那么求和就会重复。
正常求和,1+1*2+1*2*3......
每一重置sum:1+1+1*2+1+1*2+1*2*3+1+1*2+1*2*3+1*2*3*4
方法二:
//第二题1!+2!+...+n!
int main() {
int n = 0;
scanf("%d", &n);
int sum = 1;
int cum = 0;
for(int i = 1;i<=n;i++) //要循环两次
{
sum = 1; //让sum每次置为1
for (int j = 1; j <= i; j++)
{
sum = sum * j;
}
cum = cum + sum;
}
/*for (int i = 1; i <= n; i++) {
sum *= i;
cum += sum;
}*/
printf("%d", cum);
return 0;
}
第三题
在有序数组1,2,3,4,5,6,7,8,9,10里查找元素
printf("%d\n", sizeof(arr)); //求数组的大小
printf("%d\n", sizeof(arr[0])); //求数组一个元素的大小
printf("%d\n", sizeof(arr) / sizeof(arr[0]) //求数组的元素个数
方法一:用数组遍历的思想
这里用到sizeof函数,可以求出数组的大小
//第三题 在有序数组里查找元素
方法一遍历查找
int main() {
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
printf("%d\n", sizeof(arr));
printf("%d\n", sizeof(arr[0]));
printf("%d\n", sizeof(arr) / sizeof(arr[0]));
int n = 0;
scanf("%d", &n);
int i=0;
while (i<=10) {
if (arr[i] != n) {
i++;
}
else {
printf("找到了,下标为%d", i);
break;
}
}
return 0;
}
方法二用折半查找的思想
用一个变量left表示第一个元素,一个变量right表示最后一个元素。
数组的下标是从0开始的,所以right的值应该是数组长度-1;
折半查找的思想
//方法二折半查找
int main(){
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int n = 0;
scanf("%d", &n);
int tp = sizeof(arr) / sizeof(arr[0]);
int left = 0;
int right = tp - 1;
int mid = (left + right) / 2;
while (left <= right) {
mid = (left + right) / 2;
if (n > arr[mid]) {
left = mid + 1;
}
else if (n < arr[mid]) {
right = mid - 1;
}
else {
printf("找到了下标为%d",mid);
break;
}
}
return 0;
}
第四题
从两头向中间移动,生成相应的字符串
如将 welcome to China !!!,从两头向中间输出
输出结果如下
方法一:用两个变量,两个数组进行复制
#define _CRT_SECURE_NO_WARNINGS
#include<stdlib.h>
#include<stdio.h>
//第四题
int main() {
//方法一
char arr1[] = "welcome to China!!!";
char arr2[] = "*******************";
int tp = sizeof(arr1) / sizeof(arr1[0]);
int left = 0;
int right = tp - 1;
while (left <= right) {
arr2[left] = arr1[left];
arr2[right] = arr1[right];
left++;
right--;
printf("%s\n", arr2);
}
return 0;
}
方法二
可以设置延迟效果,利用Sleep函数,和system(“cls”)来清空屏幕。
#define _CRT_SECURE_NO_WARNINGS
#include<stdlib.h>
#include<stdio.h>
//第四题
int main() {
//方法二
char arr1[] = "welcome to China!!!";
char arr2[] = "*******************";
int tp = sizeof(arr1) / sizeof(arr1[0]);
int left = 0;
int right = tp - 1;
while (left <= right) {
arr2[left] = arr1[left];
arr2[right] = arr1[right];
left++;
right--;
Sleep(1000);
system("cls");
printf("%s\n", arr2);
}
return 0;
}
第五题
编写代码,模拟用户登录程序,只能登录三次,只允许输入三次密码,如果三次都错误就退出程序,密码正确就提示成功。
方法一:用for循环和if else分支结构。
//第五题
int main() {
int i = 0;
int n = 0;
int pas = 123456;
for (int i = 0; i < 3;i++) {
printf("请输入正确的密码\n");
scanf("%d", &n);
if (n == pas) {
printf("成功");
break;
}
else {
printf("密码不对\n");
}
}
return 0;
}
方法二:用strcmp函数比较字符串的大小
注意:strcmp函数的头文件是#include<string.h>
注意:两个字符串比较大小不能直接用==比较,要使用strcmp函数比较
如直接相比会导致密码不对
//方法二
int i = 0;
char password[20] = {0};
for (int i = 0; i < 3; i++) {
printf("请输入正确的密码\n");
scanf("%s", password);
if (strcmp(password,"123456")==0) {
printf("成功");
break;
}
else {
printf("密码不对\n");
}
}
return 0;
第五题(重要需要多次复习)
电脑随机生成1-100的之间的数,然后我们猜数字,如果猜小了,返回猜小了。猜大了,返回猜大了,如果猜对返回猜大了,如果猜对了,返回猜对了,然后游戏结束。
- 在使用随机数函数rand之前要使用srand()随机数生成器。
- srand(),传入参数如srand(1),参数不同所生成的随机数不同,参数相同生成的随机数是相同的,如srand(1)与srand(2)的随机数不同,但是srand(1)与srand(1)的随机数相同。
- 若要生成随机的随机数种子,就要用到time函数,srand((unsigned int)time(NULL))生成随机的随机数种子。
- rand函数是伪随机的,真正的随机要用srand。
- time函数的返回值是time_t,srand的形参是unsigned int所以要强制类型转换,time的参数是一个指针类型,所以当不用时要值为空NULL。
//第六题
void meun() {
printf("**********************\n");
printf("********1 play********\n");
printf("********0 exit********\n");
printf("**********************\n");
}
void game() {
//生成随机数
int ran = rand() % 100 + 1;
/*printf("随机数是%d\n ", ran);*/
//猜数字
int n = 0;
while (1) {
printf("输入你猜的数字\n");
scanf("%d", &n);
if (n > ran) {
printf("猜大了\n");
}
else if (n<ran) {
printf("猜小了\n");
}
else {
printf("猜对了\n");
}
}
}
int main() {
int input = 0;
srand((unsigned int)time(NULL)); //不用每次都生成一个随机数种子,用同一个随机数种子,才能多次输入使用的相同的随机数
do {
meun();
printf("请输入1\\0:\n");
scanf("%d", &input);
if (input == 1) {
printf("开始猜数字游戏\n");
game();
}
else if (input == 0) {
printf("结束游戏");
break;
}
else {
printf("输入错误");
}
} while (input);
return 0;
}