C语言初级练习.docx
《C语言初级练习.docx》由会员分享,可在线阅读,更多相关《C语言初级练习.docx(26页珍藏版)》请在冰豆网上搜索。
C语言初级练习
1.1简述C语言编程机制
C语言的编程机制大致分为:
先由源文件.c文件编译成为.obj文件,然后.obj文件再与C语言中各种库函数以及链接库(.dll文件)链接起来,生成.exe文件,即可执行文件
1.2简述C程序设计步骤
1>定义程序目标
2>程序设计
3>编写代码
4>编译
5>运行程序
6>测试和调试程序
7>维护和修改程序
2.1
编程计算表达式“a=3*4,a*5,a+5”的值
#include
intmain()
{
inti,a;
i=(a=3*4,a*5,a+5);
printf("%d\n",i);
return0;
}
2.2
编程计算表达式“i=3,-i++”的值并输出“i”的值。
#include
intmain()
{
inti,k;
i=3;
k=(i=3,-i++)
printf("%d\n",k);
return0;
}
2.3
编程计算“1+2+3+…+n”的值(n的值可从键盘输入)。
#include
intmain()
{
intn,i,sum;
printf("请输入整数:
\n");
while(scanf("%d",&n))
{
if(n==1)
printf("1\n");
else
{
for(i=1;i<=n;i++)
sum+=i;
printf("%d\n",sum);
}
sum=0;
}
return0;
}
3.1
编写一个C程序,输入a,b,c三个值,输出其中最大者。
#include
intmain()
{
inta,b,c,max;
printf("请输入三个数字");
scanf("%d%d%d\n",&a,&b,&c);
if(a>b)
max=a;
else
max=b;
printf("最大值是:
%d\n",c>max?
c:
max);
return0;
}
3.2
输入学习成绩:
学习成绩>=90分的用A表示,60-89分之间的用B表示,60分以下的用C表示
#include
intmain()
{
intscore;
printf("请输入成绩:
");
scanf("%d",&score);
if(score>=90)
printf("A");
if(score<60)
printf("C");
if(score>=60&&score<=89)
printf("B");
return0;
}
3.3
输出9*9口诀。
共9行9列。
#include
intmain()
{
inti,j,k;
for(i=1;i<10;i++)
{
for(j=1;j<=i;j++)
{
k=i*j;
printf("%d*%d=%d\t",i,j,k);
}
printf("\n");
}
return0;
}
3.4
打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。
例如:
153是一个“水仙花数”,因为153等于1的三次方+5的三次方+3的三次方。
intwaflow()
{
inta,b,c;
for(a=1;a<=9;a++)
{
for(b=0;b<=9;b++)
{
for(c=0;c<=9;c++)
{
if((a*100+b*10+c)==(a*a*a+b*b*b+c*c*c))
printf("%d%d%d\n",a,b,c);
}
}
}
return0;
}
3.5
编写一个程序,判断输入的某一年year是否是闰年?
#include
intmain()
{
intyear;
printf("请输入年份:
\n");
scanf("%d",&year);
if((year%100)<99&&year%4==0||year%400==0)
printf("这是闰年");
else
printf("这是平年");
}
4.1
打印Fibonacii数列前10个元素。
(Fibonacii数列特点:
1,1,2,3,5,8,13,21,⋯)
#include
intfib(intn)
{
if(n==1||n==2)
return1;
else
returnfib(n-1)+fib(n-2);
}
intmain()
{
inti;
for(i=0;i<10;i++)
{
printf("第%d项是:
%d\n",i+1,fib(i+1));
}
}
4.2
查找整型数组中某一元素的值是否等于从键盘中输入的整数值(可事先定义好数组,如:
intarr[10]={2,4,1,6,8,3,5,9,7,0};),如果相等打印出该元素的下标。
#include
intmain()
{
inti,s,k;
intsym=0;
intnum[10]={2,4,1,6,8,3,5,9,7,0};
printf("请输入一个整数:
\n");
scanf("%d",&s);
for(i=0;i<10;i++)
{
if(num[i]==s)
{
k=i;
sym=1;
break;
}
}
if(sym)
printf("你所输入的数字的下标是:
%d",k);
else
printf("没有找到数据");
}
4.3
杨辉三角形特点是每个元素都等于它正上方与左上方数之和,于是可以计算出除第一列第一行外的所有元素(打印10行即可)。
#include
intmain()
{
inti,j;
intnum[10][10];
for(i=0;i<10;i++)
{
num[i][0]=1;
num[i][i]=1;
}
for(i=2;i<10;i++)
{
for(j=1;j
{
num[i][j]=num[i-1][j-1]+num[i-1][j];
}
}
for(i=0;i<10;i++)
{
for(j=0;j<=i;j++)
prinf("%d",num[i][j]);
printf("\n");
}
}
4.4
通过键盘输入3名学生4门课程的成绩,分别求每个学生的平均成绩和每门课程的平均成绩。
要求所有成绩均放入一个4行5列的数组中,输入时同一人数据间用空格,不同人用回车其中最后一列和最后一行分别放每个学生的平均成绩,每门课程的平均成绩及班级总平均分。
#include
intmain()
{
inta[4][5];
inti,j;
printf("请逐个输入每个学生的成绩:
");
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
a[i][4]=(a[i][0]+a[i][1]+a[i][2]+a[i][3])/4;
}
for(j=0;j<5;j++)
a[3][j]=(a[0][j]+a[1][j]+a[2][j])/3;
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
printf("%d",a[i][j]);
printf("\n");
}
return0;
}
4.5
输入一个字符串,判断其是否为回文。
回文字符串是指从左到右读和从右到左读完全相同的字符串。
intbackwen()
{
charstr[50];
inti,k,sign=1;
printf("请输入一串字符串\n");
scanf("%s",str);
k=strlen(str)/2;
for(i=0;i{
if(str[i]!
=str[strlen(str)-(i+1)])
{
sign=0;
break;
}
}
if(sign==1)
printf("此字符串是回文字符串\n");
else
printf("此字符串不是回文字符串\n");
return0;
}
4.6
逆序输出字符串(字符串的长度在50以内)
#include
#include
#include
intunstr()
{
charstr[50];
inti;
printf("请输入一串字符串\n");
scanf("%s",str);
for(i=strlen(str);i>=0;--i)
{
printf("%c",str[i]);
}
return0;
}
4.7
狐狸找兔子:
围绕着山顶有10个圆形排列的洞,狐狸要吃兔子,兔子说:
“可以,但必须先找到我,我就藏身于这十个洞中的某个洞。
你从1号洞找,下次隔1个洞(即3号洞)找,第三次隔2个洞(即6号洞)找,再隔3个⋯以后在这个圆圈中如此类推,次数不限。
”但狐狸从早到晚进进出出了1000次,仍没有找到兔子。
问兔子究竟藏在哪个洞里?
#include
#include
#include
intrabfox()
{
intnum[10]={1,1,1,1,1,1,1,1,1,1};
inti,n=0;
for(i=0;i<1000;i++)
{
n=(n+i)%10;
num[n]=0;
n++;
}
printf("这只大白兔所在的洞是");
for(i=0;i<10;i++)
{
if(num[i])
{
printf("%3d",i+1);//第几号洞,与其下标差1
}
}
printf("\n");
return0;
}
intmain()
{
rabfox();
return0;
}
5.2
编写一个函数sum(n),计算1+2⋯n之和,根据n值的不同,得到不同的值。
要求分别计算n=50,n=80,n=100的情况。
intsum()
{
intn,i,sum=0;
printf("请输入一个整数");
scanf("%d",&n);
for(i=1;i<=n;i++)
sum+=i;
printf("%d\n",sum);
return0;
}
5.3
求下数列的第20项的值。
1,2,3,5,8,13,21,34⋯.
f
(1)=1;
f
(2)=2;
f(n)=f(n-1)+f(n-2);
#include
intfib();
intmain()
{
intn;
printf("请输入一个整数:
\n");
scanf("%d",&n);
printf("%d\n",fib(n));
return0;
}
intfib(intn)
{
if(n==1)
return1;
if(n==2)
return2;
else
returnfib(n-1)+fib(n-2);
}
6.3
已知一行字母字符,根据需要设置条件编译,使之能将字母全改为大写输出,或全改为小写字母输出。
///////////////////////////////////////////////转小写
intupdown()
{
charstr[]="ABCdefghIJKLMN";
inti;
for(i=0;i{
if(str[i]>=65&&str[i]<=91)
str[i]=str[i]+32;
}
printf("%s\n",str);
return0;
}
/////////////////////////////////////////转大写
intupdown()
{
charstr[]="ABCdefghIJKLMN";
inti;
for(i=0;i{
if(str[i]>=97&&str[i]<=126)
str[i]=str[i]-32;
}
printf("%s\n",str);
return0;
}
7.1
定义整型变量a并赋值、定义指向该变量的指针变量p,输出a、&a、p和*p的值。
intjustry()
{
inta=1;
int*p=&a;
printf("a的值是:
%d\n&a的值是:
%d\np的值是:
%d\n*p的值是:
%d\n",a,&a,p,*p);
return0;
}
7.2
int*p;与*p=10中的*有什么区别。
Int*p中的*是指针定义符,*p=10中的*是指针运算符
7.3
有定义:
floata[10],*p=NULL;则:
p=a;p、p++表示什么?
p=a:
把数组a的首地址给了指针p,p++表示数组的首地址向下移动一个数据的位置,也就是a[1]的地址
p=&a[3];p、p-3、p+3、p--表示什么?
p=a:
把数组元素a[3]的地址给了指针p,p-3表示数组元素a[0]的地址,p+3表示a[6]的地址,p--表示将p向下移动一个数据的位置,即a[2]的地址,由于是后++,所以第一次输出p--的值,其地址并不会改变。
7.4
定义数组并输入10个整数,找出最大值并输出。
要求用指针表示数组元素
intmaxx()
{
intnum[10],max=0,i;
//int*p=num;
printf("请输入10个整数:
\n");
for(i=0;i<10;i++)
scanf("%d",&num[i]);
for(i=0;i<10;i++)
{
if(num[i]>max)
max=num[i];
}
printf("%d\n",max);
return0;
}
7.5
编写名为strdup的函数,此函数使用动态存储分配来产生字符串的副本。
该函数原型为:
char*strdup(char*string);(例如p=strdup(str);该函数给和str相同的字符串分配空间,然后把字符串str的内容复制到该空间,形成
新字符串,然后返回指向新字符串的指针,如果空间分配失败则返回空指针)
#include
#include
#include
char*strdup(char*src)////两个参数的strdup函数:
第二个参数是intsize
{
char*dest;
dest=malloc(*src);
//dest=(char*)malloc(size);
if(dest==NULL)
{
returnNULL;
}
else
{
strcpy(dest,src);
returndest;
}
}
intforstrdup()
{
char*str="youaremyalittleapple!
";
char*newstr;
newstr=strdup(str);//strlen遇到空格就会结束,只能用sizeof,sizeof的长度不加'\0';//两个参数的strdup函数:
第二个参数是sizeof(*str)+1
printf("%s\n",newstr);
return0;
}
intmain()
{
forstrdup();
return0;
}
8.1
用结构体变量记录学生信息:
学号、姓名、性别、住址。
初始化一学生的信息,并打印之。
#include
#include
#include
structstudent
{
intid;
charname[10];
charsex;
charadd[10];
}jinyu={12031701,"王二",'M',"哈尔滨"};
intjust()
{
printf("学号:
%d\n姓名:
%s\n性别:
%c\n地址:
%s\n",jinyu.id,jinyu.name,jinyu.sex,jinyu.add);
return0;
}
intmain()
{
just();
}
8.2
对候选人得票的统计程序。
设有3个候选人,每次输入一个得票的候选人的名字,要求最后输出各人得票结果。
(假设有10个选民)。
structperson{
charname[20];
incount;
}leader[3]={“Li”,0,“Zhang”,0,“Fun”,0};
#include
#include
#include
structperson
{
charname[6];
intcount;
}leader[3]={"li",0,"zhang",0,"fun",0};
intvote()
{
charnum[10][6];
inti;
printf("请10个人输入各自要投票的人名:
\n");
for(i=0;i<10;i++)
scanf("%s",&num[i]);
for(i=0;i<10;i++)
{
if(strcmp(num[i],leader[0].name)==0)
{
leader[0].count++;
}
elseif(strcmp(num[i],leader[1].name)==0)
{
leader[1].count++;
}
elseif(strcmp(num[i],leader[2].name)==0)
{
leader[2].count++;
}
}
printf("li的人数:
%d\nzhang的人数:
%d\nfun的人数:
%d\n",leader[0].count,leader[1].count,leader[2].count);
return0;
}
intmain()
{
vote();
}
9.1
取一个无符号短整型数从右端开始的4~9位(位号从0开始)
#include
#include
#include
intfetch()
{
charstr[20];
intk,i;
printf("请输入一个大于9位的无符号数\n");
scanf("%s",str);
k=strlen(str);
printf("%d\n",k);
for(i=k-4;i>=(k-9);i--)
printf("%c",str[i]);
return0;
}
intmain()
{
fetch();
return0;
}
9.2
判断一个无符号整数是否为2的整幂数。
例如:
128是,368不是
#include
#include
#include
#include
intmishu()
{
intn,sign;
printf("请输入一个无符型整数:
\n");
while(scanf("%d",&n))
{
sign=0;
if(n>0)
{
if(n==1)
printf("此数是2的整数次幂\n");
else
{
while(n%2==0)
{
n=n/2;
if(n==1)
{
sign=1;
break;
}
}
if(sign)
printf("此数是2的整数次幂\n");
else
printf("此数不是2的整数次幂\n");
}
}
else
printf("输入数据非法,请重新输入!
\n");
}
return0;
}
intmain()
{
mishu();
}
改进版:
intmain(void)
{
unsignedinti=0;
scanf("%d",&i);
if(0==(i&(i-1)))
printf("是!
\n");
else
printf("不是!
\n");
return0;
}
10.1
二进制文件和文本文件有什么区别?
计算机能识别的都是二进制代码,不论是文本文件还是音频视频类的多媒体文件都需要转换成二进制文件,计算机才能识别,这就需要有个转换过程:
高级语言→汇编语言→机器语言,计算机只能识别的语言--机器语言。
二进制文件和文本文件的区别在于,二进制文件全都是0和1组成的,而文本文件是由字母、数字、符号等
10.2
程序看是运行时,系统自动打开哪3个标准文件?
程序看是运行时,系统自动打开3个标准文件:
标准输入,标准输出,标准出错输出
10.3
解析MP3信息
#include
#include
#include
structp3
{
chartag[3];
charsname[30];
charsigner[30];
charaudio[30];
charyear[4];
charother[28];
charone;
chartwo;
charthree;
}mymp3;
intmusic()
{
inti=0;
FILE*fp;
fp=fopen("D:
\\画心.mp3","rb");//歌曲路径
if(fp!
=NULL)
{
fseek(fp,-128,2);
fread(&mymp3,sizeof(mymp3),1,fp);//注意:
这里fread的第一个参数是一个地址,即结构体的地址
printf("标签:
%s\n歌曲名:
%s\n歌手名:
%s\n专辑名: