练习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语言基础】练习题相关推荐

  1. c语言中的字符变量用什么保留字来说明,第1、2章C语言基础练习题

    第1章 C语言基础 第2章 顺序结构 练习题 学号: 姓名: 45. 已知 i=5;写出语句 i+=012; 执行后整型变量 i 的十进制值是[1]. 46. 已知 i=5.6;写出语句 a=(int ...

  2. C语言的叙述大小写字母e1相同,第1、2章C语言基础练习题

    第1章 C语言基础 第2章 顺序结构 练习题 学号: 姓名: 单选: 1. 当代电子计算机能够自动地处理指定的问题是因 为( ). A. 计算机是电动的 B. 有解决该问题的计算机程序 C. 事先存储 ...

  3. a=10a=0C语言,C语言基础练习题(含答案)

    第一章 C语言基础知识 ·5· A.2.500000 B.2.750000 C.3.500000 D.0.000000 29.在C语言中,char型数据在内存中的存储形式是( ). A.补码 B.反码 ...

  4. c语言基础练习题 字符串输入scanf/gets 字符串赋值、比大小

    PTA上C语言程序设计练习题,包含查找书籍.字符串排序.主要用到字符串输入scanf/gets 字符串赋值.比大小等知识. 1.查找书籍 习题9-4 查找书籍 (20 分) 给定n本书的名称和定价,本 ...

  5. C语言-基础练习题详解

    目录 前言 一.模拟用户登录情景 1.要求 2.代码 二.求两数的最大公约数 1.方法简介 2.代码 三.打印闰年 1.要求与概念 2.代码 四.打印100-200之间的素数 1.方法与概念 2.代码 ...

  6. Go语言基础练习题系列2

    1.练习1 生成一个随机数,让一个用户去猜这个数是多少? 代码示例如下: package mainimport ("fmt""math/rand" //math ...

  7. mypow等于1什么意思c语言,C语言基础练习题总结

    1.     从源代码helloworld.c经历 预编译,汇编,编译,连接四个过程到可执行文件helloworld.并写出使用gcc编译器对应每个过程的语句.连接的时候 -l gcc –o  a.i ...

  8. c语言基础练习题及答案,C语言基础练习题(含答案)

    1 A.12 B.34 C.12345 D.提示出错.无结果 41.若x和y均定义为int 型,z定义为double型,以下不合法的scanf()函数调用语句为 ( ). A.scanf(" ...

  9. Go语言基础练习题系列1

    1.练习1 题目:使用fmt分别打印字符串.二进制.十进制.十六进制.浮点数. package mainimport ("fmt" )func main() {var a = &q ...

  10. 河北专升本——C语言基础练习题

    目录 一.求100~200之间的素数 二.给出一个大于或等于3的整数,判断它是不是素数 三.判断2000-2500年中的每一年是否为闰年,并将结果输出 四.判断一个数是否能被3和5整除 五.求1+2+ ...

最新文章

  1. PCA--主成分分析(Principal components analysis)-最小平方误差解释
  2. [原创]Devexpress XtraReports 系列 10 创建标签报表
  3. Kncok之绑定事件
  4. Leetcode 200. 岛屿数量 解题思路及C++实现
  5. 计算机与科学应用题,计算机应用题
  6. 【今晚7点半】:六款开源LL-HLS/LL-DASH播放器评测
  7. 怎么使用ar打包静态库
  8. 前端学习(3136):react-hello-react之不用柯里化的写法
  9. oracle的错误代码如何查看对应的错误信息
  10. 多维数组-创建多维数组
  11. Java中字符串的几个实例
  12. ERPS协议学习笔记
  13. JavaSE_day01【Java概述、环境搭建、标识符、变量、基本数据类型】
  14. html的空心箭头,CSS实现空心三角指示箭头
  15. 【高等数学笔记】变限积分求导问题
  16. 计算机动态评估英语阅读,【计算机教育论文】谈计算机动态评价模式同伴反馈有效性(共4305字)...
  17. Docker 安装MySql后创库、创表
  18. 计算机专业英语职高 试卷,2020年河南高职单招英语样卷及答案分享
  19. 23普通话考试报名流程,注意各省已陆续开始报名
  20. 酷开系统和鸿蒙,酷开电视史上最强刷机攻略

热门文章

  1. FTDI for linux的安装指南
  2. windows环境下用python PyFtdi控制ftdi芯片生成方波信号
  3. 比较几种步进电机加减速控制方案
  4. 为什么要用私钥加签,公钥加密
  5. 垂直水平居中的三种实现方式
  6. 微信小程序开放平台代码部署特约商户
  7. GitLab使用CAS服务进行单点登录配置
  8. java ps old gen perm gen_Java 内存模型之堆内存管理
  9. matlab计算系统过渡过程时间,MATLAB在水电站水力过渡过程计算仿真中的应用
  10. 操作系统之移臂调度算法