4000 寒假编程练习(一)(c语言)
2018-03-06 17:51
357 查看
使用c语言编写程序,在屏幕上打印九九乘法口诀表
2.【分支判断】使用c语言编写程序,求两个整数的较大值
3.【循环】使用c语言编写程序,求10个整数中的最大值
4.使用c语言编写程序,求1-100之间的素数
5.【辗转相除法】使用c语言编写程序,求两个整数的最大公约数
6.使用c语言编写程序,求两个整数的最小公倍数
7.使用c语言编写程序,交换两整数的值
8.【循环】有1.2.3.4四个数字,能组成多少个互不相同且无重复的三位数?都是多少?
程序分析:可填在百位、十位、个位的数字都是1.2.3.4.组成所有的排列后再去掉不满足条件的排列
9.有一分数序列:2/1,3/2,5/3。。。求出这个序列的前20项之和
s=a+aa+aaaa+aa..a,其中a是一个数字,例如2+22+2222+22222(此时a=2,共有五个数相加)其中a和个数n由键盘输入控制。
11.一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下,求他在第十次落地时,共经过多少米?第十次反弹多高?
12.猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃一个,长此以往,到第十天只剩下一个桃子,求一共有多少个桃子
13.
1+2!+!+。。。+20!(20表示20的阶乘)
14.
判断一个数是否为回文数,(回文数也是一个数字,数字的特点是正反序是同一个数字,如12321,3443就是回文数)
15.判断一个字符串是否为回文字符串。(回文字符串就是说一个字符串,但是源字符串和字符串逆序之后一样,比如‘abcba’,’cddc’就是回文字符串)
16.求一个3*3矩阵对角线元素之和
17.将一个整形数组逆序
18.对任意一个整形数组排序(使用冒泡排序法)
19.使用c语言编写程序,将多个字符串排序输出。
20.用递归的方式求斐波那契数列的第n个数
21.用非递归的方式求斐波那契数列的第n个数
22.编写一个函数可以求字符串的长度(不使用任何库函数)
#include<stdio.h> int main() { int i = 0, j = 0; for (size_t i = 1; i <=9; i++) { for (size_t j = 1; j <= i; j++) { printf("%d*%d=%d ", j, i, i*j); } printf("\n"); } return 0; }
2.【分支判断】使用c语言编写程序,求两个整数的较大值
#include<stdio.h> int main() { int num1=0, num2=0; scanf("%d %d", &num1, &num2); int max = (num1 > num2) ? num1 : num2; printf("%d\n", max); return 0; }
3.【循环】使用c语言编写程序,求10个整数中的最大值
#include<stdio.h> int main() { int i = 0, num = 0, tmp = 0; for (size_t i = 0; i < 10; i++) { scanf("%d", &num); tmp = (tmp > num) ? tmp : num; } printf("%d\n", tmp); return 0; }
4.使用c语言编写程序,求1-100之间的素数
#include<stdio.h> #include<math.h> int judge_num(int i) { int j, k; k = sqrt(i); /*,对于一个数i,只需要判断sqrt(i)以下的数字就行了,因为sqrt(i)*sqrt(i)==i。如果有a*b==i,那么a和b之中有一会比sqrt(i)要小。如果sqrt(i)不是整数而且比sqrt(i)更小的数都不能整除i,那么肯定就没有数能够整除i了。而且sqrt(i)一般情况下是小于等于i/2的。*sqrt(i)是i的平方根,需要包含<math.h>才能使用*/ for (j = 2; j <= k; j++) { if (i%j == 0) { return 0; } } return 1; } int main() { int i, k; printf("1 2 3"); for (i = 4; i <= 100; i++) { if ((judge_num(i)) == 1) { printf("%d ", i); } } return 0; }
5.【辗转相除法】使用c语言编写程序,求两个整数的最大公约数
#include<stdio.h> #include<math.h> int main() { int num1, num2, tmp=1; scanf("%d %d", &num1, &num2); if (num1 < num2) { num1 = num1 ^ num2; num2 = num1 ^ num2; num1 = num1 ^ num2; }//此方法需要使num1>num2。 while (tmp != 0) { tmp = num1 % num2; num1 = num2; num2 = tmp; } /*用较小数除较大数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。*/ printf("%d\n", num1); return 0; }
6.使用c语言编写程序,求两个整数的最小公倍数
#include<stdio.h> #include<math.h> int main() { int num1, num2, tmp=1; scanf("%d %d", &num1, &num2); if (num1 < num2) { num1 = num1 ^ num2; num2 = num1 ^ num2; num1 = num1 ^ num2; } if (num1%num2 == 0) { printf("%d\n", num1); }//如果两个数能够整除,那num1为最小公倍数 else { int tmp_1 = num1, tmp_2 = num2; while (tmp != 0) { tmp = num1 % num2; num1 = num2; num2 = tmp; } //先求出最大公约数,再用num1.num2去除,再用最大公约数乘结果求出最小公倍数 tmp_1 = tmp_1 / num1; tmp_2 = tmp_2 / num1; num1 = num1 * tmp_1*tmp_2; printf("%d\n", num1); } return 0; }
7.使用c语言编写程序,交换两整数的值
#include<stdio.h> #include<math.h> int main() { int num1, num2; scanf("%d %d", &num1,&num2); num1 = num1 ^ num2; num2 = num1 ^ num2; num1 = num1 ^ num2; return 0; }
8.【循环】有1.2.3.4四个数字,能组成多少个互不相同且无重复的三位数?都是多少?
程序分析:可填在百位、十位、个位的数字都是1.2.3.4.组成所有的排列后再去掉不满足条件的排列
#include<stdio.h> #include<math.h> #include<Windows.h> int main() { int i,tmp,b,c,d,e; int num = 0; for (int i = 1; i<=4; i++) { tmp = 0; tmp = i * 100; for (int a = 1; a <= 4; a++) { tmp = tmp + a * 10; for (int b = 1; b <= 4; b++) { tmp = tmp + b; if(i!=a&&i!=b&&a!=b) { printf("%d ", tmp); num++; } tmp -= b; } tmp -= a * 10; } } printf("\n"); printf("%d\n", num); system("pause"); return 0; }
9.有一分数序列:2/1,3/2,5/3。。。求出这个序列的前20项之和
#include<stdio.h> #include<math.h> #include<Windows.h> int main() { float a = 1, b = 2; float sum = 0; int x; for (int i = 1; i <= 20; i++) { sum += b / a; x = a; a = b; b = x + b; } printf("和是%f\n", sum); system("pause"); return 0; }
s=a+aa+aaaa+aa..a,其中a是一个数字,例如2+22+2222+22222(此时a=2,共有五个数相加)其中a和个数n由键盘输入控制。
#include<stdio.h> #include<math.h> #include<Windows.h> int main() { int a, n; scanf("%d %d", &a, &n); int tmp = 0; int sum=0; for (int i = 1; i <= n; i++) { tmp = tmp * 10 + a; sum = tmp + sum; } printf("%d\n", sum); system("pause"); return 0; }
11.一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下,求他在第十次落地时,共经过多少米?第十次反弹多高?
#include<stdio.h> #include<math.h> #include<Windows.h> int main() { float begin = 100.0, hn = begin / 2; int n; for (n = 2; n <= 10; n++) { begin = begin + 2 * hn;/*第n次落地时共经过的米数*/ hn = hn / 2; /*第n次反跳高度*/ } printf("路程 %f\n", begin); printf("高度 %f \n", hn); system("pause"); return 0; }
12.猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃一个,长此以往,到第十天只剩下一个桃子,求一共有多少个桃子
#include<stdio.h> #include<math.h> #include<Windows.h> int main() { int sum = 0;//桃子总数 int day_10 = 1;//第10 天只剩一个桃子 int day = 0; for (day = 9; day > 0; day--) { sum = (day_10 + 1) * 2;//每天的桃子总数是后一天剩余桃子加1乘2 day_10 = sum; } printf("猴子第一天一共摘了%d个桃子\n", sum); system("pause"); return 0; }
13.
1+2!+!+。。。+20!(20表示20的阶乘)
include<stdio.h> #include<math.h> #include<Windows.h> int main() { int sum = 0; int s=1; for (int i = 1; i <= 20; i++) { for (int a = 1; a <= i; a++) { s = s*a; } sum += s; s = 1; } printf("%d\n",sum); system("pause"); return 0; }
14.
判断一个数是否为回文数,(回文数也是一个数字,数字的特点是正反序是同一个数字,如12321,3443就是回文数)
#include<stdio.h> #include<math.h> #include<Windows.h> //判断回文数 int main() { int i = 0, j, k = 1, n, a[20]; scanf("%d", &n); while (n) { a[i] = n % 10; n /= 10 ; i++; } for (j = 0; j<i / 2; j++) if (a[j] != a[i - j - 1]) { k = 0; break; } k ? printf("是回文\n") : printf("不是回文\n"); system("pause"); return 0
15.判断一个字符串是否为回文字符串。(回文字符串就是说一个字符串,但是源字符串和字符串逆序之后一样,比如‘abcba’,’cddc’就是回文字符串)
15 #include<stdio.h> #include<math.h> #include<Windows.h> #include<string.h> //判断回文字符串 int main() { char a[100]; gets(a); int tmp; int len = strlen(a); for (int i = 0, j = len - 1; i <= j; i++, j--) //第一位和最后一位相比较循环判断 { if (a[i] == a[j]) tmp = 1; else { tmp = 0; break; } } tmp ? printf("是回文字符串\n") : printf("不是回文字符串\n"); system("pause"); return 0; }
16.求一个3*3矩阵对角线元素之和
#include<stdio.h> #include<math.h> #include<Windows.h> #include<string.h> int main() { int a[3][3], i, j, sum = 0; printf("请输入数组元素:(3*3)\n"); for (i = 0; i<3; i++) for (j = 0; j<3; j++) scanf("%d", &a[i][j]); printf("\n"); printf("对角线的和:\n"); for (i = 0; i<3; i++) for (j = 0; j<3; j++) if (i == j || 2 - i == j) sum += a[i][j]; printf("%d\n", sum); system("pause"); return 0; }
17.将一个整形数组逆序
#include<stdio.h> #include<math.h> #include<Windows.h> #include<string.h> int main() { int a[] = { 1,2,3,4,5 }; for (int i = 0; i < 2; i++) { a[i] ^= a[4 - i]; a[4 - i] ^= a[i]; a[i] ^= a[4 - i]; } system("pause"); return 0; }
18.对任意一个整形数组排序(使用冒泡排序法)
#include<stdio.h> #include<math.h> #include<Windows.h> #include<string.h> int main() { int a[] = {1,151,151,5154,8184,45451,4518}; int n=0; int tmp; int len = sizeof(a)/sizeof(a[0]); for (int i =0; i < len-1; i++) { for (int j = len - 1; j > i; j--) { if (a[j]<a[j - 1]) { tmp = a[j]; a[j] = a[j - 1]; a[j - 1] = tmp; } } } for (int d = 0; d < len; d++) { printf("%3d ", a[d]); } printf("\n"); system("pause"); return 0; }
19.使用c语言编写程序,将多个字符串排序输出。
#include<stdio.h> #include<math.h> #include<Windows.h> #include<string.h> void swap(char **p1, char **p2) { char *ret = *p1; *p1 = *p2; *p2 = ret; } int main() { int i = 0; char *a[3]; a[0] = "hello"; a[1] = "bit-tech"; a[2] = "world"; if (strcmp(a[0], a[1])>0) { swap(&a[0], &a[1]); } if (strcmp(a[0], a[2])>0) { swap(&a[0], &a[2]); } if (strcmp(a[1], a[2])>0) { swap(&a[1], &a[2]); } for (i = 0; i<3; i++) { printf("%s\n", a[i]); } return 0; }
20.用递归的方式求斐波那契数列的第n个数
#include<stdio.h> #include<math.h> #include<Windows.h> #include<string.h> int Fib(int n) { if (n == 1 || n == 2) return 1; else return Fib(n - 1) + Fib(n - 2); } int main() { int n; scanf("%d", &n); printf("%d\n", Fib(n)); system("pause"); return 0; }
21.用非递归的方式求斐波那契数列的第n个数
#include<stdio.h> #include<math.h> #include<Windows.h> #include<string.h> int main() { int n,sum=1,prev=1,next=1; scanf("%d", &n); if (n <= 2) { sum = 1; } while (n > 2) { n--; next = prev; prev = sum; sum = next + prev; } printf("%d\n",sum); system("pause"); return 0; }
22.编写一个函数可以求字符串的长度(不使用任何库函数)
#include<stdio.h> #include<math.h> #include<Windows.h> #include<string.h> int main() { char arr[] ="sdfsdgedfsdfgdfsg"; int n=0; while (arr != '\0') { n++; } printf("%d\n", n); system("pause"); return 0; }
相关文章推荐
- C语言编程(练习4:字符输入和输出 )
- 程序设计入门——C语言 翁恺 第5周编程练习
- 程序设计入门——C语言 翁恺 第2周编程练习
- C语言编程(练习1:数组和指针)
- C语言编程(练习2:字符串与字符串数组)
- C语言:编程练习参考程序
- C语言编程练习——最大的矩形
- C语言编程练习——查找介于n1与n2(0<n1<n2<32768)之间所有满足下列条件的整数:
- C语言编程小练习
- C语言编程(练习2:循环,三大循环结构 )
- ubuntu下用Eclipse完成C语言编程练习
- C语言编程(练习7:循环,三大循环结构 )
- C语言 编程练习22题
- 程序设计入门——C语言 翁恺 第6周编程练习
- C语言编程(练习2:数组和指针)
- C语言编程(练习3:字符串与字符串函数)
- GPS数据处理——字符串编程练习(C语言)
- 程序设计入门——C语言 翁恺 第7周编程练习
- C语言编程入门——程序练习(上)
- ubuntu下用Eclipse完成C语言编程练习