c语言常见习题.docx
- 文档编号:29179625
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:12
- 大小:17.63KB
c语言常见习题.docx
《c语言常见习题.docx》由会员分享,可在线阅读,更多相关《c语言常见习题.docx(12页珍藏版)》请在冰豆网上搜索。
c语言常见习题
求公约数
下列给定程序中函数fun的功能是:
求两个非零正整数的最大公约数,并作为函数值返回。
例如,若num1和num2分别为49和21,则输出的最大公约数为7;若num1和num2分别为27和81,则输出的最大公约数为27。
请改正程序中的错误,使它能得出正确结果。
注意:
部分源程序在文件MODI1.C中,不得增行或删行,也不得更改程序的结构。
#include
intfun(inta,intb)
{intr,t;
if(a
/************found************/
t=a;b=a;a=t;
}
r=a%b;
while(r!
=0)
{a=b;b=r;r=a%b;}
/************found************/
return(a);
}
main()
{intnum1,num2,a;
printf("Inputnum1num2:
");scanf("%d%d",&num1,&num2);
printf("num1=%dnum2=%d\n\n",num1,num2);
a=fun(num1,num2);
printf("Themaximuncommondivisoris%d\n\n",a);
}
【参考答案】
(1)t=a;a=b;b=t;
(2)return(b);或returnb;
下列给定程序中函数fun的功能是:
求三个数的最小公倍数。
例如,若给主函数中的变量x1、x2、x3分别输入15 11 2,则输出结果应当是330。
请改正程序中的错误,使它能得出正确的结果。
注意:
部分源程序在文件MODI1.C中,不得增行或删行,也不得更改的程序的结构!
#include
/************found************/
fun(intx,y,z)
{intj,t,n,m;
j=1;
t=j%x;
m=j%y;
n=j%z;
while(t!
=0||m!
=0||n!
=0)
{j=j+1;
t=j%x;
m=j%y;
n=j%z;
}
/************found************/
returni;
}
main()
{intx1,x2,x3,j;
printf("Inputx1x2x3:
");scanf("%d%d%d",&x1,&x2,&x3);
printf("x1=%d,x2=%d,x3=%d\n",x1,x2,x3);
j=fun(x1,x2,x3);
printf("Theminimalcommonmultipleis:
%d\n",j);
}
【参考答案】
(1)fun(intx,inty,intz)或intfun(intx,inty,intz)
(2)returnj;
回文问题
请编写函数fun,该函数的功能是:
判断字符串是否为回文,若是则函数返回1,主函数中输出"YES",否则返回0,主函数中输出"NO"。
回文是指顺读和倒读都一样的字符串。
例如,字符串LEVEL是回文,而字符串123312就不是回文。
注意:
部分源程序在文件PROG1.C中。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
#include
#defineN80
intfun(char*str)
{
}
main()
{
chars[N];
FILE*out;
char*test[]={"1234321","123421","123321","abcdCBA"};
inti;
printf("Enterastring:
");
gets(s);
printf("\n\n");
puts(s);
if(fun(s))
printf("YES\n");
else
printf("NO\n");
/************************************/
out=fopen("out.dat","w");
for(i=0;i<4;i++)
if(fun(test[i]))
fprintf(out,"YES\n");
else
fprintf(out,"NO\n");
fclose(out);
/************************************/
}
【参考答案】
intfun(char*str)
{
inti,n=0,fg=1;
char*p=str;
while(*p) /*将指针p置位到字符串末尾,并统计字符数*/
{
n++;
p++;
}
for(i=0;i if(str[i]==str[n-1-i]); /*相同,什么都不作*/ else /*不同,直接跳出循环*/ { fg=0; break; } returnfg; } 【考点分析】 本题考查: 判断回文算法;针对遍历字符串的操作,同时如果有判断,则应该有if语句的配合。 【解题思路】 判断回文数就是将第一个字符与最后一个字符比较,第二个字符与倒数第二个字符进行较,依次类推,直到中间的字符,如果比较的结果都相同,那么这个字符串就是回文,否则不是。 程序中循环语句用来遍历字符串,条件语句用来判断当前字符与对应位置的字符是否相同。 闰年问题 请补充函数fun,该函数的功能是: 判断某一个年份是否为闰年。 例如,1900年不是闰年,2004是闰年。 注意: 部分源程序在文件BLANK1.C中。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。 #include #include #include intfun(intn) { intflag=0; if(n%4==0) { if(【1】) flag=1; } if(【2】) flag=1; return【3】; } voidmain() { intyear; system("CLS"); printf("Inputtheyear: "); scanf("%d",&year); if(fun(year)) printf("%disaleapyear.\n",year); else printf("%disnotaleapyear.\n",year); } 【参考答案】 (1)n%100! =0或n%100 (2)n%400==0 (3)flag 因子和问题 5、 下列给定程序的功能是: 读入一个整数k(2≤k≤10000),输出它的所有质因子(即所有为素数的因子)。 例如,若输入整数2310,则应输出: 2、3、5、7、11。 请改正程序中的错误,使程序能得出正确的结果。 注意: 部分源程序在文件MODI1.C中,不得增行或删行,也不得更改程序的结构。 #include #include /*************found**************/ IsPrime(intn); { inti,m; m=1; /*************found**************/ for(i=2;i if! (n%i) { m=0; break; } return(m); } main() { intj,k; printf("\nPleaseenteranintergernumberbetween2and10000: "); scanf("%d",&k); printf("\nTheprimefactor(s)of%dis(are): ",k); for(j=2;j if((! (k%j))&&(IsPrime(j))) printf("%4d,",j); printf("\n"); } 【参考答案】 (1)IsPrime(intn) (2)if(! (n%i)) 6、 请编写一个函数fun,它的功能是: 计算并输出给定整数n的所有因子(不包括1与自身)之和。 规定n的值不大于1000。 例如,若主函数从键盘给n输入的值为856,则输出为sum=763。 注意: 部分源程序在文件PROG1.C中。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 #include intfun(intn) { } voidmain() { intn,sum; FILE*out; printf("Inputn: "); scanf("%d",&n); sum=fun(n); printf("sum=%d\n",sum); /******************************/ out=fopen("out.dat","w"); fprintf(out,"%d\n",fun(123)); fprintf(out,"%d\n",fun(456)); fprintf(out,"%d\n",fun(789)); fprintf(out,"%d\n",fun(147)); fprintf(out,"%d",fun(258)); fclose(out); /******************************/ } 【参考答案】 intfun(intn) { ints=0,i; for(i=2;i<=n-1;i++) /*将n减1累加*/ if(n%i==0) s+=i; returns; } 【考点分析】 本题考查: 变量数据类型及初始化;循环判断语句;函数返回值。 【解题思路】 本程序的实现步骤为: (1)遍历从2到n-1的所有整数; (2)用条件语句找出能被n整除的所有整数,并累加求和;(3)返回值。 斐波那契数列问题 7、 下列给定程序中函数fun的功能是: 用递归算法计算斐波拉契数列中第n项的值。 从第1项起,斐波拉契数列为: 1、1、2、3、5、8、13、21、…… 例如,若给n输入7,则该项的斐波拉契数值为13。 请改正程序中的错误,使它能得出正确结果。 注意: 部分源程序在文件MODI1.C中,不得增行或删行,也不得更改程序的结构。 #include longfun(intg) { /**********found**********/ switch(g); {case0: return0; /**********found**********/ case1;case2: return1; } return(fun(g-1)+fun(g-2)); } main() {longfib;intn; printf("Inputn: ");scanf("%d",&n);printf("n=%d\n",n); fib=fun(n); printf("fib=%d\n\n",fib); } 【参考答案】 (1)去掉分号 (2)case1: case2: return1; 【考点分析】 本题考查: switch语句,其一般形式为: switch(表达式){ case常量表达式1: 语句1; case常量表达式2: 语句2; …… case常量表达式n: 语句n; default: 语句n+1; } 其中switch(表达式)后不应该带有";",同时case语句常量后应该是": "。 【解题思路】 C语言中,switch语句之后不能有分号,并且case语句常量后应用的是冒号。 【举一反三】 该类题型考查较灵活,考生可根据本书第27、52套题进行训练。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 常见 习题