【C语言基础】练习题
练习1
1.计算n的阶乘:
#include <stdio.h>
int main()
{int i = 0;int n = 0;int ret = 1;scanf("%d", &n);for(i=1; i<=n; i++){ret = ret * i;}printf("ret = %d\n", ret);//32以上的数字会溢出return 0;
}
2.计算1!+2!+3!+……+10!:
#include <stdio.h>
int main()
{int n = 0;int ret = 1;int sum = 0;for(n=1; n<=10; n++){ ret = ret * n;//n的阶乘sum = sum + ret;}printf("sum = %d\n", sum);return 0;
}
//sum = 4037913
3.在一个有序数组中查找具体的某个数字n,并打印出其下标
方法1:
#include <stdio.h>
int main()
{int arr[] = {1,2,3,4,5,6,7,8,9,10};int k = 7;int i = 0;int sz = sizeof(arr)/sizeof(arr[0]);for(i<0; i<sz; i++){if(k == arr[i]){printf("找到了,下标是:%d\n", i);break;}}if(i == sz)printf("找不到\n");return 0;
}
方法2(二分/折半查找算法):
#include <stdio.h>
int main()
{int arr[] = {1,2,3,4,5,6,7,8,9,10};int k = 7;int left = 0;//左下标int sz = sizeof(arr)/sizeof(arr[0]);int right = sz-1;//右下标while(left <= right){int mid = (left+right)/2;if(arr[mid] > k){right = mid-1;}else if(arr[mid] < k){left = mid+1;}else{printf("找到了,下标是:%d\n", mid);break;}}if(left>right){printf("找不到\n");}return 0;
}
注:
- 下标都是从0开始延续的,不管数组是否是乱码还是有序,下标有都会呈0,1,2,3,4,5……这种形式
- 乱序时可以用代码将它从小到大排列然后再去找,这样子虽然不能找到最初的下标,但是能够查询到这个元素是否在里面
- 二分查找算法可应用于有序数列,乱序数列可以编排成序再进行二分
4.编写代码,演示多个字符从两端移动,向中间汇聚。
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <stdlib.h>
int main()
{char arr1[] = "welcome to bit!!!";char arr2[] = "#################";int left = 0;//int right = sizeof(arr1)/sizeof(arr1[0])-2;int right = strlen(arr1)-1;while(left<=right){arr2[left] = arr1[left];arr2[right] = arr1[right];printf("%s\n", arr2);//休息一秒Sleep(1000);system("cls");//执行系统命令的一个函数//cls - 清空屏幕left++;right--;}printf("%s\n", arr2);return 0;
}
5.编写代码实现,模拟用户登录情景,并且智能登录三次(只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序):
#include <stdio.h>
#include <string.h>
int main()
{int i = 0;char password[20] = {0};for(i=0; i<3; i++){printf("请输入密码:");scanf("%s", password);if(strcmp(password, "123456") == 0)//== 不能用来比较两个字符串是否相等,应该使用一个库函数-strcmp{printf("登录成功\n");break;}}if(i==3)printf("三次密码均错误,退出程序\n");return 0;
}
练习2
1.写一个代码将三个数按从大到小输出:
#include <stdio.h>
int main()
{int a = 0;int b = 0;int c = 0;scanf("%d %d %d", &a, &b, &c);//算法实现//a中放最大值//b次之//c中放最小值if(a<b){int tmp = a;a = b;b = tmp;}if(a<c){int tmp = a;a = c;c = tmp;}if(b<c){int tmp = b;b = c;c = tmp;}printf("%d %d %d\n", a, b, c);return 0;
}
2.写一个代码打印1-100之间的所有3的倍数的数字:
#include <stdio.h>
int main()
{int i = 0;for(i=1; i<=100; i++){if(i%3 == 0) //%——取模printf("%d ", i);}getchar();return 0;
}
3.给定两个数,求这两个数的最大公约数:
当m<n时模就是m,相当于m除以n得0余m,然后在数值上换位,仍是m>n
#include <stdio.h>
int main()
{int m = 0;int n = 0;int r = 0;scanf("%d %d", &m, &n);while(m%n){r = m%n;m = n;n = r;}//辗转相除法printf("%d\n", n);getchar();getchar();return 0;
}
4. 打印1000到2000年之间的闰年:
方法1:
#include <stdio.h>
int main()
{int year = 0;int count = 0;for(year = 1000; year<=2000; year++){//判断year是否为闰年//1.能被4整除并且不能背100整除是闰年//2.能被400整除是闰年if(year%4==0 && year%100!=0){printf("%d ", year);count++;}else if(year%400==0){printf("%d ", year);count++;}}printf("\ncount = %d\n", count);return 0;
}
方法2:
#include <stdio.h>
int main()
{int year = 0;int count = 0;for(year = 1000; year<=2000; year++){//判断year是否为闰年//1.能被4整除并且不能背100整除是闰年//2.能被400整除是闰年if((year%4==0)&&(year%100!=0)||(year%400==0)){printf("%d ", year);count++;}}printf("\ncount = %d\n", count);getchar();return 0;
}
5.打印100~200之内的素数:
(1)试除法:
#include <stdio.h>
int main()
{int i = 0;int count = 0;for(i=100; i<=200; i++){//判断i是否为素数//素数判断的规则//1.试除法//产生2 -> i-1的int j = 0;for(j=2; j<i; j++){if(i%j == 0){break;}}if(j == i){count++;printf("%d ", i);}}printf("\ncount = %d\n", count);return 0;
}
(2)将所有素数视为奇数:
#include <stdio.h>
int main()
{int i = 0;int j = 0;int count = 0;for (i=101; i<=200; i+=2){for (j = 2; j < i; j++){if (i%j == 0)break;}if (j == i){printf("%d ", i);count++;}}printf("\ncount = %d\n", count);return 0;
}
(3)除了2以外,所有可能的质因数都是奇数,先尝试2,再尝试从3开始知道x/2的所有奇数:
#include <stdio.h>
int main()
{int i = 0;int j = 0;int count = 0;for(i=101; i<=200; i+=2){for(j = 2; j < i/2; j++){if(i%j == 0){break;}}if(j == i / 2){count++;printf("%d ", i);}}printf("\ncount = %d\n", count);return 0;
}
(4)使用sqrt函数:
i=a*b
a和b中至少有一个数字<=开平方i
#include <stdio.h>
#include <math.h>//调用sqrt函数
int main()
{int i = 0;int count = 0;//sqrt - 开平方的数学库函数for(i=101; i<=200; i+=2){int j = 0;for(j=2; j<=sqrt(i); j++){if(i%j == 0){break;}}if(j>sqrt(i)){count++;printf("%d ", i);}}printf("\ncount = %d\n", count);return 0;
}
(5)筛选法:
只要尝试小于sqrt(x)的素数即可,而这些素数,在前面已经算出,将已经算出的素数,先保存起来,然后用于后续的试除。
步骤:
1.先将1去除(1不是素数)
2.用2除它后面的各个数,把能被2整除的数去除,即把2的倍数去除掉
3.用3除后面的各个数,把能被3整除的数去除,即把3的倍数去除掉
4.分别用5…作为除数除这些数后面的数
这些操作需要一个很大的容器去装载所有数的集合,只要满足这些步骤,即将大于1的且是2、3、4…的倍数全部置为0,一直到数据集合的末尾,最终不是0的数就是素数。
#include <stdio.h>
int main()
{int i = 9;int j = 0;int arr[100];int count = 0;for(i=0; i<100; i++){arr[i] = i + 1;}for(i = 0; i < 100; i++){j = i - 1;//通过0、1、2while(j > 1){if(arr[i] % j == 0)arr[i] = 0;j = j - 1;}}for(j = 1; j < 100; ++j){if (arr[j] != 0){printf("%d ", arr[j]);count++;}}printf("\ncount = %d\n", count);return 0;
}
练习3
1.编写程序数一下1到100的所有整数中出现多少个数字9:
#include <stdio.h>
int main()
{int i = 0;int count = 0;for(i=1; i<=100;i++){if(i%10 == 9)count++;if(i/10 == 9)count++;}printf("count = %d\n", count);return 0;
}
2.计算1/1-1/2+1/3-1/4+1/5……+1/99-1/100的值,打印出结果:
#include <stdio.h>
int main()
{int i = 0;double sum = 0.0;int flag = 1;for(i=1; i<=100; i++){sum += flag*1.0/i;flag = -flag;}printf("%lf\n", sum);getchar();return 0;
}
3.求10个整数中的最大值:
#include <stdio.h>
int main()
{int arr[] = {-1,-2,-3,-4,-5,-6,-7,-8,-9,-10};int max = arr[0];//最大值int i = 0;int sz = sizeof(arr)/sizeof(arr[0]);for(i=1; i<sz; i++){if(arr[i] > max){max = arr[i];}}printf("max = %d\n", max);return 0;
}
4.在屏幕上输出9*9的乘法口诀表:
#include <stdio.h>
int main()
{int i = 0;for(i=1; i<=9; i++){//打印一行int j = 1;for(j=1; j<=i; j++){printf("%d*%d=%d\t", i, j, i*j);}printf("\n");}return 0;
}
猜数字游戏:
1.电脑生成一个随机数
2.猜数字
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu()
{printf("****************************\n");printf("**** 1.play 0.exit ****\n");printf("****************************\n");
}
//1为玩游戏(真),0为退出(假)
//RAND_MAX-32767
void game()
{ //1.生成一个随机数int ret = 0;int guess = 0;//拿时间戳来设置随机数的生成起始点//time_t_time(time_t * timer)//time_tret = rand()%100+1;//生成1-100的随机数//2.猜数字while(1){printf("请猜数字:>");scanf("%d", &guess);if(guess>ret){printf("猜大了\n");}else if(guess<ret){printf("猜小了\n");}else{printf("恭喜你,猜对了\n");break;}}
}int main()
{int input = 0;srand((unsigned int)time(NULL));do{menu();printf("请选择>:");scanf("%d", &input);switch(input){case 1:game();//猜数字游戏break;case 0:printf("退出游戏\n");break;default:printf("选择错误\n");break;}} while (input);return 0;
}
关机程序:
#include <stdio.h>
#include <windows.h>
#include <string.h>
int main()
{char input[20] = {0};//shutdown -s -t 60//system() - 执行系统命令system("shutdown -s -t 60");
again:printf("请注意,你的电脑将在1分钟内关机,如果输入:我是猪,就取消关机\n请输入>:");scanf("%s", input);if(strcmp(input,"我是猪") == 0)//比较两个字符串用strcmp(){system("shutdown -a");}else{goto again;} return 0;
}
【C语言基础】练习题相关推荐
- c语言中的字符变量用什么保留字来说明,第1、2章C语言基础练习题
第1章 C语言基础 第2章 顺序结构 练习题 学号: 姓名: 45. 已知 i=5;写出语句 i+=012; 执行后整型变量 i 的十进制值是[1]. 46. 已知 i=5.6;写出语句 a=(int ...
- C语言的叙述大小写字母e1相同,第1、2章C语言基础练习题
第1章 C语言基础 第2章 顺序结构 练习题 学号: 姓名: 单选: 1. 当代电子计算机能够自动地处理指定的问题是因 为( ). A. 计算机是电动的 B. 有解决该问题的计算机程序 C. 事先存储 ...
- a=10a=0C语言,C语言基础练习题(含答案)
第一章 C语言基础知识 ·5· A.2.500000 B.2.750000 C.3.500000 D.0.000000 29.在C语言中,char型数据在内存中的存储形式是( ). A.补码 B.反码 ...
- c语言基础练习题 字符串输入scanf/gets 字符串赋值、比大小
PTA上C语言程序设计练习题,包含查找书籍.字符串排序.主要用到字符串输入scanf/gets 字符串赋值.比大小等知识. 1.查找书籍 习题9-4 查找书籍 (20 分) 给定n本书的名称和定价,本 ...
- C语言-基础练习题详解
目录 前言 一.模拟用户登录情景 1.要求 2.代码 二.求两数的最大公约数 1.方法简介 2.代码 三.打印闰年 1.要求与概念 2.代码 四.打印100-200之间的素数 1.方法与概念 2.代码 ...
- Go语言基础练习题系列2
1.练习1 生成一个随机数,让一个用户去猜这个数是多少? 代码示例如下: package mainimport ("fmt""math/rand" //math ...
- mypow等于1什么意思c语言,C语言基础练习题总结
1. 从源代码helloworld.c经历 预编译,汇编,编译,连接四个过程到可执行文件helloworld.并写出使用gcc编译器对应每个过程的语句.连接的时候 -l gcc –o a.i ...
- c语言基础练习题及答案,C语言基础练习题(含答案)
1 A.12 B.34 C.12345 D.提示出错.无结果 41.若x和y均定义为int 型,z定义为double型,以下不合法的scanf()函数调用语句为 ( ). A.scanf(" ...
- Go语言基础练习题系列1
1.练习1 题目:使用fmt分别打印字符串.二进制.十进制.十六进制.浮点数. package mainimport ("fmt" )func main() {var a = &q ...
- 河北专升本——C语言基础练习题
目录 一.求100~200之间的素数 二.给出一个大于或等于3的整数,判断它是不是素数 三.判断2000-2500年中的每一年是否为闰年,并将结果输出 四.判断一个数是否能被3和5整除 五.求1+2+ ...
最新文章
- PCA--主成分分析(Principal components analysis)-最小平方误差解释
- [原创]Devexpress XtraReports 系列 10 创建标签报表
- Kncok之绑定事件
- Leetcode 200. 岛屿数量 解题思路及C++实现
- 计算机与科学应用题,计算机应用题
- 【今晚7点半】:六款开源LL-HLS/LL-DASH播放器评测
- 怎么使用ar打包静态库
- 前端学习(3136):react-hello-react之不用柯里化的写法
- oracle的错误代码如何查看对应的错误信息
- 多维数组-创建多维数组
- Java中字符串的几个实例
- ERPS协议学习笔记
- JavaSE_day01【Java概述、环境搭建、标识符、变量、基本数据类型】
- html的空心箭头,CSS实现空心三角指示箭头
- 【高等数学笔记】变限积分求导问题
- 计算机动态评估英语阅读,【计算机教育论文】谈计算机动态评价模式同伴反馈有效性(共4305字)...
- Docker 安装MySql后创库、创表
- 计算机专业英语职高 试卷,2020年河南高职单招英语样卷及答案分享
- 23普通话考试报名流程,注意各省已陆续开始报名
- 酷开系统和鸿蒙,酷开电视史上最强刷机攻略