C语言编译上的问题

by admin on 2020年1月18日

下面是我写的简单C语言代码,我使用VS2008编译的,当出现cmd界面后,我输入r的数值,可系统却提示“oneq.exe
中的 0x5d20984f (msvcr90d.dll) 处未处理的异常: 0xC0000005: 读取位置
0x60000000 时发生访问冲突”,求高手指点

「C语言」「例题」函数,c语言例题

    本篇收集《C语言程序设计教程》第八章“函数”的所有例题。

 

澳门新葡亰网址下载 1 1
#include <stdio.h> 2 3 //求矩形面积 4 5 print_star()/*
打印星号个数 */ 6 { 7 int i; 8 for(i=0;i<55;i++) 9 printf(“*”); 10
printf(“n”); 11 } 12 13 float area(float a,float b)/* 求矩形面积函数
*/ 14 { 15 float s; 16 s=a*b; 17 return s; 18 } 19 20 int main()/*
主函数 */ 21 { 22 float a,b,s; 23 print_star(); 24 printf(“please
input a and b:n”); 25 scanf(“%f,%f”,&a,&b); 26 s=area(a,b); 27
printf(“area=%.2fn”,s); 28 print_star(); 29 return 0; 30 } 8.1 求矩形面积

 

澳门新葡亰网址下载 2 1
#include <stdio.h> 2 3 //无参函数定义举例 4 5 output() 6 { 7
printf(“***********************n”); 8 printf(”
How are you! n”); 9
printf(“***********************n”); 10 } 11 12
int main() 13 { 14 output(); 15 return 0; 16 } 8.2 无参函数定义举例

 

澳门新葡亰网址下载 3 1
#include <stdio.h> 2 #define PI 3.1415926 3 4
//求半径为r的圆的面积 5 6 float a(float r) 7 { 8 return(PI*r*r); 9 }
10 11 int main() 12 { 13 float r; 14 printf(“请输入圆的半径:”); 15
scanf(“%f”,&r); 16 printf(“area=%f”,a(r)); 17 return 0; 18 } 8.3 求半径为r的圆的面积

 

澳门新葡亰网址下载 4 1
#include <stdio.h> 2 3 //函数表达式调用 4 5 max(int x,int y) 6 {
7 int z; 8 z=(x>y)?x:y; 9 return(z); 10 } 11 12 int main() 13 { 14
int a,b,m; 15 scanf(“%d,%d”,&a,&b); 16 m=max(a,b);/*
max(a,b)作为表达式出现在赋值号右边 */ 17 printf(“max=%d”,m); 18 return
0; 19 } 8.4 函数表达式调用

 

澳门新葡亰网址下载 5 1
#include <stdio.h> 2 3 //函数表达式调用出现在实参表中 4 5 max(int
x,int y) 6 { 7 int z; 8 z=(x>y)?x:y; 9 return(z); 10 } 11 12 int
main() 13 { 14 int a,b,c,m; 15 scanf(“%d,%d,%d”,&a,&b,&c); 16
m=max(max(a,b),c); 17 printf(“max=%d”,m); 18 return 0; 19 } 8.5 函数表达式调用出现在实参表中

 

澳门新葡亰网址下载 6 1
#include <stdio.h> 2 3
//将用户输入的华氏温度换算成摄氏温度输出。华氏温度与摄氏温度的换算公式为:C=(5/9)*(F-32)
4 5 int ftoc(float f) 6 { 7 return (5.0/9.0)*(f-32); 8 } 9 10 int
main() 11 { 12 float f; 13 printf(“请输入一个华氏温度:n”); 14
scanf(“%f”,&f); 15 printf(“摄氏温度为:%d”,ftoc(f)); 16 return 0; 17 }
8.6
将用户输入的华氏温度换算成摄氏温度输出

 

澳门新葡亰网址下载 7 1
#include <stdio.h> 2 3 //实参与形参之间单向的值传递 4 5 int
main() 6 { 7 int a=3,b=5; 8 swap(a,b); 9 printf(“a=%d,b=%d”,a,b); 10
return 0; 11 } 12 13 void swap(int x,int y) 14 { 15 int t; 16 t=x; 17
x=y; 18 y=t; 19 } 8.7
实参与形参之间单向的值传递

 

澳门新葡亰网址下载 8 1
#include <stdio.h> 2 3 //实参的求职顺序 4 5 int main() 6 { 7 int
i=3,p; 8 p=f(i,++i,++i);/* 函数调用 */ 9 //Turbo
C系统按从右至左的顺序求实参的值,相当于(5,5,4) 10 printf(“%d”,p); 11
return 0; 12 } 13 14 int f(int a,int b,int c)/* 函数定义 */ 15 { 16
printf(“%d %d %dn”,a,b,c); 17 return(a+b+c); 18 } 8.8 实参的求职顺序

 

