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 ; } } }