C语言编程及上机题
更新时间:2024-01-31 15:13:01 阅读量: 教育文库 文档下载
C语言编程及上机题
1. 一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下,问第10次落
地时,共经过多少米?第10次反弹多高?请编程实现。
2. 试编程序,找出1至99之间的全部同构数。同构数是这样一组数:它出现在平方数的
右边。例如:5是25右边的数,25是625右边的数,5和25都是同构数。 3. 有一分数序列:
23581321,,,,,,??? 1235813
编写求这个数列前20项之和的程序。
4. 编写满足条件1+2+3+?+n≥500的最小n及和s的程序。
sin(x)?x?x33!?x55!?x77!?????(?1)nx2n?1(2n?1)!????5. 已知正弦值近似的多项式计算公式为:
输入x和ε,编写按上述公式计算sin(x)近似值且误差小于ε的程序。 设:x=1.57 ε=0.000001
6. 有一高楼,有阶梯若干级,每步跨2级,最后余1级;每步跨3级,最后余2级;每步
跨5级,最后余4级;每步跨6级,最后余5级;每步跨7级,正好到楼顶。计算该楼至少多少级。
7. 从键盘输入若干个整数(数据个数少于50个),其值在0至4的范围内,用-1作为输
入结束标志。统计每个整数的个数。试编程。
8. 求出1至599中能被3整除,且至少有一位数字为5的所有整数。如15,51,513等均
是满足条件的整数。要求每行输出六个数。
9. 用以下的递归公式求数列a0,a1,??,a19,递归公式为:
a0=0; a1=1; a2=1; ai = ai-3 +2ai-2 +ai-1(当i大于2时)。 10. 求满足条件abcd=(ab)2+(cd)2有所有四位数。
11. 生成一个数列的前100项。该数列的第一、第二项分别为2、3,以后每个奇数编号的
?e2??1??211414126????(?2?1n)???? (2?n()n?0,1,2,???)????????? ? ???? (n?1,2,3???)1!32!53n?!1)37!(2?n(2?n?1)项是前两项之和,偶数编号的项是前两项之差(前项减后项)。
12. 计算自然数e和π的值,e的值精确到小数点后6位。求e的近似值的计算公式:
求π/2的近似值的计算公式为: 取n=1000时的π值。
x?f(x2)?x2f(x1)x?1f(x2)?f(x1)13. 使用弦截法解下列方程的根:x3-5x2+16x-30=0。弦截法为:
1)设f(x)= x3-5x2+16x-30。
2)取两个不同的点x1和x2,且使f(x1)·f(x2)<0。
3)连接f(x1)和f(x2)得一弦线交X轴于x,则x点的坐标为: 求出x点的f(x)值。
4)若f(x)与f(x1)的符号相同,则根在(x,x2)区间内,将x作为新的x1;否则根在(x1,x)区间内,将x作为新的x2。
5)重复第3,4步,直到f(x)的绝对值小于0.0000001为上。此时将x作为该放程的近似根。
14. 用如下的迭代公式可以求的值,迭代公式为:
yn?1?23yn?x23yny?3x初始值y=x,精度要求为:| yn+1-yn|<=10-5,
依次求出当x=0.75,3.3,6.5,20.9时,对应的y值。
15. 编程题。任意输入10个整数,每一个整数的绝对值小于104,要求打印出每一个整数,
每一个整数的各位数字之和,以及这10个整数的累加和。 如输入为:476 1048 367?? 则输出为:476 17 1048 13 367 16 ??
16. 如果整数A的全部因子(包括1,但不包括A本身)之和等于B;且整数B的全部因
子(包括1,但不包括B本身)之和等于A,则将整数A和B称为亲密数。求3000以
x3
arcsinx?x?2?3?1?32?4?5x?51?3?52?4?6?7x?...?7(2n)!22n?(n!)?(2n?1)2x2n?1?...17. 18.
19.
20. 21. 22.
23.
24.
25. 26. 27.
内的全部亲密数。
arcsinx的级数展开式为:
求当x=0.5,n=10时,arcsin(x)的前11项的近似值。
mn
已知m和n均为小于15的正整数,设x=5,y=5,求x与y的最后三位数相同,且m+n之和为最小的m,n,x,y值。若无解,则输出“No solutions!”。
39
注:1)如5和5的值分别为125和1953125,它们的最后三位数相同。 2)用长整型数表示5的方幂。
求满足下列条件的三位数n,它除以11(整数相除)所得到的商等于n的各位数字的平方和,且其中至少有二位数字相同的数。如:131,它除以11的商为11,各位数字的平方和为11,又如550,也是满足条件的三位数。 找出所有满足下列条件的正整数对a、b:(1)a+b=99;(2)a
编程验证下列各题:设n是一个两位正整数,s1是n的各位数之和,s2是2*n的各位数字之和。若s1=s2,则n是9的倍数。输出所有满足这些条件的n、s1、s2。
雨水淋湿了算术书的一道题目,9个数字只能看清其中的4个,第一个数字虽然模糊不清,但可以看出不是1(即a不为1):[a*(b3+c)]2=8de9
其中a、b、c、d、e表示淋湿的数字,请编写程序求出这些数字。 首先将正整数:121、221、2198、1234、2111、0(“0”只作结束标记)存入整型数组中,然后在这些正整数中找出连续两个数字(或更多个数字)同为奇数字或同为偶数字的所有正整数。例如:221便是这样的一个数。
编程分别确定:什么进制下,891能被198整除;什么进制下,952能被259整除;什么进制下,561能被165整除。对上述每组数据,求出一个满足整除条件且大于9的最小进制基数d。将原来的一对数据、求出的进制数d以及原来一对数所对应的十进制数值作为一组输出,输出时每组占一行。
定义一个含有30个整型元素的数组,按顺序分别赋予从2开始的偶数;然后按顺序每五个数求出一个平均值,放在另一个数组中并输出。试编程。
通过赋初值按行顺序给一个2×3的二维数组赋予2、4、6、?等偶数,然后按列的顺序输出该数组。试编程。
通过循环按行顺序为一个5×5的二维数组赋1到25的自然数,然后输出该数组的左下半三角。试编程。
28. 数组a包括10个整数,把a中所有的后项除以前项之商取整后存入数组b,并按每行3
个元素的格式输出数组b。试编程。 29. 从键盘上输入一个字符,用折半查找法找出该字符在已排序的字符串a中的位置。若该
字符不在a中,则打印出**。试编程。
30. 从键盘上输入两个字符串a和b,要求不用库函数strcat把串b的前五个字符连接到串
a中;如果b的长度小于5,则把b的所有元素都连接到a中。试编程。 31. 从键盘输入一字符串a,并在a串中的最大元素后边插入字符串b(b[]=”ab”)。试编程。 32. 若有说明:int a[2][3]={{1,2,3},{4,5,6}};现要将a的行和列的元素互换后存到另一个二
维数组b中。试编程。
33. 编程实现,按如下递归公式,输出菲波那契数列的前20项的值。菲波那契数列的递归
定义如下:当n=0时,f0=0,当n=1时,f1=1,当n>1时,fn=fn-1+fn-2。 34. 编写一个函数,该函数能将字符数组中的字符顺序颠倒。由主函数输入五个不同的字符
串,每个字符串的长度大于7,调用上述函数分别颠倒各个字符串中字符的顺序,并输出结果。每行输出一个字符串。
35. 编程将一字符串做压缩处理。编程要求如下:(1)编写一个函数int compress(char s[ ]),
将s中连续出现的多个相同字符压缩为一个字符,统计被删除的字符个数。返回被删除的字符个数。(2)编写主函数main,从键盘上读入一行字符数据放入一个字符型数组中,调用compress函数对该字符数组中的字符做压缩处理,将压缩后的字符串输出。(3)用以下数据测试程序:@@@@@@ I wwilll successful &&&&&& and you too !!!!!###########
36. 编写一程序,将一字符串插入到另一字符串的指定位置。编程要求如下:(1)编写一个
函数char *insert_str(char *s1, char *s2, int n),将字符串s2插入到字符串s2中第n个字符(即数组下标为n-1的元素)开始的位置上,返回s1的首址;(2)编写主函数main,声明一个字符数组s存储由26个小写英文字符组成的字符串,从键盘读入若干组数据,每组有两个数据,第一个按整型读入,第二个按字符串读入。当输入的一组数据中的整型数为负数时,停止程序运行。每读入一组数据后,调用insert_str函数,按第1个数据的值将第2个数据(字符串)插入到字符串s中对应的位置上,每当在s中插入一个字符串后,将s字符串输出。(3)键盘输入两组测试数据为:10 9876和31共处 ExAmPLE。
37. 改错题(可调整语句顺序,增加少量变量说明或编译预处理命令,不准增减语句行。
以下改错题同此要求):从键盘上输入十个字符串,从中求出最长的一个字符串。 #include
{ int i, maxlen, len;
char inline[10][100], maxline[100]; for (i=0; i<10; i++){ gets(inline[i]);
printf(“%s\\n”, inline[i]); }
maxlen=0;
for(i=0; i<10; i++){ strlenth (inline[i],len);
if (len>maxlen) strcpy(maxline, inline[i]), maxlen=len; }
printf (“max string is: %s\\n maxlen=%d\\n”, maxline, maxlen); }
strlenth(char p, int len)
{ len= =0;
while (p[len]!=?\\0?) ++len; }
cos(x)?1?x22!?x44!?x66!?x88!?????(?1)nx2n(2n)!????38. 改错题:cos(x)的计算公式为:
下面的程序用来分别求出x=0.0,0.5,3.14159/4,1.5时的cos(x)的值。精度要求:当
2 n
通项x/(2n)!小于等于0.0000001为止。含有错误的源程序为: # include
{ int n; float f;
printf (“cos(0.0)=%f \\n”, cos1(0.0)); printf (“cos(0.5)=%f \\n”, cos1(0.5));
printf (“cos(%f)=%f \\n”, 3.14159/4, cos1(3.14159/4)); printf (“cos(1.5)=%f \\n”, cos1(1.5)); }
float cos1(float x) { int n; float s, term; term=1; s=0; n=1; while (term>=1e-7){ s+=term;
term=-x*x/n*(n+1); n+=2; } return s; }
39. 改错题:下面程序的功能为:对键盘输入的每个字母(不分大小写)出现的次数进行统
计。26种字母出现次数分别存放在数组的前26个元素中,最后一个元素中存放非字母字符出现的次数。含有错误的源程序如下: #include
for (i=0; i<27; i++) letter[i]=0;
while ((ch=getchar())!=EOF) if (ch>=?A?&&ch<=?z?) ++ letter[ch];
else if (ch>=?a?&&ch<=?z?) ++letter[ch]; else ++letter[27]; } main( )
{ int le[27], i; count(le); for(; i=0; i<26; i++)
{ printf(“%c=d”, i+‘a’, lc[i]); if ((i+1)/8= =0) printf(“\\n”); }
printf (“other=d”, le[27]); printf(“\\n”); }
40. 改错题。本程序的功能是任取一个十进制整数,将其倒过来后与原来的整数相加,得到
一个新的整数后重复上述步骤,则最终可得到一个回文数。 #define MAX 2147483647 #include
{ long int n,m; int count=0;
printf(\ scanf(\
printf(\ while(!nonre(m+n))
if(m+n>=MAX) { printf(\
else { printf(\ printf(\ }
long rev(long int a) { long int t;
for(t=0; a>0; a/=10) t=t+a; return t; }
nonre(long int *s)
{ if(rev(s)==s) return 1; else return 0;
}
41. 改错题:本程序中函数check检查给定的字符串s中左圆插号与右圆括号的个数是否匹
配,若两者个数匹配则函数返回值为0,若左括号数大于右括号数则返回两者差值的负值,否则返回两者差值的正值。 # include
{ char a[100]; int i;
a=”(((a+b)-c)*d)-e”; i=check(a);
printf(“a=%s i=%d\\n”, a, i ); }
int check(char *s) { int left, right; left=0, right=0; while (s=?\\0?)
{ if (*s= =?(?) left ++; if (*s= =?)?) right ++; s++; }
if (left>right) return(left-right); else if (left 42. 改错题:本程序中函数delete(s,i,L)的功能是从字符数组s中的指定位置i开始删 除指定的L个字符,结果仍放在字符数组s中。例如:字符数组中有“abcdefghijk”,调用delete(s,3,3)后,s中的字符串为“abfghijk”。 printf(\ putchar('\\n'); } 68. 编程题:程序功能是给定正整数n,求所有小于n的n的互质数。互质数是指两数没有 公约数;例如n=9,则2、4、5、7、8为9的互质数。编程要求: (1) 编写函数int bi_prime(int m,int n)判断m,n是否为互质数,是则返回1,否则返回0。 (2) 编写主函数main。从键盘分别输入15、49、78作为n的值,生成各自的互质数并写入文件myf2.out中。 69. 改错题:在m行n列的二维数组中找出最大值的元素,然后将该元素所在行与最后一行 交换,将该元素所在列与最后一列交换。 输入程序2分,程序完全正确2分,一般每改正一个错给4分。 #define M 3 #define N 4 void main() {int x,k,j,com,col,t; int a[M][N]={12,4,56,-34,0,-2,-45,3,9,-7,4,-65}; for(k=0;k { for(j=0;j putchar('\\n'); x=0; com=0;col=0; for(k=0;k for(j=k+1;j if(x { t=a[k][col];a[k][col]=a[k][N];a[k][N]=t;} for(k=0;k { t=a[com][k];a[com][k]=a[M][k];a[M][k]=t; } for(k=0;k { for(j=0;j putchar('\\n'); } 70. 编程题:程序功能是编程计算 s=s1+s2+s3+s4 的值,其中: s1=1+1/2+1/3+.. .. +1/m s2=1+1/22+1/32+.. .. +1/m2 s3=1+1/23+1/33+.. .. +1/m3 s4=1+1/24+1/34+.. .. +1/m4 (m=50) 编程要求: (1)编写函数double sum ( int n),计算当m取值为n时上述算式的值并且返回该值。 (2)编写主函数main,接受从键盘输入的整数50,调用函数sum计算当m 取值50时上述算式的值s,将s的值写入到文件myf2.out中。 71. 任取一个十进制正整数,将其倒过来与原来的整数相加,得到的新数若不是回文数,则 对新数再作以上操作,如此重复,最终可得到一个回文数。以下程序在一定范围内验证该命题。(回文数是指从左到右或从右到左读,数字字符对称相同的正整数,如12321、949)。输入程序2分,程序完全正确2分,一般每改正一个错给4分。 long reverse(long a) {long u; for(u=0;a>0;a/=10) u=u+a; return u; } same(long j) {if(j=reverse(j)) return 1; else return 0; } void main() {long m,n; int step=0; printf(\ scanf(\ while(!same(m=reverse(n)+n)) if(m+n<0) {printf(\ else {printf(\ printf(\} 72. 编程题:程序功能是生成并打印一个数列的前100项。该数列的第一、二项分别为2、 3,其后继项按下列规则生成:若前两项的乘积是一位数,则取该乘积为后继项;若前两项的乘积是二位数,则取该乘积的十位数字和个位数字依次作为数列的两个后继项。编程要求: (1)编写一个函数void numlist(int a[],int n),生成符合上述要求的一个数列的前n项存储在a数组中。 (2)编写主函数main, 调用numlist函数生成该数列的前100项并保存在一个一维数组中,按每行10个数的格式将该数列的前100项输出到文件myf2.out中。 73. 改错题:以下程序从键盘输入一个较大的整数n(n>=6),然后验证6到n之间的所有偶 数都可以分解为两个素数之和。含有错误的源程序为: 输入程序2分,程序完全正确2分,一般每改正一个错给4分。 #include \void main() {int k,j,n,limit; do printf(\ scanf(\ while(limit<6); for(n=6;n<=limit;n+=2) for(k=3;k<=n/2;k+=2) if(prime(k)) { j=n-k; if(prime(j)) { printf(\ continue; } } } int prime(int m) {int g,h; h=sqrt(m); for(g=2;g<=h;g++) if(m%g==0)return 0; else return 1; } 74. 编程题:程序功能是还原被压缩的数据。编程要求: (1)编写函数int restore(int a[],int b[]),a数组中保存待还原的压缩数据,将还原后的数据保存在b数组,将还原后全部数据的个数作为函数值返回。 (2) 编写主函数main,通过数组初始化将压缩数据放入一维数组x中,调用restore函数进行数据还原,将还原后的全部数据放入一维数组y中,将y数组中全部有效数据写入结果文件myf2.out中。 (3)测试用压缩数据:5 3 2 -5 0 1 2 3 4 5 1 5 0 -4 4 3 2 1 压缩数据格式说明: a[0]用于保存从a[1]开始存储的压缩数据段的个数; 从a[1]开始顺序保存若干压缩数据段。当数据段的第一个数为正整数n时,表示该数据段只有两个数,还原操作是取该段的第二个数重复出现n次;若数据段的第一个数为负整数n时,表示该数据段有|n|+1个数,从第二个数开始的|n|个数不是连续相同的,还原操作是取该数据段的第二个数开始的|n|个数作为还原结果。例如, 压缩数据:5 3 2 -5 0 1 2 3 4 5 1 5 0 -4 4 3 2 1 还原后的数据:2 2 2 0 1 2 3 4 1 1 1 1 1 0 0 0 0 0 4 3 2 1 75. 以下程序输入若干本书的名称和单价,按照单价从低到高输出书的名称和单价。 输入数据为:computer architecture 56.5 english 23.5 programming in c 48.5 输入程序2分,程序完全正确2分,一般每改正一个错给4分。 #include \#define NUM 3 struct book { char name[20];float price; }; void printbook(struct book *pbook) {printf(\void insertbook(struct term,struct *pbook) {int k; struct book *q,*pend=pbook; for(k=0;pend->name!=NULL;k++,pend++); for(;pbook if(pbook->price>term.price) break; for(q=pend-1;q>=pbook;q--) *(q+1)=*q; *q=term; } void main() {static struct book term,books[NUM]; int k; printf(\ for(k=0;k { printf(\ scanf(\ printf(\ scanf(\ insertbook(term,books); } printf(\ for(k=0;k 76. 编程题:程序功能是读入一串字符(不超过80个,以“#”结束)并做以下变换:将其 中第1个单词与第2个单词交换次序,第3个单词与第4个单词交换次序……依此类推。串中其他字符原样输出,且相对次序不变。把连续的字母串看成单词,而不管它是否有意义,假定字母均小写,各字母串左右都有一个空格。例如: 输入: 11 aa 222 bbb 33 cccc 4444 dd 55 eee 66 ff 77# 变换后: 11 bbb 222 aa 33 dd 4444 cccc 55 ff 66 eee 77 编程要求: (1)编写函数void swap(char a[],char b[],int n),将a数组中前n个字符按照上述程序功能的要求进行变换后保存在b数组中。 (2) 编写主函数,读入一串字符(不超过80个,以“#”结束)保存在一字符数组中,调用swap函数对读入的字符串进行变换后保存在另一字符数组中,将变换后的一串字符写到文件MYF2.OUT。 (3)测试数据: 11 aa 222 bbb 33 cccc 4444 dd 55 eee 66 ff 77# 77. 改错题:以下程序统计输入字符串中每行含有多少个定冠词“the”。假定仅使用小写英 文字母和空格,单词不跨行,每行不超过50个字符且以句点结束,空行输入‘#’表示全部结束。输入程序2分,程序完全正确2分,一般每改正一个错给4分。 #include \void main() { int k,j,n,line=0; char str[52],ch; str[0]=' ';ch=getchar();j=0; while(ch!='#') { n=0;line++; while(ch!='.') { n++;str[n]=ch; ch=getchar(); } str[n+1]=' ';k=0; while(k if(!('a'<=str[k-1]<='z')&&!('a'<=str[k+3]<='z') &&(str[k]=='t'&&str[k+1]=='h'&&str[k+2]=='e')) {j++;k+=4;} else k++; printf(\ getchar();ch=getchar(); } } 78. 编程题:程序功能是找出1999到2030之间所有由两个素数乘积构成的正整数。 编程要求: (1)编写函数int enumerate(int k1,int k2,int a[][3]),找出k1—k2之间所有由两个素数乘积构成的正整数。每找到的一个满足这一条件的数,便将该数和它的两个因子(素数)作为一组数据保存在a数组的一行中。函数返回在k1—k2之间满足这一条件的数的个数值。 (2)编写主函数,声明一个局部数组x[20][3],调用enumerate函数查找1999到2030之间所有满足上述条件的数及他们的因子并保存在x数组中,将x数组中全部有效数据写到文件MYF2.OUT中,每组数据占一行。形如:2005: 5 401
正在阅读:
C语言编程及上机题01-31
“个人与团队管理”复习资料01-12
党的政治建设面临的问题与对策12-12
融资融券影响的元胞自动机股票市场模拟研究08-10
如何进行奖励与惩罚10-21
2014版国家卫生城市技术评估量化考评表(V1.5)07-19
2022年东北师范大学历史文化学院834旅游学综合之《旅游学概论》04-22
授权委托书范文02-17
管理公司房务部手册06-17
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 语言编程
- 上机