发新话题
打印

[TIPS]C学习笔记 发少量谭浩强C程序设计SE课后题答案

printf cout 是完全不同的两个东西(废话)
但是我要说的和您想的不同:)
在您不了解对象的内部情况的时候可以使用cout比较好 这显示出了C++的优势 所以您只需要接口就可以了...
其实说cout是打印数据和转译其中的内容 并不准确 在C99的定义中 cout的官方解释是:将程序插入输出数据流...

承让了:)
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

复制内容到剪贴板
代码:
//Program to calculate the product of two numbers.
#include <stdio.h>

int val1, val2, val3;

int product(int x, int y);

int main( void )
{
  //Get the first number
  printf("Enter a number between 1 and 100: ");
  scanf("%d", &val1);

  //Get the second number
  printf("Enter another number between 1 and 100: ");
  scanf("%d", &val2);

  //Calculate and display the product
  val3 = product(val1, val2);
  printf ("%d times %d = %d\n", val1, val2, val3);

  return 0;
}

//Function returns the product of the two values provided
int product(int x, int y)
{
   return (x * y);
}
复制内容到剪贴板
代码:
//Program to calculate the product of two numbers.
#include <stdio.h>


int product(int x, int y);

int main(void)
{
    int a1=0, a2=0, a3=0;

    printf("Please input a number between 1 and 100: ");
    scanf("%d",&a1);

    printf("Please input another number between 1 and 100: ");
    scanf("%d",&a2);

    a3 = product(a1, a2);
    printf("%d times %d is %d\n", a1, a2, a3);

    return 0;
}

int product(int x, int y)
{
    return(x * y);
}
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

strlen
复制内容到剪贴板
代码:
#include <stdio.h>
#include <string.h>

int main(void)
{
    char buffer[256];

    printf("Enter your name and press <Enter>:\n");
    gets( buffer );

    printf("\nYour name has %d character and spaces!", strlen(buffer));

    return 0;
}
复制内容到剪贴板
代码:
#include <stdio.h>
#include <string.h>

int main(void)
{
    char *string = "Fuck you gliet!";
    printf("%d\n", strlen(string));

    return 0;
}
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

学习到变量和常量存储信息的地方
下面的程序我加了注释 如果回头来自己看不懂是什么功能 那就去死
复制内容到剪贴板
代码:
//demonstrates variables and constants
#include <stdio.h>

//define a constant to convert from pounds to grams
#define GRAMS_PER_POUND 454

//define a constant for the start of the next century
const int TARGET_YEAR=2010;


int main(void)
{
    //declare the needed variables
    long weight_in_grams, weight_in_pounds;
    int year_of_birth, age_in_2010;

    //input data for user
    printf("Enter your weight in pounds: ");
    scanf("%d", &weight_in_grams);
    printf("\nEnter your year of birth: ");
    scanf("%d", &year_of_birth);

    //perform conversions

    weight_in_grams = weight_in_pounds * GRAMS_PER_POUND;
    age_in_2010 = TARGET_YEAR - year_of_birth;

    //display results on the screen

    printf("\nYour weight in grams = %ld", weight_in_grams);
    printf("\nIn 2010 you will be %d years old.\n", age_in_2010);

    return 0;
}
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

等会后面有个程序要想看懂 就必须要一些前置知识 其中有time和srand两个函数我不是很懂 找了资料
time函数
time_t time(time_t *thetime);
功能是取得系统的时间 需要包含头文件#include <time.h>
thetime:指向time_t变量的可选指针 在这个变量中存放当前的日期和时间 如果是NULL着忽略 代码举例如下
复制内容到剪贴板
代码:
#include <time.h>
#include <stdio.h>
#incude <dos.h>

