您的位置:首页 > 编程语言 > C语言/C++

4000 寒假编程练习(一)(c语言)

2018-03-06 17:51 357 查看
使用c语言编写程序,在屏幕上打印九九乘法口诀表

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: