13机制本科C语言程序设计复习资料.docx
《13机制本科C语言程序设计复习资料.docx》由会员分享,可在线阅读,更多相关《13机制本科C语言程序设计复习资料.docx(20页珍藏版)》请在冰豆网上搜索。
![13机制本科C语言程序设计复习资料.docx](https://file1.bdocx.com/fileroot1/2023-7/10/f71848be-925a-4c92-a8ab-0d54baa05b91/f71848be-925a-4c92-a8ab-0d54baa05b911.gif)
13机制本科C语言程序设计复习资料
1.计算定期存款本利之和
设银行定期存款的年利率rate为2.25%,并已知存款期为n年,存款本金为capital元,试编程计算n年后的本利之和deposit。
要求定期存款的年利率rate、存款期n和存款本金capital均由键盘输入。
2.编写一个C程序,求a、b、c、d四个数中的最大者。
3.输入4个整数,要求按由小到大顺序输出。
得到正确结果后,修改程序使之按由大到小顺序输出。
4.根据以下函数关系,对输入的每个x值,计算出相应的y值。
#include
#include
voidmain()
{floatx,y;
scanf("%f",&x);
if()
y=;
elseif()
y=;
else
printf("x=%f,y=%f",x,y);
}
相关知识点:
if语句的嵌套;数学函数的调用方式。
5.写程序实现以下函数:
用scanf函数输入x的值,求y值。
运行程序,输入x的值(分别为x<1、1≤x<10、x>10三种情况),检查输出的y值是否正确。
6.编写程序,要求对输入的数字1~7转换成文字星期几,对其它数字不转换。
例如,输入5时,程序应该输出Friday。
7.程序求1+…+100,填空,实现该功能。
#include
voidmain()
{
ints,i;
s=0;/*第5行*/
for()
s=s+i;
printf("1+...+100=%d\n",s);
}
8.若输入12345,分析输出结果是多少?
上机验证。
#include
voidmain()
{longdata;
scanf("%ld",&data);
while(data)
{printf("%ld,",data%10);
data=data/10;
}
}
9.填空完成程序,程序输入一批考试分数,用1作为结束标志,若输入大于100分,则提示重新输入,然后计算最高分、最低分与平均分。
请调试、检查程序中的错误,并改正之。
#include
voidmain()
{intmark;
intn=0,sum=0;
intmax=0,min=100;
for(;;)
{scanf("%d",&mark);
if(mark>100)
{printf("Mark>100,Pleasereinput\n");
___________;
}
if(mark==-1)
___________;
n++;
sum=sum+mark;
if(___________)
max=mark;
if(___________)
min=mark;
}
sum=sum/n;
printf("max=%d,min=%d,aver=%d\n",max,min,sum);
}
10程:
输入20个1~90的整数,分类统计1~30、31~60、61~90的数各有多少个?
编程点拨:
(1)count1计1~30的个数,count2计31~60的个数,count3计61~90的个数。
(2)用for循环20次实现该程序的功能:
输入一个整数x,判断该数所在的范围,若x是1~30,则count1加1;若x是31~60,则count2加1;若x是61~90,则count3加1。
(3)最后,输出统计的结果。
#include
voidmain()
{intcount1=0,count2=0,count3=0;
inti,x;
printf(“Pleaseinput20numbers:
”);
for(i=0;i<20;i++)
{scanf(“%d”,&x);
………/*补充完成程序*/
}
/*输出统计结果*/
……………
}
补充完成该程序。
11.编程:
素数是除了1和其本身以外,不能被其他自然数整除的自然数。
从键盘输入一个数,判断该数是不是素数?
编程点拨:
a)输入这个数x。
b)用for循环2~x-1,用2~x-1的每一个数去除x,若有一个数整除x,则说明x不是素数;否则,x就是素数。
c)最后,将判断结果输出。
#include
voidmain()
{inti,x;
printf("Enteronenaturalinteger:
");
scanf("%d",&x);
for(i=2;i……………
}
12.编程:
显示所有的水仙花数。
谓水仙花数,是指一个3位数,其各位数字立方和等于该数字本身。
例,153是水仙花数,因为153=13+53+33。
有两种解题思路,选择其中之一编程实现:
13.调试下列程序,使之具有如下功能:
输入10个整数,按每行3个数输出这些整数,最后输出10个整数的平均值。
写出调试过程。
#inclue
#defineN10
voidmain()
{inti,a[N],av;
for(i=0;i scanf("%d",a[i]);
for(i=0;i {printf("%d",a[i]);
if(i%3==0)
printf("\n");
}
for(i=0;i!
=N;i++)
av+=a[i];
printf("av=%f\n",av);
}
14.有一个3行4列的距阵,现要求编程求出其中最大的那个元素的值,以及它所在的行号与列号。
程序的初始说明和输出语句如下所示,请补充完成该程序。
#include
voidmain()
{inti,j,row,colum,max;
staticinta[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};
……
printf("Max=%d,Row=%d,Colum=%d\n",max,row,colum);
}
15.数组中已存互不相同的10个整数,从键盘输入一个整数,输出与该值相同的数组元素下标。
编程点拨:
1输入要查找的变量x的值;
2使用循环将输入的数和数组元素逐个进行比较,若找到,则提前退出循环;
3根据循环是正常结束还是提前结束来判断是否找到x。
部分源代码:
#include
voidmain()
{inti,x,a[10]={1,2,3,4,5,6,7,8,9,10};
/*输入x变量的值*/
for(i=0;i<10;i++)printf("%4d",a[i]);
printf("\n");
/*循环查找与x相等的元素*/
if()
printf("%d\n",i);/*输出查找结论,输出下标值*/
else
printf("Notfound%d\n",x);
}
16.编写程序,任意输入10个从大到小的整数数列,然后输入一个整数插入到数列中,使数列保持从大到小的顺序。
部分源代码:
#include
#defineN11
voidmain()
{inti,j,a[N];
printf(“Pleaseinput10numbers:
”);
for(i=0;iscanf(“%d”,&a[i]);/*乱序输入10个整数*/
……
}
相关知识:
①比较排序法、选择排序法和冒泡排序法;②数据元素的插入。
17.输入十个互不相同的整数并存在数组中,找出最大元素,并删除。
18.以下程序的功能是:
从键盘上输入若干个学生的成绩,统计计算出平均成绩,并输出低于平均分的学生成绩,用输入负数结束输入。
请填空:
#include
voidmain()
{floatx[1000],sum=0.0,ave,a;
intn=0,i;
printf("Entermark:
\n");
scanf("%f",&a);
while(a>=0.0&&n<1000)
{sum+=;
x[n]=;
n++;
scanf("%f",&a);
}
ave=;
printf("Output:
\n");
printf("ave=%f\n",ave);
for(i=0;iif()
printf("%f\n",x[i]);
}
19.综合编程题:
打印如下杨辉三角形
1
11
121
1331
14641
15101051
编程点拨:
杨辉三角形有如下特点:
1只有下半三角形有确定的值;
2第一列和对角线上的元素值都是1;
3其它元素值均是前一行同一列元素与前一行前一列元素之和。
20.调试下列程序,使之具有如下功能:
任意输入两个字符串(如:
“abc123”和“china”),并存放在a,b两个数组中。
然后把较短的字符串放在a数组,较长的字符串放在b数组。
并输出。
#include
#include
voidmain()
{chara[10],b[10];
intc,d,k,ch;
scanf("%s",&a);
scanf("%s",&b);
printf("a=%s,b=%s\n",a,b);
c=strlen(a);
d=strlen(b);
if(c>d)
for(k=0;k{ch=a[k];a[k]=b[k];b[k]=ch;}
printf("a=%s\n",a);
printf("b=%s\n",b);
}
21.阅读下面的程序,然后回答后面的问题:
#include
#include
voidmain()
{chars1[80],s2[40];
inti=0,j=0;
printf("\nPleaseinputstring1:
");
scanf("%s",s1);
printf("\nPleaseinputstring2:
");
scanf("%s",s2);
while(s1[i]!
='\0')
i++;
while(s2[j]!
='\0')
s1[i++]=s2[j++];
s1[i]='\0';
printf("\nNewstring:
%s",s1);
}
编辑、运行该程序,然后分别输入 Country和side。
请问:
程序执行的结果是什么?
该程序的功能是什么?
22.填空完成程序,使其功能是对从键盘上输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字符的ASCII码之差。
例如:
输入的两个字符串分别为abcdefg和abceef,则输出为-1。
程序如下:
#include
voidmain()
{charstr1[100],str2[100];
inti,s;
printf("\nInputstring1:
\n");gets(str1);
printf(“\nInputstring2:
\n”);gets(str2);
i=
(1);
while((str1[i]==str2[i])&&(str1[i]!
=
(2)))
i++;
s=(3);
printf("%d\n",s);
}
23.填空完成程序,使其的功能是统计从终端输入字符中每个大写字母的个数。
用#号作为输入结束标志。
程序如下:
#include
#include
voidmain()
{intnum[26],i;charc;
for(i=0;i<26;i++)num[i]=0;
while(
(1)!
='#')/*统计从终端输入的大写字母个数*/
if(isupper(c))num[c-65]
(2);
for(i=0;i<26;i++)/*输出大写字母和该字母的个数*/
if(num[i])printf("%c:
%d\n",i(3),num[i]);
}
24.编写程序,输入字符串s1和s2以及插入位置f,在字符串s1中的指定位置f处插入字符串s2。
如:
输入"BEIJING"、"123"和位置3,则输出:
"BEI123JING123"。
25.阅读程序,注意在调试时F11和F10的区别,还要注意函数调用过程中形参、实参的关系。
#include
voidmain()
{intx=10,y=20;
voidswap(int,int);
printf("
(1)inmain:
x=%d,y=%d\n",x,y);
swap(x,y);
printf("(4)inmain:
x=%d,y=%d\n",x,y);
}
voidswap(intm,intn)
{inttemp;
printf("
(2)inmain:
m=%d,n=%d\n",m,n);
temp=m;m=n;n=temp;
printf("(3)inmain:
m=%d,n=%d\n",m,n);
}
26.下列程序是实现求素数的,请填空完成该程序,并上机运行测试。
#include
#include
voidmain()
{intm;
;/*申明求素数函数*/
printf("Pleaseinputadatam=:
");
scanf("%d",&m);
;/*调用求素数函数*/
}
voidprime(intn)
{inti,k;
k=sqrt(n);
for(i=2;i<=k;i++)
if(___________;)
break;
if(___________)
printf("Thisisaprimenumber");
elseprintf("Thisisn’taprimenumber");
}
27.下列程序的功能是从键盘上输入的若干个数并求出最大值。
请填空完成该程序。
#include
voidmain()
{inti;
ints[10],max;
/*Findmax()函数的申明*/
;
printf("Input10number:
\n");
/*输入10个数据到s数组中*/
;
/*调用Findmax函数*/
;
for(i=0;i<10;i++)
printf("%4d",s[i]);
printf("\nthemaxis%d",max);
}
intFindmax(intx[],intn)
{intmax,i;
___________;
for(i=1;iif(___________)
max=x[i];
returnmax;
}
28.下列程序的功能是从键盘上输入的若干个数按升序排序。
请填空完成该程序。
#include
voidmain()
{inti,k;
floats[100],j;
printf("Inputnumber:
\n");
for(i=0;scanf("%f",&j);i++)
s[i]=j;
_________;
for(k=0;_________;k++)
printf("%f",s[k]);
printf("\n");
}
voidsort(floatx[],intn)
{inti,j,temp,min;
for(i=0;i{_________;
for(j=i+1;jif(_________)
min=j;
if(min!
=i)
{temp=x[i];
x[i]=x[min];
x[min]=temp;
}
}
}
29.编写程序,实现由主函数输入m、n,按下述公式计算并输出
的值。
提示:
定义一个求阶层的函数,然后在主函数中调用三次即可求得。
30.上机调试程序,观察静态局部变量在调用过程中的变化。
#include
voidmain()
{inti;
intf(int);
for(i=1;i<=5;i++)
printf("(%d):
%d\n",i,f(i));
printf("\n");
}
intf(intn)
{staticintj=1;
j=j*n;
return(j);
}
31.上机验证以下程序的运行结果
#include
voidmain()
{inti,a[]={1,2,3},*p;
p=a;/*将数组a首地址赋给指针p*/
for(i=0;i<3;i++)
printf("%d,%d,%d,%d\n",a[i],p[i],*(p+i),*(a+i));
}
32.编写程序,使之具有如下功能:
用指针法输入12个数,然后按每行4个数输出。
33.编写下列程序的sum函数和swap函数,使之具有如下功能:
任意输入2个数,调用两个函数分别求:
⑴2个数的和, ⑵2个数交换值。
#include
voidmain()
{inta,b,c,*p=&c;
voidsum(int,int,int*);
voidswap(int*,int*);
scanf("%d,%d",&a,&b);
sum(a,b,p);
swap(&a,&b);
printf("sum=%d\n",c);
printf("a=%d,b=%d\n",a,b);
}
voidsum(inta,intb,int*c)
{
}
voidswap(int*a,int*b)
{
}
34.下面的程序是用来从键盘输入是个整数,然后求出其中的最小值。
填写空缺部分。
#include
inttable[10];
voidlookup(int*t,int*a,intn)
{intk;
*a=t[0];
for(k=1;kif()*a=t[k];
}
voidmain()
{intk,min,*p=&min;
for(k=0;k<10;k++)
scanf("%d",table+k);
lookup(,,10);
printf("min=%d\n",min);
}
35.编程题:
已知一个整型数组a[5],其各元素值为4,6,8,10,12。
使用指针求该数组元素之积。
36.阅读下面的程序。
voidmain()
{
chara[]="Iamaboy.",b[20],*p1,*p2;
inti;
p1=a;p2=b;
for(;*p1!
=’\0’;p1++,p2++)
*p2=*p1;
p2=’\0’;
printf("stringais:
%s\n",a);
printf("stringbis:
");
for(i=0;b[i]!
=’\0’;i++)
printf("%c",b[i]);
}
编辑、运行该程序,然后分别输入 Country和side。
请问:
程序执行的结果是什么?
该程序的功能是什么?
37.以下是一个编写input()和output()函数输入,输出5个学生的数据记录;请在空白处填上适当的语句。
#include
#defineN5
structstudent
{charnum[6];
charname[8];
int score[4];
}stu[N];
voidinput(structstudentstu[])
{inti,j;
for(i=0;i {
printf("\n请输入%d个学生中第%d个的信息:
\n",N,i+1);
printf("学号:
");
scanf("%s", );
printf("姓名:
");
scanf("%s", );
for(j=0;j<3;j++)
{
printf("成绩%d:
",,j+1);
scanf("%d", );
}
printf("\n");
}
}
voidprint(structstudentstu[])
{
inti,j;
printf("----------------------------------------\n");
printf("\n学号 姓名 成绩1 成绩2 成绩3\n");
printf("----------------------------------------\n");
for(i=0;i {
printf("%-6s%-10s",stu[i].num,stu[i].name);
for(j=0;j<3;j++)
printf("%-8d", );
printf("\n");
}
printf("---------------------------