东莞市住房建设局网站游戏推广员
目录
1、下面代码输出多少,为什么?
2、你要好好学习么?
3、一直写代码,
4、两个数求最大值
5、输入1-5输出工作日,输入6-7输出休息日,其他输入错误
6、写一个输入密码的代码
7、怎么样当输入数字时候打印,输入字母的时候不打印呢?
8、计算 n的阶乘。
9、计算 1!+2!+3!+......+10!
10、在一个有序数组中查找具体的某个数字n。
11、编写代码,演示多个字符从两端移动,向中间汇聚。
12、编写代码实现,模拟用户登录情景,并且只能登录三次。
13、写一个猜数字游戏(鹏哥C_37)
14、输入3个整数,输出按大到小的顺序输出
15、求两个数的最大公约数
16、打印出来1000年到2000年之间的闰年
17、写一个代码: 打印100~200之间的素数
18、自动关机的程序
19、复制字符串
20、内存设置
21、写一个函数交换两个整形变量的值
22、写一个函数可以判断一个数是不是素数。
23、写一个二分查找的函数
24、写一个函数,每调用一次这个函数,就会将num的值增加1。
25、接受一个整型值(无符号),按照顺序打印它的每一位。
26、编写函数求字符串的长度
27、用递归的方法求n的阶乘
28、求第n个斐波那契数。( 不考虑溢出 )
1、下面代码输出多少,为什么?
#include<string.h>
int main()
{printf("%d\n",strlen("c:\test\328\test.c")); return 0;
输出为14:
- 因为:\t(转义字符)算一个字符,\32算一个字符(\ddd8进制中最大为7)。
2、你要好好学习么?
- 如果你要好好学习,请输出1,就会打印好工作,否则打印回家卖红薯。
#include<stdio.h>
int main()
{int input = 0;printf("你要好好学习么?\n");printf("如果好好学习请输入1 >:");scanf("%d",&input);if(input == 1){printf("好工作\n");}else{printf("回家卖红薯\n");}return 0;
}
3、一直写代码,
- 输出“写代码行数”一直到1000行的时候,停止输出好工作。
int main()
{int i = 0;while(i<1000){printf("写代码第%d行\n",i);i++;}if(i == 1000){printf("好工作\n");}return 0;
}
4、两个数求最大值
要求:输入两个数字,写一个函数输出最大值(用条件操作符)
int MAX(int x,int y)
{return (x>y?x:y);
}
int main()
{int a = 0;int b = 0;scanf("%d %d",&a,&b);printf("%d\n",MAX(a,b));return 0;
}
5、输入1-5输出工作日,输入6-7输出休息日,其他输入错误
int main()
{int day =0;scanf("%d",&day);switch(day){case 1:case 2:case 3:case 4:case 5:printf("工作日\n");break;case 6:case 7:printf("休息日\n");break;default:printf("输入错误\n");}return 0;
}
6、写一个输入密码的代码
要求:
1.输出“请输入密码”
2.输入abc 123时候再输出“请选择Y/N”
3.如果输入Y输出“确认成功”,否则输出“确认失败”
int main()
{char password[20] = { 0 };printf("请输入密码:>");scanf("%s",password);printf("请确认密码(Y/N):>");//清理缓冲区,处理'\n'//getchar();//清理缓冲区的多个字符int tmp =0;while((tmp = getchar()) != '\n'){;}int ch = getchar();if(ch == 'Y'){printf("确认成功\n");}else{printf("确认失败\n");}return 0;
}
7、怎么样当输入数字时候打印,输入字母的时候不打印呢?
int main()
{int ch = 0;while((ch = getchar()) != EOF){if(ch<'0' || ch>'9') //这里0-9就是ASSIC的值continue;putchar(ch);}return 0;
}
8、计算 n的阶乘。
int main()
{int i =0;int n = 0;int ret = 1;scanf("%d",&n);for(i=1; i<=n; i++){ret*=i;}printf("%d\n",ret);return 0;
}
9、计算 1!+2!+3!+......+10!
int main()
{int i =0;int n = 0;int ret = 1;int sum = 0;scanf("%d",&n);for(i=1; i<=n; i++){ret*=i;sum = sum+=ret;}printf("%d\n",sum);return 0;
}
10、在一个有序数组中查找具体的某个数字n。
#include<stdio.h>int main()
{int arr[10] = {1,2,3,4,5,6,7,8,9,10};int k = 7;int sz = sizeof(arr)/sizeof(arr[0]);int left = 0;int right = sz - 1;while(left<=right){int mid = (left + right) / 2;if(k > arr[mid]){left = mid + 1;}else if(k < arr[mid]){right = mid - 1;}else{printf("找到了为:第%d位数\n",mid);break;}}if(left > right){printf("找不到\n");}return 0;
}
11、编写代码,演示多个字符从两端移动,向中间汇聚。
例如如下:
*elcome to bit!!!!!!*
**lcome to bit!!!!!**
***come to bit!!!!***
****ome to bit!!!****
*****me to bit!!*****
******e to bit!******
******* to bit*******
********to bi********
*********o b*********
********** **********
*********************
请按任意键继续. . .
#include<string.h>
#include<windows.h>
int main()
{char arr1[] = "welcome to bit!!!!!!!";char arr2[] = "*********************";int left = 0;int right = strlen(arr1) - 1;while(left<=right){arr1[left] = arr2[left];arr1[right] = arr2[right];left++;right--;printf("%s\n",arr1);//Sleep(1000); //睡眠1秒//system("cls"); //清空屏幕}return 0;
}
12、编写代码实现,模拟用户登录情景,并且只能登录三次。
(只允许输入三次密码,如果密码正确则提示登录成,如果三次均输入错误,则退出程序。
#include<string.h>
int main()
{int i = 0;char password[20]={ 0 }; for(i= 0; i<3; i++){printf("请输出密码:>");scanf("%s",password);//if(password = "123456") 这样比较字符是错误的if(strcmp(password,"123456") == 0){printf("登录成功\n");break;}else{printf("密码输出错误,请重新输入!\n");}}if(i == 3){printf("密码输入错误3次,退出程序\n");}return 0;
}
13、写一个猜数字游戏(鹏哥C_37)
1.自动产生一个1-100之间的随机数
2.猜数字
a.猜对了,就恭喜你,游戏结束
b.你猜错了,会告诉猜大了,还是猜小了,继续猜,直到猜对
#include<stdlib.h>
#include<time.h>
void game()
{int guess = 0;int ret = (rand()%100)+1;while(1){printf("请猜数字:>");scanf("%d",&guess);if(guess < ret){printf("猜小了\n");}else if(guess > ret){printf("猜大了\n");}else{printf("猜对了,恭喜你\n");break;}}
}
int main()
{srand((unsigned int)time(NULL));int input = 0;do{menu();printf("请选择:>");scanf("%d",&input);switch(input){case 1:printf("游戏开始\n");game();break;case 0:printf("退出游戏\n");break;default:printf("输入错误,请重新输入:>\n");break;}}while(input);return 0;
}
14、输入3个整数,输出按大到小的顺序输出
#include<stdlib.h>
#include<time.h>
void game()
{int guess = 0;int ret = (rand()%100)+1;while(1){printf("请猜数字:>");scanf("%d",&guess);if(guess < ret){printf("猜小了\n");}else if(guess > ret){printf("猜大了\n");}else{printf("猜对了,恭喜你\n");break;}}
}
int main()
{srand((unsigned int)time(NULL));int input = 0;do{menu();printf("请选择:>");scanf("%d",&input);switch(input){case 1:printf("游戏开始\n");game();break;case 0:printf("退出游戏\n");break;default:printf("输入错误,请重新输入:>\n");break;}}while(input);return 0;
}
15、求两个数的最大公约数
int main()
{int m = 0;int n = 0;scanf("%d %d",&m,&n);int max = m<n? m:n;int i = 0;for(i=max; i>1; i--){if((m%i == 0)&&(n%i == 0)){printf("最大公约数是:%d\n",i);break;}}return 0;
}
或者也可以用辗转相除法:
int main()
{int m = 0;int n = 0;scanf("%d %d",&m,&n);int t = 0;while(t=m%n){m = n;n = t;}printf("最大公约数就是:%d",n);return 0;
}
16、打印出来1000年到2000年之间的闰年
要求:
- 打印出来1000年到2000年之间的闰年。
- 打印出来一共从1000年到2000年闰年的个数。
- 闰年是:
1.能被4整除,不能被100整除
2.能被400整除
int main()
{int y = 0;int count = 0;for(y = 1000; y<=2000; y++){if(((y%4==0)&&(y%100 !=0))||(y%400 == 0)){printf("%d ",y);count++;}}printf("\n一共:%d个闰年\n",count);return 0;
}
17、写一个代码: 打印100~200之间的素数
要求:素数就是只能被1和本身整除的树。
int main()
{int i = 0;for(i=100; i<=200; i++){int j = 0;for(j=2; j<i; j++){if(i%j == 0){break;}}if(i == j){printf("%d ",i);}}return 0;
}
或者:
int main()
{int i = 0;int count = 0;for(i=100; i<=200; i++){int j = 0;int flag = 1; //设置一个标签for(j=2; j<i; j++){if(i%j == 0){flag = 0;//当可以整除的时候,标签就设置为1break;}}if(flag == 1)//当标签一直为1,说明就没有进去整除{count++;printf("%d ",i);}}printf("\n一共%d个\n",count);return 0;
}
18、自动关机的程序
要求:如果输入"我是猪"就取消关机,如果输入错误,在次提示请重新输入
利用goto语句写一个
#include<string.h>
#include<stdlib.h>
int main()
{char input[20] = {0};system("shutdown -s -t 60");
begin:printf("请注意,60秒后关机,如果取消关机请输入:我是猪\n");scanf("%s",input);if(strcmp(input,"我是猪") == 0){system("shutdown -a");}else{goto begin;}return 0;
}
不要goto语句写一个
#include<stdlib.h>
#include<string.h>
int main()
{char input[20] = { 0 };system("shutdown -s -t 60");while(1){printf("电脑即将再60秒后关机,请输入“我是猪”结束关机\n");scanf("%s",&input);if(strcmp(input,"我是猪")==0){system("shutdown -a");break;}}return 0;
}
19、复制字符串
要求:
一个数组:arr1只有一个0,另外一个数组arr2里有:hello bit,把arr2里面的字符串复制到arr1中,并且打印arr1
#include<string.h>
int main()
{char arr1[20] = {0};char arr2[] = "hello bit";strcpy(arr1,arr2);printf("%s\n",arr1);return 0;
}
20、内存设置
要求:
arr里有字符串为:hello bit,现在需要把arr里面的前5个字符改成x,输入为:xxxxx bit
#include<string.h>
int main()
{char arr[] = "hello bit";memset(arr,'x',5);printf("%s\n",arr);return 0;
}
21、写一个函数交换两个整形变量的值
void Switch(int* pa,int* pb)
{int tmp =*pa;*pa = *pb;*pb = tmp;
}
int main()
{int a = 10;int b = 20;Switch(&a,&b);printf("a=%d\nb=%d\n",a,b);return 0;
}
22、写一个函数可以判断一个数是不是素数。
要求:求出100到200之间所有的素数
int is_prime(int n)
{int i = 0;for(i=2;i<n;i++){if(n%i == 0){return 0;}}return 1;
}
int main()
{int i = 0;int count = 0;for(i=100;i<=200; i++){if(is_prime(i) == 1){printf("%d ",i);count++;}}printf("\n一共:%d个\n",count);return 0;
}
23、写一个二分查找的函数
要求:数组{1,2,3,4,5,6,7,8,9,10}找里面的7在数组下标
int find(int *arr,int sz,int k)
{int left = 0;int right = sz - 1;int mid = 0;while(left<=right){mid = (left + right)/2;if(k<arr[mid]){right = mid - 1;}else if(k>arr[mid]){left = mid + 1;}else{return mid;}}return -1;
}
int main()
{int arr[] = {1,2,3,4,5,6,7,8,9,10};int sz = sizeof(arr) / sizeof(arr[0]);int k = 7;int ret = find(arr,sz,k);if(ret != -1){printf("下标为:%d\n",ret);}elseprintf("找不到\n");return 0;
}
24、写一个函数,每调用一次这个函数,就会将num的值增加1。
void ADD(int* p)
{(*p)++;
}
int main()
{int num = 0;ADD(&num);printf("%d\n",num); ADD(&num);printf("%d\n",num); ADD(&num);printf("%d\n",num);return 0;
}
25、接受一个整型值(无符号),按照顺序打印它的每一位。
例如:输入:1234,输出1234.
void print(unsigned int n)
{if(n>9){print(n/10);}printf("%d ",n%10);
}
int main()
{unsigned int num = 0;scanf("%d",&num);print(num);return 0;
}
26、编写函数求字符串的长度
分别用:创建临时变量方式和不允许创建临时变量的方式
创建临时变量方式:
int my_strlen(char* str)
{int count = 0;while(*str != '\0'){count++;str++;}return count;
}
int main()
{char arr[] = "hello";printf("%d\n",my_strlen(arr));return 0;
}
不允许创建临时变量的方式:
int my_strlen(char* str)
{if(*str != '\0'){return 1+ my_strlen(str+1) ;}elsereturn 0;
}
int main()
{char arr[] = "hello";printf("%d\n",my_strlen(arr));return 0;
}
27、用递归的方法求n的阶乘
int Fac(int n)
{if(n<=1)return 1;elsereturn n*Fac(n-1);}
int main()
{int n = 0;scanf("%d",&n);printf("%d\n",Fac(n));return 0;
}
28、求第n个斐波那契数。( 不考虑溢出 )
提示:前两个数之和等于第三个数例如:1 1 2 3 5 8 13 21 ...
并且说明递归和迭代的区别
int Fac(int n)
{if(n<=2)return 1;elsereturn Fac(n-1)+Fac(n-2);
}
int main()
{int n = 0;scanf("%d",&n);printf("%d\n",Fac(n));return 0;
}
以上用递归的方法计算的效率比较低,用迭代的化效率高如下:
int Fac(int n)
{int a = 1;int b = 1;int c = 1;while(n>2){c = a+ b;a = b;b = c;n--;}return c;
}
int main()
{int n = 0;scanf("%d",&n);printf("%d\n",Fac(n));return 0;
}
以上的例子可以区别出递归和迭代的区别:
- 递归就是指程序调用自身的编程思想,即一个函数调用本身,递归是重复调用函数自身实现循环。
- 迭代是利用已知的变量值,根据递推公式不断演进得到变量新值得编程思想,迭代是函数内某段代码实现循环。
- 而迭代与普通循环的区别是:循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值。
- 迭代与普通循环的区别是:迭代时,循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值。
- 递归与普通循环的区别是:循环是有去无回,而递归则是有去有回(因为存在终止条件)。
- 在循环的次数较大的时候,迭代的效率明显高于递归。
C语言初识(1) | C简介 | 主函数 | 数据类型
C语言初识(2) | 变量和常量
C语言初识(3) | 字符串 | 转译字符
C语言初识(4) | 顺序 | 选择 | 循环
C语言初识(5) | 函数 | 数组 | 操作符
C语言初识(6) | 关键字
C语言初识(7) | 指针| 结构体 | define
C语言初阶(8) | 选择结构 | if_else | switch
C语言初阶(9) | while | break | continue | getchar
C语言初阶(10) | 初识for循环 | 入门