收藏 分销(赏)

程序设计与算法语言上机试题abc--.doc

上传人:丰**** 文档编号:3895481 上传时间:2024-07-23 格式:DOC 页数:79 大小:121.04KB 下载积分:16 金币
下载 相关 举报
程序设计与算法语言上机试题abc--.doc_第1页
第1页 / 共79页
程序设计与算法语言上机试题abc--.doc_第2页
第2页 / 共79页


点击查看更多>>
资源描述
1、10个人的成绩存放在score数组中,编写函数fun,求出平均分,并作为函数值返回,且输出不及格人数。 #include<stdio.h> float fun (int a[10]) { int i,aver,sum=0; for(i=0;i<10;i++) sum=sum+a[i]; aver=sum/10; return aver; } void main() { int i,j=0,a[10]={10,20,30,40,50,60,70,80,90,100}; float aver; for(i=0;i<10;i++) if(a[i]<60) j++; aver=fun (a); printf("10个人的成绩平均分为:%5.2f\n",aver); printf("\n"); printf("不及格人数:%d\n",j); } 2、 求出1到100之内能被7或者11整除,但不能同时被7和11整除的所有整数,并将他们放在指定的数组a中。 #include<stdio.h> void main() { int i,n,a[500]; n = fun(a); for(i = 0; i < n; i++) printf("%8d",a[i]); } int fun (int a[]) { int i = 7, j = 0; for(; i <= 100; i++) if ((i % 7 == 0 || i % 11 == 0)&&( !(i % 7== 0 && i % 11 == 0) ) ) a[j++] = i; return j ;} 3、求方程的解。 #include<stdio.h> #include<math.h> void main() { float a,b,c,d,x1,x2,m,n; printf("请输入方程的3个系数,a,b,c:"); scanf("%f,%f,%f",&a,&b,&c); printf("该方程\n"); if(fabs(a)<=1e-6) { if(fabs(b)<=1e-6) { if(fabs(c)<=1e-6) printf("有无穷多个解\n"); else printf("无解\n"); } else printf("有一个根:%8.4f\n",-c/b); } else { d=b*b-4*a*c; if(fabs(d)<=1e-6) printf("有两个相等的实根:%8.4f\n",-b/(2*a)); else if(d>1e-6) { x1=(-b+sqrt(d))/(2*a); x2=(-b-sqrt(d))/(2*a); printf("有两个不等的实根:%8.4f和%8.4f\n",x1,x2); } else { m=-b/(2*a); n=sqrt(-d)/(2*a); printf("有两个复根:\n"); printf("%8.4f+%8.4fi\n",m,n); printf("%8.4f-%8.4fi\n",m,n); } } } 4、给出一个百分制成绩,规定输出成绩等级A、B、C、D、E,90分以上为A,80~89分为B,70~79分为C,60~69分为D,60分以下为E。规定:当输入分数为负值,或大于100时,告知用户“输入数据错误,重新输入”。 #include<stdio.h> void main() { float x; char y; printf("输入学生成绩:x="); scanf("%f",&x); while(x>100||x<0) { printf("输入错误,请重新输入学生成绩:x="); scanf("%f",&x); } if(x>=90) y='A'; else if(x>=80) y='B'; else if(x>=70) y='C'; else if(x>=60) y='D'; else y='E'; printf("\n学生的等级为:y=%c\n",y); } 5、 求数组中最大元素在数组中的下标并存放在指针k所指的储存单元中。 # include <stdio.h> void fun(int *s, int t , int *k) { int i ,max; max=s[0]; for (i=0;i<t;i++) if (s[i]>max) { max=s[i]; *k=i; } } void main( ) { int a[10]={876,675,896,101,301,401,980,431,451,777}, k ; fun(a,10, &k); printf("最大值在a中的位置为:i=%d\n最大值为:%d\n", k, a[k]); } 6、编写函数fun,功能是:根据以下攻势计算s,计算结果作为函数值返回;n通过形参传入。S=1+1/(1+2)+1/(1+2+3)+……+1/(1+2+3+4+……+n)。 #include<stdio.h> float fun(int n) { int i; float s=1.0,t=1.0; for(i=2;i<=n;i++) { t=t+i; s=s+1/t; } return s; } void main() { float y; int n; printf("输入n的值:\n"); scanf("%d",&n); y=fun(n); printf("y=%f\n",y); } 7、定义了7×7的二维数组,并在主函数中自动赋值。编写函数 fun(int a[][7]),该函数的功能是:使数组左下半三角元素中的值所有置成0。 #include<stdio.h> int fun(int a[][7]) { int i,j; for(i=0;i<7;i++) for(j=0;j<7;j++) { if(i>j) a[i][j]=0; } } void main() { int a[7][7],i,j; for(i=0;i<7;i++) { for(j=0;j<7;j++) { a[i][j]=i+j+1; printf("%3d",a[i][j]); } printf("\n"); } fun(a); printf("输出解决后的数组a:\n"); for(i=0;i<7;i++) { for(j=0;j<7;j++) { printf("%3d",a[i][j]); } printf("\n"); } } 8、 编写一个函数void fun(int tt[5][6],int pp[6]),tt指向一个5行6列的二维函数组,求出二维函数组每列中最小元素,并依次放入pp所指定一维数组中。二维数组中的数已在主函数中初始化。 #include <stdio.h> void fun(int tt[5][6],int pp[6]) { int i,j,min; for(j = 0;j < 6;j++) { min = tt[0][j]; for(i= 0;i < 5;i++) { if(tt[i][j] < min) min = tt[i][j]; } pp[j] = min; } } void main() { int t[5][6]={{68,56,32,44,54,12},{14,56,24,47,88,58},{42,85,22,75,44,56},{45,12,3,5,78,45},{45,65,25,75,85,41}}; int p[6],i,j,k; printf("The riginal data is:\n"); for(i = 0;i < 5;i++) { for(j = 0;j < 6;j++) printf("%6d",t[i][j]); printf("\n"); } fun(t,p); printf("\n二维函数组每列中最小元素为:\n"); for(k = 0;k < 6;k++) printf("%4d",p[k]); printf("\n"); } 9、求出4行5列的二维数组周边元素之和。 #include<stdio.h> void main() { int a[4][5],i,j,sum=0,sum1=0,sum2=0; printf("请输入4*5矩阵数据:"); for(i=0;i<4;i++) for(j=0;j<5;j++) scanf("%d",&a[i][j]); { for(i=0;i<4;i++) sum1=sum1+a[i][0]+a[i][4]; } { for(j=0;j<5;j++) sum2=sum2+a[0][j]+a[3][j]; } sum=sum1+sum2-a[0][0]-a[0][4]-a[3][0]-a[3][4]; printf("矩阵周边元素之和为:%d\n",sum); } 10、 编写程序,把字符串中的内容逆置(不准使用多个字符数组)。 #include<stdio.h> void main() { char a[80]; char t; int i,n; printf("输入一行字符串:\n"); gets(a); n=strlen(a); for(i=0;i<=n/2;i++) { t=a[i]; a[i]=a[n-i-1]; a[n-i-1]=t; } printf("字符串中的内容逆置为:\n"); puts(a); } 11、 编写程序,从字符串中删除指定的字符,同一字母的大、小写按不同字符解决。并把删除好的字符以字符串的形式输出(不准使用多个字符数组)。 #include <stdio.h> #include <string.h> void main() { char ch,str[100]; int i,j=0; printf("输入字符串:\n"); gets(str); \\无上限读取字符 printf("输入要删除的字符:"); ch=getchar(); for(i=0;i<strlen(str);i++) if(str[i]!=ch) str[j++]=str[i]; str[j]='\0'; printf("\n字符串str为:%s\n",str); } #include<stdio.h> #include<string.h> void main() { char a[80]; char ch; int i,j; int n; printf("输入一串字符字符:\n"); gets(a); printf("输入要删除的字符:"); ch=getchar(); i=0; while(a[i]!='\0') { while(a[i]!='\0'&&a[i]!=ch) i++; n=strlen(a); for(j=i;j<n-1;j++) a[j]=a[j+1]; a[j]='\0'; } printf("删除后的字符串:"); puts(a); } 12、 编写程序,对长度为7个字符的字符串,除首尾字符外,将其余5个字符按ascii码降序排列。 #include <stdio.h> void main() { char c[8]; char i,j,temp; printf("长度为7个字符的c字符串:"); gets(c); for (i=1;i<=5;i++) { for (j=i+1;j<=5;j++) { if (c[i]<c[j]) { temp=c[i]; c[i]=c[j]; c[j]=temp; } } } printf("首尾字符外,将其余5个字符按ascii码降序排列为:%s\n",c); } 13、 编写函数fun,它的功能是:比较两个字符串的长度,(不得调用c语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。 #include <stdio.h> #include <string.h> char *fun(char *a,char *b) { int i,j; for(i=0;*(a+i);i++); for(j=0;*(b+j);j++); if(i>=j) return a; else return b; } void main() { char a[100],b[100],*c; printf("输入a字符串: "); gets(a); printf("输入b字符串 :"); gets(b); c=fun(a,b); printf("输出较长的c字符串:"); puts(c); } 14、给一个不多于5位的正整数,规定求出它是几位数,打印出每一位数字,并按逆序打印出各位数字。 #include<stdio.h> void main() { long int num; int a,b,c,d,f,place; printf("输入num的数值:"); scanf("%d",&num); if(num>9999) place=5; else if(num>999) place=4; else if(num>99) place=3; else if(num>9) place=2; else place=1; printf("place=%d\n",place); f=num/10000; d=num/1000%10; c=num/100%10; b=num/10%10; a=num%10; switch(place) { case 5: printf("%d,%d,%d,%d,%d",f,d,c,b,a); printf("\n反序数为:"); printf("%d,%d,%d,%d,%d\n",a,b,c,d,f); break; case 4: printf("%d,%d,%d,%d",d,c,b,a); printf("\n反序数为:"); printf("%d,%d,%d,%d\n",a,b,c,d); break; case 3: printf("%d,%d,%d",c,b,a); printf("\n反序数为:"); printf("%d,%d,%d\n",a,b,c); break; case 2: printf("%d,%d",b,a); printf("\n反序数为:"); printf("%d,%d\n",a,b); break; case 1: printf("%d",a); printf("\n反序数为:"); printf("%d\n",a); break; } } 15、 编写一个函数fun,它的功能是:求出一个6×8的整型二维数组中最大元素的值,并将此值返回调用函数。 数组在主函数中初始化,并最终输出结果。 #include<stdio.h> int fun(int a[6][8]) { int i,j,max=a[0][0]; for(i=0;i<6;i++) for(j=0;j<8;j++) if(max<a[i][j]) max=a[i][j]; return max; } void main() { int arr[6][8]={{1,8,7,4,6,1,2,3},{65,75,12,45,62,18,65,24},{32,1,5,4,6,7,8,9},{5,5,5,9,9,9,8,8,},{9,5,2,4,7,81,2,5},{3,2,1,4,5,6,9,8}}; int i,j,max; printf("array a:\n"); for(i=0;i<6;i++) { for(j=0;j<8;j++) { printf("%4d",arr[i][j]); } printf("\n"); } max=fun(arr); printf("max=%d\n",max); } 16、将字符数组s中的字符串,除了下标为偶数、同时ascii值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在新的字符数组t中。 #include <stdio.h> #include <string.h> void main() { char s[100], t[100]; int i,j=0,n; printf("\n输入字符串 S:"); gets(s);//scanf("%s", s); n=strlen(s); for(i=0;i<n;i++) if(i%2==0&&s[i]%2==0) { t[j]=s[i]; j++; } t[j]='\0'; printf("\nThe result is : %s\n", t); } #include <stdio.h> #include <string.h> void fun(char *s,char t[]) { int i,j=0,n; n=strlen(s); for(i=0;i<n;i++) if(i%2==0&&s[i]%2==0) { t[j]=s[i]; j++; } t[j]='\0'; } void main() { char s[100], t[100]; printf("\nPlease enter string S:"); gets(s);//scanf("%s", s); fun(s, t); printf("\nThe result is : %s\n", t); } 17、 假定输入的字符串中只包含字母和*号。则使字符串中的*号不得多于3个;若多于3个,则删除多于的*号;若少于或等于3个,则什么也不做。 #include<stdio.h> #include<string.h> void main() { char str[50],c[50],b; int i,j,n,a[50]={0},k,l; gets(str); n=strlen(str); for(l=0,j=0,i=0;i<n;i++) { if(str[i]=='*') { l++; if(l<=3) { a[j]=i; j++; } } else { a[j]=i; j++; } } for(i=0;i<j;i++) { k=a[i]; b=str[k]; str[i]=b; } for(i=j;i<n;i++) str[i]='\0'; puts(str); } 18、编程计算1!+2!+3!+……n!的值,其中,n值由键盘输入。 #include<stdio.h> void main() { int n; int i=1,t=1,sum=0; printf("输入n的数值:"); scanf("%d",&n); do { t=t*i; sum=sum+t; i++; } while(i<=n); printf("sum=%d\n",sum); } 19、 编写程序,删除字符串中的所有空格。 #include <stdio.h> #include <string.h> void main() { char str[100]; int i,j=0; printf("输入字符串:\n"); gets(str); for(i=0;i<strlen(str);i++) if(str[i]!=' ') str[j++]=str[i]; str[j]='\0'; printf("\n新字符串str为:%s\n",str); } 20、 求出字符数组ss中存储的字符串中指定字符的个数。 #include<stdio.h> void main() { int fun(char a[],char ch); char a[100],ch; printf("\nPlease enter a string:"); gets(a); printf("\nPlease enter a char:"); ch=getchar(); printf("The number is:%d\n",fun(a,ch)); } int fun(char a[],char ch) { int i,j=0; for(i=0;a[i]!='\0';i++) if(a[i]==ch) j++; return j; } #include<stdio.h> void main() { char a[100],ch; int i,j=0; printf("输入字符串:"); gets(a); printf("\n"); printf("输入要查找的字符:"); ch=getchar(); for(i=0;a[i]!='\0';i++) if(a[i]==ch) j++; printf("\n"); printf("字符串a中指定字符的个数:%d\n",j); } 21、输入一行字符,分别记录出其中的大小写字母、空格、数字和其他字符的个数。 #include<stdio.h> void main() { int i=0,j=0,k=0,l=0; char c; printf("输入一行字符:\n"); while((c=getchar())!='\n') { if((c>='A'&&c<='Z')||(c>='a'&&c<='z')) i++; else if(c>='0'&&c<='9') j++; else if(c==' ') k++; else l++; } printf("大小写字母数:i=%3d\n数字数:j=%3d\n空格数:k=%3d\n其他符号数:l=%3d\n",i,j,k,l); } 22、 将5行6列的二维数组中的数据,按列的顺序依次放到一个一维数组中。 #include <stdio.h> void main() { int a[5][6]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20, 1,2,3,4,5,6,7,8,9,10}; int b[30]; int i,j,k=0; for (j=0;j<6;j++) { for(i=0;i<5;i++) { b[k++]=a[i][j]; } } printf("二维数组:\n"); for (i = 0; i < 5; i++) { for(j=0;j<6;j++) { printf("%3d",a[i][j]); } printf("\n"); } printf("\n"); printf("一维数组:\n"); for (i= 0;i<k;i++) { printf(" %3d",b[i]); } printf("\n"); } #include <stdio.h> void fun( int (*s)[4], int *b) { int i,j,k=0; for(j=0;j<4;j++) for(i=0;i<3;i++) { b[k]=*(*(s+i)+j); k++; } b[k]= '\0'; } main() { int a[30],w[3][4]={{1,2,3,4},{4,5,6,7},{6,7,8,9}}; int i,j; printf("输出数组w:\n"); for(i=0; i<3; i++) { for(j=0;j<4; j++) printf("%3d",w[i][j]); printf("\n"); } fun(w,a); printf("按列的顺序依次放到一个一维数组b:\n"); for(i=0;i<12;i++) printf("%3d",a[i]); printf("\n\n"); } 23、求两个2×3和3×2的矩阵之积,并把结果显示出来。 #include<stdio.h> void main() { int a[2][3],b[3][2],c[2][2]={0},i,j,x; printf("输入一个2行3列的矩阵a:\n"); for(i=0;i<2;i++) { for(j=0;j<3;j++) { scanf("%d",&a[i][j]); printf("%5d",a[i][j]); } printf("\n"); } printf("输入一个3行2列的矩阵b:\n"); for(i=0;i<3;i++) { for(j=0;j<2;j++) { scanf("%d",&b[i][j]); printf("%5d",b[i][j]); } printf("\n"); } printf("a*b=:\n"); for(i=0;i<2;i++) { for(j=0;j<2;j++) { for(x=0;x<3;x++) c[i][j]+=a[i][x]*b[x][j]; printf("%5d",c[i][j]); } printf("\n"); } } 24、 定义了一个6×6的二维数组,并进行初始化。将数组右上半三角元素中的值乘以10。 #include<stdio.h> void fun(int a[][6]); void main() { int i,j; int a[6][6]; printf("array a:\n"); for(i=0;i<6;i++) { for(j=0;j<6;j++) { a[i][j]=i+j+1; printf("%3d",a[i][j]); }printf("\n"); } fun(a); printf("通过解决后的数组元素array a:\n"); for(i=0;i<6;i++) { for(j=0;j<6;j++) { printf("%5d",a[i][j]); } printf("\n"); } } void fun(int a[][6]) { int i,j; for(i=0;i<6;i++) for(j=0;j<6;j++) { if(i<j) a[i][j]=10*a[i][j]; } } #include<stdio.h> void main() { int i,j; int a[6][6]; printf("array a:\n"); for(i=0;i<6;i++) { for(j=0;j<6;j++) { a[i][j]=i+j+1; printf("%3d",a[i][j]); } printf("\n"); } printf("通过解决后的数组元素array a:\n"); for(i=0;i<6;i++) { for(j=0;j<6;j++) { if(i<j) a[i][j]=10*a[i][j]; printf("%4d",a[i][j]); } printf("\n"); } } 25、编写程序,实现矩阵(5行6列)的转置(即行列互换)。 #include<stdio.h> void main() { int i,j; int a[5][6]={{4,5,7,8,1,6},{8,4,6,5,1,5},{7,8,9,4,5,6},{1,2,3,4,5,6},{1,2,3,6,5,2}}; int b[6][5]; printf("array a:\n"); for(i=0;i<5;i++) { for(j=0;j<6;j++) { printf("%3d",a[i][j]); b[j][i]=a[i][j]; } printf("\n"); }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服