1.课后答案
#include<stdio.h>
#include<stdlib.h>
int main()
{
float new_guess ;
float last_guess ;
float number ;
printf ( "Enter a number:" ) ;
scanf ( "%f", &number ) ;
if ( number < 0 )
{
printf ( "Cannot compute the square root of a"
"negative numbe!\n" ) ;
return EXIT_FAILURE ;
}
new_guess = 1 ;
do{
last_guess = new_guess ;
new_guess = ( last_guess + number / last_guess ) / 2 ;
printf ( "%.15e\n", new_guess ) ;
} while ( new_guess != last_guess ) ;
printf ( "Square root of %g is %g\n", number, new_guess ) ;
return EXIT_SUCCESS ;
}
2.
#include<stdio.h>
#define MAX 100
int main()
{
int i, j, k ;
for ( i = 1; i < MAX; i++ )
{
k = 0 ;
for ( j = 1; j < i + 1; j++ )
{
if ( i % j == 0 )
k++ ;
}
if ( k == 2 )
printf ( "%d ", i ) ;
}
return 0 ;
}
3.
#include<stdio.h>
int main()
{
int i, j, k ;
scanf ( "%d %d %d", &i, &j, &k ) ;
if ( i + j > k && i + k > j && j + k > i )
{
if ( i == j || i == k || j == k )
{
if ( i == j && j == k )
printf ( "这是等边三角形。" ) ;
else
printf ( "这是等腰三角形。" ) ;
}
else
printf ( "这是不等边三角形。" ) ;
}
else
printf ( "这不是三角形。" ) ;
return 0 ;
}
4.
#include<stdio.h>
#define MAX 1000
void copy_n ( char dst[], char src[], int n ) ;
int main()
{
int n, i, k ;
char ch ;
char src[MAX] ;
char dst[MAX] ;
printf ( "请输入n:" ) ;
scanf ( "%d", &n ) ;
printf ( "请输入字符串:" ) ;
while ( (ch = getchar() ) != EOF ) //读取字符并逐个处理 EOF:windows用Ctrl+z,LINUX用Ctrl+d
{
for ( i = 0; ch != '\n'; i++ ) //将输入的字符由getchar一个个的返回出来,并储存在src中
{
src[i] = ch ;
ch = getchar() ;
}
}
copy_n ( dst, src, n ) ;
printf ( "%s\n", dst ) ;
}
void copy_n ( char dst[], char src[], int n )
{
int dst_index, src_index ;
src_index = 0 ;
for ( dst_index = 0;dst_index < n; dst_index++ )
{
dst[dst_index] = src[src_index] ;
if ( src[src_index] != 0 )
src_index++ ;
}
}
5.这题的第二段代码从网上找的,其中在一维数组中插入"\n"避免了用二维数组,幸好我学过二维数组
#include<stdio.h>
#include<string.h>
#define MAX 128
int main()
{
int j, i = 0 ;
char str[MAX] ; //储存可输出字符串
char input[MAX] ; //储存输入字符串
char output[MAX][MAX] ; //储存输出字符串
while ( gets (input) != NULL ) //逐行读取
{
if ( strcmp ( str, input ) != 0 ) //如果前后字符串不等
strcpy ( str, input ) ; //将input的内容复制到str
else
{
if ( strcmp ( output[i -1], input ) != 0) //如果和前一个输出不等
{
strcpy ( output[i], input ) ; //将input的内容复制到output
i++ ; //计数加一
}
strcpy ( str, input ) ; //相等则将input的内容复制到str
}
}
for ( j = 0; j < i; j++ ) //将output的内容打印
{
printf ( "%s\n", output[j] ) ;
}
return 0 ;
}
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
main()
{
char string1[10] = "", string2[10] = "",string3[10]="",string4[100]="";
int r,i=0,j=0;
while ( string1[0] != 'Z')
{
gets(string1);
r = strcmp(string1,string2); //r记录的是判断string1和string2是否相等 如果相等r=0否则r=1
if (!r)//果然两个字符串相等则执行下面代码
{
if(strcmp(string3,string1)) //下面代码的功能是判断是否需要输出
{
i=0; //为了拼接字符串,i和j用来标示位置所在
j=0;
//之后写一段代码类似于下面这样的功能
//string4 = string4+"\n"+string1;
while(string4[i] !='\0')
i++;
while(string1[j] !='\0')
string4[i++]=string1[j++]; //下面两句是拼接最后输出的字符串。如果符合则追加到string4的末尾
string4[i]='\n'; //为了不让他们在一行显示,这里我们追加一次就换一行显示
strcpy(string3,string1);
//为了判断是否要将它显示出来,这里设定个string3来做个标示,如果相同输入的,就只显示一个就可以了
}
}
strcpy(string2,string1);//想一般大家都会想到用指针取值的方式来赋值,那样是不可以的。这能这样写 不可以这样*string2=*string1
}
printf("");
puts(string4);
system("pause");
return 0;
}
6.
#include<stdio.h>
#include<string.h>
#define MAX 1000
int substr ( char dst[], char src[], int start, int len ) ;
int main()
{
int i = 0 ;
int start, len, sum ;
int ch ;
char src[MAX] ;
char dst[MAX] ;
printf ( "请输入start:") ;
scanf ( "%d", &start ) ;
printf ( "请输入len:") ;
scanf ( "%d", &len ) ;
while ( ( ch = getchar() ) != EOF )
{
src[i] = ch ;
i++ ;
}
sum = substr ( dst, src, start, len ) ;
printf ( "%d", sum ) ;
}
int substr ( char dst[], char src[], int start, int len )
{
int i ;
if ( start >= strlen ( src ) && start < 0 && len < 0 )
dst == NULL ;
for ( i = 0; i < len; i++ )
{
if ( src[start] != '\n' )
dst[i] = src[start] ;
start++ ;
}
return strlen ( dst ) ;
}
7.用goto也是无奈之举,不用goto只能删去一半的空格,不过也省的我想破脑子写循环
#include<stdio.h>
#include<string.h>
#define MAX 1000
void deblank ( char string[] ) ;
int main()
{
char string[MAX] ;
gets ( string ) ;
deblank ( string ) ;
printf ( "%s", string ) ;
}
void deblank ( char string[] )
{
int i, j ;
char *temp = string ;
for ( i=0, j=0; i <= strlen ( string ); )
{
string[j++] = temp[i++] ;
a:if ( string[i] == ' ' && string[i + 1] == ' ' )
{
i++ ;
if(string[i] == ' ' && string[i + 1] == ' ')
goto a ;
}
}
}