澳门新葡亰网址下载 9 1
#include <stdio.h> 2 3 //数组元素作为函数的形参 4 5 float
max(float x,float y) 6 { 7 if(x>y) return x; 8 else return y; 9 } 10
11 int main() 12 { 13 float
m,a[10]={12.3,105,34.5,50,67,9,78,98,89,-20}; 14 int k; 15 m=a[0];
16 for(k=1;k<10;k++) 17 m=max(m,a[k]); 18 printf(“%2.fn”,m); 19
return 0; 20 } 8.9
数组元素作为函数的形参

 

澳门新葡亰网址下载 10 1
#include <stdio.h> 2 3
//编写冒泡排序函数,对主函数中输入的无序整数按由大到小的顺序进行排序。 4
5 sort(int b[10],int n) 6 { 7 int i,j,t; 8 for(i=0;i<n-1;i++) 9
for(j=0;j<n-i-1;j++) 10 if(b[j]<b[j+1])/*
b[j]和b[j+1]交换 */ 11 { 12 t=b[j]; 13 b[j]=b[j+1]; 14
b[j+1]=t; 15 } 16 } 17 18 int main() 19 { 20 int a[10],i; 21
printf(“Please input 10 numbers:n”); 22 for(i=0;i<10;i++) 23
scanf(“%d”,&a[i]); 24 sort(a,10);/* 调用函数对数组进行排序 */ 25
printf(“Sorted data is:n”); 26 for(i=0;i<10;i++) 27 printf(“%d
“,a[i]); 28 printf(“n”); 29 return 0; 30 } 8.10 编写冒泡排序函数

 

澳门新葡亰网址下载 11 1
#include <stdio.h> 2 3
//求3*4的矩阵中所有元素的最大值,要求用函数来实现 4 5 max(int
b[][4]) 6 { 7 int i,j,k,max1; 8 max1=b[0][0]; 9
for(i=0;i<3;i++) 10 for(j=0;j<4;j++) 11 if(b[i][j]>max1) 12
max1=b[i][j]; 13 return (max1); 14 } 15 16 int main() 17 { 18 int
m,a[3][4]={5,16,30,40,23,4,156,8,1,3,50,37}; 19 m=max(a); 20
printf(“max is %dn”,m); 21 return 0; 22 } 8.11
求3*4的矩阵中所有元素的最大值,要求用函数来实现

 

澳门新葡亰网址下载 12 1
#include <stdio.h> 2 3
//输入两个整数,按从小到大的顺序输出,调用swap函数实现变量值的交换。 4 5
swap(int a1,int a2) 6 { 7 int a; 8 a=a1; 9 a1=a2; 10 a2=a;/*
交换a1和a2,m和n不变 */ 11 } 12 13 int main() 14 { 15 int m,n; 16
printf(“Input m,n:”); 17 scanf(“%d%d”,&m,&n); 18 if(m>n)
swap(m,n);/* 实参传送m和n的值 */ 19 printf(“Sorted:%d %d n”,m,n); 20
return 0; 21 } 8.12
输入两个整数,按从小到大的顺序输出,调用swap函数实现变量值的交换

 

澳门新葡亰网址下载 13 1
#include <stdio.h> 2 3 //对用户定义的被调函数作声明 4 5 int
main() 6 { 7 float add(float x,float y);/* 对被调函数的声明 */ 8 float
a,b,c; 9 scanf(“%f,%f”,&a,&b); 10 c=add(a,b); 11 printf(“sum is %f”,c);
12 return 0; 13 } 14 15 float add(float x,float y)/* 函数定义 */ 16 {
17 return (x+y); 18 } 8.13
对用户定义的被调函数作声明

 

澳门新葡亰网址下载 14 1
#include <stdio.h> 2 #include <math.h> 3 #define PI
3.1415926 4 5 //函数的嵌套调用 6 7 float area_ring(float x,float y); 8
float area(float r); 9 10 int main() 11 { 12 float r,r1; 13
printf(“input two figures:n”); 14 scanf(“%f,%f”,&r,&r1); 15
printf(“area_ring is %f “,area_ring(r,r1)); 16 return 0; 17 } 18 19
float area_ring(float x,float y) 20 { 21 float c; 22
c=fabs(area(x)-area(y)); 23 return c; 24 } 25 26 float area(float r) 27
{ 28 return (PI*r*r); 29 } 8.14
函数的嵌套调用

 

澳门新葡亰网址下载 15 1
#include <stdio.h> 2 3 //用递归方法n! 4 5 long int fac(unsigned
int n) 6 { 7 long int f; 8 if(n==0) return 1; 9 f=fac(n-1)*n; 10
return(f); 11 } 12 13 int main() 14 { 15 unsigned int n; 16
printf(“input a unsigned interger number:n”); 17 scanf(“%d”,&n); 18
printf(“%d!=%10ld”,n,fac(n)); 19 return 0; 20 } 8.15 用递归方法n!

 