int main(void)
{
       time_t t;
       time(&t);
       printf("The number of seconds since January 1, 1970 is %ld", t);
       return 0;
}
srand函数 原型
void srand(unsigned seed);
它的功能是 用来初始化随机数发生器 以便让随机数发生器产生可以预测的随即序列(nnd这JB叫什么解释呀)
头文件是#include <stdlib.h>
参数说明
seed是无符号整数 指明随机数序列的最小起点 注意是没有返回值的 下面来个演示程序
复制内容到剪贴板
代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
  int i;
  time_t t;
  srand((unsigned) time(&t));
  printf("Three random numbers from 0 to 99:");

  for(i=0;i<3;i++)
  printf("%d\n", rand()%100);
  return 0;
}
好 前置知识解决了 下面来看一个猜数字游戏 本来这个游戏是只要求能输入运行查看结果的 很不幸 我读懂了 比第一天有进步 第一天的程序是无锋帮我分析的
复制内容到剪贴板
代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define NO    0
#define YES   1

int main(void)
{
    int guess_value = -1;
    //要猜测的数字
    int number;
    //猜测次数
    int nbr_of_guesses;
    //这里必须要先等于NO 以便下面的while可以继续
    int done = NO;

    printf("\n\nGetting a random number......\n");

    //嘿嘿 上面的那个就是这里了
    srand( (unsigned) time( NULL ) );
    //取随机数字让你猜的那个
    number = rand();

    //猜测次数
    nbr_of_guesses = 0;
    while (done == NO)
    {
        printf("\nPick a number between 0 and %d>", RAND_MAX);
            scanf("%d", &guess_value);

        nbr_of_guesses++;
        //这里就是本单元学的if...else结构 用来判断你猜对没
        if ( number == guess_value)
        {
            done = YES;
        }
        else if(number < guess_value)
        {
            printf("\nYou guessed high!");
        }
        else
        {
            printf("\nYou guessed low!");
        }
    }

    printf("\nCongratulateions! You guessed right in %d Guesses!", nbr_of_guesses);
    printf("\nThe number was %d\n\n",number);


    return 0;
}
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

简单的递归调用
复制内容到剪贴板
代码:
# include <stdio.h>

unsigned int f, x;
unsigned int factorial(unsigned int a);

int main(void)
{
    puts("Enter an integer value between 1 and 8: ");
    scanf("%d", &x);

    if(x>8||x<1)
    {
        printf("Only values from 1 to 8 are acceptable!");
    }
    else
    {
        f = factorial(x);
        printf("%u factorial equals %u\n", x, f);
    }


    return 0;
}

unsigned int factorial(unsigned int a)
{
    if(a == 1)
        return 1;
    else
    {
        a*=factorial(a-1);
        return a;
    }
}
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

使用多条return语句的作业
原来的例子
复制内容到剪贴板
代码:
//Demonstrates using multiple return statements in a function.

#include <stdio.h>

int x, y, z;

int larger_of( int a, int b);

int main( void )
{
   puts("Enter two different integer values: ");
   scanf("%d%d", &x, &y);

   z = larger_of(x,y);

   printf("\nThe larger value is %d.", z);

  return 0;
}

int larger_of( int a, int b)
{
   if (a > b)
      return a;
   else
      return b;
}
要求子函数中只包含一条return 如下
复制内容到剪贴板
代码:
//Demonstrates using multiple return statements in a function.

#include <stdio.h>

int x, y, z;

int larger_of( int a, int b);

int main( void )
{
   puts("Enter two different integer values: ");
   scanf("%d,%d", &x, &y);

   z = larger_of(x,y);

   printf("\nThe larger value is %d.", z);

  return 0;
}

int larger_of( int a, int b)
{
   int re;
    re=a>b?a:b;

    return re;
}
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

求数组里的最大值 最小值 输入0终止接收
复制内容到剪贴板
代码:
#include <stdio.h>

#define MAX 100

int array[MAX];
int count = -1, maximum, minimum, num_entered, temp;

