c语言 字符串和指针部分
2017-06-13 23:31
274 查看
Prac1:下面程序的功能是输入某年某月某日,计算并输出它是这一年的第几天。
程序的运行结果如下:
Please enter year, month, day:2014,12,29↙
yearDay = 363
#include <stdio.h>
int DayofYear(int year, intmonth, int day);
int dayTab[2][13] ={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};
int main()
{
int year, month, day, yearDay;
printf("Please enter year, month, day:");
scanf("%d,%d,%d", &year, &month, &day);
yearDay = DayofYear(year, month, day);
printf("yearDay = %d\n", yearDay);
return 0;
}
/* 函数功能:对给定的某年某月某日,计算并返回它是这一年的第几天 */
int DayofYear(int year, intmonth, int day)
{
int i, leap;
leap = ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 ==0); /* 若year为闰年,即leap值为1,则用第1行元素dayTab[1][i]计算;
否则leap值为0,用第0行dayTab[0][i]计算 */
for (i=1;i<month; i++)
{
day = day + dayTab[leap][i];
}
return day; /* 返回计算出的day的值 */
}
Prac2:下面程序的功能是将一个字符串s2插入到字符串s1中,其起始插入位置为n。
程序运行示例如下:
main string:hello,world!
sub string:cc
site of begining:(<=12)5
After instert:hellocc,world!
#include <stdio.h>
#include <string.h>
#define N 100
int main()
{
int n, i, j, k, len;
char s1
, s2
, s3[2 * N];
printf("main string:");
gets(s1);
printf("sub string:");
gets(s2);
len = strlen(s1);
do
{
printf("site of begining:(<=%d)",len);
scanf("%d", &n);
}while (n > len);
for (i = 0; i < n; i++)
{
s3[i] = s1[i];
}
for (j = 0; s2[j] != '\0'; j++)
{
s3[i + j] = s2[j];
}
for (k = n; s1[k] != '\0'; k++)
{
s3[j + k] = s1[k];
}
s3[j + k] = '\0';
printf("After instert:%s\n", s3);
return 0;
}
Prac3:下面程序的功能是比较用户键盘输入的口令userInput与内设的口令password是否相同。若相同,则输出"Correct password! Welcome to thesystem...",若userInput<password,则输出"Invalid
password!user input<password",否则输出"Invalid password!userinput>password"。
1. #include <stdio.h>
2. #include <string.h>
3. int main()
4. {
5. char password[7] = "secret";
6. char userInput[81] ;
7. printf("Input Password:");
8. scanf("%s", userInput);
9. if ( strcmp(userInput, password) == 0 )
10. printf("Correct password! Welcome to the system...\n");
11. else if ( strcmp(userInput, password) < 0)
12.
13. printf("Invalid password!user input<password\n");
14. else
15. printf("Invalid password!user input>password\n");
16. return 0;
17.}
prac4:【讨论理解】如何编程出一个程序,程序的功能就是打印程序的源代码本身。
源程序(不要添加任何空格和换行)main(){char*a="main(){char*a=%c%s%c;printf(a,34,a,34);}";printf(a,34,a,34);}
这个程序的运行结果与源代码完全一样,你能解释这个运行结果吗?
main(){char*a="main(){char*a=%c%s%c;printf(a,34,a,34);}"; printf(a,34,a,34);}
(注:理解来自百度知道)
Prac5:
寻找鞍点(4分)
题目内容:
请编程找出一个M*N矩阵中的鞍点,即该位置上的元素是该行上的最大值,是该列上的最小值。如果矩阵中没有鞍点,则输出“No
saddle point!”
已知函数原型:
void FindSaddlePoint(int a[]
, int m, int n);
在该函数中输出有无鞍点的信息。
程序运行结果示例1:
Input m,n:
3,3↙
Input matrix:
1 2 3↙
4 5 6↙
7 8 9↙
a[0][2]
4000
is 3
程序运行结果示例2:
Input m,n:
3,4↙
Input matrix:
3 4 7 5↙
0 1 8 2↙
9 3 2 6↙
No saddle point!
输入提示: "Input m,n:\n"
“Input matrix:\n"
输入格式:
输入矩阵大小: "%d,%d"
输入矩阵元素: "%d"
输出格式:
找到鞍点的输出格式:"a[%d][%d] is %d\n"
没找到鞍点的输出格式:"No saddle point!\n"
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
时间限制:500ms内存限制:32000kb
(以下是自己的,cb上无错,但系统提交时老是用例2不对???玄学??)
#include<stdio.h>
#include<string.h>
#define N 10
void FindSaddlePoint(int a
, int m, int n);
int main()
{
int m, n, i=0, j=0;
int a
;
printf("Input m,n:\n");
scanf("%d,%d", &m, &n);
printf( "Input matrix:\n");
for (i=0; i<m; i++)
{
for (j=0; j<n; j++)
{
scanf("%d", &a[i][j]);
}
}
FindSaddlePoint(a, m, n);
return 0;
}
void FindSaddlePoint(int a
, int m, int n)
{
int i, j, max, min, pointj=0,pointi=0, find=0;
for (i=0; i<m; i++)
{
max = a[i][0];
for (j=1; j<n; j++) // 找出每一行的最大值//
{
if (a[i][j] > max)
{
max = a[i][j];
pointj = j;
}
}
min = a[0][pointj];
for (i=1; i<m; i++) //找出最大值对应列的最小值//
{
if (a[i][pointj] < min)
{
min = a[i][pointj];
pointi = i;
}
}
if (max == min)
{
printf("a[%d][%d] is %d\n", pointi, pointj, max);
find = 1;
}
}
if (find == 0)
printf("No saddle point!\n");
}
(2)改版后正确:
#include<stdio.h>
#include<string.h>
#define N 10
void FindSaddlePoint(int a
, int m, int n);
int main()
{
int m, n, i=0, j=0;
int a
;
printf("Input m,n:\n");
scanf("%d,%d", &m, &n);
printf( "Input matrix:\n");
for (i=0; i<m; i++)
{
for (j=0; j<n; j++)
{
scanf("%d", &a[i][j]);
}
}
FindSaddlePoint(a, m, n);
return 0;
}
void FindSaddlePoint(int a
, int m, int n)
{
int i, j, max, min, pointj=0,pointi=0, find=0;
for (i=0; i<m; i++)
{
max = a[i][0];
for (j=1; j<n; j++) // 找出每一行的最大值//
{
if (a[i][j] > max)
{
max = a[i][j];
pointj = j;
}
}
min = a[0][pointj];
for (i=1; i<m; i++) //找出最大值对应列的最小值//
{
if (a[i][pointj] < min)
{
min = a[i][pointj];
pointi = i;
}
}
if (max == min)
{
printf("a[%d][%d] is %d\n", pointi, pointj, max);
find = 1;
break;
}
}
if (find == 0)
printf("No saddle point!\n");
}
Prac6:
Prac7:
#include <stdio.h>
#include <string.h>
void MyStrCat(char *dest, char *source);
int main()
{
char first[80];
char second[80];
printf("Input the first string:");
gets(first);
printf("Input the second string:");
gets(second);
MyStrCat(first, second);
printf("The result is : %s\n", first);
return 0;
}
void MyStrCat(char *dest, char *source)
{
int i = 0, j = 0;
while (*(dest+i)!='\0')
{
i++;
}
for (; *(source+j)!='\0'; i++,j++)
{
*(dest+i) = *(source+j);
}
*(dest+i) = '\0';
}
程序的运行结果如下:
Please enter year, month, day:2014,12,29↙
yearDay = 363
#include <stdio.h>
int DayofYear(int year, intmonth, int day);
int dayTab[2][13] ={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};
int main()
{
int year, month, day, yearDay;
printf("Please enter year, month, day:");
scanf("%d,%d,%d", &year, &month, &day);
yearDay = DayofYear(year, month, day);
printf("yearDay = %d\n", yearDay);
return 0;
}
/* 函数功能:对给定的某年某月某日,计算并返回它是这一年的第几天 */
int DayofYear(int year, intmonth, int day)
{
int i, leap;
leap = ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 ==0); /* 若year为闰年,即leap值为1,则用第1行元素dayTab[1][i]计算;
否则leap值为0,用第0行dayTab[0][i]计算 */
for (i=1;i<month; i++)
{
day = day + dayTab[leap][i];
}
return day; /* 返回计算出的day的值 */
}
Prac2:下面程序的功能是将一个字符串s2插入到字符串s1中,其起始插入位置为n。
程序运行示例如下:
main string:hello,world!
sub string:cc
site of begining:(<=12)5
After instert:hellocc,world!
#include <stdio.h>
#include <string.h>
#define N 100
int main()
{
int n, i, j, k, len;
char s1
, s2
, s3[2 * N];
printf("main string:");
gets(s1);
printf("sub string:");
gets(s2);
len = strlen(s1);
do
{
printf("site of begining:(<=%d)",len);
scanf("%d", &n);
}while (n > len);
for (i = 0; i < n; i++)
{
s3[i] = s1[i];
}
for (j = 0; s2[j] != '\0'; j++)
{
s3[i + j] = s2[j];
}
for (k = n; s1[k] != '\0'; k++)
{
s3[j + k] = s1[k];
}
s3[j + k] = '\0';
printf("After instert:%s\n", s3);
return 0;
}
Prac3:下面程序的功能是比较用户键盘输入的口令userInput与内设的口令password是否相同。若相同,则输出"Correct password! Welcome to thesystem...",若userInput<password,则输出"Invalid
password!user input<password",否则输出"Invalid password!userinput>password"。
1. #include <stdio.h>
2. #include <string.h>
3. int main()
4. {
5. char password[7] = "secret";
6. char userInput[81] ;
7. printf("Input Password:");
8. scanf("%s", userInput);
9. if ( strcmp(userInput, password) == 0 )
10. printf("Correct password! Welcome to the system...\n");
11. else if ( strcmp(userInput, password) < 0)
12.
13. printf("Invalid password!user input<password\n");
14. else
15. printf("Invalid password!user input>password\n");
16. return 0;
17.}
prac4:【讨论理解】如何编程出一个程序,程序的功能就是打印程序的源代码本身。
源程序(不要添加任何空格和换行)main(){char*a="main(){char*a=%c%s%c;printf(a,34,a,34);}";printf(a,34,a,34);}
这个程序的运行结果与源代码完全一样,你能解释这个运行结果吗?
main(){char*a="main(){char*a=%c%s%c;printf(a,34,a,34);}"; printf(a,34,a,34);}
首先,不要被main函数的参数a给骗了,这个a跟后面的a没有什么关系, 其次,main中的printf其实就是 printf(para1,para2,para3,para4)这样的格式, 比如:printtf("a=%c , b=%s, c=%c",a,b,c) 只不过第一个参数格式化字符串不是一个常量,而是用的指针a, 由于printf参数进栈顺序是从右向左,也就是相当于按下面的顺序执行4个语句: 34; a="main(a){printf(a,34,a=%c%s%c,34);34;}"; 34; a;//这里a在第二步已赋值,所以是"main(a){printf(a,34,a=%c%s%c,34);34;}" 然后在执行: printf("main(a){printf(a,34,a=%c%s%c,34);34;}", 34, "main(a){printf(a,34,a=%c%s%c,34);34;}", 34); 后面三个参数刚好对应 %c %s %c (34的ASCII码是引号"),所以输出结果为: main(a){printf(a,34,a=“main(a){printf(a,34,a=%c%s%c,34);34;}”,34);34;}
(注:理解来自百度知道)
Prac5:
寻找鞍点(4分)
题目内容:
请编程找出一个M*N矩阵中的鞍点,即该位置上的元素是该行上的最大值,是该列上的最小值。如果矩阵中没有鞍点,则输出“No
saddle point!”
已知函数原型:
void FindSaddlePoint(int a[]
, int m, int n);
在该函数中输出有无鞍点的信息。
程序运行结果示例1:
Input m,n:
3,3↙
Input matrix:
1 2 3↙
4 5 6↙
7 8 9↙
a[0][2]
4000
is 3
程序运行结果示例2:
Input m,n:
3,4↙
Input matrix:
3 4 7 5↙
0 1 8 2↙
9 3 2 6↙
No saddle point!
输入提示: "Input m,n:\n"
“Input matrix:\n"
输入格式:
输入矩阵大小: "%d,%d"
输入矩阵元素: "%d"
输出格式:
找到鞍点的输出格式:"a[%d][%d] is %d\n"
没找到鞍点的输出格式:"No saddle point!\n"
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
时间限制:500ms内存限制:32000kb
(以下是自己的,cb上无错,但系统提交时老是用例2不对???玄学??)
#include<stdio.h>
#include<string.h>
#define N 10
void FindSaddlePoint(int a
, int m, int n);
int main()
{
int m, n, i=0, j=0;
int a
;
printf("Input m,n:\n");
scanf("%d,%d", &m, &n);
printf( "Input matrix:\n");
for (i=0; i<m; i++)
{
for (j=0; j<n; j++)
{
scanf("%d", &a[i][j]);
}
}
FindSaddlePoint(a, m, n);
return 0;
}
void FindSaddlePoint(int a
, int m, int n)
{
int i, j, max, min, pointj=0,pointi=0, find=0;
for (i=0; i<m; i++)
{
max = a[i][0];
for (j=1; j<n; j++) // 找出每一行的最大值//
{
if (a[i][j] > max)
{
max = a[i][j];
pointj = j;
}
}
min = a[0][pointj];
for (i=1; i<m; i++) //找出最大值对应列的最小值//
{
if (a[i][pointj] < min)
{
min = a[i][pointj];
pointi = i;
}
}
if (max == min)
{
printf("a[%d][%d] is %d\n", pointi, pointj, max);
find = 1;
}
}
if (find == 0)
printf("No saddle point!\n");
}
(2)改版后正确:
#include<stdio.h>
#include<string.h>
#define N 10
void FindSaddlePoint(int a
, int m, int n);
int main()
{
int m, n, i=0, j=0;
int a
;
printf("Input m,n:\n");
scanf("%d,%d", &m, &n);
printf( "Input matrix:\n");
for (i=0; i<m; i++)
{
for (j=0; j<n; j++)
{
scanf("%d", &a[i][j]);
}
}
FindSaddlePoint(a, m, n);
return 0;
}
void FindSaddlePoint(int a
, int m, int n)
{
int i, j, max, min, pointj=0,pointi=0, find=0;
for (i=0; i<m; i++)
{
max = a[i][0];
for (j=1; j<n; j++) // 找出每一行的最大值//
{
if (a[i][j] > max)
{
max = a[i][j];
pointj = j;
}
}
min = a[0][pointj];
for (i=1; i<m; i++) //找出最大值对应列的最小值//
{
if (a[i][pointj] < min)
{
min = a[i][pointj];
pointi = i;
}
}
if (max == min)
{
printf("a[%d][%d] is %d\n", pointi, pointj, max);
find = 1;
break;
}
}
if (find == 0)
printf("No saddle point!\n");
}
Prac6:
从键盘任意输入一个字符串,计算其实际字符个数并打印输出,即不使用字符串处理函数strlen()编程实现strlen()的功能。 #include <stdio.h> unsigned int MyStrlen(char str[]); /* 函数功能:用字符型数组作函数参数,计算字符串的长度 */ unsigned int MyStrlen(char str[]) { int i ; unsigned int len = 0; /* 计数器置0 */ for (i = 0; str[i] != '\0'; i++) { len++; /* 利用循环统计不包括’\0’在内的字符个数 */ } return (len); /* 返回实际字符个数 */ } int main() { char a[80]; unsigned int len; printf("Please enter a string:"); gets(a); len = MyStrlen(a); /* 计算字符串实际字符个数 */ printf("The length of the string is: %u\n", len); return 0; }
Prac7:
下面程序用于将输入的两个字符串连接起来,然后打印连接后的字符串。
#include <stdio.h>
#include <string.h>
void MyStrCat(char *dest, char *source);
int main()
{
char first[80];
char second[80];
printf("Input the first string:");
gets(first);
printf("Input the second string:");
gets(second);
MyStrCat(first, second);
printf("The result is : %s\n", first);
return 0;
}
void MyStrCat(char *dest, char *source)
{
int i = 0, j = 0;
while (*(dest+i)!='\0')
{
i++;
}
for (; *(source+j)!='\0'; i++,j++)
{
*(dest+i) = *(source+j);
}
*(dest+i) = '\0';
}
相关文章推荐
- 指针和字符串(分12部分)
- C语言中字符数组和字符串指针分析
- C语言中字符数组和字符串指针分析
- C语言复习 --指针表示一个字符串
- C语言学习之 数组,指针,字符串. (二)
- C语言中字符数组和字符串指针分析
- 快慢指针____函数将字符串中的字符'*'移到串的前部分,前面的非'*'字符后移
- C语言中字符数组和字符串指针分析(转载)
- C语言 指针连接字符串(二)
- C语言 字符串与指针
- C语言中字符数组和字符串指针分析
- 我也要学C语言-第十五章:指针与字符串以及链式表达式
- C语言中字符数组和字符串指针分析
- 指针和数组、字符串 | C语言教程 | C语言系列教程
- C语言中字符数组和字符串指针分析
- C语言中的字符串与指针
- 20110410-C语言的字符串和指向字符的指针(字符指针)
- C语言字符串以及相关指针的使用
- c语言学习--字符串指针
- 利用C语言的部分初始化特性进行字符串的全部初始化。