澳门新葡亰网址下载 16 1
#include <stdio.h> 2 3 //利用递归算法求Fibonacci数列 4 5 long
f(int n) 6 { 7 long s; 8 if(n==1 || n==2) 9 return 1; 10
s=f(n-1)+f(n-2); 11 return s; 12 } 13 14 int main() 15 { 16 int n; 17
printf(“please input n:n”); 18 scanf(“%d”,&n); 19 if(n<0) 20
printf(“error!n”); 21 else 22
printf(“第%d项Fibonacci数列的值为%ld”,n,f(n)); 23 return 0; 24 } 8.16 利用递归算法求Fibonacci数列

 

澳门新葡亰网址下载 17澳门新葡亰网址下载, 1
#include <stdio.h> 2 3 //汉诺塔问题 4 5 void haoni(int n,char
x,char y,char z) 6 { 7 if(n==1) printf(“%c->%cn”,x,z); 8 else 9 {
10 haoni(n-1,x,z,y);/* 递归调用 */ 11 printf(“%c->%cn”,x,z); 12
haoni(n-1,y,x,z);/* 递归调用 */ 13 } 14 } 15 16 int main() 17 { 18 int
m; 19 printf(“Input the number of disks:”); 20 scanf(“%d”,&m); 21
printf(“The steps to moving %3d disks:n”,m); 22 haoni(m,’A’,’B’,’C’);
23 return 0; 24 } 8.17 汉诺塔问题

 

澳门新葡亰网址下载 18 1
#include <stdio.h> 2 #define PI 3.14 3 4
//已知圆的半径,求周长、面积 5 6 float c,area; 7 8 void f(float r) 9 {
10 c=2*PI*r; 11 area=PI*r*r; 12 } 13 14 int main() 15 { 16 float r;
17 printf(“input radius:”); 18 scanf(“%f”,&r); 19 f(r); 20
printf(“%f,%fn”,c,area); 21 return 0; 22 } 8.18 已知圆的半径,求周长、面积

 

澳门新葡亰网址下载 19 1
#include <stdio.h> 2 3 //比较两个数,输出较大者 4 5 int a=3,b=5;
6 7 max(int x,int y) 8 { 9 int c; 10 c=x>y?x:y; 11 } 12 13 int main()
14 { 15 int a=8; 16 printf(“%dn”,max(a,b)); 17 return 0; 18 } 8.19 比较两个数,输出较大者

 

澳门新葡亰网址下载 20 1
#include <stdio.h> 2 3 //静态局部变量 4 5 int n=1; 6 7 func() 8 {
9 static int a=2;/* 静态局部变量,与main()函数中的a不同 */ 10 a+=2; 11
++n; 12 printf(“func:n=%d a=%dn”,n,a); 13 } 14 15 int main() 16 { 17
static int a;/* 静态局部变量,初始化为0 */ 18 printf(“main:n=%d
a=%dn”,n,a); 19 func(); 20 a+=10; 21 printf(“main:n=%d a=%dn”,n,a);
22 func(); 23 printf(“main:n=%d a=%dn”,n,a); 24 return 0; 25 } 8.20 静态局部变量

 

澳门新葡亰网址下载 21#include
<stdio.h> //自动变量的应用 func(int n) { auto int a=2;/*
自动变量a,每调用一次都要重新赋初值 */ a+=2; ++n; printf(“func:n=%d
a=%dn”,n,a); } int main() { int a=0;/* 自动变量,与func()不同 */
func(1); printf(“main:n=1 a=%dn”,a); a+=10; func(2); printf(“main:n=1
a=%dn”,a); return 0; } 8.21
自动变量的应用

 

澳门新葡亰网址下载 22 1
#include <stdio.h> 2 3 //寄存器变量 4 5 int main() 6 { 7 register
int temp=0,j; 8 int i; 9 for(i=1;i<100;i++) 10 { 11
for(j=0;j<1000;j++) 12 temp+=j; 13 printf(“i=%d temp%d”,i,temp); 14
temp%=1; 15 } 16 return 0; 17 } 8.22
寄存器变量

 

澳门新葡亰网址下载 23 1
#include <stdio.h> 2 3 //外部变量声明语句 4 5 int main() 6 { 7
extern int a;/* 外部引用声明 */ 8 printf(“%dn”,a); 9 return 0; 10 }
11 12 int a=5; 8.23 外部变量声明语句

 

澳门新葡亰网址下载 24 1
#include <stdio.h> 2 3 //下面程序由两个文件组成,请分析运行结果 4
5 /* 文件一 */ 6 int x=10;/* 定义非静态全局变量x,y */ 7 int y=10; 8
9 add() 10 { 11 y=10+x; 12 x=x*2; 13 } 14 15 int main() 16 { 17 extern
sub();/* 对外部函数sub进行引用声明 */ 18 x+=5; 19 add(); 20 21 22 23
/* 此段内容没印刷上 */ 24 25 26 return 0; 27 } 8.24
下面程序由两个文件组成,请分析运行结果

 

