31、读懂以下程序,说明程序的功能
#include<stdio.h>
int main()
{
int m,n,r,m1,m2;
printf("请输入2个正整数:");
scanf("%d%d",&m1,&m2);
m=m1;
n=m2;
do{
r=m%n;
m=n;
n=r;
}while(r!=0);
printf("%d
",m);
return 0;
}
//31、读懂以下程序,说明程序的功能 #include<stdio.h> int main() { int m,n,r,m1,m2; printf("请输入2个正整数:"); scanf("%d%d",&m1,&m2); m=m1; n=m2; do{ r=m%n; m=n; n=r; }while(r!=0); printf("%d ",m); return 0; }
32、一个数如果恰好等于它的所有的因子之和,则这个数就称为“完数”。例如6的因子有1、2、3,而1+2+3=6,因此6是一个完数。编程找出1000内所有的完数。
1
#if 0
32、一个数如果恰好等于它的所有的因子之和,则这个数就称为“完数”。例如6的因子有1、2、3,而1+2+3=6,因此6是一个完数。
编程找出1000内所有的完数。
思路分级:
一。遍历2-1000内的所有数。
二。寻找每个数所有的公约数累加等于本身则为完数。
#endif
5 #include<stdio.h> 6 int main(){ 7 8 int num=0; 9 for(num=2;num<1000;num++){ 10 int sum=0; 11 int i=1; 12 for(i=1;i<=num/2;i++){ 13 if(num%i==0){ 14 15 sum+=i; 16 } 17 } 18 if(num==sum){ 19 printf("%d:是一个完数 ",sum); 20 } 21 } 22 23 24 return 0; 25 }
33、(课堂)思考这个宏定义错在哪里
#define S (r) PI*r*r//注意S与(r)之间有空格
34、我们在头文件(.h文件)中,经常看到这样的内容
#ifndef __H_INCLUDE__
#define __H_INCLUDE__
//头文件的实际内容
#endif
思考头文件的开头和结尾需要这样书写的原因。
35、(课堂)运行以下程序
int main()
{
char a,b;
a = getchar();
b = getchar();
putchar(a);
putchar(b);
return 0;
}
运行程序,输入x回车y回车,会发现输出的并不是xy,而是
x
思考这是为什么。
36、(课堂)使用数组存储斐波那契数列前40项,并输出
1
#if 0
36、(课堂)使用数组存储斐波那契数列前40项,并输出
解题思路:
一。创建一个长度为40的数组。
二。将第一第二个元素置为1;
三。遍历数组 第N个元素的值为 元素(N-1)+元素(N-2);
#endif
2 #include<stdio.h> 3 #include<stdlib.h> 4 int *fibonacci(int len){ 5 int *p; 6 int i; 7 8 if(NULL==(p=(int *)malloc(sizeof(int)*len))){ 9 perror("cannot malloc"); 10 return NULL; 11 } 12 p[0]=1; 13 p[1]=1; 14 for(i=2;i<len;i++){ 15 p[i]=p[i-1]+p[i-2]; 16 17 } 18 return p; 19 } 20 void print(int p[],int len){ 21 int i; 22 for(i=0;i<len;i++){ 23 printf("p[%d]=%d ",i+1,p[i]); 24 25 } 26 27 } 28 29 30 int main(){ 31 int *fib; 32 fib=fibonacci(40); 33 34 print(fib,40); 35 36 return 0; 37 }
37、(课堂)从键盘输入10个学生的成绩,如果遇到大于100或者小于0的成绩需要提示输入错误重新输入。之后计算10个学生的总成绩和平均成绩
#if 0
37、(课堂)从键盘输入10个学生的成绩,如果遇到大于100或者小于0的成绩需要提示输入错误重新输入。
之后计算10个学生的总成绩和平均成绩
解题思路:
一。创建长度为十的数组表示学生成绩
二。在输入时判断数值是否合法。
三。遍历数组累加 求总成绩和平均成绩
#endif
3 #include<stdio.h> 4 #include<stdlib.h> 5 6 int *getmemory(int len){ 7 int *p; 8 if(NULL==(p=(int *)malloc(sizeof(int)*len))){ 9 perror("cannot malloc"); 10 return NULL; 11 12 } 13 return p; 14 } 15 16 void my_scanf(int p[],int len){ 17 int i; 18 19 for(i=0;i<len;i++){ 20 printf("请输入第%d个学生成绩: ",i+1); 21 //scanf("%d",&p[i]); 22 int grade=0; 23 scanf("%d",&grade); 24 if(grade<0||grade>100){ 25 printf("成绩区间为1至100"); 26 i--; 27 }else{ 28 p[i]=grade; 29 } 30 } 31 32 } 33 34 35 void my_printf(int p[],int len){ 36 int i; 37 38 for(i=0;i<len;i++){ 39 40 printf("第 %d个学生的成绩;%d",i+1,p[i]); 41 } 42 43 } 44 45 int my_sum(int p[],int len){ 46 int i=0; 47 int sum=0; 48 49 for(i=0;i<len;i++){ 50 sum+=p[i]; 51 52 } 53 return sum; 54 55 } 56 57 double my_ave(int p[],int len){ 58 double ave; 59 60 ave=my_sum(p,len)/len; 61 62 63 return ave; 64 65 } 66 67 int main(){ 68 int num; 69 int *stu; 70 71 printf("需要输入几个学生的成绩"); 72 scanf("%d",&num); 73 stu=getmemory(num);//创建容器 74 75 my_scanf(stu,num);//输入数据 76 77 //my_printf(stu,num);//输出数据 78 79 int sum=my_sum(stu,num);//求和 80 printf("学生的总成绩:%d",sum); 81 82 83 double ave=my_ave(stu,num);//求平均 84 printf("学生的平均成绩:%lf",ave); 85 86 return 0; 87 }
38、(课堂)冒泡排序
从键盘输入10个各不相同的整数,存储在数组中,使用冒泡排序法将数组排序并输出
冒泡排序:是一种简单的排序算法
1)比较相邻的元素和其身后的元素。如果第一个比第二个大,就交换他们两个。
2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。一次循环过后,最后的元素应该会是最大的数。
3)针对所有的元素重复以上的步骤,除了最后一个。
4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
1 #if 0 2 38、(课堂)冒泡排序 3 从键盘输入10个各不相同的整数,存储在数组中,使用冒泡排序法将数组排序并输出 4 冒泡排序:是一种简单的排序算法 5 1)比较相邻的元素和其身后的元素。如果第一个比第二个大,就交换他们两个。 6 2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。一次循环过后,最后的元素应该会是最大的数。 7 3)针对所有的元素重复以上的步骤,除了最后一个。 8 4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 9 10 #endif 11 #include<stdio.h> 12 13 void my_scanf(int a[],int len){ 14 int i=0; 15 for(i=0;i<len;i++){ 16 17 printf("请输入第 %d个元素",i+1); 18 scanf("%d",&a[i]); 19 20 } 21 22 } 23 void bubblesort(int a[],int len){ 24 int i,j; 25 for(i=0;i<len-1;i++){ 26 27 for(j=0;j<len-1-i;j++){ 28 if(a[j]<a[j+1]){ 29 a[j]^=a[j+1]; 30 a[j+1]^=a[j]; 31 a[j]^=a[j+1]; 32 33 } 34 35 } 36 } 37 38 } 39 40 void my_printf(int a[],int len){ 41 int i=0; 42 for(i=0;i<len;i++){ 43 printf("a[%d]=%d ",i+1,a[i]); 44 45 } 46 47 } 48 int main(){ 49 int a[10]={0}; 50 my_scanf(a,10); 51 52 bubblesort(a,10); 53 54 my_printf(a,10); 55 56 return 0; 57 }
39、(课堂)自定义一个3*4的矩阵,输出矩阵中值最大的元素,并输入其数组下标
1
#if 0
39、(课堂)自定义一个3*4的矩阵,输出矩阵中值最大的元素,并输入其数组下标
解题思路:
一。构建一个3*4的矩阵,然后给矩阵内的每个元素赋值。
二。创建三个变量分别存放最大值及其坐标
三。遍历矩阵得到最大值及其坐标
错误分析:
应该定义一个结构体来存放最大值及其坐标
#endif
3 #include<stdio.h> 4 #include<stdlib.h> 5 6 void my_scanf(int (*a),int x,int y){ 7 int i=0,j=0; 8 for(i=0;i<x;i++){ 9 for(j=0;j<y;j++){ 10 printf("请输入第 %d行%d 列的值: ",i+1,j+1); 11 scanf("%d",&a[(i*(x+1)+j)]); 12 13 } 14 15 } 16 17 for(i=0;i<x;i++){ 18 for(j=0;j<y;j++){ 19 printf("a[%d][%d]=%d ",i+1,j+1,a[(i*(x+1)+j)]); 20 //printf("%d ",(i*(x+1)+j)); 21 22 } 23 24 } 25 26 } 27 28 29 30 31 void max(int (*a),int x,int y){ 32 int num,i=0,j=0,sub_i=1,sub_j=1; 33 num=a[0]; 34 for(i=0;i<x;i++){ 35 for(j=0;j<y;j++){ 36 if(num<a[(i*(x+1)+j)]){ 37 num=a[(i*(x+1)+j)]; 38 sub_i=i+1; 39 sub_j=j+1; 40 41 42 } 43 44 } 45 46 } 47 48 printf(" max:a[%d][%d]=%d",sub_i,sub_j,num); 49 50 } 51 52 53 54 int main(){ 55 //printf("哈哈哈999 "); 56 int a[3][4]={0}; 57 //int (*a)=(int *)malloc(sizeof(int)*3*4); 58 59 //int i=3,j=4; 60 my_scanf(a,3,4); 61 62 max(a,3,4); 63 64 //free(a); 65 //a=NULL; 66 67 return 0; 68 }