int main(void)
{
    puts("Enter interger values one per line.");
    puts("Enter 0 when finished.");

    //input the values
    do
    {
        scanf("%d", &temp);
        array[++count] = temp;
    }while ( count < (MAX-1) && temp !=0 );

    num_entered = count;

    //find the largest and smallest

    maximum = -32000;
    minimum = 32000;

    for ( count = 0; count <= num_entered && array[count] != 0; count++ )
    {
        if ( array[count] > maximum )
            maximum = array[count];

        if ( array[count] < minimum )
            minimum = array[count];
    }

    printf("\nThe maximum value is %d", maximum);
    printf("\nThe minimum value is %d\n", minimum);

    return 0;
}
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

数组练习
复制内容到剪贴板
代码:
//preprocess directive
#include <stdio.h>

const int MAX = 13;  //VC6下通过这样的定义 但是不推荐

float expenses[MAX], max;
int count;

int main(void)
{
    //input data from keyboard into array

    for ( count = 1; count < 13; count++ )
    {
        printf("Enter expenses for month %d: ", count);
        scanf("%f", &expenses[count]);
        max += expenses[count];
    }

    //print array contents

    for ( count = 1; count < 13;  count++ )
    {
        printf("Month %d = $%.2f\n", count,  expenses[count]);
    }
    printf("Max is $%.2f\n", max);
    printf("The average is $%.2f\n", max/12);
    return 0;
}
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

复制内容到剪贴板
代码:
//by bideyore and eviloctal

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void do_heading( char *filename, FILE * dic );  //函数原型

int line = 0, page = 0;  //声明初始化行和页

int main( int argv, char *argc[] )
{
char buffer[256];  //声明缓冲区
FILE *fp;  //源代码文件名
FILE *dic;  //目标文件名

if( argv < 2 )  //如果参数数量不对就打印使用说明
{
fprintf(stderr, "\nProper Usage is: ");
fprintf(stderr, "\n\nprint filename.txt\n");
return 1;
}
if (( fp = fopen ( argc[1], "r" )) == NULL )  //以只读方式打开 失败就报错
{

fprintf( stderr, "Error opening file, %s!", argc[1]);
return 1;
}

if (( dic = fopen ( argc[2], "w+" )) == NULL )  //打开一个新文件 没有就创建
{

fprintf( stderr, "Error opening file, %s!", argc[2]);  //失败报错
return 1;
}

page = 0;  //定义页为零
line = 1;  //从第一行开始
do_heading( argc[1] , dic );  //看下面

while ( fgets (buffer, 256, fp ) != NULL )  //一次读一行的前256个
{
if ( line % 55 == 0 )  //检查是不是一页
do_heading( argc[1] , dic);  //够一页就打印子函数 这次完全执行

fprintf(dic, "%4d:\t%s", line++, buffer );  //不够朝文件写入行号和读来的内容
}
fprintf(dic, "\f");
fclose(dic);  //释放资源
fclose(fp);
return 0;
}


void do_heading( char *filename, FILE * dic)
{
page++;  //第一次执行页变成一

if ( page > 1 )  //第一次执行页是一不进入循环
fprintf(dic, "\f" );

fprintf( dic, "page: %d, %s\n\n", page, filename );
}
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

复制内容到剪贴板
代码:
//by EvilOctal
#include <stdio.h>
#include <stdlib.h>

int a[5][4], b[5][4];