澳门新葡亰网址下载 25 1
#include <stdio.h> 2 3 //实现系统提供的字符串复制函数
strcpy()的全部功能 4 5 char *strcpy(char*s1,char *s2) 6 { 7 char
*p=s1;/* 用p保存s1接收来的实参字符数组的首地址 */ 8
while(*s1++=*s2++);/* 当s2指到’’时,先赋值完成后循环结束 */ 9
return(p);/* 通过函数名返回指针值 */ 10 } 11 12 int main() 13 { 14
char s[20]; 15 printf(“%sn”,strcpy(s,”Welocme to you!”));/*
输出返回值指向的内容 */ 16 return 0; 17 } 8.25 实现系统提供的字符串复制函数
strcpy()的全部功能

 

澳门新葡亰网址下载 26 1
#include <stdio.h> 2 3
//实现系统提供的字符串连接函数strcat(s1,s2) 4 5 char *strcat(char
*s1,char *s2) 6 { 7 char *p=s1;/*
用p保存s1接收来的实参字符数组的首地址 */ 8 while(*s1) s1++;/*
s1指到’’时循环结束 */ 9 while(*s1++=*s2++);/*
当s2指到’’时,先赋值完成后循环结束 */ 10 return(p);/*
通过函数名返回指针值 */ 11 } 12 13 int main() 14 { 15 char
s[20]=”Hello,”; 16 printf(“%sn”,strcat(s,”Welcome to you!”)); 17
return 0; 18 } 8.26
实现系统提供的字符串连接函数strcat(s1,s2)

 

澳门新葡亰网址下载 27 1
#include <stdio.h> 2 3 //指向函数的指针程序举例 4 5 int f(int x)
6 { 7 return 3*x*x+5*x-7; 8 } 9 10 int main() 11 { 12 int (*p)();/*
定义p为指向函数的指针变量 */ 13 int a; 14 p=f;/*
对指向函数的指针变量p赋值 */ 15 printf(“Input x=”); 16 scanf(“%d”,&a);
17 printf(“(*p)(a)=%dn”,(*p)(a));/*
用函数指针参数调用函数,相当于f(a) */ 18
printf(“p(2a)=%dn”,p(2*a));/* p(a)以指针变量名代替函数名来调用 */
19 return 0; 20 } 8.27
指向函数的指针程序举例

 

澳门新葡亰网址下载 28 1
#include <stdio.h> 2 3
//求自然数1~n的奇数和或偶数和,用指向函数的指针变量实现 4 5 int
evensum(int n)/* 求自然数1~n中偶数的和 */ 6 { 7 int i,sum=0; 8
for(i=2;i<=n;i+=2) 9 sum+=i; 10 return sum; 11 } 12 13 int oddsum(int
n)/* 求自然数1~n中奇数的和 */ 14 { 15 int i,sum=0; 16
for(i=1;i<=n;i+=2) 17 sum+=i; 18 return sum; 19 } 20 21 int main() 22
{ 23 int n,sum,flag; 24 int (*p)(int);/*定义指向函数的指针变量*/ 25
printf(“input n:”); 26 scanf(“%d”,&n); 27 printf(“input flag(0 or 1):”);
28 scanf(“%d”,&flag);/* 输入标志 */ 29 if(flag==1) p=oddsum;/*
当flag为1时,p指向函数oddsum */ 30 else p=evensum;/*
当flag尾华1时,p指向函数evensum */ 31 sum=(*p)(n); 32
printf(“sum=%dn”,sum); 33 return 0; 34 } 8.28
求自然数1~n的奇数和或偶数和,用指向函数的指针变量实现

 

澳门新葡亰网址下载 29 1
#include <stdio.h> 2 3 //用指向函数的指针变量作为函数的参数 4 5
int evensum(int n)/* 求自然数1~n中偶数的和 */ 6 { 7 int i,sum=0; 8
for(i=2;i<=n;i+=2) 9 sum+=i; 10 return sum; 11 } 12 13 int oddsum(int
n)/* 求自然数1~n中奇数的和 */ 14 { 15 int i,sum=0; 16
for(i=1;i<=n;i+=2) 17 sum+=i; 18 return sum; 19 } 20 21 int
result(int n,int (*p)(int)) 22 { 23 int sum; 24 sum=(*p)(n);/*
调用p所指向的函数 */ 25 return sum; 26 } 27 28 int main() 29 { 30 int
n,sum,flag; 31 printf(“input n:”); 32 scanf(“%d”,&n); 33 printf(“input
flag(0 or 1):”); 34 scanf(“%d”,&flag); 35 if(flag==1)
sum=result(n,oddsum); 36 else sum=result(n,evensum); 37
printf(“sum=%dn”,sum); 38 return 0; 39 } 8.29
用指向函数的指针变量作为函数的参数

 

