C语言1~4章综合习题
"我喜欢六月份的淡蓝色的香气"
1.
解:.c是c语言的源程序的拓展名,编译后的后缀为 .obj 或 .o ,连接后生成的可执行文件的后缀为.exe。
.cpp是c++语言的源程序的拓展名
2.
解:strlen的作用是测量括号内字符串长度,一共为9个,分别为:” \141 \141 a b c \t ”
sizeof的作用是测量括号内字符串所占用的内存数,注意数组中与\0,与strlen均有差别
3.
解:没啥难的,注意\n出现的时机就行
4.
解:进制考察,分别为八进制,十六进制,十进制
补充:如何进行进制转化?
例:十进制转化为二进制:除二取余,逆序
#include<stdio.h>
int main()
{
int a,s[20],i=0,rem;
printf("请输入一个正整数:\n");
scanf("%d",&a);
while(a) //除二取余
{
rem=a%2;
a=a/2;
s[i++]=rem;
}
printf("二进制:");
while(i>0) //逆序之法
printf("%d",s[--i]);
printf("\n");
return 0;
}
5.
解:运算符:三目运算符,取余,整除
b=5 B.打错了 C.b=1 D.b=2
6.
解:注意细节,while后面为句号,i--先用i,再--
循环过程:while (2); i=2-1=1;
while (1); i=1-1=0;
while (0); i=0-1=-1; printf (“”)
7.
解:记住前三种赋值方法
8.
很简单,就是简单的运算符顺序
9.
答案见图
10.
答案见图
11.下列程序在一个已排好序的浮点型数组中查找是否存在输入的待查浮点数x,如果有,打印出它的位置;如果没有,则打印“没有这个数!”。根据程序功能在指定位置上填入适当的内容将程序补充完整。注:不考虑数字是否重复。
#include <stdio.h>
#include < .h>
#define SIZE 8
void main( void )
{
int i;
double a[SIZE]={2.6, 3.1, 4.7, 5.4, 6, 6.7, 9.4, 16}, x;
printf("输入待查的浮点数x:");
scanf("% ", &x);
for(i=0; i<SIZE; i++)
if ( (x - a[i]) < 1.0e-6)//如果条件成立则可以证明x=a[i]
{
printf("找到这个数,在第%d个位置\n", i+1);
;
}
if(i== )
printf("没有这个数\n");
}
答案:
math //一般头文件要求填的不是math就是string
lf //double型变量x输入输出与lf对应
fabs //fabs取浮点数绝对值,abs取整数绝对值()
break//break跳出循环,continus结束本次循环进行下一次循环(找到了输入的数就跳出循环)
SIZE//i=SIZE=8是说明没有这个数
12.下列程序输出45以内所有能被3和7整除的数。请仔细阅读程序,根据程序功能在指定位置上填入适当的内容将程序补充完整,写出程序运行的输出结果。
#include <stdio.h>
void main( void )
{
int i ;
do
{
if( !(i%3 i%7 ))
{
printf("%d", i);
}
}while(i <=45 );
}
程序运行的输出结果是 。
答案:
=1 //初始化,不一定要从1开始,从21(最小公倍数)开始也没有问题
&& //既是3的倍数又是7的倍数
==0 //整除结果为0
++ //i逐次增加,排除法
2142//注意结果,没有\n
13.下列程序逆序打印自然数“12386”的各位数字并求出它是几位数。根据程序功能在指定位置上填入适当的内容将程序补充完整,写出程序运行的输出结果。
#include <stdio.h>
void main( void )
{
int num , i ;
do
{
printf("%d", num );
num=num ;
if(num)//i计数有些精妙,要好好理解,主要是因为do-while循环,换种循环i计数要好写一些
i++;
}while(num!=0);
printf("%d", i);
}
程序运行的输出结果是 。
答案:
num=12386
i=1//先要弄清num,i是干什么的,再进行初始化,num输入输出数字,i是计数
%10
/10 //以上两步就是逐步分出数字的个位,十位,,,,这个要理解记住
683215
14.下列程序将指定的数组逆序存放。根据程序功能在指定位置上填入适当的内容将程序补充完整,写出程序运行的输出结果。
#include <stdio.h>
#define M 6
void main(void)
{
int i=0, t, j= M ;
int a[M]={5,3,6,9,2,7};
while ( j i )
{
t = a[i];
a[i] = ;
a[j] = t;
i=i+1;
j ;
}
for(i=0; i<M; i++)
printf("%d", a[i]);
}
程序运行的输出结果是 。
答案:思路将这个数组中的第一个元素放入另一个数组的最后一个元素.......
-1
>
a[j]
--
729635
15.编写程序统计 90 以内的自然数,有多少个素数?输出所有素数及素数的个数。
#include<stdio.h>
/****ERROR****/
void main (void)
{
/****ERROR****/
int i, j, n, Prime;
printf ("100以内的素数:\n");
for (i = 2; i <= 100; i ++)//最小素数为2,所以i=2
{ //外层循环逐一给i赋值
/****ERROR****/
for (j = 2; j <= sqrt (i); j ++)//sqrt取根号,j的最大素数因子为√j
if(i % j == 0) //内层循环判断是否为素数
{
Prime = 0;
/****ERROR****/
continue;
}
if (Prime)
{
printf ("%3d", i);
n ++;
}
}
printf ("\n100以内有%d个素数\n", n);
}
答案:
#include<math.h>//头文件填写一般就math和string两种形式
int i, j, n=0, Prime=0;//一定要记得初始化
Prime = 1;
break
某同学编写了一个程序输入五个国家的名称将其按字母顺序排列输出。请仔细阅读他的程序,指出并纠正程序中的错误。
#include<stdio.h>
#include<string.h>
void main(void)
{
char tmp[10], Str[5][10];
int i, j, t;
printf("input country's name:\n");
for(i=0;i<5;i++)
gets(Str[i]);//gets从键盘上输入带符号的字符串,储存到 数组中
for(i=0;i<5;i++)
{
for(t=i, j=i+1; j<5; j++)//此循环将str[t]与后面所 有数组比较大小
/****ERROR****/
if( Str[j] < Str[t] )//注意字符串比较方法
t=j;
if(t!=i)//此选择承接上方循环,若循环体发生,即有后面数 组小于此数组,将后面数组与此数组互换
{
/****ERROR****/
tmp = Str[t];//数组该如何互换呢?
Str[t] = Str[i];
Str[i] = tmp;
}
puts( Str[i] );
}
printf("\n");
}
答案:
strcmp(Str[j], Str[t])<0
strcpy(tmp, Str[t])
strcpy(Str[t], Str[i])
strcpy(Str[i], tmp)
17.输入一个浮点数,再次打印它。
#include<stdio.h>
void main(void)
{
double data;
/****ERROR****/
scanf("%d", data);
/*****ERROR****/
printf("data=%d\n, data);
}
答案:
scanf("%lf", &data);
printf("data=%lf\n", data);
18.程序设计(16分):输入一个字符串(由字母、符号(含空格)、数字组合而成),编程输出处理后的字符串,要求字母在前面,数字在后面,顺序不变,例如:1is6and8 变成isand 168
#include <stdio.h>
void main( void )
{
char str[80], tmp;
int i, j, len;
printf("输入一个字符串:");
/***answer begin***/
/***answer end***/
printf("%s", str);
}
"那是青春与眷恋的气息"
文|阿白
排版|阿白