int main(void)
{
    int x, y, c, d;
    for (x = 0; x < 5; x++)  //把数组a赋随机值
    {
        for (y = 0; y < 4; y++)
        {
            a[x][y] = rand();
        }
    }
    for (x = 0; x < 5; x++)  //打印刚才的赋值情况
    {
        for (y = 0; y < 4; y++)
        {
            printf("The a[%d][%d] is %d!\n", x, y, a[x][y]);
        }
    }
    for (x = 0, c = 4; x < 5, c >= 0; x++, c--)  //把数组a的所有元素反向赋值到b中
    {
        for (y = 0, d = 3; y < 4, d >= 0; y++, d--)
        {
            b[c][d] = a[x][y];
        }
    }
    for (c = 0; c < 5; c++)  //检查反向赋值的结果
    {
        for (d = 0; d < 4; d++)
        {
            printf("The b[%d][%d] is %d!\n", c, d, b[c][d]);
        }
    }
    return 0;
}
//糊涂了for的判断条件 脑袋已经秀逗了
//忽略了数组最大的下标是n-1 他妈的我傻逼 书上强调3次 自己还埋怨罗嗦 到头来还是错在这里
//其实使用双重计算是多此一举
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

复制内容到剪贴板
代码:
// Passing an array to a function.

#include <stdio.h>

#define MAX 10

int array[MAX], count, *ptr;

int largest(int *num_array, int length);
int least(int num_array[], int length);

int main( void )
{
    ptr = array;

   for (count = 0; count < MAX; count++)
   {
      printf("Enter an integer value: ");
      scanf("%d", &array[count]);
   }                                                                                                                                                                                                                                                                           

   // Call the function and display the return value.
   printf("\n\nLargest value = %d\n", largest(ptr, MAX));
    printf("\n\nSmallest value = %d\n", least(ptr, MAX));

   return 0;
}


int largest(int *num_array, int length)
{
   int count, biggest = num_array[0];

   for ( count = 0; count < length; count++)
   {
      if (num_array[count] > biggest)
        biggest = num_array[count];
   }

   return biggest;
}

int least(int num_array[], int length)
{
   int count, smallest = num_array[0];

   for ( count = 0; count < length; count++)
   {
      if (num_array[count] < smallest)
        smallest = num_array[count];
   }

   return smallest;
}
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

复制内容到剪贴板
代码:
//Passing an array to a function. Alternative way

#include <stdio.h>

#define MAX 10

int array[MAX+1], count;  //这里定义的数组多加了一个单位

int largest(int num_array[]);  //函数原形可以看见 这里只传了一个参数

int main( void )
{

   for (count = 0; count < MAX; count++)
   {
      printf("Enter an integer value: ");
      scanf("%d", &array[count]);

      if ( array[count] == 0 )
        count = MAX;          //if 0 then will exit for loop
   }
   array[MAX] = 0;  //如果用户没输入0 那么就完成循环后把最后一个放0

   //Call the function and display the return value
   printf("\n\nLargest value = %d\n", largest(array));

   return 0;
}

int largest(int num_array[])
{
   int count, biggest = -12000;

   for ( count = 0; num_array[count] != 0; count++)  //检测是否是0
   {
      if (num_array[count] > biggest)
        biggest = num_array[count];  //比大小的循环
   }

   return biggest;
}
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

复制内容到剪贴板
代码:
#include <stdio.h>

int x[5] = {1, 2, 3, 4, 5};
int y[5] = {1, 2, 3, 4, 5};
int max;

int sumarrays(int a[], int b[]);

int main(void)
{
    max = sumarrays(x, y);  //错在这里 不能重复定义整型

    printf("%d\n", max);

    return 0;
}

int sumarrays(int a[], int b[])  //错在这里 傻了吧唧加分号
{
    int count, max1 = 0;  //这里用max也不错 因为max是全局变量

    for( count = 0; count < 5; count++ )
    {
        max1 += a[count];
        max1 += b[count];
    }
    return max1;
}
复制内容到剪贴板
代码:
//还没学会怎么把这题中的函数计算结果传给主函数 以便主函数中打印
#include <stdio.h>

int x[5] = {1, 2, 3, 4, 5};
int y[5] = {1, 2, 3, 4, 5};

void sumarrays(int a[], int b[]);

int main(void)
{
    sumarrays(x, y);
    return 0;
}

void sumarrays(int a[], int b[])
{
    int count, max[5];

    for( count = 0; count < 5; count++ )
    {
        max[count] = a[count] + b[count];
        printf("max[%d] is %d!\n", count, max[count]);
    }
}
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