澳门新葡亰网址下载 30 1
#include <stdio.h> 2 #define N 30 3 4 //编写#include
<stdio.h> 5 #define N 30 6 7
//编写一个单科成绩分析统计程序,要求如下: 8
//(1)从键盘输入N名同学的成绩 9 //(2)求其平均分、最高分、最低分 10
//(3)并统计各分数段人数和及格率 11 //(4)对学生成绩进行降序排序 12
//(5)使用菜单完成各功能 13 14 input(float s[],int n) 15 { 16 int i; 17
printf(“请输入%d名学生的成绩:n”,n); 18 for(i=0;i<n;i++) 19
scanf(“%f”,&s[i]); 20 } 21 22 count(float s[],int n) 23 { 24 int
i,j,b[10]={0,0,0,0,0,0,0,0,0,0}; 25 int failure=0; 26
for(i=0;i<n;i++) 27 { 28 j=s[i]/10; 29 b[j]++; 30 } 31 printf(”
0-9 ,10-19,20-29,30-39,40-49,50-59,60-69,70-79,80-89,90-100n”); 32
for(i=0;i<10;i++) 33 printf(” %-4d”,b[i]); 34 for(i=0;i<6;i++)
35 failure+=b[i]; 36
printf(“n及格率:%2.f%%n”,(n-failure)/n*100); 37 } 38 39
avemaxmin(float s[],int n,float *aver,float *max,float *min) 40 {
41 int i; 42 float sum; 43 for(i=0;i<n;i++) 44 sum+=s[i]; 45
*min=s[0]; 46 *max=s[0]; 47 for(i=0;i<n;i++) 48
if(s[i]<s[0]) 49 *min=s[i]; 50 if(s[i]>s[0]) 51
*max=s[i+1]; 52 *aver=sum/n; 53 } 54 55 sort(float s[],int n) 56 {
57 int i,j,t; 58 for(i=0;i<n;i++) 59 for(j=0;j<n-i-1;j++) 60
if(s[j]<s[j+1]) 61 { 62 t=s[j]; 63 s[j]=s[j+1]; 64
s[j+1]=t; 65 } 66 } 67 68 output(float s[],int n) 69 { 70 int i; 71
printf(“排序后的成绩为:n”); 72 for(i=0;i<n;i++) 73 printf(“%.2f
“,s[i]); 74 printf(“n”); 75 } 76 77 int main() 78 { 79 int choice,n;
80 float s[N],aver,max,min; 81 do 82 { 83
printf(“1.输入N名同学成绩(必须先输入成绩)n”); 84
printf(“2.求平均分、最高分、最低分n”); 85
printf(“3.分段统计人数和及格率n”); 86 printf(“4.排序n”); 87
printf(“0.退出系统n”); 88 printf(“请选择(0~4):请输入选择:”); 89
scanf(“%d”,&choice); 90 switch(choice) 91 { 92 case 1: 93
printf(“请输入学生人数:”); 94 scanf(“%d”,&n); 95 input(s,n); 96 break;
97 case 2: 98 avemaxmin(s,n,&aver,&max,&min); 99
printf(“平均分=%.2f,最高分=%.2f,最低分=%.2fn”,aver,max,min); 100
break; 101 case 3: 102 count(s,n); 103 break; 104 case 4: 105 sort(s,n);
106 output; 107 break; 108 case 0:break; 109 } 110 }while(choice!=0);
111 return 0; 112 },要求如下: 113 //(1)从键盘输入N名同学的成绩 114
//(2)求其平均分、最高分、最低分 115 //(3)并统计各分数段人数和及格率 116
//(4)对学生成绩进行降序排序 117 //(5)使用菜单完成各功能 118 119
input(float s[],int n) 120 { 121 int i; 122
printf(“请输入%d名学生的成绩:n”,n); 123 for(i=0;i<n;i++) 124
scanf(“%f”,&s[i]); 125 } 126 127 count(float s[],int n) 128 { 129
int i,j,b[10]={0,0,0,0,0,0,0,0,0,0}; 130 int failure=0; 131
for(i=0;i<n;i++) 132 { 133 j=s[i]/10; 134 b[j]++; 135 } 136
printf(” 0-9
,10-19,20-29,30-39,40-49,50-59,60-69,70-79,80-89,90-100n”); 137
for(i=0;i<10;i++) 138 printf(” %-4d”,b[i]); 139 for(i=0;i<6;i++)
140 failure+=b[i]; 141
printf(“n及格率:%2.f%%n”,(n-failure)/n*100); 142 } 143 144
avemaxmin(float s[],int n,float *aver,float *max,float *min) 145 {
146 int i; 147 float sum; 148 for(i=0;i<n;i++) 149 sum+=s[i]; 150
*min=s[0]; 151 *max=s[0]; 152 for(i=0;i<n;i++) 153
if(s[i]<s[0]) 154 *min=s[i]; 155 if(s[i]>s[0]) 156
*max=s[i+1]; 157 *aver=sum/n; 158 } 159 160 sort(float s[],int n)
161 { 162 int i,j,t; 163 for(i=0;i<n;i++) 164 for(j=0;j<n-i-1;j++)
165 if(s[j]<s[j+1]) 166 { 167 t=s[j]; 168 s[j]=s[j+1]; 169
s[j+1]=t; 170 } 171 } 172 173 output(float s[],int n) 174 { 175 int
i; 176 printf(“排序后的成绩为:n”); 177 for(i=0;i<n;i++) 178
printf(“%.2f “,s[i]); 179 printf(“n”); 180 } 181 182 int main() 183
{ 184 int choice,n; 185 float s[N],aver,max,min; 186 do 187 { 188
printf(“1.输入N名同学成绩(必须先输入成绩)n”); 189
printf(“2.求平均分、最高分、最低分n”); 190
printf(“3.分段统计人数和及格率n”); 191 printf(“4.排序n”); 192
printf(“0.退出系统n”); 193 printf(“请选择(0~4):请输入选择:”); 194
scanf(“%d”,&choice); 195 switch(choice) 196 { 197 case 1: 198
printf(“请输入学生人数:”); 199 scanf(“%d”,&n); 200 input(s,n); 201
break; 202 case 2: 203 avemaxmin(s,n,&aver,&max,&min); 204
printf(“平均分=%.2f,最高分=%.2f,最低分=%.2fn”,aver,max,min); 205
break; 206 case 3: 207 count(s,n); 208 break; 209 case 4: 210 sort(s,n);
211 output; 212 break; 213 case 0:break; 214 } 215 }while(choice!=0);
216 return 0; 217 } 8.30
一个单科成绩分析统计程序

 

