哈工大c语言练习题.docx
《哈工大c语言练习题.docx》由会员分享,可在线阅读,更多相关《哈工大c语言练习题.docx(20页珍藏版)》请在冰点文库上搜索。
![哈工大c语言练习题.docx](https://file1.bingdoc.com/fileroot1/2023-5/9/4bb8f18f-9c69-45ee-9be9-22a8eee69e86/4bb8f18f-9c69-45ee-9be9-22a8eee69e861.gif)
哈工大c语言练习题
哈工大c语言练习题
————————————————————————————————作者:
————————————————————————————————日期:
求用户输入的两个数的商,程序运行时,以如下格式输入数据:
Inputtwointegers:
42↙
请改正程序中的错误,使它能得出正确的结果。
#include
main(〕
{
inta, b,c;
printf〔"Input twointegers:
"〕;
scanf("%d,%d",&a,&b〕;
c=a\b;
printf("The quotient ofa and b is :
%d",c);
}
#include
intmain ()
{
ﻩinta,b,c;
printf〔"Inputtwointegers:
");
ﻩscanf ("%d%d",&a,&b);
ﻩc=a/b;
ﻩprintf 〔"Thequotientofa andbis :
%d\n",c);
return0;
}
使用const常量定义圆周率pi=3.14159,编程从键盘输入圆的半径r,计算并输出圆的周长和面积。
输出的数据保存两位小数点。
输入格式要求:
"%lf"
提示信息:
"Input r:
"
输出格式要求:
"printf WITHOUTwidthorprecisionspecifications:
\n"
"circumference= %f,area=%f\n"
"printfWITH widthandprecision specifications:
\n"
"circumference =%7.2f,area=%7.2f\n"
程序运行例如如下:
Input r:
5.3
printf WITHOUTwidthorprecisionspecifications:
circumference=33.300854,area=88.247263
printf WITHwidthandprecision specifications:
circumference= 33.30, area= 88.25
#include
intmain()
{
const double PI=3.14159;
ﻩdouble r;
printf("Inputr:
");
scanf("%lf", &r);
printf("printf WITHOUTwidthorprecision specifications:
\n");
printf〔"circumference =%f, area=%f\n",2*PI*r,PI*r*r);
printf("printfWITHwidthandprecisionspecifications:
\n");
ﻩprintf("circumference=%7.2f, area= %7.2f\n",2*PI*r,PI*r*r);
return0;
}
写一个程序,将接收的华氏温度转换为对应的摄氏温度。
程序应显示如下的提示信息:
Pleaseinput fahr:
然后输入一个十进制数并回车,然后程序以适宜的消息形式输出转换后的华氏温度。
程序使用如下的公式完成转换:
摄氏温度= 5.0*〔华氏温度–32.0〕 /9.0
输入格式要求:
"%lf"
提示信息:
"Pleaseinput fahr:
"
输出格式要求:
"Thecels is:
%.2f"
#include<stdio.h>
#include <stdlib.h>
intmain〔)
{
doublef;
double c;
printf〔"Pleaseinput fahr:
");
scanf("%lf",&f);
c=5.0*〔f-32.0)/9.0;
printf("Thecelsis:
%.2f",c〕;
return0;
}
从键盘输入任意的字符,按以下规那么进展分类计数。
第一类:
‘0’, ‘1’,‘2’, ‘3’,‘4’,‘5’,‘6’, ‘7’, ‘8’,‘9’
第二类:
‘+’, ‘-’,‘*’,‘/’,‘%’,‘=’
第三类:
其它字符。
输出格式要求:
"class1=%d,class2=%d,class3=%d\n"
程序运行例如如下:
ghdf^%^#$^&〔+-//+_8*(\
class1=1,class2=7,class3=14
#include<stdio.h>
int main()
{
char ch;
inta =0,b= 0,c=0;
while〔(ch= getchar()〕 !
='\n') /*当读入的字符不是换行符时*/
{
if〔ch>='0' &&ch<='9') /*判断是否是数字*/
++a;
elseif〔ch=='+'||ch== '-'||ch =='*'||ch=='%'||ch=='/'||ch=='=') /*判断是否是巴拉巴拉*/
++b;
else /*是其它字符*/
++c;
}
printf〔"class1=%d,class2=%d,class3=%d\n",a,b,c);
return0;
}
要求:
输入为一个数n;
输出为1~n的奇数的阶乘之和;
要求使用函数实现
输入输出例如(第一行为输入,第二行为输出〕:
5
127
#include
longFact〔int n)
{
int i;
ﻩlong result=1;
for(i=1;i<=n;i++)
ﻩ{
ﻩﻩresult*=i;
ﻩ}
ﻩreturn result;
}
int main()
{
intm,j,sum;
longret;
ﻩscanf("%d",&m);
sum=0;
ﻩfor(j=1;j<=m;j=j+2)
ﻩ{
ret=Fact〔j);
sum=sum+ret;
ﻩ}
ﻩprintf("%d\n",sum〕;
ﻩreturn0;
}
键盘任意输入一下整数n,编程计算输出1~n之间的素数之和。
要求:
判断素数用函数实现。
说明:
素数是不能被1和它本身以外的其它整数整除的正整数(负数、0和1都不是素数)
输入输出例如(第一行为输入,第二行为输出):
10
17
#include<stdio.h>
#include
int ss(intn)
{
int i;
if(n<2)return0;
for(i=2;i<=(int)sqrt((double〕n〕;i++〕
if (n%i==0)return 0;
return1;
}
int main(void)
{
inti,sum=0,n;
scanf("%d",&n);
for (i=1;i<=n; i++)
if(ss(i))
sum+=i;
printf("%d\n",sum);
return0;
}
从键盘屡次输入不同的整数n,编程计算输出1~n之间的素数之和。
要求:
1〕判断素数调用函数实现;
2〕用循环构造,输入5次不同的整数。
输入输出实例〔奇数行为输入,偶数行为输出〕:
25
100
17
58
28
100
37
197
100
1060
#include
#include<math.h>
intss(intn)
{
int i;
if(n<2)return0;
for(i=2;i<=(int〕sqrt((double)n); i++)
if(n%i==0)return 0;
return 1;
}
int main(void)
{
inti,sum=0,n;
intcounter=0;
do{
scanf("%d",&n);
counter++;
for (i=1;i<=n; i++)
if〔ss(i)〕
sum+=i;
printf〔"%d\n",sum);
sum=0;
}while(counter<=4);
return 0;
}
〔请用一维数组完成)某个公司采用公用传递数据,数据是四位的整数,在传递过程中是加密的,加密规那么如下:
每位数字都加上 5,然后用和除以 10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
输入格式要求:
"%d"
提示信息:
"Inputa4 digitsnumber\n"
输出格式要求:
"%d"
程序运行例如如下:
Inputa4 digits number
1234
9876
#include
intmain(〕
{
intDigit[4];
intn;
inti;
intm;
printf〔"Inputa4digitsnumber\n");
scanf〔"%d",&n);
Digit[0]=n/1000;
Digit[1]=(n-1000*Digit[0]〕/100;
Digit[2]=(n-Digit[0]*1000-Digit[1]*100〕/10;
Digit[3]=n-Digit[0]*1000-Digit[1]*100-Digit[2]*10;
for(i=0;i<=3;i++〕
{
Digit[i]=〔Digit[i]+5〕%10;
}
m=Digit[0]+10*Digit[1]+100*Digit[2]+1000*Digit[3];
printf("%d",m);
return0;
}
(请用二维数组完成)从键盘为3*3的矩阵输入数据,找出主对角线上最大的元素,以及所在的行号。
(第一行行号为0〕
**输入格式要求:
"%d"
**输出格式要求:
"max=%d ,row=%d"
屏幕输入数据,输出最终结果〔每个数字之间空一格〕:
程序运行例如如下:
123
456
789
max=9 ,row=2
#include
intmain()
{
ﻩinti,j;
ints[3][3];
intmax,row;
for(i = 0;i<3;i++〕
{
ﻩfor (j=0; j<3;j++)
ﻩ{
ﻩﻩscanf("%d",&s[i][j]〕;
}
}
max=s [0][0];
ﻩrow =0;
ﻩfor(i =0;i<3;i++)
{
ﻩif (max < s [i][i])
{
max=s[i][i];
ﻩﻩrow=i;
}
}
printf("max=%d,row=%d", max,row);
return 0;
}
计算游戏人员的年龄。
有5个人围坐在一起,问第5个人多大年纪,他说比第4个人大2岁;问第4个人,他说比第3个人大2岁;问第3个人,他说比第2个人大2岁;问第2个人,他说比第1个人大2岁。
第1个人说自己10岁,问第5个人多大年纪。
输入格式:
无
输出格式:
"The5thperson'sage is%d\n"
# includeintFs(intx);
intmain()
{
intage;
ﻩintn=5;
ﻩage = Fs 〔n);
printf("The5thperson's ageis%d\n",age);
ﻩreturn0;
}
intFs(int x〕
{
ﻩif(x==1)
ﻩreturn10;
else
ﻩreturn2 + Fs (x- 1);
}
输入一组包含10个整数的数组,找出其中的最小元素,并与第一个元素交换。
输出这个数组。
要求交换元素时调用swap_min函数。
输入输出例如〔第一行为输入,第二行为输出):
2220987612 171 3
1 2098 7612 17 223#include
#include
voidswap_max(int*a,int*b〕;
intmain()
{
int a[11];
inti,j,k;
for(i=0;i<10;i++〕
{
scanf("%d",&a[i]);
}
k=0;
for〔j=0;j<10;j++)
{
if(a[j]>a[k])
{
k=j;
}
}
swap_max(&a[k],&a[0]);
printf("%d%d%d %d%d%d%d%d%d%d",a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]);
return0;
}
voidswap_max(int*a,int*b)
{
inttemp;
temp=*a;
*a=*b;
*b=temp;
}
按照给定的函数原型编程实现两个字符串的连接(不允许使用字符串连接函数strcat)。
函数原型:
voidMystrcat(chara[ ],charb[]〕;
要求:
将字符数组a中存放的字符串连接到字符数组b中;在主函数读入两个字符串〔读入的字符串可包括空格);连接之后的字符串在主函数输出;字符串长度最长为70。
输入输出样例〔前两行为输入,最后一行为输出〕:
Hello!
Howareyou?
Howareyou?
Hello!
#include#include
voidMystrcat〔chara[],char b[]);
intmain()
{
chara[80],b[80];
ﻩgets(a〕;
ﻩgets(b);
ﻩMystrcat(a,b〕;
ﻩputs(a〕;
ﻩreturn 0;
}
voidMystrcat(chara[],charb[]〕
{
inti,n,m;
m=strlen(b);
n=strlen(a);
for (i= 0; i<m+1;++i)
{
ﻩa[n+i]=b[i];
}
a[m+n+1]='\0';
}
用循环构造编程,输出如以下图案。
*
***
*****
***
*
#include
# defineN5
intmain()
{
charm[N][N];
inti;
for(i=0;i < N; i++〕
ﻩ{
ﻩﻩif 〔i== 0 ||i == 4)
{
ﻩﻩﻩprintf(" %c\n", m[0][2]='*');
ﻩﻩ}
ﻩelseif(i==1 || i==3)
{
ﻩprintf(" %c%c%c\n",m[1][1]='*',m[1][2] ='*', m[1][3]='*');
ﻩ}
ﻩelse if(i==2)
ﻩ{
ﻩprintf〔"%c%c%c%c%c\n", m[i][0]= '*', m[i][1]='*',m[i][2]= '*',m[i][3]='*', m[i][4] = '*');
ﻩﻩ}
}
ﻩreturn0;
}
有30个人,其中有男人、女人和小孩,在一家饭馆吃饭共花了50元:
每个男人花3元,每个女人花2元,每个小孩花1元,问男人、女人和小孩各几人?
**输出格式要求:
〔前两行为表头格式,最后一行为输出答案格式,有几种可能答案输出几行,第一个%2d表示行号(从1开场),后三个%d分别为男人、女人、小孩的人数,按男人数递增顺序输出〕
"\tMEN\tWOMEN\tCHILDREN\n"
"-----------------------------------------\n"
"%2d:
\t%d\t%d\t%d\n"
#include<stdio.h>
#defineN30
int main ()
{
intman,woman, child;
ﻩint r= 0;
printf("\tMEN\tWOMEN\tCHILDREN\n");
printf("-----------------------------------------\n");
for (man=0;man ﻩ{
ﻩfor(woman=0; womanﻩ{
ﻩchild= N-man-woman;
ﻩ{
if(3 * man +2*woman+1 *child ==50〕
ﻩﻩﻩ{
ﻩﻩﻩr ++;
ﻩﻩﻩprintf〔"%2d:
\t%d\t%d\t%d\n",r,man,woman,child);
ﻩﻩﻩ}
ﻩﻩ}
ﻩﻩ}
}
return0;
}
按如下函数原型,用二维数组作为函数参数,编程计算并输出n×n阶矩阵的转置矩阵。
其中,n由用户从键盘输入。
n值不超过10。
voidTranspose(inta[][N], int n〕;
voidInputMatrix(inta[][N], intn);
voidPrintMatrix〔int a[][N],int n);
输入提示信息要求:
"Inputn:
\n"
输入格式:
"%d"
输出提示信息:
"Thetransposed matrix is:
\n"
输出要求:
"%d\t"
输出矩阵时,每输出一行就换行
注:
不能使用指针、构造体、共用体、文件、goto、枚举类型进展编程
输入输出例如:
Inputn:
2
11
02
The transposed matrix is:
10
12
#include
#define N 10
voidTranspose(intm[][N],intn);
void InputMatrix (intm[][N],intn〕;
voidPrintMatrix (intm[][N],int n);
intmain()
{
intn;
ﻩintm [N][N];
printf〔"Input n:
\n"〕;
ﻩscanf ("%d",&n);
ﻩInputMatrix 〔m, n);
ﻩTranspose (m, n〕;
ﻩprintf("Thetransposedmatrix is:
\n"〕;
PrintMatrix(m,n〕;
return0;
}
voidInputMatrix(intm[][N],intn〕
{
int i, j;
for(i=0;i < n; i++)
ﻩ{
ﻩfor(j =0;jﻩ{
ﻩﻩscanf ("%d",&m[i][j]);
ﻩ}
ﻩ}
}
voidPrintMatrix(intm[][N],intn)
{
inti, j;
for〔i =0; i{
for(j= 0;j < n-1;j++)
{
ﻩprintf("%d\t", m [i][j]);
ﻩ}
ﻩprintf ("%d",m[i][n-1]〕;
ﻩprintf 〔"\n"〕;
ﻩ}
}
voidTranspose (int m [][N],intn〕
{
inti,j;
inttemp;
for(i=0;i < n;i++)
ﻩ{
for 〔j= 0;j
ﻩ{
temp = m[i][j];
m [i][j]= m[j][i];
ﻩﻩm[j][i] = temp;
ﻩ}
ﻩ}
}
从键盘任意输入一个字符串(字符串可以有空格),
在给定的一组字符串中寻找该输入字符串,
假设找到,那么打印该字符串,否那么打印"Not find!
"。
注意:
(1〕请提交修改正确后的完整源程序代码。
〔2〕对于没有错误的语句,请不要修改
#include
#include<stdio.h>
main()
{
int i,findFlag=1;
charx;
char str[][13]={"Pascal","Basic","Fortran", "Java","VisualC", "VisualBasic"};
printf("Inputstring:
\n");
gets〔x);
while (i<6&&!
findFlag)
{
if (x=str[i])
{
findFlag=0;
}
i++;
}
if(!
findFlag)
{
printf〔"%s\n",x);
}
else
{
printf〔"Not find!
\n");
}
}
#include#include
intmain()
{
inti=0,f=1;
char m [13];
charstr[][13]={"Pascal","Basic","Fortran","Java","VisualC","Visual Basic"};
printf("Inputstring:
\n");
gets〔m);
while(i<6&&f ==1)
{
ﻩif(strcmp〔m,str[i])==