复制内容到剪贴板
代码:
//fflush函数练习
#include <stdio.h>
#include <string.h>

int main(void)
{
    FILE *stream1;
    FILE *stream2;

    char buf[50];
    char readbuf[50];
    char *text = "This is a test for fflush function!";

        readbuf[0] = 0;
    printf("Please input a file path to open: ");  //提示用户输入要打开的文件的路径
    scanf("%s", buf);

    stream1 = fopen(buf, "w");  //以可写方式打开
    stream2 = fopen(buf, "r");  //以只读方式打开
    if (stream1 == NULL)  //打开失败
        perror("fdopen failed!");  //失败的报错内容
    else  //打开成功
    {
        fwrite(text, strlen(text)+1, 1, stream1);  //写入字符串 但是由于有缓存 字符串并没有真正的写到文件
        fread(readbuf, 50, 1, stream2);
        printf("Before fflush function: %s\n", readbuf);  //读取文件内容时将发现是空的

        fflush(stream1);  //使用fflush刷新缓存 将文件内容真正写入
        fread(readbuf, 50, 1, stream2);
        printf("After fflush function: %s\n", readbuf);  //这个时候才会看到有正确的结果

        fclose(stream1);  //关闭文件 释放资源
        fclose(stream2);
    }
    return 0;
}
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

allocate后显示字符串 然后写到txt
复制内容到剪贴板
代码:
//Demonstrates the use of malloc() to allocate storage by 冰血封情[E.S.T]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char count, *ptr, *p;  //全局变量 大程序千万别瞎JB定义

int main(void)
{
    FILE * files;  //这是我后面为了检查 想写到文本里另外声名的文件指针
    char buf[27];  //27个字符的缓冲区 应该不可以再小 没检查溢出

    if ((ptr = (char *) malloc( 27 * sizeof(char) )) == NULL)  //定义正好够的 原来题目是35 不容易看出问题的本质 小于27出错 但是可以顺利编译
    {
        puts("Memory allocation error.");
        return 1;  //报错后返回值
    }

    p = ptr;  //保证ptr不变好打印和写入

    for (count = 65; count < 91; count++)  //循环储存
        *p++ = count;  //把数字存储到p所指的文件中
    *p = &#39;\0&#39;;

    //Display the string on the screen

    puts(ptr);  //显示要写入的内容
    puts(p);  //显示那个恶心的空字符

    printf("Please input a file path to open: ");  //提示用户输入要打开的文件的路径
    scanf("%s", buf);  //将文件地址存储到buf里
    files = fopen(buf, "w");  //以可写方式打开
    if (files == NULL)  //打开失败
        perror("fopen failed!");  //失败的报错内容
    else //打开成功
    {
        fwrite(ptr, strlen(ptr), 1, files);  //原来我错在用p写 p都是到空符号了 还tmd写个屁
    }
    fclose(files);  //释放资源打开的文件
    free(ptr);  //释放资源

    return 0;
}
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

两种声明空间存储的方法:
数组
复制内容到剪贴板
代码:
#include <stdio.h>

int main(void)
{
    char input[80];

    puts("input a char for the fucking gliet!");
    gets(input);
   
    printf("You input the \" %s \" for fuck!\n", input);  //起初竟然把%s错写成%c 咋这么贱呢
    puts("You fucked pretty good boy!");

    return 0;
}
传说中的随机分配
复制内容到剪贴板
代码:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char *ptr;

    ptr = (char *) malloc ( 80 * sizeof (char));
    puts("Hill. Do you wanna fuck gliet: ");
    gets(ptr);
    puts("Ok! I will use the fuction puts to show you what you wrote: ");
    puts(ptr);
    free(ptr);

    return 0;
}
题目要求写一个拷贝字符数组的程序
复制内容到剪贴板
代码:
//大胆使用strcpy来完成 没学呢 只因为前几天有个例子用过一次
//没想到我这么SB的人也可以成功
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    char *ptr, string[256];

    ptr = (char *) malloc ( 80 * sizeof (char));
    puts("Hill. Do you wanna fuck gliet: ");
    gets(ptr);
    puts("Ok! I will use the fuction puts to show you what you wrote: ");
    puts(ptr);

    strcpy( string, ptr );
    puts(string);
    free(ptr);

    return 0;
}
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