澳门新葡亰网址下载 31 1
#include <stdio.h> 2 3
//通过调用一个函数,将整型数组的所有元素都加3 4 5 void add(int b[],int
n) 6 { 7 int i; 8 for(i=0;i<n;i++) 9 b[i]+=3; 10 } 11 12 int main()
13 { 14 int i,a[8]={1,2,3,4,5,6,7,8}; 15 add(a,8); 16
for(i=0;i<8;i++) 17 printf(“%4d”,a[i]); 18 return 0; 19 } 8.31
通过调用一个函数,将整型数组的所有元素都加3

 

澳门新葡亰网址下载 32 1
#include <stdio.h> 2 3 //利用插入排序法将10个字符从小到大进行排序
4 5 insert(char s[]) 6 { 7 int i,j,t; 8 for(i=1;i<9;i++) 9 { 10
t=s[i]; 11 j=i-1; 12 while((j>=0)&&(t<s[j])) 13 { 14
s[j+1]=s[j]; 15 j–; 16 } 17 s[j+1]=t; 18 } 19 } 20 21 int main()
22 { 23 char a[11]; 24 int i; 25 printf(“Input 10 character:”); 26
for(i=0;i<10;i++) 27 a[i]=getchar(); 28 a[i]=’’;/*
在10个字符后面加上’’,形成字符串 */ 29 insert(a); 30 printf(“Sorted
character is:%sn”,a);/* 将已排序的10个字符输出 */ 31 return 0; 32 }
8.32
利用插入排序法将10个字符从小到大进行排序

 

澳门新葡亰网址下载 33 1
#include <stdio.h> 2 3
//十进制与其他进制(二至九进制)数间的互相转换,程序能够自动帮助用户纠正输入错误
4 5 long change(int a[],int len,int b) 6 /*
把输入的字符数字转换成十进制数字 */ 7 { 8 int i,k=1; 9 long num=0; 10
for(i=1;i<=len;i++) 11 { 12 num=num+a[i]*k; 13 k=k*b;/*
k表示权值 */ 14 } 15 return num; 16 } 17 18 ten_to_oth()/*
十进制转换为其他进制 */ 19 { 20 int sum,n,i=0,j,arr[80]; 21
printf(“Please input a Dec_num:”);/* 输入10进制数 */ 22
scanf(“%d”,&sum); 23 printf(“Please input the base:”);/*
输入想要转换的进制 */ 24 scanf(“%d”,&n); 25 do 26 { 27 i++; 28
arr[i]=sum%n;/* 从下标1开始计数 */ 29 sum=sum/n; 30 if(i>=80) 31
printf(“overflow”); 32 }while(sum!=0); 33 printf(“The result is:”); 34
for(j=i;j>0;j–) 35 printf(“%d”,arr[j]); 36 printf(“n”); 37 } 38
39 oth_to_ten()/* 其他进制转换为十进制 */ 40 { 41 int
base,i,num,arr[80]; 42 long sum=0; 43 char ch; 44 /*
想将几进制数转换成十进制数,请输入 */ 45 printf(“Please input the base
you want to change :”); 46 scanf(“%d”,&base); 47 /* 请输入该数 */ 48
printf(“Please input number:”); 49 scanf(“%d”,&num); 50
for(i=1;num!=0;i++) 51 { 52 arr[i]=num%10;/* 从下标1开始计数 */ 53
num=num/10; 54 } 55 sum=change(arr,i-1,base); 56 printf(“The result
is:%ldn”,sum); 57 } 58 59 int main() 60 { 61 int flag=1; 62
while(flag!=0) 63 { 64 printf(“1:ten_to_othn”); 65
printf(“2:oth_to_tenn”); 66 printf(“0:exitn”); 67 printf(“Enter a
number:”); 68 scanf(“%d”,&flag); 69 switch(flag) 70 { 71 case
1:ten_to_oth();break;/* 其他进制转换为十进制 */ 72 case
2:oth_to_ten();break;/* 十进制转换为其他进制 */ 73 case 0:return 0;
74 } 75 } 76 return 0; 77 } 8.33进制转换器

 

