贵师大备考
字符串提纯
删除字符串里的所有 * 号,然后输出处理后的字符串
gets,puts函数
c
#include<stdio.h>
void proc(char *a){
char *p=a;//p指向a[0]
while(*a){
if(*a != '*'){
*p=*a;//将字符串数组赋值到新的字符串数组中
p++;//指针往后移
a++;//字符串数组下标往后移
}else{
a++;//字符串数组直接往后移,
}
}
*p ='\0';//必须加字符串结束符
}
int main(){
char str[81];
gets(str);
proc(str);
puts(str);//printf("%s\n",str);
}
以函数求两数和
sum()函数
c
#include<stdio.h>
#define N 2000
int sum(int m,int n){
int he;
he = m+n;
return he;
}
int main(){
int a,b;
scanf("%d %d",&a,&b);
printf("%d",sum(a,b));
return 0;
}
求1-n的整数和
接收一个整数参数N,并返回整数和。
for循环
c
#include<stdio.h>
#define N 2000
int main(){
int n,sum,a[N];
printf("输入数组个数:");
scanf("%d",&n);
printf("输入数组:");
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(int i=0;i<n;i++){
sum=sum+a[i];
}
printf("%d",sum);
return 0;
}
求数组所有元素的乘积
for循环
c
#include<stdio.h>
#include<math.h>
int main(){
int arr[4]={1,2,3,4};
int sum=1;
for(int i=0;i<4;i++){
sum=sum*arr[i];
}
printf("%d",sum);
return 0;
}
一个一个打印字符
while循环
c
#include<stdio.h>
#include<math.h>
int main(){
char *p="myname";
while(*p){
printf("%c\n",*p);
p++;
}
return 0;
}
求阶乘
for循环
c
#include<stdio.h>
#include<math.h>
void jc(int n){
int i,sum=1;
for(i=1;i<=n;i++){
sum*=i;
}
printf("%d",sum);
}
int main(){
int b;
scanf("%d",&b);
jc(b);
return 0;
}
求质数
质数是只能被1和自己整除的数
for循环
c
#include<stdio.h>
#include<math.h>
void zs(int a){
int j =1;
for(int i=2;i<a/2;i++){
if(a%i==0){
printf("不是质数");
j=0;
break;
}
}
if(j==1){
printf("是质数");
}
}
int main(){
int b,i;
scanf("%d",&b);
zs(b);
return 0;
}
求二维数组中元素的最大值
将一个3 * 2的矩阵存入一个3 * 2的二维数组中,找出最大值以及
它的行下标和列下标,并输出该矩阵
双重循环
c
#include<stdio.h>
#include<math.h>
int main()
{
int row,col,i,j,max,a[3][2];
for(i=0;i<3;i++){
for(j=0;j<2;j++){
scanf("%d",&a[i][j]);
}
}
for(i=0;i<3;i++){
for(j=0;j<2;j++){
printf("%5d",a[i][j]);
}
printf("\n");
}
max=a[0][0];
row=0;
col=0;
for(i=0;i<3;i++){
for(j=0;j<2;j++){
if(max<a[i][j]){
max=a[i][j];
row=i;
col=j;
}
}
}
printf("a[%d][%d]max=%d",row,col,max);
}
计算相应的函数值Y

循环语句
c
int main()
{
float x,y;
scanf("%f %f",&x,&y);
if(x<2&&x>=1){
y=x*x;
} else if(x<3&&x>=2){
y=-x;
}else if(x<4&&x>=3){
y=y/x;
}else{
y=1+x+x*x;
}
printf("%f",y);
return 0;
}
输出某月有几天
利用switch case实现键盘输入年份和月份,打印出某月份的总天数
循环语句
c
int main()
{
int year,mouth;
scanf("%d %d",&year,&mouth);
if(mouth%2!=0){
mouth=1;
}else if(mouth%2==0 && mouth!=2){
mouth=3;
}
if((year%400==0) || (year%4==0&&year%100!=0)){
switch(mouth){
case 1:
printf("这个月有31天");
break;
case 2:
printf("这个月有29天");
break;
case 3:
printf("这个月有30天");
break;
}
}else{
switch(mouth){
case 1:
printf("这个月有31天");
break;
case 2:
printf("这个月有28天");
break;
case 3:
printf("这个月有30天");
break;
}
}
return 0;
}
两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。
你可以按任意顺序返回答案。
数组
c
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* nums, int numsSize, int target, int* returnSize) {
// 1. 设置返回数组的长度为2(两数之和固定返回两个下标)
*returnSize = 2;
// 2. 分配内存存储结果(长度为2的int数组),题目要求malloc
int* result = (int*)malloc(sizeof(int) * 2);
// 3. 修正双重循环逻辑:j从i+1开始,避免重复计算
for (int i = 0; i < numsSize; i++) {
for (int j = i + 1; j < numsSize; j++) {
if (nums[i] + nums[j] == target) {
// 4. 找到结果后赋值到malloc的数组中
result[0] = i;
result[1] = j;
// 找到后直接返回,无需继续循环
return result;
}
}
}
// 5. 题目保证有解,这里仅做容错:无结果时返回NULL,且设置返回长度为0
*returnSize = 0;
free(result);
return NULL;
}
两数相加
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
链表
c
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
struct ListNod