复制内容到剪贴板
代码:
//接受用户输入的两个字符串做参数
//返回比较长的那个字符串 并且打印
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char * longger( char x[], char y[] );  //函数原型 接受两个指针返回一个指针

int main(void)
{
    char *ptr, x1[10], y1[10];

    puts("Hill. Do you wanna fuck gliet?");
    puts("Input 2 words to fuck: ");

    scanf("%s%s", x1, y1);  //接受两个字符串

    ptr = longger( x1, y1 );  //调用字函数比较长度 顺便接受反馈的指针

    puts("Ok! I will use the fuction puts to show you what you wrote the longer one: ");
    puts(ptr);  //打印长的那个

    return 0;
}

char *  longger( char x[], char y[] )  //x[] y[]都是指针型 这样写是为了看清楚指向数组
{
    if (  strlen(x) > strlen(y) )  //使用strlen比较长度
        return x;  //谁长就把谁的第一个字符的位置反馈回去
    else
        return y;
}
复制内容到剪贴板
代码:
//接受用户输入的两个字符串做参数
//返回接在一起的字符串 并且打印
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char * longger( char x[], char y[] );  //函数原型 接受两个指针返回一个指针

int main(void)
{
    char *ptr, x1[10], y1[10];

    puts("Hill. Do you wanna fuck gliet?");
    puts("Input 2 words to fuck: ");

    scanf("%s%s", x1, y1);  //接受两个字符串

    ptr = longger( x1, y1 );  //调用字函数比较长度 顺便接受反馈的指针

    puts("Ok! I will use the fuction puts to show you what you wrote the longer one: ");
    puts(ptr);  //打印长的那个

    return 0;
}

char *  longger( char x[], char y[] )  //x[] y[]都是指针型 这样写是为了看清楚指向数组
{
    /* if (  strlen(x) > strlen(y) )  //使用strlen比较长度
        return x;  //谁长就把谁的第一个字符的位置反馈回去
    else
        return y; */
    char *ptr1;  //声明一个函数内用的指针
    ptr1 = (char *) malloc (20 * sizeof(char));  //分配空间为第三个字符串
    ptr1 = strcat( x, y );
    printf("%s", ptr1);
    printf("%s", x);
    free(ptr1);

    return ptr1;
}
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

简单结构
复制内容到剪贴板
代码:
#include <stdio.h>

int length, width;
long area;

struct coord{
    int x;
    int y;
};

struct rectangle{
    struct coord topleft;
    struct coord bottomrt;
} mybox;

int main(void)
{
    printf("top left x: ");
    scanf("%d", &mybox.topleft.x);

    printf("top left y: ");
    scanf("%d", &mybox.topleft.y);

    printf("bottom right left x: ");
    scanf("%d", &mybox.bottomrt.x);

    printf("bottom right left y: ");
    scanf("%d", &mybox.bottomrt.y);

    width = mybox.bottomrt.x - mybox.topleft.x;
    length = mybox.bottomrt.y - mybox.topleft.y;

    area = width * length;
    printf("\nThe area is %ld units.\n", area);

    return 0;
}
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

数组包含结构
复制内容到剪贴板
代码:
//终于进入结构的学习了
#include <stdio.h>

struct entry {
    char fname[20];
    char lname[20];
    char phone[10];
}list[4];

int i;