澳门新葡亰网址下载 34 1
#include <stdio.h> 2 #include <math.h> 3 4
/*一个素数经过任意次调换位,任然为素数,则称其为绝对素数, 5
例如,13(31)就是一个绝对素数。求两位的所有绝对素数并输出。*/ 6 7 int
prime(int n)/* 判断一个数是否是素数 */ 8 { 9 int i; 10 if(n<=1)/*
小于2不是素数 */ 11 return 0; 12 else if(n==2)/* 2是素数 */ 13 return
1; 14 else/* 大于2要判断是不是 */ 15 { 16 for(i=2;i<sqrt(n);i++) 17
if(n%i==0)/* 一旦能整除i,则n不是素数 */ 18 return 0; 19 return 1;/*
如鼓苤葱姓馓跤锞洌韓从来没被i整除过,是素数 */ 20 } 21 } 22 23 int
ab_prime(int m)/* 判断一个位数是否是绝对素数 */ 24 { 25 int a; 26
a=(m%10)*10+m/10;/* 得到换位后的数 */ 27 if(prime(m)&&prime(a))/*
m和a都是素数,则m为绝对素数,否则不是 */ 28 return 1; 29 else 30 return
0; 31 } 32 33 int main() 34 { 35 int i; 36 for(i=10;i<100;i++) 37
if(ab_prime(i))/* 循环从10到99找绝对素数 */ 38 printf(“%d,”,i);/*
是绝对素数则输出 */ 39 return 0; 40 } 8.34 绝对素数的判断

 

本篇收集《C语言程序设计教程》第八章函数的所有例题。 1 #include stdio.h
2 3 // 求矩形面积 4 5 print_sta…

这几天在听麻省理工Gilbert
Strang教授的线性代数,其中讲到了高斯消元法等,又加上教授一直提及MATLAB运算思想,所以这个矩阵系列我将用C语言模拟实现MATLAB的内部计算(不一定对)

#include<stdio.h>
#define PI 3.14159265
void main()
{
  
  float r,c,s;
  printf(“请输入圆的半径rn”);
  scanf(“%f”,&r);
  c=2*PI*r;
  s=PI*r*r;
  printf(“圆形的周长%fn圆形的面积%sn”,r,s);
}

百科:在线性代数中, LU分解(LU
Decomposition)是矩阵分解的一种,可以将一个矩阵分解为一个下三角矩阵和一个上三角矩阵的乘积(有时是它们和一个置换矩阵的乘积)。LU分解主要应用在数值分析中,用来解线性方程、求反矩阵或计算行列式。实现矩阵的LU分解。矩阵的三角分解又称LU分解,它是将一个矩阵分解成一个下三角矩阵L和一个上三角矩阵U的乘积,即A=LU。

LU分解在本质上是高斯消元法的一种表达形式。实质上是将A通过初等行变换变成一个上三角矩阵,其变换矩阵就是一个单位下三角矩阵。这正是所谓的杜尔里特算法:从下至上地对矩阵A做初等行变换,将对角线左下方的元素变成零,然后再证明这些行变换的效果等同于左乘一系列单位下三角矩阵,这一系列单位下三角矩阵的乘积的逆就是L矩阵,它也是一个单位下三角矩阵。这类算法的复杂度一般在(三分之二的n三次方)
左右

注意:当A的所有顺序主子式都不为0时,矩阵A可以分解为A=LU,且当L的对角元全为1时分解唯一

在MATLAB中是这样使用的LU函数使用语句:

Y = lu(A)
[L,U] = lu(A)
[L,U,P] = lu(A)
[L,U,P,Q] = lu(A)
[L,U,P,Q,R] = lu(A)

具体用c怎么实现的呢?当然你也可以用其他语言

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
//

