C程序设计.docx
- 文档编号:23503157
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:20
- 大小:19.85KB
C程序设计.docx
《C程序设计.docx》由会员分享,可在线阅读,更多相关《C程序设计.docx(20页珍藏版)》请在冰豆网上搜索。
C程序设计
《C程序设计》课程期末上机考试
考试时间:
40分钟
考试方式:
从下面的20题中随机抽取一题,再附加一题,共需完成2道题。
分值分配:
第一题60分,第二题40分,共100分
考试时间:
第十八周
1.请编写函数longfun(longintx),功能是:
将长整型数x中每一位上为奇数的数依次取出,并逆序构成一个新数返回。
例如:
程序运行时输入123456789,输出:
b=97531。
#include
longfun(longintx)
{ longa,b=0;
a=x;
for(;a!
=0;)
{if((a%10)%2!
=0)
b=b*10+a%10;
a/=10;
}
returnb;
}
voidmain()
{longa,b;
printf("Pleaseinputalongintnum:
");
scanf("%ld",&a);
b=fun(a);
printf("b=%ld\n",b);
}
2.编写函数voidfun(char*s,char*t,char*p)将未在字符串s中出现、而在字符串t中出现的字符,形成一个新的字符串放在p中,p中字符按原字符串中字符顺序排列,但去掉重复字符。
例如:
当s为"12345",t为"8624677"时,p中的字符为:
"867";
当s为”goodluck”,t为”thankyouverymuch”时,输出:
”thanyverm”
#include
inttest(char*s,intn,charch)
{inti;
for(i=0;i if(s[i]==ch)return1; return0; } voidfun(char*s,char*t,char*p) { inti,j; for(i=j=0;t[i]! =0;i++) if(test(s,strlen(s),t[i])==0&&test(t,i,t[i])==0) {p[j]=t[i]; j++; } p[j]=0; } voidmain() {chars1[50],s2[50],s3[50]; gets(s1);gets(s2); fun(s1,s2,s3); puts(s3); } 3.编写函数intfun(int m),计算并返回满足表达式: 1+(1+2)+(1+2+3)+(1+2+3+4)+……+(1+2+3+……+n)<=m最大的n。 例如,当m=10000时,程序输出: n=38。 intfun(intm) {inta,i,s; for(a=1,s=0;s<=m;a++) for(i=1;i<=a;i++) s+=i; return(a-2); } voidmain() {intx; scanf("%d",&x); printf("n=%d\n",fun(x)); } 4.编写函数void fun(int *x,int n),它的功能是: 求出数组x中的最小数和次最小数,并把最小数和a[0]中的数对调、次最小数和a[1]中的数对调,其余的数保持不变。 如程序运行时若输入: 24611397058,则输出: 02611397458。 #defineN10 voidfun(int*x,intn) {inti,j,k,t; for(i=0;i<2;i++) {k=i; for(j=i+1;j if(*(x+k)>*(x+j)) k=j; if(k! =i) {t=*(x+i);*(x+i)=*(x+k);*(x+k)=t; } } main() {inta[N],i; for(i=0;i scanf("%d",a+i); fun(a,N); for(i=0;i printf("%d",a[i]); printf("\n"); } 5.编写函数longfun(inthigh,intn),功能是: 计算并返回high以内(不包含high)最大的n个素数之和。 若不足n个,则到最小素数2为止。 例如: 若high=100,n=10,则函数的返回值为: 732;若high=11,n=10,则函数返回: 17。 longsushu(m) {inti; for(i=2;i if(m%i==0) break; if(i>=m)return1; elsereturn0; } longfun(inthigh,intn) {inti,j=0; longs=0; if(high<=2)return0; for(i=high-1;i>1;i--) if(sushu(i)) {s+=i; j++; if(j>=n) returns; } returns; } voidmain() {intk,n; scanf("%d%d",&k,&n); printf("sum=%ld\n",fun(k,n)); } 6.请编写函数intfun(int*a,intn),它的功能是: 把形参a所指数组中的偶数按原顺序依次存放到a[0]、a[1]、a[2]、……中,把奇数从数组中删除,偶数个数通过函数值返回,以-1作为有效数据的结束标志。 例: 若输入: 123456789101112131415,输出: 2468101214n=7 intfun(int*a,intn) {inti,j,k=0; *(a+n)=-1; for(i=0;*(a+i)! =-1;i++) if(*(a+i)%2! =0) {for(j=i;*(a+j+1)! =-1;j++) *(a+j)=*(a+j+1); *(a+j)=-1; i--; k++; } return(n-k); } voidmain() {intx[15],i,n; for(i=0;i<15;i++) scanf("%d",x+i); n=fun(x,15); for(i=0;x[i]! =-1;i++) printf("%d",x[i]); printf("n=%d\n",n); } 7.给定程序中,函数fun的功能是: 有N×N矩阵,以主对角线为对称线,对称元素相加并将结果存放在左下三角元素中,右上三角元素置为0。 例如,若N=5,有下列矩阵: 1 2 3 4 5 计算结果为: 1 0 0 0 0 2 3 4 5 6 4 3 0 0 0 3 4 5 6 7 6 8 5 0 0 4 5 6 7 8 81012 7 0 5 6 7 8 9 101214 169 #defineN5 voidfun(inta[N][N]) {inti,j; for(i=0;i for(j=0;j if(j>i) {a[j][i]+=a[i][j]; a[i][j]=0; } } voidmain() {intx[N][N]={{1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7}, {4,5,6,7,8},{5,6,7,8,9}},i,j; fun(x); for(i=0;i {for(j=0;j printf("%3d",x[i][j]); printf("\n"); } } 8. 函数voidfun(intx,char*p)实现十进制整数x到二进制的转换。 转换后的二进制数以字符串的方式放置于p所指向的数组中。 如输入13,输出1101,输入-13,输出-1101。 #include"stdio.h" voidfun(intx,char*p) {char*q,t; if(x<0){*p++='-';x=-x;} if(x==0) {*p++='0';*p=0;return;} q=p; for(;x! =0;x/=2) *p++=x%2+'0'; *p=0; for(p--;q {t=*q;*q=*p;*p=t; } } main() {inta; charc[18]; scanf("%d",&a); fun(a,c); printf("%d'SBINARYIS: %s\n",a,c); } 9. 编写函数intfun(char(*ss)[N],intm,char*s),功能是: 形参ss指向一个m行N列的二维字符数组,每行存放一个字符串。 求出最大的字符串,复制到s所指的字符数组中,然后返回此最大字符串的长度。 #defineN30 intfun(char(*ss)[N],intm,char*s) {inti,max; max=0; for(i=1;i if(strcmp(ss[i],ss[max])>0)max=i; strcpy(s,ss[max]); returnstrlen(ss[max]); } main() {chara[8][N],b[N]; inti,len; for(i=0;i<8;i++) gets(a[i]); len=fun(a,8,b); printf("len=%d,str=%s\n",len,b); } 10.给定程序中,函数voidfun(char*s)的功能是: 在形参s所指字符串中的每个数字字符之后插入一个*号。 例如,形参s所指的字符串为: def35adh3kjsdf7。 执行结果为: def3*5*adh3*kjsdf7*。 #include #include voidfun(char*s) {inti,j; chara[100]; for(i=0,j=0;*(s+i)! ='\0';i++,j++) {a[j]=*(s+i); if(*(s+i)>='0'&&*(s+i)<='9') {*(a+j+1)='*'; j++; } } a[j]='\0'; strcpy(s,a); } voidmain() {charstr[80]; gets(str); fun(str); puts(str); } 11.给定程序中,函数voidfun(char*s)的功能是: 把形参s所指字符串中下标为偶数的字符右移到下一个偶数位置,最右边被移出字符串的字符绕回放到第一个偶数位置,下标为奇数的字符不动(注: 字符串的长度大于等于2)。 例: 若输入: abcd123,输出: 3badc21 voidfun(char*s) { inti,t,l; l=strlen(s); if(l%2==1) { t=s[l-1]; for(i=l-1;i>0;i-=2) s[i]=s[i-2]; s[0]=t; } else { t=s[l-2]; for(i=l-2;i>0;i-=2) s[i]=s[i-2]; s[0]=t; } } voidmain() {charstr[80]; gets(str); fun(str); puts(str); } 12.编写函数voidfun(char*s1,char*s2),功能是: 对形参s1所指字符串升序排序,并将排序后下标为偶数的字符取出,写入形参s2所指字符数组中,形成一个新串。 例如,下面程序若输入: TheCProgrammingLanguage,输出: □□LTaegghmnor。 (□表空格) voidfun(char*s1,char*s2) {inti,j,n; chart; for(i=0;*(s1+i)! ='\0';i++) {n=i; for(j=i;*(s1+j)! ='\0';j++) {if(*(s1+n)>*(s1+j))n=j;} t=*(s1+n);*(s+n)=*(s+i);*(s+i)=t; } for(i=0;*(s1+)! ='\0';i++) {if(i%2==0) {*s2=*(s1+i); s2++; } } *s2='\0'; } voidmain() {chara[80],b[80]; gets(a); fun(a,b); puts(b); } 13.函数voidfun(chars[])的功能是: 将s所指字符串中ASCII值为奇数的字符删除。 例如,若s所指字符串中的内容为: “ABCDEFG12345”,其中字符A的ASCII码值为奇数、…、字符1的ASCII码值也为奇数、…都应当删除,其它依此类推。 最后s中内容是: “BDF24”。 voidfun(chars[]) {inti,j; for(i=0;s[i]! =0;i++) {if(s[i]%2==1) {for(j=i;s[j]! =0;j++) s[j]=s[j+1]; i--; } } } voidmain() {chara[80]; gets(a); fun(a); puts(a); } 14.请编写一个函数intfun(longintx),它的功能是: 判断整数x是否是同构数。 若是同构数,函数返回1;否则返回0。 所谓“同构数”是指这样的数,它出现在它的平方数的右边。 例如: 输入整数5,5的平方数是25,5是25中右侧的数,所以5是同构数,输出"Yes"。 要求x的值不大于10000。 intfun(longintx) {longs; s=x*x; while(x! =0) {if(s%10! =x%10) return0; x/=10; s/=10; } return1; } voidmain() {intx; scanf("%d",&x); if(fun(x)==1) puts("Yse"); elseputs("No"); } 15.编写取子字符串函数voidfun(chars1[],chars2[],intm,intn),其作用是将字符数组s2中从第m个字符开始的共n个字符拷贝到数组s1中;若s2中剩余字符不足n个,则取到尾部。 程序运行时,当输入"abcd123"、4,3时应输出"d12";当我们输入"abcd123"、4,6时应输出"d123"。 注意,这里是将1作为起始计数。 #include voidfun(chars1[],chars2[],intm,intn) {inti,a,b; a=strlen(s2); b=(a a: m+n-1); for(i=m-1;i {*s1=*(s2+i);s1++;} *s1='\0'; } main() {staticchara[100],b[100]; ints,len; voidfun(chars1[],chars2[],intm,intn); puts("ENTERASTRING: "); gets(a); puts("ENTERSTARTINGPOSITIONANDLENGTH: "); scanf("%d,%d",&s,&len); fun(b,a,s,len); printf("THESRBSTINGIS: %s\n",b); } 16. 编写函数voidfun(char*str),将参数字符串中各单词首字母变大写,其余字母变小写。 输入输出在main中实现。 如输入"youHAVE10books,don'tyou? " 输出"YouHave10Books,Don'tYou? "。 单词以空格、逗号、句号分隔。 #include voidfun(char*str) {inti,j; for(i=0;str[i];i++) if(str[i]>='A'&&str[i]<='Z') str[i]+=32; if(str[0]>='a'&&str[0]<='z') str[0]-=32; for(i=0;str[i];i++) if(str[i]==''||str[i]==','||str[i]=='.') {if(str[i+1]>='a'&&str[i+1]<='z') str[i+1]-=32; } } main() {chara[100]; gets(a); fun(a); puts(a); } 17.n个整数,前面各数循环顺序后移m个位置,最后m个数变成最前面m个数。 写函数voidfun(int*p,intn,intm),实现上述功能。 在main()中输入与输出。 如下面程序输出 78910123456 。 注意,m可能大于n。 #include"stdio.h" voidfun(int*p,intn,intm) { inti,j,k,t; k=m%n; for(i=0;i { t=p[n-1]; for(j=n-2;j>=0;j--) p[j+1]=p[j]; p[0]=t; } } main() {voidfun(int*,int,int); intx[10]={1,2,3,4,5,6,7,8,9,10},i; fun(x,10,14); for(i=0;i<10;i++) printf("%d",x[i]); printf("\n"); } 18.编写函数voidfun(char*s1,char*s2),实现字符串s1与s2的交叉连接,连接后得到的新字符串放在s1中。 如输入abc #include #include voidfun(char*s1,char*s2) {inti,j,k; for(j=0,i=1;s2[j]! ='\0';) {for(k=strlen(s1);k>=i;k--) s1[k+1]=s1[k]; s1[i]=s2[j]; j++;i++; if(s1[i])i++; } } main() {chara[100],b[100]; voidfun(char*,char*); gets(a); gets(b); fun(a,b); puts(a); } 19.传说可以根据两个人的生日来计算其缘分.方法: 将两个人的生日各位相加,将得到的数再一次各位相加,直到其值为一个一位数,此数即代表两个人的缘分.例如,两个生日为: 19820523,19841111,则各位相加: 1+9+8+2+5+2+3+1+9+8+4+1+1+1+1得: 56;再5+6得11;再1+1得2,即为两人的缘分.编写计算缘分程序,两个生日由键盘输入. #include"stdio.h" intfun(longx,longy) { inti,s,t; for(i=0,s=0;i<8;i++) {s+=(x%10+y%10); x=x/10;y=y/10; } while(s>=10) {for(i=0,t=0;s;i++) {t+=s%10; s=s/10; } s=t; } returns; } main() {longx,y; intk; scanf("%ld%ld",&x,&y); k=fun(x,y); printf("yuanfenis%d",k); } 20.m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次存到数组p中,包括最后一个人的序号。 到最后只余1人,输出最后留下的是第几号(最初的序号,以1起始)及。 若m=6,则输出n=1 函数intfun(intn,int*p)实现上述功能,返回n个人中最后余的1人的起始序号,并将退出的序号顺序写入p指向的数组中。 #include #include #include intfun(intn ,int*p) {inti,*s,j,k,t; s=(int*)malloc(sizeof(int)*n); for(i=0;i s[i]=i+1; t=0; for(k=0,i=0,j=0;k {if(s[i]! =0) {j++; if(j==3) {p[t]=s[i]; t++; s[i]=0; j=0;k++; } } if(i==n-1)i=-1; } for(i=0;i if(s[i]! =0)break; p[t]=s[i]; returns[i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计