int main(void)
{
    for(i = 0; i < 4; i++)
    {
        printf("Enter first name: ");
        scanf("%s", list[i].fname);
        printf("Enter last name: ");
        scanf("%s", list[i].lname);
        printf("Enter phone in 123-4567 format: ");
        scanf("%s", list[i].phone);
    }

    printf("\n\n");

    for (i = 0; i < 4; i++)
    {
        printf("Name: %s %s", list[i].fname, list[i].lname);
        printf("\t\tPhone: %s\n", list[i].phone);
    }

    return 0;
}
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

复制内容到剪贴板
代码:
//本来考虑用指针代替name的 后来不行 因为指针必须初始化 否则很危险
//如果没初始化我直接把内容给他 那就不知道他放到什么地方去了
#include <stdio.h>

#define MAX 4

struct part {
    short number;
    char name[10];
} data[MAX] = {1, "Smith", 2, "Jones", 3, "Adams", 4, "Wilson"};

struct part *p_part;
int count;

int main(void)
{
    p_part = data;

    for( count = 0; count < 4; count++)
    {
        printf("At address %d: %d %s\n", p_part, p_part->number, p_part->name);
        p_part++;
    }

    return 0;
}
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

复制内容到剪贴板
代码:
//系统命令调用练习
//一个小程序 省去打命令的辛苦哟 by 冰血封情
#include <stdio.h>
#include <stdlib.h>

int menu(void);

int main(void)
{
     char input0[] = "ping [url]www.bbnl.org[/url]";
     char input1[] = "netstat -an";
     char input2[] = "tasklist";

     int x;

     x = menu();

     while (x > 1 || x < 4)
     {

          switch(x)
          {
          case 1:
              {
                   puts("Now pinging [url]www.bbnl.org:[/url] ");
                   system(input0);
                   break;
              }
          case 2:
              {
                   puts("Now nestat to c the port: ");
                   system(input1);
                   break;
              }
          case 3:
              {
                   puts("Now run tasklist to c task: ");
                   system(input2);
                   break;
              }
          case 4:
              {
                   puts("Now exit to win program...");
                   exit(0);
              }
          default:
              {
                   puts("Error parameters: ");
              }

          }
          x = menu();
     }

     return 0;
}

int menu(void)
{
     int fx = 0;

     while (fx < 1 || fx > 4)
     {
          printf("This is a program for EvilOctal[E.S.T] private.\n");
          printf("Please input a number between 1 and 4\n");
          printf("\tEnter 1 to ping bbnl ip\n");
          printf("\tEnter 2 to show port list\n");
          printf("\tEnter 3 to show the task\n");
          printf("\tEnter 4 to exit the program\n");
          printf("Enter a munber: ");
          scanf("%d", &fx);

          if (fx < 1 || fx > 4)
              printf("Please input a right parameters: \n");
     }
     return fx;
}
晕自己想做来玩的 哈哈 没想到 最后的选做题竟然和这个一样 省了
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

复制内容到剪贴板
代码:
#include <stdio.h>
#include <stdlib.h>

/*
int inc(int x, int y);
int dec(int x, int y);
int mul(int x, int y);
int div(int x, int y);
printf("");
这个么 是一个可以进行加减乘除运算的小计算器
是13天课程的一个选做题目
以前的选做都做了 此次自然也不例外了
By 冰血封情[E.S.T]
*/
int menu(void);

