您的位置:首页 > 编程语言

c和指针第四章编程练习代码

2018-02-19 00:48 323 查看
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 100int 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 ( "这是等边三角形。" ) ;elseprintf ( "这是等腰三角形。" ) ;}elseprintf ( "这是不等边三角形。" ) ;}elseprintf ( "这不是三角形。" ) ;return 0 ;}4.#include<stdio.h>#define MAX 1000void 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 128int 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的内容复制到strelse{if ( strcmp ( output[i -1], input ) != 0)	//如果和前一个输出不等{strcpy ( output[i], input ) ;	//将input的内容复制到outputi++ ;	//计数加一}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=1if (!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 1000int 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 1000void 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 ;}}}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: