c语言作业资料

更新时间:2024-01-12 01:03:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

选择作业:

1、输入两个运算量和一个运算符,完成加、减、乘、除、取余运算,输出运算结果。 #include\ main( ) {

int x,y,z; char ch;

printf(\ch=getchar();

printf(\scanf(\switch(ch) {

case '+':z=x+y;printf(\ case '-':z=x-y;printf(\,z);break; case '*':z=x*y;printf(\,z);break; case '/': { if (y==0)

printf(\ else {z=x/y; printf(\ case '%': {if (y==0)

printf(\

else {z=x%y; printf(\

default:printf(\ } } 2.

用公式f=p*w*s*(1-d)计算运输费。要求运费和路程从

# include void main( ) {float f,p,w,s,d; int c;

printf(\printf(\printf(\if(s>=3000) c=12; else c=s/250; switch( c){

case 0: d=0;break; case 1: d=0.02;break; case 2:

case 3: d=0.05;break;

case 4: case 5: case 6: case 7: d=0.08;break; case 8: case 9: case 10: case 11: d=0.10;break; case 12: d=0.15; break; } f=p*w*s*(1-d); printf(\}

3.区分键盘上的字母、数字、空格和回车字符。 # include void main( )

{ char c; printf(\ c = getchar(); if(c==' ' || c=='\\n')

printf(\ else if(c>='0' && c <= '9')

printf(\

else if(c>='a' && c <= 'z' ) printf(\大写 letter.\\n\ else if(c>='A' && c <= 'Z')

printf(\小写 letter.\\n\ else

printf(\}

实验三

一、编程,输入任意三个数n1,n2,n3,求其中最大的一个数。 输入输出示例: input n1,n2,n3: 2 10.5 max=10.50 源程序: #include void main( )

{float n1,n2,n3,max;

printf(\scanf(\max=n1;

if(max

printf(\}

运行结果:

please input n1,n2,n3:9 10 3

8

the max is:10.0

Press any key to continue

二、编程,输入x,计算并输出下列分段函数f(x)的值(保留2位小数)。 x x<1 y= 2x-1 1<=x<10 3x-1 1 x>=10

输入输出示例: input x: -2.5 f(-2.500000)=-2.5 源程序: #include void main()

{float x,y;

printf(\scanf(\if(x<1) y=x;

else if(x>=1&&x<10) y=2*x-1; else y=3*x-1;

printf(\}

运行结果; 第一次运行: please input x:0.5 f(0.5)=0.5

Press any key to continue 第二次运行; please input x:8

f(8.0)=15.0

Press any key to continue 第三次运行: please input x:10 f(10.0)=29.0

Press any key to continue

三、编程,把百分制成绩转换成5级记分制,要求用switch语句。 90分以上(包括90): A 80至90分(包括80):B 70至80分(包括70):C 60至70分(包括60):D 60分以下:E 输入输出示例: input Score: 86 86的等级为B 源程序: #include void main() {float score; int y;

printf(\scanf(\y=(int)(score/10); switch(y) {case 0: case 1: case 2: case 3: case 4: case 5:

printf(\的等级为E\\n\,score); break; case 6:

printf(\的等级为D\\n\,score); break; case 7:

printf(\的等级为C\\n\,score); break; case 8:

printf(\的等级为B\\n\,score); break; case 9: case 10:

printf(\的等级为A\\n\,score); break;} }

第一次运行结果: please input score:100 A

Press any key to continue 第二次运行结果: please input score:86 86.0的等级为B Press any key to continue 第三次运行结果: please input score:50 50的等级为E

Press any key to continue

四、编程,输入2005年的任一个月,输出这个月的天数,要求使用switch语句。 输入输出示例: Input month of 2005: 10 2005年10月有31天 源程序:

#include

void main( ) {int month;

printf(\scanf(\switch(month)

{case 1:case 3:case 5:case 7:

case 8:case 10:case 12: printf(\年%d月有31天\\n\case 2:

printf(\年%d月有28天\\n\case 4:case 6:case 9:case 11:

printf(\年%d月有30天\\n\default: }

printf(\

}

运行结果:

please input a month;1 2005年1月有31天 Press any key to continue

五、改错,对2个整数进行乘、除和求余运算。 源程序(有错误的程序) #include void main() { char sign; int x,y;

prnitf(“输入x 运算符 y:”);

scanf(“%d%c%d”,&x,&sign,&y); if(sign==’*’)

printf(“%d * %d = %d\\n”,x,y,x*y); else if(sign==’/’)

printf(“%d / %d = %d\\n”,x,y,x/y); else if(sign==’%’)

printf(“%d %% %d = %d\\n”,x,y,x%y); else

printf(“运算符输入错误”); }

实验四:

1.调试示例:输入2个正整数m,n,输出它们的最小公倍数和最大公约数。 修改后的程序:#include void main() { int m,n,j,k;

printf(\:\\n\

while(scanf(\ || n<0); j=m;

while(j%n!=0) j=j+m;

k=(m*n)/j;

printf(\最小公倍数是:%d\\n最大公约数是:%d\\n\}

运行结果: input m n:3 6 最小公倍数是:6

最大公约数是:3

2.编程,输入一批整数,先求出其中的偶数和及奇数和,然后输出偶数和与奇数和的差. 输入输出示例:

输入一批整数:10 11 20 33 Ctrl+Z sub=-14 源程序: #include void main() {

int x,sum1=0,sum2=0,sub=0;

printf(\请输入一批整数:\\n\ while(scanf(\ { if (x%2==0) sum1+=x; else

sum2+=x;

sub=sum1-sum2;

}

printf(\}

运行结果为:

请输入一批整数: 1 2 3 4 Ctrl+Z sum1=6 sum2=4 sub=2

3.编程,输入1个正实数eps,计算并输出下式的值,直到最后一项的绝对值小于eps 源程序如下; #include void main()

{ float f=0,eps,t=1.0; int i=1,sign=1;

printf(\请输入正实数eps的值:\scanf(\输入一个正实数%f\while(abs(t)>eps) {

t=1.0/i*sign; f+=t; sign=-sign; i+=4;

}

printf(\}

运行结果为:

请输入正实数eps的值:0.000001 f=0.878576

4 编程,输入一个整数,求它的各位数字之和及位数。例如123的各位数字之和是6,位数是3.

源程序如下: #include void main() {

int i=0,n,sum=0;

scanf(\ if(n<0) n=-n;

while (n>0) {

sum+=n; n=n/10; i++; }

printf(\位数=%d,各位数之和=%d\\n\

}

运行结果: 134

位数=3;各位数之和=8

5、改错,输入2个整数,分别将其逆向输出。 输入输出示例:

修改后的程序:#include

int fun(int n) { int m,y; y=0;

if(n>0) m=n; else m=-n; while (m>0) { y=y*10+m; m=m/10; }

if(n>=0) return y; else return -y; }

void main()

{ int n,m;

scanf(\%d\

printf(\的逆向是%d\\t\ printf(\的逆向是%d\\t\}

运行结果: 234 -234

234的逆向是432 -234的逆向是-432

6调试示例,输入正整数的个数n,再输入n个正整数,判断它们是否为素数。素数就是只能被1和自身整除的正整数,1不是素数,2是素数 修改后的程序: #include #include void main() { int i,j,k,m,n;

printf(\输入正整数的个数n:\ scanf(\

printf(\输入%d个正整数\\n\ k=n;

for(j=0;j

if(i>n)

printf(\是一个素数!\\n\ else

printf(\不是一个素数!\\n\ } }

运行结果:

输入正整数的个数n:3 输入3个正整数:2 5 9 2不是一个素数; 5是一个素数; 9不是一个素数;

7.编程,输出101-115之间不能被3整除的数,每行输出5个。要求使用continue语句。 源程序: #include void main() {

int n,count=0;

for(n=101;n<=115;n++)

if(n%3==0) continue; else

{ printf(\ \ count++; if(count%5==0)

printf(\ } }

运行结果:

101 103 104 106 107 109 110 112 113 115

8.编程,猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早上将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半多一个。到第10天早上想再吃的时候,见只剩下一个桃子了。求第1天共摘了多少桃子 源程序: #include void main()

{ int day,total,sum=1; for(day=1;day<=9;day++) {

total=(sum+1)*2; sum=total; }

printf(\}

运行结果:1534 方法二

#include void main() {

int day,x; day=9; x=1; while(day>0) {x=(x+1)*2; day--; }

printf(\ }

9.在100-1500内找出所有的亲密数对,并输出每对亲密数对。 输入输出示例:

(220,284)(284,220)(1184,1210)(1210,1184) 源程序: # include int yun(int x); void main() { int a,b;

for (a=100;a<=1500;a++)

{

b=yun(a);

if (b>=100&&b<=1500) {

if ((yun(b)==a)&&(a!=b)) {printf(\ }

} }

int yun(int x) { int i,sum=0;

for(i=1;i

运行结果: ( 220 284) ( 284 220)

( 1184 1210) ( 1210 1184)

Press any key to continue

函数作业:

4.4,写一个将整数转换成字符串的函数。 源程序: #include void main() {int i=0,j,x; char c[10],temp; scanf(\while(x!=0) {c[i]=x+'0'; x=x/10; i++;} c[i]='\\0';

for(j=0;j<=i/2;j++)

{temp=c[j];c[j]=c[i-j-1];c[i-j-1]=temp;} for(j=0;j

运行结果:

123

1 2 3

Press any key to continue

4.5写出计算Ackermann函数Ack(m,n)的递归计算函数,对于m>=0,n>=0, Ack(m,n)定义为 Ack(0,n)=n+1

Ack(m,0)= Ack(m-1,1)

Ack(m,n)= Ack(m-1,Ack(m,n-1)), m>0, n>0 源程序: #include int ack(int m,int n) {

if(m==0)

return (n+1); else if(n==0)

return ack(m-1,1); else

return ack(m-1,ack(m,n-1)); }

void main() {int m,n;

printf(\scanf(\%d\

printf(\

4.6分别写出Hermite多项式Hn(x)之值的递推和递归函数,Hn(x)定义如下: H0(x)=1 H1(x)=2*x;

Hn(x)=2*x* Hn-1(x)-2*(n-1) Hn-2(x), x>1 源程序: #include int hermite(int n,int x) {

if(n==0) return 1; if(n==1) return (2*x);

if(x>1)

return (2*x*hermite(n-1,x)-2*(n-1)*hermite(n-2,x)); }

void main()

{int n,x;

printf(\scanf(\%d\

printf(\

运行结果:

input n,x:5 5

hermite(5,5)=80600

Press any key to continue

实验五:

1.某数列为K(n)的定义为:求该数列的第六项k(6)。 k(n)=1 n=1 k(n-1)×2 n为偶数 k(n-1)×3 n为奇数 源程序: #include float k(int n) { int m; if(n==1) m=1;

else if(n%2==0) m=k(n-1)*2; else m=k(n-1)*3; return (m); }

void main( ) {int i;

int j;

printf(\scanf(\

if(i<=0)printf(\else

{j=k(i); printf(\}

2. 写出判断素数的函数,在主函数中输入一序列整数(ctrl+z结束),输出是否是素数的信息。 源程序: #include #include int p(int n); void main() {int n,x,t=0;

while(scanf(\{x=p(n);

if(x==1) {printf(\if(t==0) printf(\} }

int p(int n) {

int i,k; k=sqrt(n);

for(i=2;i<=k;i++) if(n%i==0) return 0; return 1; }

3. 写两个函数,求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。 源程序:

#include int gcd(int n, int m) { int r,t;

if(m

r=m%n;

while(r!=0) {m=n; n=r; r=m%n; } return n;

}

}

int bei( int m,int n ) {

return m * n/ gcd( m, n) ; }

void main() {

int a,b;

printf(\输入两个数\\n\scanf(\

int c=gcd(a,b); int d=bei(a,b);

printf(\最大公约数为:%d\\t\\n最小公倍数为:%d\\n\

}

4.输出Fibonacci序列前20个数,用函数来实现. f(n)=f(n-1)+f(n-2) 当 n>2 f(2)=f(1)=1 当 n=1或n=2 源程序: #include

int f(int n) { int m;

if(n==1||n==2) m=1; else m=f(n-2)+f(n-1); return m;

}

void main( ) {int i; int n;

printf(\scanf(\

if(n<=0) printf(\else

{for (i=1;i<=n;i++) printf(\} }

数组实验:

1编程:输入一个正整数n(0 void main() {

int i,j,n,x,a[10],t;

printf(\输入数据的个数n:\ scanf(\

printf(\输入%d个整数:\ for(i=0;i

scanf(\ printf(\输入要插入的整数:\ scanf(\ for(i=0;i

{ if(x>a[i]) continue; j=n-1; while(j>=i) {

a[j+1]=a[j]; j--; } a[i]=x; break; }

if(i==n) a[n]=x; for(i=0;i

printf(\putchar('\\n'); }

2.编程,输入1个正整数n(1 void main()

{

int i,n,index,temp,a[10],min,max; printf(\请输入整数个数n(n<=10):\ scanf(\

printf(\请输入%d个整数:\\n\ for(i=0;i

scanf(\

min=max=a[0]; for(i=0;i

if(a[i]

temp =a[0];a[0]=a[index];a[index]=temp;

for(i=1;i

{if(a[i]>max)

{max=a[i];index=i;}}temp=a[n-1];a[n-1]=a[index];a[index]=temp; printf(\交换后的%个整数为:\ for(i=0;i

printf(\ }

运行结果:

请输入整数个数n(n<=10):5 请输入5个整数:

2 1 5 10 9

交换后的个整数为:1 2 5 9 10 Press any key to continue 3.编程,输入1个正整数n(1

方法一:选择排序法 源程序: #include #include void main()

{int i,index,temp,n,j,a[10];

printf(\scanf(\

printf(\for(i=0;i

for(j=i+1;j<=n-1;j++)

if(abs(a[j])

temp=a[i];a[i]=a[index];a[index]=temp;} printf(\for(i=0;i

方法二:冒泡法 源程序: #include

#include

void main()

{int i,temp,n,j,a[10];

printf(\scanf(\

printf(\for(i=0;i

for(i=0;i<=n-j-2;i++)

if(abs(a[i])>abs(a[i+1])) {temp=a[i];a[i]=a[i+1];a[i+1]=temp;} }

printf(\for(i=0;i

运行结果:

Input a number please: 10

Input 10 numbers:-11 2 8 5 -3 -16 9 7 6 10

exchanged 10 numbers: 2 -3 5 6 7 8 9 10 -11 -16 Press any key to continue

4.编程,平面上有n个点,求所有各点之间的最长距离。要求定义和调用函数计算距离 源程序: #include #include

float fun(float x0,float x1,float y0,float y1) {float y;

y=sqrt(pow((x0-x1),2)+pow((y0-y1),2)); return y;} void main() {float x[5],y[5]; int i,j;

float max=0.0,t=0.0;

printf(\printf(\横坐标:\for(i=0;i<5;i++) scanf(\printf(\纵坐标:\for(i=0;i<5;i++) scanf(\for(i=0;i<4;i++) {for(j=i;j<4;j++)

{t=fun(x[i],x[j+1],y[i],y[j+1]);

if(max

printf(\}

输入点数:5 输入5个点的坐标: 1 2.5 3.2 3.7 6.5 2.3 5.1 0.6 3.6 1.2 最长距离是5.50

方法二: #include

#include void main( )

{ float a[20][2],b[20][20],x,y; int n,i,j,row,cel;

printf(\输入点数:\ printf(\输入%d点的坐标:\ for (i=0;i

scanf(\ printf(\

for (i=0;i

printf(\ for (i=0;i

printf(\ printf(\

row=0;cel=0; for (i=0;i<5;i++)

for (j=0;j<5;j++)

if(b[i][j]>b[row][cel]) {row=i;cel=j;}

printf(\第%d点到第%d点距离最大是%.2f\\n\

}

5.编程,输入一个n行m列(n<=4,m<=4)的数组,先以n行m列的格式输出该数组,然后找出该数组中值最小的元素,输出该元素及其行下标和列下标。 程序如下: #include

void main()

{int n,m,i,j,a[4][4],min,max,min_row,min_col,max_row,max_col; printf(\输入行数\scanf(\printf(\输入列数\scanf(\for(i=0;i<=n-1;i++) {for(j=0;j<=m-1;j++) scanf(\for(i=0;i<=n-1;i++) {for(j=0;j<=m-1;j++) printf(\printf(\min_row=min_col=0; min=a[0][0];

for(i=0;i<=n-1;i++) for(j=0;j<=m-1;j++) if(a[i][j]

{min=a[i][j];

min_row=i; min_col=j;} max=a[0][0];

for(i=0;i<=n-1;i++) for(j=0;j<=m-1;j++) {if(a[i][j]>max) max=a[i][j];

max_row=i; max_col=j;}

printf(\最大值是:a[%d][%d]=%d,最小值是:a[%d][ %d]=%d\\n\,max_row,max_col,max,min_row,min_col,min);} 运行结果 输入行数3 输入列数2 1 2 3 4 5 6 1 2 3 4

5 6

最大值是:a[2][1]=6,最小值是:a[0][ 0]=1 Press any key to continue

6.编程输出以下的杨辉三角形(输出前10行) 源程序: #include void main()

{int i,j,a[10][10]; for(i=0;i<10;i++) {a[i][0]=1; a[i][i]=1;}

for(i=2;i<10;i++) for(j=1;j

a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=0;i<10;i++) {for(j=0;j<=i;j++) printf(\printf(\}

运行结果: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1

1 5 10 10 5 1

1 6 15 20 15 6 1

1

7 21 35 35 21 7 1

1 8 28 56 70 56 28 8 1 9 36 84 126 126 84 36 Press any key to continue

1 9 1 指针作业:

1比较n(n<10)个字符串排序输出 源程序:

#include #include

void sort(char array[][20],int n); void main() {char str[10][20]; int i,j,k,n;

printf(\scanf(\

printf(\for(i=0;i<=n;i++) gets(str[i]); sort(str,n);

for(i=0;i<=n;i++)

puts(str[i]);}

void sort(char array[][20],int n) {char temp[20]; int i,j,k;

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

{k=i;

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

if(strcmp(array[k],array[j])>0) k=j;

if(k!=i)

{strcpy(temp,array[i]); strcpy(array[i],array[k]); strcpy(array[k],temp);} }

}

运行结果: input n(n<=10):5 input 5 string: girl boy student teacher docter boy docter girl student

teacher

Press any key to continue

方法二: 源程序: #include #include #define N 5 void main()

{char *str[N]={\int i,j,k; char *temp; for(i=0;i

for(j=i+1;j0) k=j;

temp=str[i];str[i]=str[k];str[k]=temp;} for(i=0;i

printf(\}

运行结果: boy doctor girl student

teacher

Press any key to continue 2 用函数实现对变量的交换。 源程序; #include void swap(int *p1,int *p2) {int temp;

temp=*p1;*p1=*p2;*p2=temp;} void main() {int a=2,b=5; swap(&a,&b);

printf(\运行结果;

5,2Press any key to continue

3,输入n个学生姓名,数学成绩,英语成绩,并按这两门成绩的平均分从小到大输出。 源程序:

#include

struct student{char name[5];float math,eng;float aver;}; void main()

{struct student stu[5],temp;

int i,sub,k; float aver=0; for(i=0;i<5;i++)

{scanf(\stu[i].aver=(stu[i].math+stu[i].eng)/2.0;} for(i=0;i<4;i++) {sub=i;

for(k=i+1;k<5;k++) if(stu[k].aver

{printf(\printf(\运行结果; 输入: zs 50 90 ls 60 60 wr 80 80 zh 70 50 qr 65 65 输出: ls60.0 60.0 zh70.0 50.0 qr65.0 65.0 zs50.0 90.0

wr80.0 80.0

Press any key to continue

本文来源:https://www.bwwdw.com/article/twno.html

Top