int main(void)
{
    int count, x, y;

    printf("This is a counter made by EvilOctal[E.S.T]: \n");
    printf("He can help you to finish some simple count.\n");
   
    count = menu();
    while(1)
    {
        switch(count)
        {
        case 1:
            {
                printf("Please input 2 number for inc by space: ");
                scanf("%d %d", &x, &y);
                printf("\n%d + %d = %d", x, y, (x + y));
                break;
            }
        case 2:
            {
                printf("Please input 2 number for dec by space: ");
                scanf("%d %d", &x, &y);
                printf("\n%d - %d = %d", x, y, (x - y));
                break;
            }
        case 3:
            {
                printf("Please input 2 number for mul by space: ");
                scanf("%d %d", &x, &y);
                printf("\n%d x %d = %d", x, y, (x * y));
                break;
            }
        case 4:
            {
                printf("Please input 2 number for div by space: ");
                scanf("%d %d", &x, &y);
                printf("\n%d / %d = %d", x, y, (x / y));
                break;
            }
        case 5:
            {
                printf("\nOk! You chose EXIT...");
                printf("\nSee you!");
                exit(0);
            }
        default:
            {
                printf("You will never see me in the world!");
            }
        }
        count = menu();
    }
    return 0;
}

int menu(void)
{
    int choose = 0;
   
    while(choose < 1 || choose > 5)
    {
        puts("Choose the number for inc dec mul or div:");
        printf("1 is inc;2 is dec;3 is mul;4 is div;5 to escape\n");
        printf("Please input a number between 1 and 5: ");
        scanf("%d", &choose);
    }
    return choose;
}
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

复制内容到剪贴板
代码:
//娘的 这程序看起来短 但是不经意的时候十分容易出问题
#include <stdio.h>

#define MAX 10

int main(void)
{
    char ch, buffer[MAX+1];
    int x = 0; //要注意 这里是从0开始 所以11个只到10

    while ((ch =getchar()) != &#39;\n&#39; && x < MAX) //一次反馈一个ch MAX之后就不管了
        buffer[x++] = ch; //每次存储一个 最后一次x是10

    buffer[x] = &#39;\0&#39;; //把第10个放成空字符

    puts(buffer);
    printf("%s\n", buffer);

    return 0;
}
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

要开始着手培养阅读代码的能力了
复制内容到剪贴板
代码:
//程序分析
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#define MAXLINES 25

int get_lines(char *lines[]);
void sort(char *p[], int n);
void print_strings(char *p[], int n);

char *lines[MAXLINES];  //定义了一个25个元素的指针数组

int main( void )
{
  int number_of_lines;  //输入了多少行

  number_of_lines = get_lines(lines);  //接受字符串输入的函数

  if ( number_of_lines < 0 )  //返回值小于0就说空间分配失败
  {
     puts(" Memory allocation error");
     exit(-1);
  }

  sort(lines, number_of_lines);  //排序函数
  print_strings(lines, number_of_lines);
  return 0;
}

int get_lines(char *lines[])  //接受一个指向数组元素的指针
{
  int n = 0;
  char buffer[80];  //每行最多输入80个字符

  puts("Enter one line at time; enter a blank when done.");

  while ((n < MAXLINES) && (gets(buffer) != 0) && (buffer[0] != &#39;\0&#39;))  //进入循环的条件 必须全部满足
  {
     if ((lines[n] = (char *)malloc(strlen(buffer)+1)) == NULL)  //动态分配空间
        return -1;  //分配失败返回-1
     strcpy( lines[n++], buffer );  //空间分配成功了就把字符串拷贝到数组里
  }
  
  return n;  //n是返回的字符串数量 就是你输入了几行 可以通过printf("%d", n);来验证

}

void sort(char *p[], int n)  //排序函数接受指向数组的指针和行数
{
  int a, b;
  char *x;

  for (a = 0; a < n-1; a++)  //遍历的次数 明显一次只能移动一个单位
  {
     for (b = 0; b < n-1; b++)  //遍历所有字符串一次
     {
        if (strcmp(p[b], p[b+1]) > 0)  //比较首字符的大小
        {
          x = p[b];  //如果前面的比后面的数字大就调换位置 越小越前面么
          p[b] = p[b+1];
          p[b+1] = x;  //x是用来暂时存储的
        }
     }
  }
}

void print_strings(char *p[], int n)  //打印字符串
{
  int count;

  for (count = 0; count < n; count++)
     printf("%s\n", p[count]);
}
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

发新话题