C语言学习笔记
2019-11-15 本文已影响0人
Aladdim
C语言练习题:循环部分(20题)
1.求一正整数限定内所有素数
/*
__author__ = 'xiaofeizhang'
函数作用:求一正整数限定内所有素数
*/
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main(void){
int num;
bool isprime = true;
printf("请输入一个正整数:");
scanf("%d", &num);
if(num==0 || num==1){
printf("%d不是素数", num);
exit(0);
}
for (int j=2; j<=num; j++){
for (int i=2; i<=sqrt(j); i++){
if (j%i == 0){
isprime = false;
break;
}
else{
isprime = true;
}
}
if (isprime == true){
printf("%d是素数\n", j);
}
}
return 0;
}
/*
请输入一个正整数:100
2是素数
3是素数
5是素数
7是素数
11是素数
13是素数
17是素数
19是素数
23是素数
29是素数
31是素数
37是素数
41是素数
43是素数
47是素数
53是素数
59是素数
61是素数
67是素数
71是素数
73是素数
79是素数
83是素数
89是素数
97是素数
--------------------------------
Process exited after 1.651 seconds with return value 0
请按任意键继续. . .
*/
2.求一正整数的各个位数显示,并求和
/*
__author__ = 'xiaofeizhang'
函数作用:正整数的各个位数显示,并求和 ``
*/
#include <stdio.h>
int main(void){
int num, num_copy, sum=0;
printf("请输入一个正整数:");
scanf("%d", &num);
num_copy = num;
while(num){
printf("%d\n", num%10);
sum += num%10;
num /= 10;
}
printf("%d的各位求和为:%d", num_copy, sum);
return 0;
}
/*
请输入一个正整数:123
3
2
1
123的各位求和为:6
--------------------------------
Process exited after 1.567 seconds with return value 0
请按任意键继续. . .
*/
3.迭代求值
/*
__author__ = 'xiaofeizhang'
函数作用:迭代求值
*/
#include <stdio.h>
int main(void){
int max, i=0, sum=0, j=0;
printf("请输入本次迭代的最大值:");
scanf("%d", &max);
for(;i<=max; ){
sum +=i;
i=i+2;
j++;
}
printf("%d之内的偶数叠加的值为:%d\n", max, sum);
printf("迭代了%d次", j);
return 0;
}
/*
请输入本次迭代的最大值:12
12之内的偶数叠加的值为:42
迭代了7次
--------------------------------
Process exited after 3.905 seconds with return value 0
请按任意键继续. . .
*/
4.设定次数,猜数字
/*
__author__ = 'xiaofeizhang'
函数作用:有奖竞猜
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
int num, symbol, max=5;
srand(time(NULL));
num = rand()%100+1;
printf("预设值的结果为:%d\n", num);
printf("有奖竞猜下:");
scanf("%d", &symbol);
for(int i=1; i<=max; i++){
if (symbol!=num){
if (symbol>num){
printf("小伙子,猜大啦\n");
printf("再猜一次:");
scanf("%d", &symbol);
}
else{
printf("小伙子,猜小啦\n");
printf("再猜一次:");
scanf("%d", &symbol);
}
if (i==max-1){
printf("非常抱歉,小伙子,不行呀,在加油吧");
}
}
else{
printf("哎呦,不错仅仅花费了%d次,就猜到是%d", i, num);
break;
}
}
return 0;
}
/*
预设值的结果为:81
有奖竞猜下:31
小伙子,猜小啦
再猜一次:53
小伙子,猜小啦
再猜一次:70
小伙子,猜小啦
再猜一次:81
哎呦,不错仅仅花费了4次,就猜到是81
--------------------------------
Process exited after 19.45 seconds with return value 0
请按任意键继续. . .
*/
5.设定次数10次,猜数字
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
int num, symbol, max=1;
srand(time(NULL));
num = rand()%100+1;
printf("请输入你本次猜的值为:");
scanf("%d", &symbol);
while (num!=symbol){
if (symbol>num){
printf("小伙子,猜大啦\n");
printf("再猜一次:");
scanf("%d", &symbol);
}
else{
printf("小伙子,猜小啦\n");
printf("再猜一次:");
scanf("%d", &symbol);
}
max++;
}
printf("哎呦不错哟,仅仅用了%d次,就猜到我心中的%d了", max, num);
return 0;
}
6.实现捐款到10万元,并求得每人平均捐款值
/*
__author__ = 'xiaofeizhang'
函数作用:实现捐款到10万元,并求得每人平均捐款值
*/
#include <stdio.h>
#include <conio.h>
int main(){
float num,total=0,ave;
int i;
for(i=1;i<=1000;i++){
printf("请输入捐款金额:");
scanf("%f",&num);
total=total+num;
if(total>=100000)
break;
}
ave=total/i;
printf("捐款人数为:%d,平均捐款数目:%f",i,ave);
getch();
return 0;
}
/*
请输入捐款金额:1000
请输入捐款金额:1230
请输入捐款金额:3210
请输入捐款金额:123333
捐款人数为:4,平均捐款数目:32193.250000
*/
7.while循环,实现叠加
/*
__author__ = 'xiaofeizhang'
函数作用:while循环,实现叠加
*/
#include <stdio.h>
int main(void){
int i=0, n, sum=0;
printf("请输入你想计算叠加数到:");
scanf("%d", &n);
while (i<=n){
sum += i;
i++;
}
printf("%d之内的叠加运算的结果为:%d", n, sum);
return 0;
}
/*
请输入你想计算叠加数到:12
12之内的叠加运算的结果为:78
--------------------------------
Process exited after 4.607 seconds with return value 0
请按任意键继续. . .
*/
8.计算一个公式
/*
__author__ = 'xiaofeizhang'
函数作用:计算一个公式
*/
#include <stdio.h>
#include <stdlib.h>
int main(void){
int i, n;
double result=1;
printf("请输入参数(1-100): ");
scanf("%d", &n);
if (n==0){
printf("本次没包含0在内");
exit(0);
}
if (n==1){
printf("本次计算的结果为:1");
exit(0);
}
for (i=2; i<=n; i++){
result = 1.0/(1+result);
}
printf("本次计算的结果为:%f", result);
return 0;
}
/*
请输入参数(1-100): 31
本次计算的结果为:0.618034
--------------------------------
Process exited after 2.53 seconds with return value 0
请按任意键继续. . .
*/
9.斐波那契数列40项
/*
__author__ = 'xiaofeizhang'
函数作用: 斐波那契数列40项
*/
#include <stdio.h>
int main(void){
int f1=1, f2=1, f3;
printf("%12d%12d", f1, f2);
for (int i=3; i<=40; i++){
f3 = f1+f2;
f1 = f2;
f2 = f3;
printf("%12d", f3);
if (i%5==0){
printf("\n");
}
}
return 0;
}
/*
1 1 2 3 5
8 13 21 34 55
89 144 233 377 610
987 1597 2584 4181 6765
10946 17711 28657 46368 75025
121393 196418 317811 514229 832040
1346269 2178309 3524578 5702887 9227465
14930352 24157817 39088169 63245986 102334155
--------------------------------
Process exited after 0.02965 seconds with return value 0
请按任意键继续. . .
*/
10.计算一数的阶乘
/*
__author__ = 'xiaofeizhang'
函数作用: 计算一数的阶乘
*/
#include <stdio.h>
int main(void){
int i,n,result=1;
printf("说想算多少以内的阶乘:");
scanf("%d", &n);
if (n==0){
printf("0的阶乘为1");
}
else{
for (i=1;i<=n;i++){
result *=i;
}
printf("%d的阶乘为:%d", n, result);
}
return 0;
}
/*
说想算多少以内的阶乘:12
12的阶乘为:479001600
--------------------------------
Process exited after 2.506 seconds with return value 0
请按任意键继续. . .
*/
11.计算两个年份之间平年的年数,并输出
/*
__author__ = 'xiaofeizhang'
函数作用:计算两个年份之间平年的年数,并输出
*/
#include <stdio.h>
#include <stdlib.h>
int main(void){
int year_min, year_max;
printf("请输入起始年份:");
scanf("%d", &year_min);
printf("请输入终止年份:");
scanf("%d", &year_max);
if (year_min>year_max){
printf("小伙子,算数不好,要好好学呀");
exit(0);
}
for (int i=year_min; i<=year_max; i++){
if ((i%4==0&&i%100!=0) || (i%400==0)){
continue;
}
else{
printf("%d是平年\n", i);
}
}
return 0;
}
/*
请输入起始年份:1984
请输入终止年份:2018
1985是平年
1986是平年
1987是平年
1989是平年
1990是平年
1991是平年
1993是平年
1994是平年
1995是平年
1997是平年
1998是平年
1999是平年
2001是平年
2002是平年
2003是平年
2005是平年
2006是平年
2007是平年
2009是平年
2010是平年
2011是平年
2013是平年
2014是平年
2015是平年
2017是平年
2018是平年
--------------------------------
Process exited after 6.785 seconds with return value 0
请按任意键继续. . .
*/
12.计算一公式
/*
__author__ = 'xiaofeizhang'
函数作用:计算一公式
*/
#include <stdio.h>
#include <stdlib.h>
int main(void){
int m;
double result=1;
printf("说,这次想算多少以内的算法1-100: ");
scanf("%d", &m);
if (m==0){
printf("它不在基本的计算中哟");
exit(0);
}
if (m==1){
printf("本次计算的结果为:1");
exit(0);
}
for (int i=2; i<=m; i++){
result = result - 1.0/(i*i);
}
printf("本次计算的结果为:%f", result);
return 0;
}
/*
说,这次想算多少以内的算法1-100: 20
本次计算的结果为:0.403837
--------------------------------
Process exited after 2.763 seconds with return value 0
请按任意键继续. . .
*/
13.do···while实现奇数叠加
/*
__author__ = 'xiaofeizhang'
函数作用:do···while实现奇数叠加
*/
#include <stdio.h>
int main(void){
int i=1, n, sum=0;
printf("请输入你想计算叠加数到:");
scanf("%d", &n);
do {
sum += i;
i=i+2;
}while(i<=n);
printf("%d 之内的奇数叠加运算的结果为:%d", n, sum);
return 0;
}
/*
请输入你想计算叠加数到:31
31 之内的奇数叠加运算的结果为:256
--------------------------------
Process exited after 3.213 seconds with return value 0
请按任意键继续. . .
*/
14.求各项求和的和
/*
__author__ = 'xiaofeizhang'
函数作用:求各项求和的和
*/
#include <stdio.h>
int main(void){
int n, sum_part=0;
double sum=0;
printf("请输入n的取值:");
scanf("%d", &n);
for (int i=1; i<=n; i++){
for (int j=1; j<=i; j++){
sum_part += j;
}
sum += 1.0/sum_part;
sum_part = 0;
}
printf("和为:%f", sum);
return 0;
}
/*
请输入n的取值:4
和为:1.600000
--------------------------------
Process exited after 8.868 seconds with return value 0
请按任意键继续. . .
*/
15.求解 3x+5y+7z=100的所有非负数整数解
/*
__author__ = 'xiaofeizhang'
函数作用:求解 3x+5y+7z=100的所有非负数整数解
*/
#include <stdio.h>
int main(void){
int x, y, z, sum;
for (x=1; x<=33; x++){
for(y=1; y<=20; y++){
for (z=1; z<=14; z++){
sum = 3*x+5*y+7*z;
if (sum == 100){
printf("解为:%d, %d, %d\n", x, y, z);
}
}
}
}
return 0;
}
/*
解为:1, 4, 11
解为:1, 11, 6
解为:1, 18, 1
解为:2, 2, 12
解为:2, 9, 7
解为:2, 16, 2
解为:3, 7, 8
解为:3, 14, 3
解为:4, 5, 9
解为:4, 12, 4
解为:5, 3, 10
解为:5, 10, 5
解为:6, 1, 11
解为:6, 8, 6
解为:6, 15, 1
解为:7, 6, 7
解为:7, 13, 2
解为:8, 4, 8
解为:8, 11, 3
解为:9, 2, 9
解为:9, 9, 4
解为:10, 7, 5
解为:11, 5, 6
解为:11, 12, 1
解为:12, 3, 7
解为:12, 10, 2
解为:13, 1, 8
解为:13, 8, 3
解为:14, 6, 4
解为:15, 4, 5
解为:16, 2, 6
解为:16, 9, 1
解为:17, 7, 2
解为:18, 5, 3
解为:19, 3, 4
解为:20, 1, 5
解为:21, 6, 1
解为:22, 4, 2
解为:23, 2, 3
解为:26, 3, 1
解为:27, 1, 2
--------------------------------
Process exited after 0.8456 seconds with return value 0
请按任意键继续. . .
*/
16.求两个数的最大公约数
/*
__author__ = 'xiaofeizhang'
函数功能:求两个整数的最大公约数和最小公倍数(枚举法,辗转消除法,更相减损法)
*/
#include <stdio.h>
int main(void){
int m, n, t, minimum_common_multiple;
printf("请输入第一参数, 第二个参数:");
scanf("%d, %d", &m, &n);
minimum_common_multiple = m*n;
// m中放小的整数,n中放大的整数
if(m>n){
t = m;
m = n;
n = t;
}
// %%%%%%%%%%%%%%%%%%%%%%%%
// 枚举法
for(int i=m; i>=1; i--){
if(n%i==0 && m%i==0){
printf("枚举法\n");
printf("%d和%d的最小公倍数数为:%d\n", m, n, minimum_common_multiple/i);
printf("%d和%d的最大公约数为:%d\n", m, n, i);
printf("\n");
break;
}
}
// 辗转消除法
int x, y, tmp;
x = m;
y = n;
tmp = 1;
while(tmp){
tmp = y%x;
if (tmp==0){
printf("辗转消除法\n");
printf("%d和%d的最小公倍数数为:%d\n", m, n, minimum_common_multiple/x);
printf("%d和%d的最大公约数为:%d\n", m, n, x);
printf("\n");
}
else {
y = x;
x = tmp;
}
}
// 更相减损法
int w, z, a;
w = m;
z = n;
a = 1;
while(a){
a = w%z;
if (a==0){
printf("更相减损法\n");
printf("%d和%d的最小公倍数数为:%d\n", m, n, minimum_common_multiple/z);
printf("%d和%d的最大公约数为:%d\n", m, n, z);
printf("\n");
}
else {
w = z;
z = a;
}
}
return 0;
}
/*
请输入第一参数, 第二个参数:99,120
枚举法
99和120的最小公倍数数为:3960
99和120的最大公约数为:3
辗转消除法
99和120的最小公倍数数为:3960
99和120的最大公约数为:3
更相减损法
99和120的最小公倍数数为:3960
99和120的最大公约数为:3
--------------------------------
Process exited after 10.33 seconds with return value 0
请按任意键继续. . .
*/
17.求一正整数限定内所有素数
/*
__author__ = 'xiaofeizhang'
函数作用:求一正整数限定内所有素数
*/
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main(void){
int num;
bool isprime = true;
printf("请输入一个正整数:");
scanf("%d", &num);
if(num==0 || num==1){
printf("%d不是素数", num);
exit(0);
}
for (int j=2; j<=num; j++){
for (int i=2; i<=sqrt(j); i++){
if (j%i == 0){
isprime = false;
break;
}
else{
isprime = true;
}
}
if (isprime == true){
printf("%d是素数\n", j);
}
}
return 0;
}
/*
请输入一个正整数:100
2是素数
3是素数
5是素数
7是素数
11是素数
13是素数
17是素数
19是素数
23是素数
29是素数
31是素数
37是素数
41是素数
43是素数
47是素数
53是素数
59是素数
61是素数
67是素数
71是素数
73是素数
79是素数
83是素数
89是素数
97是素数
--------------------------------
Process exited after 1.651 seconds with return value 0
请按任意键继续. . .
*/
18.数列12,22,32,···,202的和
/*
__author__ = 'xiaofeizhang'
函数功能:求数列12,22,32,···,202的和 三种方法(for,while,do···while)
*/
#include <stdio.h>
int main(void){
// for循环
int i, sum_for=0;
for (i=1; i<=20; i++){
sum_for += 10*i+2;
}
printf("for循环求法\n");
printf("数列12,22,32,···,202的和为:%d\n", sum_for);
printf("\n");
// while循环
int j=1, sum_while = 0;
while(j<=20){
sum_while += 10*j+2;
j++;
}
printf("while循环求法\n");
printf("数列12,22,32,···,202的和为:%d\n", sum_while);
printf("\n");
// do···while循环
int k=1, sum_do_while = 0;
do {
sum_do_while += 10*k+2;
k++;
}while(k<=20);
printf("do···`while循环求法\n");
printf("数列12,22,32,···,202的和为:%d\n", sum_do_while);
return 0;
}
/*
for循环求法
数列12,22,32,···,202的和为:2140
while循环求法
数列12,22,32,···,202的和为:2140
do···`while循环求法
数列12,22,32,···,202的和为:2140
--------------------------------
Process exited after 0.556 seconds with return value 0
请按任意键继续. . .
*/
19.100-1000之间的水仙花数
/*
__author__ = 'xiaofeizhang'
函数作用:100-1000之间的水仙花数
*/
#include <stdio.h>
int main(void){
int i, j, k, m, n;
for (i=100; i<1000; i++){
j = i/100; // 百分位
k = i%100/10; // 十分位
m = i%10; // 个位
if (i == j*j*j+k*k*k+m*m*m){
printf("%d是水仙花数\n", i);
}
}
return 0;
}
/*
153是水仙花数
370是水仙花数
371是水仙花数
407是水仙花数
--------------------------------
Process exited after 0.4438 seconds with return value 0
请按任意键继续. . .
*/
20.模拟实现:学生成绩管理系统
/*
__author__ = 'xiaofeizhang'
函数作用:模拟实现:学生成绩管理系统
*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int main(void){
int choice;
while(1){
system("cls");
printf("\t\t\t*********学生成绩管理系统***********\n");
printf("\t\t\t* 1. 从文件读取学生的成绩 *\n");
printf("\t\t\t* 2. 添加学生的成绩 *\n");
printf("\t\t\t* 3. 显示学生的成绩 *\n");
printf("\t\t\t* 4. 按照姓名查找学生的成绩 *\n");
printf("\t\t\t* 5. 按照姓名学生的成绩 *\n");
printf("\t\t\t* 6. 统计学生的总成绩和平均成绩*\n");
printf("\t\t\t* 7. 统计学生的人数 *\n");
printf("\t\t\t* 8. 给学生成绩排名 *\n");
printf("\t\t\t* 9. 保存学生的成绩 *\n");
printf("\t\t\t* 0. 退出 *\n");
printf("请输入选项:0-9: ");
scanf("%d", &choice);
switch (choice){
case 0:
printf("谢谢使用\n");
exit(0);
case 1:
printf("从文件读取学生的成绩\n");
break;
case 2:
printf("添加学生的成绩\n");
break;
case 3:
printf("显示学生的成绩\n");
break;
case 4:
printf("按照姓名查找学生的成绩\n");
break;
case 5:
printf("按照姓名学生的成绩\n");
break;
case 6:
printf("统计学生的总成绩和平均成绩\n");
break;
case 7:
printf("统计学生的人数\n");
break;
case 8:
printf("给学生成绩排名\n");
break;
case 9:
printf("保存学生的成绩\n");
break;
default:
printf("\n输入不对\n");
break;
}
printf("按任意键继续...\n");
getch();
}
return 0;
}
/*
*********学生成绩管理系统***********
* 1. 从文件读取学生的成绩 *
* 2. 添加学生的成绩 *
* 3. 显示学生的成绩 *
* 4. 按照姓名查找学生的成绩 *
* 5. 按照姓名学生的成绩 *
* 6. 统计学生的总成绩和平均成绩*
* 7. 统计学生的人数 *
* 8. 给学生成绩排名 *
* 9. 保存学生的成绩 *
* 0. 退出 *
请输入选项:0-9: 3
显示学生的成绩
按任意键继续...
*/