// main.c

// A=LU分解

//

// Created by 杨旭磊 on 16/4/4.

// Copyright © 2016年 杨旭磊. All rights reserved.

//

include <stdio.h>

/第一种方法直接解出方程的根/

//void solve(float l[][100],float u[][100],float b[],float
x[],int n)

//{int i,j;

// float t,s1,s2;

// float y[100];

// for(i=1;i<=n;i++) /* 第一次回代过程开始 */

// {s1=0;

// for(j=1;j<i;j++)

// {

// t=-l[i][j];

// s1=s1+t*y[j];

// }

// y[i]=(b[i]+s1)/l[i][i]; }

// for(i=n;i>=1;i–) /* 第二次回代过程开始 */

// {

// s2=0;

// for(j=n;j>i;j–)

// {

// t=-u[i][j];

// s2=s2+t*x[j];

// }

// x[i]=(y[i]+s2)/u[i][i];

// }

//}

//

//void main()

//{float
a[100][100],l[100][100],u[100][100],x[100],b[100];

// int i,j,n,r,k;

// float s1,s2;

// for(i=1;i<=99;i++)/将所有的数组置零,同时将L矩阵的对角值设为1/

// for(j=1;j<=99;j++)

// {

// l[i][j]=0,u[i][j]=0;

// if(j==i) l[i][j]=1;

// }

//

// printf (“input n:n”);/输入方程组的个数/

// scanf(“%d”,&n);

// printf (“input array A:n”);/读取原矩阵A/

// for(i=1;i<=n;i++)

// for(j=1;j<=n;j++)

// scanf(“%f”,&a[i][j]);

// printf (“input array B:n”);/读取列矩阵B/

// for(i=1;i<=n;i++)

// scanf(“%f”,&b[i]);

// for(r=1;r<=n;r++)/求解矩阵L和U/

// {

// for(i=r;i<=n;i++)

// {

// s1=0;

// for(k=1;k<=r-1;k++)

// s1=s1+l[r][k]*u[k][i];

// u[r][i]=a[r][i]-s1;

// }

// for(i=r+1;i<=n;i++)

// {s2=0;

// for(k=1;k<=r-1;k++)

// s2=s2+l[i][k]*u[k][r];

// l[i][r]=(a[i][r]-s2)/u[r][r];

// }

// }

// printf(“array L:n”);/输出矩阵L/

// for(i=1;i<=n;i++)

// {

// for(j=1;j<=n;j++)

// printf(“%7.3f “,l[i][j]);

// printf(“n”);

// }

// printf(“array U:n”);/输出矩阵U/

// for(i=1;i<=n;i++)

// {

// for(j=1;j<=n;j++)

// printf(“%7.3f “,u[i][j]);

// printf(“n”);

// }

// solve(l,u,b,x,n);

// printf(“解为:n”);

// for(i=1;i<=n;i++)

// printf(“x%d=%fn”,i,x[i]);

//}

/第二种方法,只提供思路,部分printf未写/

void main(){

 

int i,j,k,m,n,q,r,t,y;

float
a[100][100],c[100][100],d[100][100],l[100][100],u[100][100];

scanf(“%d”,&n);

/输入矩阵A/

for (i = 1; i < n + 1; i++) {

printf(“输入矩阵第%d行元素:%dn”,i);

for (j = 1; j < n +1; j++) {

scanf(“%f”,&a[i][j]);

}

}

/判断A的各阶顺序主子式(矩阵A下标kk)是否全大于0,若不成立进行LU分解/

for (t = 1, k = d[1][1];t < n + 1;t++) {

if (d[1][1]==0) { //判断矩阵第一行是否为0,若为0则不分解

 

break;

 

}else{

for (i = t + 1; i < n + 1; i++) { //进行第t次行优先的所有元素的消元

 

m = d[i][t]/d[t][t]; //计算行乘数

 

for (j = t + 1; j < n; j++) {

 

d[q][j] = d[q][j] – m*d[t][j]; //计算每次不为0的元素的值

m = 0; //将m归零

 

}

 

n = d[t+1][t+1]; //取主元n

k *= n; //计算各阶的顺序主子式

 

}

}

}

/若可分解,进行LU分解,l为单位下三角矩阵,u为上三角矩阵/

for (r = 2; r < n + 1; r++) { //控制u的行数(L的列数)

 

for (j = r; j < n + 1; j++) { //控制u的第r行的j列变化

 

int x = 0; //初始化中间变量x

for (k = 1; k < r; k++) {

x += l[i][k] * u[k][r]; //求元素之前对应的行和列的元素和

l[i][r] = (c[i][r]-y)/u[r][r]; //计算矩阵l的第r列元素

}

}

}

//可以用两个for打印你想看到的l或u矩阵,在WordPress写代码是在太压抑了,下面就不写了,参考第一种

}

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图